Merge branch 'fixStorages' into dev

This commit is contained in:
nflnkr 2023-07-03 13:43:48 +03:00
commit ab772c116b
18 changed files with 296 additions and 210 deletions

@ -1,43 +1,31 @@
import { usePrivilegeStore } from "@root/stores/privileges"; import { useEffect, useState } from "react";
import { usePrivilegies } from "./privilege.hook";
import { addMergedPrivileges } from "@root/stores/mergedPrivileges";
export type mergedPrivilege = { import { usePrivilegeStore } from "@root/stores/privilegesStore";
createdAt?: string; import { useRefreshPrivilegesStore } from "./useRefreshPrivilegesStore.hook";
description: string; import { exampleCartValues } from "@stores/mocks/exampleCartValues"
isDeleted?: boolean; import { mergedBackFrontPrivilege } from "@root/model/privilege";
name: string;
price: number;
privilegeId: string;
serviceKey: string;
type: "count" | "day" | "mb";
updatedAt?: string;
value?: string;
_id?: string;
};
export const useCombinedPrivileges = () => { interface UseCombinedPrivileges {
const { privilegies, isError, errorMessage } = usePrivilegies(); mergedPrivileges: mergedBackFrontPrivilege[]
const examplePrivileges = usePrivilegeStore((state) => state.privileges); }
const mergedPrivileges: mergedPrivilege[] = []; export const useCombinedPrivileges = ():UseCombinedPrivileges => {
const getPrivilegeId = (privilegeId: string): string | undefined => { const [mergedPrivileges, setMergedPrivileges] = useState<mergedBackFrontPrivilege[]>([])
const privilege = mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId);
return privilege?._id; const backendPrivileges = usePrivilegeStore((state) => state.privileges);
}; const frontendPrivileges = exampleCartValues.privileges;
const privilegesGridData = mergedPrivileges.map((privilege) => ({ useEffect(() => {
setMergedPrivileges([...backendPrivileges.map((privilege) => ({
serviceKey: privilege.serviceKey,
privilegeId: privilege.privilegeId,
name: privilege.name, name: privilege.name,
description: privilege.description, description: privilege.description,
type: privilege.type, type: privilege.type,
price: privilege.price, price: privilege.price,
})); })), ...frontendPrivileges])
}, [backendPrivileges])
if (privilegies) { return { mergedPrivileges };
mergedPrivileges.push(...privilegies.Шаблонизатор, ...examplePrivileges);
}
return { mergedPrivileges, isError, errorMessage, getPrivilegeId, privilegesGridData };
}; };

