diff --git a/src/hooks/useCombinedPrivileges.hook.ts b/src/hooks/useCombinedPrivileges.hook.ts index 8954697..4a77ba6 100644 --- a/src/hooks/useCombinedPrivileges.hook.ts +++ b/src/hooks/useCombinedPrivileges.hook.ts @@ -1,43 +1,31 @@ -import { usePrivilegeStore } from "@root/stores/privileges"; -import { usePrivilegies } from "./privilege.hook"; -import { addMergedPrivileges } from "@root/stores/mergedPrivileges"; +import { useEffect, useState } from "react"; -export type mergedPrivilege = { - createdAt?: string; - description: string; - isDeleted?: boolean; - name: string; - price: number; - privilegeId: string; - serviceKey: string; - type: "count" | "day" | "mb"; - updatedAt?: string; - value?: string; - _id?: string; -}; - -export const useCombinedPrivileges = () => { - const { privilegies, isError, errorMessage } = usePrivilegies(); - const examplePrivileges = usePrivilegeStore((state) => state.privileges); - - const mergedPrivileges: mergedPrivilege[] = []; - - const getPrivilegeId = (privilegeId: string): string | undefined => { - const privilege = mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId); - - return privilege?._id; - }; - - const privilegesGridData = mergedPrivileges.map((privilege) => ({ - name: privilege.name, - description: privilege.description, - type: privilege.type, - price: privilege.price, - })); - - if (privilegies) { - mergedPrivileges.push(...privilegies.Шаблонизатор, ...examplePrivileges); - } - - return { mergedPrivileges, isError, errorMessage, getPrivilegeId, privilegesGridData }; +import { usePrivilegeStore } from "@root/stores/privilegesStore"; +import { useRefreshPrivilegesStore } from "./useRefreshPrivilegesStore.hook"; +import { exampleCartValues } from "@stores/mocks/exampleCartValues" +import { mergedBackFrontPrivilege } from "@root/model/privilege"; + +interface UseCombinedPrivileges { + mergedPrivileges: mergedBackFrontPrivilege[] +} + +export const useCombinedPrivileges = ():UseCombinedPrivileges => { + +const [mergedPrivileges, setMergedPrivileges] = useState([]) + + const backendPrivileges = usePrivilegeStore((state) => state.privileges); + const frontendPrivileges = exampleCartValues.privileges; + + useEffect(() => { + setMergedPrivileges([...backendPrivileges.map((privilege) => ({ + serviceKey: privilege.serviceKey, + privilegeId: privilege.privilegeId, + name: privilege.name, + description: privilege.description, + type: privilege.type, + price: privilege.price, + })), ...frontendPrivileges]) + }, [backendPrivileges]) + + return { mergedPrivileges }; }; diff --git a/src/hooks/privilege.hook.ts b/src/hooks/useGetPrivileges.hook.ts similarity index 80% rename from src/hooks/privilege.hook.ts rename to src/hooks/useGetPrivileges.hook.ts index c2512bf..fc4fd84 100644 --- a/src/hooks/privilege.hook.ts +++ b/src/hooks/useGetPrivileges.hook.ts @@ -1,5 +1,6 @@ import { useEffect, useState } from "react"; import axios from "axios"; +import { RealPrivilege } from "@root/model/privilege"; export type Privilege = { createdAt: string; @@ -16,21 +17,21 @@ export type Privilege = { }; type UsePrivilegies = { - privilegies: Record | undefined; + privilegies: RealPrivilege[] isError: boolean; isLoading: boolean; errorMessage: string; }; -export const usePrivilegies = (): UsePrivilegies => { - const [privilegies, setPrivilegies] = useState>(); +export const useGetPrivilegies = (): UsePrivilegies => { + const [privilegies, setPrivilegies] = useState([]); const [isLoading, setIsLoading] = useState(false); const [isError, setIsError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); useEffect(() => { const getPrivilegies = async () => { - const { data } = await axios>({ + const { data } = await axios({ method: "get", url: "https://admin.pena.digital/strator/privilege/service", }); diff --git a/src/hooks/useRefreshPrivilegesStore.hook.ts b/src/hooks/useRefreshPrivilegesStore.hook.ts new file mode 100644 index 0000000..6c62dde --- /dev/null +++ b/src/hooks/useRefreshPrivilegesStore.hook.ts @@ -0,0 +1,33 @@ +import { useEffect, useState } from "react"; +import axios from "axios"; +import { RealPrivilege } from "@root/model/privilege"; +import { resetPrivilegeArray } from "@root/stores/privilegesStore"; +import { useGetPrivilegies } from "./useGetPrivileges.hook"; + +type RefreshPrivilegesStore = { + isError: boolean; + isLoading: boolean; + errorMessage: string; +}; + +export const useRefreshPrivilegesStore = (): RefreshPrivilegesStore => { + const gotten = useGetPrivilegies() + const [isLoading, setIsLoading] = useState(gotten.isLoading); + const [isError, setIsError] = useState(gotten.isError); + const [errorMessage, setErrorMessage] = useState(gotten.errorMessage); + + //Приходит объект. В его значениях массивы привилегий для разных сервисов. Высыпаем в общую кучу и обновляем стор + + + useEffect(() => { + let extracted:RealPrivilege[] = [] + for (let serviceKey in gotten.privilegies) { + extracted = extracted.concat(gotten.privilegies[serviceKey]) + } + resetPrivilegeArray(extracted) + }, [gotten.privilegies]); + + + + return {isError:gotten.isError, isLoading:gotten.isLoading, errorMessage:gotten.errorMessage}; +}; diff --git a/src/kitUI/Cart/Cart.tsx b/src/kitUI/Cart/Cart.tsx index b833b31..12c0f98 100644 --- a/src/kitUI/Cart/Cart.tsx +++ b/src/kitUI/Cart/Cart.tsx @@ -15,17 +15,20 @@ import { FormControlLabel, } from "@mui/material"; import Input from "@kitUI/input"; -import { useCartStore } from "@root/stores/cart"; import { useEffect, useState } from "react"; import { GridSelectionModel } from "@mui/x-data-grid"; -import { testUser } from "@root/stores/mocks/user"; -import { useMockDiscountStore } from "@root/stores/discounts"; + import { calcCartData, createCartItem, findDiscountFactor, formatDiscountFactor } from "./calc"; -import { useTariffStore } from "@root/stores/tariffs"; + import { AnyDiscount, CartItemTotal } from "@root/model/cart"; -import { findPrivilegeById } from "@root/stores/privileges"; import { Privilege } from "@root/model/tariff"; +import { useMockDiscountStore } from "@root/stores/discounts"; +import { useCartStore } from "@root/stores/cart"; +import { findPrivilegeById } from "@root/stores/privilegesStore"; +import { testUser } from "@root/stores/mocks/user"; +import { useTariffStore } from "@root/stores/tariffs"; + interface Props { selectedTariffs: GridSelectionModel; } diff --git a/src/kitUI/Cart/calc.ts b/src/kitUI/Cart/calc.ts index 19852cf..c237fe0 100644 --- a/src/kitUI/Cart/calc.ts +++ b/src/kitUI/Cart/calc.ts @@ -11,7 +11,7 @@ import { UserDiscount, } from "@root/model/cart"; import { User } from "../../model/user"; -import { findPrivilegeById } from "@root/stores/privileges"; +import { findPrivilegeById } from "@root/stores/privilegesStore"; import { SERVICE_LIST, ServiceType, Tariff } from "@root/model/tariff"; export function calcCartData({ diff --git a/src/model/privilege.ts b/src/model/privilege.ts index 31e0cb2..44db7b8 100644 --- a/src/model/privilege.ts +++ b/src/model/privilege.ts @@ -1,21 +1,46 @@ +export const SERVICE_LIST = [ + { + serviceKey: "templategen", + displayName: "Шаблонизатор документов", + }, + { + serviceKey: "squiz", + displayName: "Опросник", + }, + { + serviceKey: "dwarfener", + displayName: "Аналитика сокращателя", + }, + ] as const; + export interface RealPrivilege { - _id: string; - name: string; - privilegeId: string; - serviceKey: string; + createdAt: string; description: string; - type: "day" | "count"; - value: PrivilegeValueType; + isDeleted: boolean; + name: string; price: number; - updatedAt?: string; - isDeleted?: boolean; - createdAt?: string; + privilegeId: string; + serviceKey: ServiceType; + type: "count" | "day" | "mb"; + updatedAt: string; + value: string; + _id: string; }; -export type PrivilegeMap = Record; +export interface mergedBackFrontPrivilege { + serviceKey: ServiceType; + privilegeId: string; + name: string; + description: string; + type: string; + price: number; + isDeleted?: boolean +} +export type ServiceType = (typeof SERVICE_LIST)[number]["serviceKey"]; +// export type PrivilegeMap = Record; -export type PrivilegeValueType = "шаблон" | "день" | "МБ"; +// export type PrivilegeValueType = "шаблон" | "день" | "МБ"; -export type PrivilegeWithAmount = Omit & { amount: number; }; +// export type PrivilegeWithAmount = Omit & { amount: number; }; -export type PrivilegeWithoutPrice = Omit; +// export type PrivilegeWithoutPrice = Omit; diff --git a/src/pages/Setting/ListPrivilegie.tsx b/src/pages/Setting/ListPrivilegie.tsx deleted file mode 100644 index 0b66e28..0000000 --- a/src/pages/Setting/ListPrivilegie.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Typography } from "@mui/material"; -import { СardPrivilegie } from "./CardPrivilegie"; -import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; - -export default function ListPrivilegie() { - const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore(); - - console.log(mergedPrivileges); - - return ( - <> - {isError ? ( - {errorMessage} - ) : ( - mergedPrivileges.map(({ name, type, price, description, value, privilegeId, serviceKey, _id }) => ( - <СardPrivilegie - key={_id} - name={name} - type={type} - price={price} - value={value} - privilegeId={privilegeId} - serviceKey={serviceKey} - description={description} - /> - )) - )} - - ); -} diff --git a/src/pages/Setting/PrivilegiesWrapper.tsx b/src/pages/Setting/PrivilegiesWrapper.tsx index b1847e3..d259605 100644 --- a/src/pages/Setting/PrivilegiesWrapper.tsx +++ b/src/pages/Setting/PrivilegiesWrapper.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { Box, SxProps, Theme, Typography, useMediaQuery, useTheme } from "@mui/material"; -import ListPrivilegie from "./ListPrivilegie"; +// import ListPrivilegie from "./ListPrivilegie"; interface CustomWrapperProps { text: string; @@ -121,7 +121,7 @@ export const PrivilegiesWrapper = ({ text, sx, result }: CustomWrapperProps) => )} - {isExpanded && } + {/* {isExpanded && } */} ); diff --git a/src/pages/dashboard/Content/DiscountManagement/CreateDiscount.tsx b/src/pages/dashboard/Content/DiscountManagement/CreateDiscount.tsx index 3189311..2791798 100644 --- a/src/pages/dashboard/Content/DiscountManagement/CreateDiscount.tsx +++ b/src/pages/dashboard/Content/DiscountManagement/CreateDiscount.tsx @@ -4,6 +4,7 @@ import Select, { SelectChangeEvent } from "@mui/material/Select"; import { useState } from "react"; import { SERVICE_LIST, ServiceType } from "@root/model/tariff"; import { CustomTextField } from "@root/kitUI/CustomTextField"; +import { resetPrivilegeArray, usePrivilegeStore } from "@root/stores/privilegesStore"; import { setRealPrivileges, useRealPrivilegeStore } from "@root/stores/privileges"; import { addDiscount } from "@root/stores/discounts"; import { enqueueSnackbar } from "notistack"; @@ -14,7 +15,7 @@ import usePrivileges from "@root/utils/hooks/usePrivileges"; export default function CreateDiscount() { const theme = useTheme(); - const privileges = useRealPrivilegeStore(state => state.privileges); + const privileges = usePrivilegeStore(state => state.privileges); const [serviceType, setServiceType] = useState("templategen"); const [discountType, setDiscountType] = useState("purchasesAmount"); const [discountNameField, setDiscountNameField] = useState(""); diff --git a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx index 63348e0..1157301 100644 --- a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx +++ b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx @@ -8,7 +8,7 @@ import { CustomTextField } from "@root/kitUI/CustomTextField"; import { addTariffs } from "@root/stores/tariffs"; import { authStore } from "@root/stores/auth"; -import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; +// import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; import { Tariff_BACKEND } from "@root/model/tariff"; export default function CreateTariff() { @@ -17,16 +17,14 @@ export default function CreateTariff() { const [amountField, setAmountField] = useState(""); const [customPriceField, setCustomPriceField] = useState(""); const [privilegeIdField, setPrivilegeIdField] = useState(""); - const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore(); const { token } = authStore(); const findPrivilegeById = (privilegeId: string) => { - return mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId) ?? null; + // return mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId) ?? null; }; const privilege = findPrivilegeById(privilegeIdField); - console.log(mergedPrivileges); // function handleCreateTariffClick() { // if (nameField === "") { @@ -136,10 +134,7 @@ export default function CreateTariff() { > Привилегия - {isError ? ( - {errorMessage} - ) : ( - - )} + - {privilege && ( + {/* {privilege && ( {privilege.price} - )} + )} */} state.mergedPrivileges); const tariffs = useTariffStore((state) => state.tariffs); useEffect(() => { diff --git a/src/pages/dashboard/Content/Tariffs/Privileges/ChangePriceModal.tsx b/src/pages/dashboard/Content/Tariffs/Privileges/ChangePriceModal.tsx index b233493..a5b0d7e 100644 --- a/src/pages/dashboard/Content/Tariffs/Privileges/ChangePriceModal.tsx +++ b/src/pages/dashboard/Content/Tariffs/Privileges/ChangePriceModal.tsx @@ -1,43 +1,44 @@ import { Box, Button, Dialog, useTheme } from "@mui/material"; import { CustomTextField } from "@root/kitUI/CustomTextField"; -import { - changeModalPriceField, - changePrivilegePrice, - closePrivilegePriceModal, - usePrivilegeStore, -} from "@root/stores/privileges"; +// import { +// changeModalPriceField, +// changePrivilegePrice, +// closePrivilegePriceModal, +// usePrivilegeStore, +// } from "@root/stores/privileges"; import { enqueueSnackbar } from "notistack"; export default function ChangePriceModal() { const theme = useTheme(); - const isModalOpen = usePrivilegeStore((state) => state.isModalOpen); - const modalPriceField = usePrivilegeStore((state) => state.modalPriceField); + // const isModalOpen = usePrivilegeStore((state) => state.isModalOpen); + // const modalPriceField = usePrivilegeStore((state) => state.modalPriceField); function handleSaveChange() { - const errorMessage = changePrivilegePrice(); - if (errorMessage) enqueueSnackbar(errorMessage); + // const errorMessage = changePrivilegePrice(); + // if (errorMessage) enqueueSnackbar(errorMessage); } return ( - - - changeModalPriceField(e.target.value)} - type="number" - /> - - - + <> + // + // + // changeModalPriceField(e.target.value)} + // type="number" + // /> + // + // + // ); } diff --git a/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx b/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx index d902985..789e8be 100644 --- a/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx +++ b/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx @@ -2,7 +2,6 @@ import { GridColDef } from "@mui/x-data-grid"; import DataGrid from "@kitUI/datagrid"; import { Typography } from "@mui/material"; import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook"; -import { addMergedPrivileges } from "@root/stores/mergedPrivileges"; const columns: GridColDef[] = [ { field: "id", headerName: "id", width: 40 }, @@ -13,8 +12,12 @@ const columns: GridColDef[] = [ ]; export default function Privileges() { - const { mergedPrivileges, isError, errorMessage } = useCombinedPrivileges(); - const privilegesGridData = mergedPrivileges.map((privilege) => ({ + const { mergedPrivileges } = useCombinedPrivileges(); + const privilegesGridData = mergedPrivileges + .filter(privilege => ( + !privilege.isDeleted + )) + .map((privilege) => ({ id: privilege.privilegeId, name: privilege.name, description: privilege.description, @@ -22,19 +25,10 @@ export default function Privileges() { price: privilege.price, })); - addMergedPrivileges(mergedPrivileges, isError, errorMessage); - return ( - <> - {isError ? ( - {errorMessage} - ) : ( - - )} - + ); } diff --git a/src/pages/dashboard/Content/Tariffs/index.tsx b/src/pages/dashboard/Content/Tariffs/index.tsx index 23ae83b..de5c275 100644 --- a/src/pages/dashboard/Content/Tariffs/index.tsx +++ b/src/pages/dashboard/Content/Tariffs/index.tsx @@ -4,22 +4,36 @@ import { GridSelectionModel } from "@mui/x-data-grid"; import Cart from "@root/kitUI/Cart/Cart"; -import Privileges from "./Privileges/Privileges"; +import axios from "axios"; +import { enqueueSnackbar } from "notistack"; +import { authStore } from "@root/stores/auth"; +import { Tariff_BACKEND } from "@root/model/tariff"; +import { updateTariff, useTariffStore } from "@root/stores/tariffs"; +import { usePrivilegeStore } from "@root/stores/privilegesStore"; + import TariffsDG from "./tariffsDG"; import CreateTariff from "./CreateTariff"; +import Privileges from "./Privileges/Privileges"; import ChangePriceModal from "./Privileges/ChangePriceModal"; -import { Tariff_BACKEND } from "@root/model/tariff"; -import { enqueueSnackbar } from "notistack"; -import axios from "axios"; -import { updateTariff } from "@root/stores/tariffs"; +import {useRefreshPrivilegesStore} from "@root/hooks/useRefreshPrivilegesStore.hook" export default function Tariffs() { + const token = authStore((state) => state.token); + // const tariffs = useTariffStore((state) => state.tariffs); + const privileges = usePrivilegeStore((state) => state.privileges); + const tariffs = useTariffStore((state) => state.tariffs); const [selectedTariffs, setSelectedTariffs] = useState([]); - const getTariffs = () => { + useRefreshPrivilegesStore() + + const getTariffs = (page: number = 1) => { axios({ method: "get", url: "https://admin.pena.digital/strator/tariff", + params: { page, limit: 100 }, + headers: { + Authorization: `Bearer ${token}`, + }, }) .then((data: any) => { //Получили список тарифов. Сразу убираем удалённые и записываем остальное в стор @@ -34,10 +48,14 @@ export default function Tariffs() { customPricePerUnit: tariff.price, }; + console.log(data.data.tariffs) + console.log("reade") updateTariff(toFrontTariff); } }); - + if (page < data.totalPages) { + return getTariffs(page + 1); + } // data.data.tariffs.forEach(async (t:any) => { // if (t._id) { // console.log(t._id) @@ -54,11 +72,13 @@ export default function Tariffs() { // }) }) .catch((error) => { + console.log(error) enqueueSnackbar("Ошибка получения тарифов"); }); }; useEffect(() => { getTariffs(); + }, []); return ( @@ -71,6 +91,11 @@ export default function Tariffs() { alignItems: "center", }} > + + + + + Список привилегий diff --git a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx index 963e088..1ede18b 100644 --- a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx +++ b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx @@ -11,7 +11,7 @@ import DataGrid from "@kitUI/datagrid"; import { deleteTariffs, useTariffStore } from "@root/stores/tariffs"; import { SERVICE_LIST } from "@root/model/tariff"; -import { findPrivilegeById } from "@root/stores/privileges"; +import { findPrivilegeById } from "@root/stores/privilegesStore"; import axios from "axios"; import { authStore } from "@root/stores/auth"; diff --git a/src/stores/mergedPrivileges.ts b/src/stores/mergedPrivileges.ts deleted file mode 100644 index b89da09..0000000 --- a/src/stores/mergedPrivileges.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { create } from "zustand"; -import { persist } from "zustand/middleware"; - -type mergedPrivilege = { - createdAt?: string; - description: string; - isDeleted?: boolean; - name: string; - price: number; - privilegeId: string; - serviceKey: string; - type: "count" | "day" | "mb"; - updatedAt?: string; - value?: string; - _id?: string; -}; - -type MergedPrivilegeType = { - mergedPrivileges: mergedPrivilege[]; - isError: boolean; - errorMessage: string; -}; - -export const mergedPrivilegeStore = create()( - persist( - (set, get) => ({ - mergedPrivileges: [], - isError: false, - errorMessage: "", - }), - { - name: "MergedPrivileg store", - } - ) -); - -export const addMergedPrivileges = (newPrivileges: mergedPrivilege[], isError: boolean, errorMessage: string) => { - mergedPrivilegeStore.setState((state) => ({ - mergedPrivileges: [...newPrivileges], - isError: isError, - errorMessage: errorMessage, - })); -}; diff --git a/src/stores/privilegesStore.ts b/src/stores/privilegesStore.ts new file mode 100644 index 0000000..d328545 --- /dev/null +++ b/src/stores/privilegesStore.ts @@ -0,0 +1,94 @@ +import { Privilege } from "@root/model/tariff"; +import { create } from "zustand"; +import { devtools } from "zustand/middleware"; +import { exampleCartValues } from "./mocks/exampleCartValues"; +import { RealPrivilege } from "@root/model/privilege"; + +interface RealPrivilegeStore { + privileges: RealPrivilege[]; +} + +export const usePrivilegeStore = create()( + devtools( + (set, get) => ({ + privileges: [], + }), + { + name: "Privilege store", + } + ) +); + +export const resetPrivilegeArray = (privileges: RealPrivilegeStore["privileges"]) => usePrivilegeStore.setState({ privileges }); + + + + + +/** @deprecated */ +// interface PrivilegeStore { +// privileges: Privilege[]; +// isModalOpen: boolean; +// modalPrivilegeId: string | null; +// modalPriceField: string; +// addPrivileges: (newPrivileges: Privilege[]) => void; +// } + +/** @deprecated */ +// export const usePrivilegeStore = create()( +// devtools( +// (set, get) => ({ +// privileges: exampleCartValues.privileges, +// isModalOpen: false, +// modalPrivilegeId: null, +// modalPriceField: "", +// addPrivileges: (newPrivileges) => set((state) => ({ privileges: [...state.privileges, ...newPrivileges] })), +// }), +// { +// name: "Mock Privilege store", +// } +// ) +// ); + +// /** @deprecated */ +// export const closePrivilegePriceModal = () => usePrivilegeStore.setState({ isModalOpen: false }); + +// /** @deprecated */ +// export const openPrivilegePriceModal = (modalPrivilegeId: string | null, defaultPrice: number) => +// usePrivilegeStore.setState({ +// isModalOpen: true, +// modalPriceField: defaultPrice.toString(), +// modalPrivilegeId, +// }); + +// /** @deprecated */ +// export const changeModalPriceField = (modalPriceField: string) => usePrivilegeStore.setState({ modalPriceField }); + +// /** @deprecated */ +// export const changePrivilegePrice = () => { +// const { privileges, modalPrivilegeId, modalPriceField } = usePrivilegeStore.getState(); + +// const privilegeIndex = privileges.findIndex((privilege) => privilege.privilegeId === modalPrivilegeId); +// if (privilegeIndex === -1) throw new Error("Privilege not found by id"); + +// const price = parseFloat(modalPriceField.replace(",", ".")); +// if (!isFinite(price)) return "Error parsing price"; + +// const newPrivilege: Privilege = { +// ...privileges[privilegeIndex], +// price: price, +// }; + +// const newPrivileges = [...privileges]; +// newPrivileges.splice(privilegeIndex, 1, newPrivilege); + +// usePrivilegeStore.setState({ +// privileges: newPrivileges, +// isModalOpen: false, +// }); +// }; + +/** @deprecated */ +export const findPrivilegeById = (privilegeId: string) => { + return usePrivilegeStore.getState().privileges.find((privilege) => privilege.privilegeId === privilegeId) ?? null; +}; diff --git a/src/stores/tariffs.ts b/src/stores/tariffs.ts index a33e3cc..8e3b45e 100644 --- a/src/stores/tariffs.ts +++ b/src/stores/tariffs.ts @@ -36,6 +36,7 @@ export const updateTariff = (tariff: Tariff_FRONTEND) => { } } + export const addTariffs = (newTariffs: Tariff_FRONTEND[]) => { let stateTariffs = useTariffStore.getState().tariffs let newArrayTariffs = [...stateTariffs, ...newTariffs]