feat: connect dashboard shop pages to mutable state

This commit is contained in:
zetaloop
2026-02-21 15:49:42 +08:00
parent 94b96ac577
commit 6469811382
6 changed files with 210 additions and 20 deletions
+57
View File
@@ -0,0 +1,57 @@
import { create } from "zustand"
import { mockShops } from "@/lib/mock"
import type { Shop, ShopSection } from "@/lib/types"
interface ShopState {
shops: Shop[]
updateShop: (shopId: string, patch: Partial<Omit<Shop, "id" | "owner">>) => void
updateTemplateSections: (shopId: string, sections: ShopSection[]) => void
updateAnnouncement: (shopId: string, index: number, announcement: string) => void
addAnnouncement: (shopId: string, announcement: string) => void
}
export const useShopStore = create<ShopState>((set) => ({
shops: mockShops,
updateShop: (shopId, patch) =>
set((state) => ({
shops: state.shops.map((shop) => (shop.id === shopId ? { ...shop, ...patch } : shop)),
})),
updateTemplateSections: (shopId, sections) =>
set((state) => ({
shops: state.shops.map((shop) =>
shop.id === shopId
? {
...shop,
templateConfig: {
...shop.templateConfig,
sections,
},
}
: shop,
),
})),
updateAnnouncement: (shopId, index, announcement) =>
set((state) => ({
shops: state.shops.map((shop) =>
shop.id === shopId
? {
...shop,
announcements: shop.announcements.map((item, currentIndex) =>
currentIndex === index ? announcement : item,
),
}
: shop,
),
})),
addAnnouncement: (shopId, announcement) =>
set((state) => ({
shops: state.shops.map((shop) =>
shop.id === shopId
? {
...shop,
announcements: [...shop.announcements, announcement],
}
: shop,
),
})),
}))