@ -1,5 +1,6 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import axios from "axios"; import axios from "axios";
import { RealPrivilege } from "@root/model/privilege";
export type Privilege = { export type Privilege = {
createdAt: string; createdAt: string;
@ -16,21 +17,21 @@ export type Privilege = {
}; };
type UsePrivilegies = { type UsePrivilegies = {
privilegies: Record<string, Privilege[]> | undefined; privilegies: RealPrivilege[]
isError: boolean; isError: boolean;
isLoading: boolean; isLoading: boolean;
errorMessage: string; errorMessage: string;
}; };
export const usePrivilegies = (): UsePrivilegies => { export const useGetPrivilegies = (): UsePrivilegies => {
const [privilegies, setPrivilegies] = useState<Record<string, Privilege[]>>(); const [privilegies, setPrivilegies] = useState<RealPrivilege[]>([]);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [isError, setIsError] = useState(false); const [isError, setIsError] = useState(false);
const [errorMessage, setErrorMessage] = useState(""); const [errorMessage, setErrorMessage] = useState("");
useEffect(() => { useEffect(() => {
const getPrivilegies = async () => { const getPrivilegies = async () => {
const { data } = await axios<Record<string, Privilege[]>>({ const { data } = await axios<RealPrivilege[]>({
method: "get", method: "get",
url: "https://admin.pena.digital/strator/privilege/service", url: "https://admin.pena.digital/strator/privilege/service",
}); });

@ -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};
};

@ -15,17 +15,20 @@ import {
FormControlLabel, FormControlLabel,
} from "@mui/material"; } from "@mui/material";
import Input from "@kitUI/input"; import Input from "@kitUI/input";
import { useCartStore } from "@root/stores/cart";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { GridSelectionModel } from "@mui/x-data-grid"; 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 { calcCartData, createCartItem, findDiscountFactor, formatDiscountFactor } from "./calc";
import { useTariffStore } from "@root/stores/tariffs";
import { AnyDiscount, CartItemTotal } from "@root/model/cart"; import { AnyDiscount, CartItemTotal } from "@root/model/cart";
import { findPrivilegeById } from "@root/stores/privileges";
import { Privilege } from "@root/model/tariff"; 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 { interface Props {
selectedTariffs: GridSelectionModel; selectedTariffs: GridSelectionModel;
} }

@ -11,7 +11,7 @@ import {
UserDiscount, UserDiscount,
} from "@root/model/cart"; } from "@root/model/cart";
import { User } from "../../model/user"; 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"; import { SERVICE_LIST, ServiceType, Tariff } from "@root/model/tariff";
export function calcCartData({ export function calcCartData({

@ -1,21 +1,46 @@
export const SERVICE_LIST = [
{
serviceKey: "templategen",
displayName: "Шаблонизатор документов",
},
{
serviceKey: "squiz",
displayName: "Опросник",
},
{
serviceKey: "dwarfener",
displayName: "Аналитика сокращателя",
},
] as const;
export interface RealPrivilege { export interface RealPrivilege {
_id: string; createdAt: string;
name: string;
privilegeId: string;
serviceKey: string;
description: string; description: string;
type: "day" | "count"; isDeleted: boolean;
value: PrivilegeValueType; name: string;
price: number; price: number;
updatedAt?: string; privilegeId: string;
isDeleted?: boolean; serviceKey: ServiceType;
createdAt?: string; type: "count" | "day" | "mb";
updatedAt: string;
value: string;
_id: string;
}; };
export type PrivilegeMap = Record<string, RealPrivilege[]>; 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<string, RealPrivilege[]>;
export type PrivilegeValueType = "шаблон" | "день" | "МБ"; // export type PrivilegeValueType = "шаблон" | "день" | "МБ";
export type PrivilegeWithAmount = Omit<RealPrivilege, "_id"> & { amount: number; }; // export type PrivilegeWithAmount = Omit<RealPrivilege, "_id"> & { amount: number; };
export type PrivilegeWithoutPrice = Omit<PrivilegeWithAmount, "price">; // export type PrivilegeWithoutPrice = Omit<PrivilegeWithAmount, "price">;

@ -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 ? (
<Typography>{errorMessage}</Typography>
) : (
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}
/>
))
)}
</>
);
}

@ -2,7 +2,7 @@ import { useState } from "react";
import { Box, SxProps, Theme, Typography, useMediaQuery, useTheme } from "@mui/material"; import { Box, SxProps, Theme, Typography, useMediaQuery, useTheme } from "@mui/material";
import ListPrivilegie from "./ListPrivilegie"; // import ListPrivilegie from "./ListPrivilegie";
interface CustomWrapperProps { interface CustomWrapperProps {
text: string; text: string;
@ -121,7 +121,7 @@ export const PrivilegiesWrapper = ({ text, sx, result }: CustomWrapperProps) =>
)} )}
</Box> </Box>
</Box> </Box>
{isExpanded && <ListPrivilegie />} {/* {isExpanded && <ListPrivilegie />} */}
</Box> </Box>
</Box> </Box>
); );

