import { GridSelectionModel } from "@mui/x-data-grid"; import { AnyDiscount } from "@root/model/cart"; import { create } from "zustand"; import { devtools, persist } from "zustand/middleware"; import { exampleCartValues } from "./mocks/exampleCartValues"; interface DiscountStore { discounts: AnyDiscount[]; selectedDiscountIds: GridSelectionModel, addDiscounts: (newDiscounts: AnyDiscount[]) => void; deleteDiscounts: (discountIds: string[]) => void; activateDiscounts: (discountIds: string[]) => void; deactivateDiscounts: (discountIds: string[]) => void; } export const useDiscountStore = create()( devtools( // persist( (set, get) => ({ discounts: exampleCartValues.discounts, selectedDiscountIds: [], addDiscounts: newDiscounts => set(state => ({ discounts: [...state.discounts, ...newDiscounts] })), deleteDiscounts: discountIdsToDelete => set(state => ( { discounts: state.discounts.filter(discount => !discountIdsToDelete.includes(discount._id)) } )), activateDiscounts: discountIds => set(state => { const filteredDiscounts = state.discounts.filter(discount => discountIds.includes(discount._id)); // TODO activate discounts, use immer js? throw new Error("unimplemented"); }), deactivateDiscounts: discountIds => set(state => { const filteredDiscounts = state.discounts.filter(discount => discountIds.includes(discount._id)); // TODO deactivate discounts, use immer js? throw new Error("unimplemented"); }), }), // { // name: "discounts", // getStorage: () => localStorage, // } // ), { name: "Discount store" } ) );