58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { mockShops } from "@/lib/mock"
|
|
import type { Shop, ShopSection } from "@/lib/types"
|
|
import { create } from "zustand"
|
|
|
|
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,
|
|
),
|
|
})),
|
|
}))
|