import { GridSelectionModel } from "@mui/x-data-grid"; import { AnyDiscount } from "@root/model/cart"; import { create } from "zustand"; import { devtools } from "zustand/middleware"; import { exampleCartValues } from "./mocks/exampleCartValues"; import { Discount } from "@root/model/discount"; interface DiscountStore { discounts: Discount[]; selectedDiscountIds: GridSelectionModel, } export const useDiscountStore = create()( devtools( (set, get) => ({ discounts: [], selectedDiscountIds: [], }), { name: "Real discount store", enabled: process.env.NODE_ENV === "development" } ) ); export const addDiscounts = (newDiscounts: DiscountStore["discounts"]) => useDiscountStore.setState(state => ({ discounts: [...state.discounts, ...newDiscounts] })); export const setSelectedDiscountIds = (selectedDiscountIds: DiscountStore["selectedDiscountIds"]) => useDiscountStore.setState({ selectedDiscountIds }); /** @deprecated */ interface MockDiscountStore { discounts: AnyDiscount[]; selectedDiscountIds: GridSelectionModel, } /** @deprecated */ export const useMockDiscountStore = create()( devtools( (set, get) => ({ discounts: exampleCartValues.discounts, selectedDiscountIds: [], }), { name: "Discount store" } ) ); /** @deprecated */ export const addMockDiscounts = (newDiscounts: AnyDiscount[]) => useMockDiscountStore.setState(state => ({ discounts: [...state.discounts, ...newDiscounts] })); /** @deprecated */ export const setMockSelectedDiscountIds = (selectedDiscountIds: MockDiscountStore["selectedDiscountIds"]) => useMockDiscountStore.setState({ selectedDiscountIds }); /** @deprecated */ export const activateMockDiscounts = () => useMockDiscountStore.setState(state => { const discounts: AnyDiscount[] = []; state.discounts.forEach(discount => { if (!state.selectedDiscountIds.includes(discount._id)) return discounts.push(discount); discounts.push({ ...discount, disabled: false, }); }); return { discounts }; }); /** @deprecated */ export const deactivateMockDiscounts = () => useMockDiscountStore.setState(state => { const discounts: AnyDiscount[] = []; state.discounts.forEach(discount => { if (!state.selectedDiscountIds.includes(discount._id)) return discounts.push(discount); discounts.push({ ...discount, disabled: true, }); }); return { discounts }; });