@ -4,6 +4,7 @@ import Select, { SelectChangeEvent } from "@mui/material/Select";
import { useState } from "react"; import { useState } from "react";
import { SERVICE_LIST, ServiceType } from "@root/model/tariff"; import { SERVICE_LIST, ServiceType } from "@root/model/tariff";
import { CustomTextField } from "@root/kitUI/CustomTextField"; import { CustomTextField } from "@root/kitUI/CustomTextField";
import { resetPrivilegeArray, usePrivilegeStore } from "@root/stores/privilegesStore";
import { setRealPrivileges, useRealPrivilegeStore } from "@root/stores/privileges"; import { setRealPrivileges, useRealPrivilegeStore } from "@root/stores/privileges";
import { addDiscount } from "@root/stores/discounts"; import { addDiscount } from "@root/stores/discounts";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
@ -14,7 +15,7 @@ import usePrivileges from "@root/utils/hooks/usePrivileges";
export default function CreateDiscount() { export default function CreateDiscount() {
const theme = useTheme(); const theme = useTheme();
const privileges = useRealPrivilegeStore(state => state.privileges); const privileges = usePrivilegeStore(state => state.privileges);
const [serviceType, setServiceType] = useState<ServiceType>("templategen"); const [serviceType, setServiceType] = useState<ServiceType>("templategen");
const [discountType, setDiscountType] = useState<DiscountType>("purchasesAmount"); const [discountType, setDiscountType] = useState<DiscountType>("purchasesAmount");
const [discountNameField, setDiscountNameField] = useState<string>(""); const [discountNameField, setDiscountNameField] = useState<string>("");

@ -8,7 +8,7 @@ import { CustomTextField } from "@root/kitUI/CustomTextField";
import { addTariffs } from "@root/stores/tariffs"; import { addTariffs } from "@root/stores/tariffs";
import { authStore } from "@root/stores/auth"; 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"; import { Tariff_BACKEND } from "@root/model/tariff";
export default function CreateTariff() { export default function CreateTariff() {
@ -17,16 +17,14 @@ export default function CreateTariff() {
const [amountField, setAmountField] = useState<string>(""); const [amountField, setAmountField] = useState<string>("");
const [customPriceField, setCustomPriceField] = useState<string>(""); const [customPriceField, setCustomPriceField] = useState<string>("");
const [privilegeIdField, setPrivilegeIdField] = useState<string>(""); const [privilegeIdField, setPrivilegeIdField] = useState<string>("");
const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore();
const { token } = authStore(); const { token } = authStore();
const findPrivilegeById = (privilegeId: string) => { const findPrivilegeById = (privilegeId: string) => {
return mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId) ?? null; // return mergedPrivileges.find((privilege) => privilege.privilegeId === privilegeId) ?? null;
}; };
const privilege = findPrivilegeById(privilegeIdField); const privilege = findPrivilegeById(privilegeIdField);
console.log(mergedPrivileges);
// function handleCreateTariffClick() { // function handleCreateTariffClick() {
// if (nameField === "") { // if (nameField === "") {
@ -136,9 +134,6 @@ export default function CreateTariff() {
> >
Привилегия Привилегия
</InputLabel> </InputLabel>
{isError ? (
<Typography>{errorMessage}</Typography>
) : (
<Select <Select
labelId="privilege-select-label" labelId="privilege-select-label"
id="privilege-select" id="privilege-select"
@ -158,15 +153,15 @@ export default function CreateTariff() {
}} }}
inputProps={{ sx: { pt: "12px" } }} inputProps={{ sx: { pt: "12px" } }}
> >
{mergedPrivileges.map((privilege) => ( {/* {mergedPrivileges.map((privilege) => (
<MenuItem key={privilege.description} value={privilege.privilegeId}> <MenuItem key={privilege.description} value={privilege.privilegeId}>
{privilege.description} {privilege.description}
</MenuItem> </MenuItem>
))} ))} */}
</Select> </Select>
)}
</FormControl> </FormControl>
{privilege && ( {/* {privilege && (
<Box <Box
sx={{ sx={{
display: "flex", display: "flex",
@ -186,7 +181,7 @@ export default function CreateTariff() {
Стандартная цена за единицу: <span>{privilege.price}</span> Стандартная цена за единицу: <span>{privilege.price}</span>
</Typography> </Typography>
</Box> </Box>
)} )} */}
<CustomTextField <CustomTextField
id="tariff-name" id="tariff-name"
label="Название тарифа" label="Название тарифа"

@ -8,8 +8,7 @@ import TextField from "@mui/material/TextField";
import axios from "axios"; import axios from "axios";
import { authStore } from "@root/stores/auth"; import { authStore } from "@root/stores/auth";
import { Privilege, Tariff_FRONTEND } from "@root/model/tariff"; import { Privilege, Tariff_FRONTEND } from "@root/model/tariff";
import { findPrivilegeById } from "@root/stores/privileges"; import { findPrivilegeById } from "@root/stores/privilegesStore";
import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges";
import { useTariffStore, updateTariff } from "@root/stores/tariffs"; import { useTariffStore, updateTariff } from "@root/stores/tariffs";
import { arrayBuffer } from "stream/consumers"; import { arrayBuffer } from "stream/consumers";
@ -56,7 +55,6 @@ export default function EditModal({tariff, getTariffs}:Props) {
const [name, setName] = useState(""); const [name, setName] = useState("");
const [price, setPrice] = useState(""); const [price, setPrice] = useState("");
const { token } = authStore(); const { token } = authStore();
const mergedPrivileges = mergedPrivilegeStore((state:any) => state.mergedPrivileges);
const tariffs = useTariffStore((state) => state.tariffs); const tariffs = useTariffStore((state) => state.tariffs);
useEffect(() => { useEffect(() => {

@ -1,43 +1,44 @@
import { Box, Button, Dialog, useTheme } from "@mui/material"; import { Box, Button, Dialog, useTheme } from "@mui/material";
import { CustomTextField } from "@root/kitUI/CustomTextField"; import { CustomTextField } from "@root/kitUI/CustomTextField";
import { // import {
changeModalPriceField, // changeModalPriceField,
changePrivilegePrice, // changePrivilegePrice,
closePrivilegePriceModal, // closePrivilegePriceModal,
usePrivilegeStore, // usePrivilegeStore,
} from "@root/stores/privileges"; // } from "@root/stores/privileges";
import { enqueueSnackbar } from "notistack"; import { enqueueSnackbar } from "notistack";
export default function ChangePriceModal() { export default function ChangePriceModal() {
const theme = useTheme(); const theme = useTheme();
const isModalOpen = usePrivilegeStore((state) => state.isModalOpen); // const isModalOpen = usePrivilegeStore((state) => state.isModalOpen);
const modalPriceField = usePrivilegeStore((state) => state.modalPriceField); // const modalPriceField = usePrivilegeStore((state) => state.modalPriceField);
function handleSaveChange() { function handleSaveChange() {
const errorMessage = changePrivilegePrice(); // const errorMessage = changePrivilegePrice();
if (errorMessage) enqueueSnackbar(errorMessage); // if (errorMessage) enqueueSnackbar(errorMessage);
} }
return ( return (
<Dialog open={isModalOpen} onClose={closePrivilegePriceModal}> <></>
<Box // <Dialog open={isModalOpen} onClose={closePrivilegePriceModal}>
sx={{ // <Box
p: "20px", // sx={{
backgroundColor: theme.palette.grayLight.main, // p: "20px",
display: "flex", // backgroundColor: theme.palette.grayLight.main,
flexDirection: "column", // display: "flex",
gap: "8px", // flexDirection: "column",
}} // gap: "8px",
> // }}
<CustomTextField // >
id="privilege-custom-price" // <CustomTextField
label="Цена" // id="privilege-custom-price"
value={modalPriceField} // label="Цена"
onChange={(e) => changeModalPriceField(e.target.value)} // value={modalPriceField}
type="number" // onChange={(e) => changeModalPriceField(e.target.value)}
/> // type="number"
<Button onClick={handleSaveChange}>Сохранить</Button> // />
</Box> // <Button onClick={handleSaveChange}>Сохранить</Button>
</Dialog> // </Box>
// </Dialog>
); );
} }

@ -2,7 +2,6 @@ import { GridColDef } from "@mui/x-data-grid";
import DataGrid from "@kitUI/datagrid"; import DataGrid from "@kitUI/datagrid";
import { Typography } from "@mui/material"; import { Typography } from "@mui/material";
import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook"; import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook";
import { addMergedPrivileges } from "@root/stores/mergedPrivileges";
const columns: GridColDef[] = [ const columns: GridColDef[] = [
{ field: "id", headerName: "id", width: 40 }, { field: "id", headerName: "id", width: 40 },
@ -13,8 +12,12 @@ const columns: GridColDef[] = [
]; ];
export default function Privileges() { export default function Privileges() {
const { mergedPrivileges, isError, errorMessage } = useCombinedPrivileges(); const { mergedPrivileges } = useCombinedPrivileges();
const privilegesGridData = mergedPrivileges.map((privilege) => ({ const privilegesGridData = mergedPrivileges
.filter(privilege => (
!privilege.isDeleted
))
.map((privilege) => ({
id: privilege.privilegeId, id: privilege.privilegeId,
name: privilege.name, name: privilege.name,
description: privilege.description, description: privilege.description,
@ -22,19 +25,10 @@ export default function Privileges() {
price: privilege.price, price: privilege.price,
})); }));
addMergedPrivileges(mergedPrivileges, isError, errorMessage);
return ( return (
<>
{isError ? (
<Typography>{errorMessage}</Typography>
) : (
<DataGrid <DataGrid
// checkboxSelection={true}
rows={privilegesGridData} rows={privilegesGridData}
columns={columns} columns={columns}
/> />
)}
</>
); );
} }

@ -4,22 +4,36 @@ import { GridSelectionModel } from "@mui/x-data-grid";
import Cart from "@root/kitUI/Cart/Cart"; 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 TariffsDG from "./tariffsDG";
import CreateTariff from "./CreateTariff"; import CreateTariff from "./CreateTariff";
import Privileges from "./Privileges/Privileges";
import ChangePriceModal from "./Privileges/ChangePriceModal"; import ChangePriceModal from "./Privileges/ChangePriceModal";
import { Tariff_BACKEND } from "@root/model/tariff"; import {useRefreshPrivilegesStore} from "@root/hooks/useRefreshPrivilegesStore.hook"
import { enqueueSnackbar } from "notistack";
import axios from "axios";
import { updateTariff } from "@root/stores/tariffs";
export default function Tariffs() { 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<GridSelectionModel>([]); const [selectedTariffs, setSelectedTariffs] = useState<GridSelectionModel>([]);
const getTariffs = () => { useRefreshPrivilegesStore()
const getTariffs = (page: number = 1) => {
axios({ axios({
method: "get", method: "get",
url: "https://admin.pena.digital/strator/tariff", url: "https://admin.pena.digital/strator/tariff",
params: { page, limit: 100 },
headers: {
Authorization: `Bearer ${token}`,
},
}) })
.then((data: any) => { .then((data: any) => {
//Получили список тарифов. Сразу убираем удалённые и записываем остальное в стор //Получили список тарифов. Сразу убираем удалённые и записываем остальное в стор
@ -34,10 +48,14 @@ export default function Tariffs() {
customPricePerUnit: tariff.price, customPricePerUnit: tariff.price,
}; };
console.log(data.data.tariffs)
console.log("reade")
updateTariff(toFrontTariff); updateTariff(toFrontTariff);
} }
}); });
if (page < data.totalPages) {
return getTariffs(page + 1);
}
// data.data.tariffs.forEach(async (t:any) => { // data.data.tariffs.forEach(async (t:any) => {
// if (t._id) { // if (t._id) {
// console.log(t._id) // console.log(t._id)
@ -54,11 +72,13 @@ export default function Tariffs() {
// }) // })
}) })
.catch((error) => { .catch((error) => {
console.log(error)
enqueueSnackbar("Ошибка получения тарифов"); enqueueSnackbar("Ошибка получения тарифов");
}); });
}; };
useEffect(() => { useEffect(() => {
getTariffs(); getTariffs();
}, []); }, []);
return ( return (
@ -71,6 +91,11 @@ export default function Tariffs() {
alignItems: "center", alignItems: "center",
}} }}
> >
<button onClick={() => console.log(privileges)}>provileges</button>
<button onClick={() => console.log(tariffs)}>tariffs</button>
<Typography variant="h6">Список привилегий</Typography> <Typography variant="h6">Список привилегий</Typography>
<Privileges /> <Privileges />

@ -11,7 +11,7 @@ import DataGrid from "@kitUI/datagrid";
import { deleteTariffs, useTariffStore } from "@root/stores/tariffs"; import { deleteTariffs, useTariffStore } from "@root/stores/tariffs";
import { SERVICE_LIST } from "@root/model/tariff"; import { SERVICE_LIST } from "@root/model/tariff";
import { findPrivilegeById } from "@root/stores/privileges"; import { findPrivilegeById } from "@root/stores/privilegesStore";
import axios from "axios"; import axios from "axios";
import { authStore } from "@root/stores/auth"; import { authStore } from "@root/stores/auth";

@ -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<MergedPrivilegeType>()(
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,
}));
};

@ -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<RealPrivilegeStore>()(
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<PrivilegeStore>()(
// 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;
};

@ -36,6 +36,7 @@ export const updateTariff = (tariff: Tariff_FRONTEND) => {
} }
} }
export const addTariffs = (newTariffs: Tariff_FRONTEND[]) => { export const addTariffs = (newTariffs: Tariff_FRONTEND[]) => {
let stateTariffs = useTariffStore.getState().tariffs let stateTariffs = useTariffStore.getState().tariffs
let newArrayTariffs = [...stateTariffs, ...newTariffs] let newArrayTariffs = [...stateTariffs, ...newTariffs]