Единая функция запроса тарифов в корне страницы тарифов. БекТарифы приведены к фронтТарифам. 4 функции работы со стором тарифов
This commit is contained in:
parent
cdc56c900b
commit
ef4000ea07
@ -24,9 +24,6 @@ import { calcCartData, createCartItem, findDiscountFactor, formatDiscountFactor
|
||||
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 { enqueueSnackbar } from "notistack";
|
||||
import axios from "axios";
|
||||
|
||||
interface Props {
|
||||
selectedTariffs: GridSelectionModel;
|
||||
@ -64,36 +61,6 @@ export default function Cart({ selectedTariffs }: Props) {
|
||||
|
||||
console.log(cartTotal, "cartTotal");
|
||||
|
||||
const getTariffs = () => {
|
||||
axios({
|
||||
method: "get",
|
||||
url: "https://admin.pena.digital/strator/tariff",
|
||||
})
|
||||
.then((data: any) => {
|
||||
setTariffs(data.data.tariffs);
|
||||
|
||||
// data.data.tariffs.forEach(async (t:any) => {
|
||||
// if (t._id) {
|
||||
// console.log(t._id)
|
||||
// await axios({
|
||||
// method: "delete",
|
||||
// url: "https://admin.pena.digital/strator/tariff/delete",
|
||||
// headers: {
|
||||
// Authorization: `Bearer ${token}`,
|
||||
// },
|
||||
// data: { id: t._id },
|
||||
// });
|
||||
// }
|
||||
|
||||
// })
|
||||
})
|
||||
.catch((error) => {
|
||||
enqueueSnackbar("Ошибка получения тарифов");
|
||||
});
|
||||
};
|
||||
useEffect(() => {
|
||||
getTariffs();
|
||||
}, []);
|
||||
|
||||
const cartRows = cartTotal?.items.map((cartItemTotal) => {
|
||||
const privilege = findPrivilegeById(cartItemTotal.tariff.privilegeId);
|
||||
|
||||
@ -10,7 +10,7 @@ import {
|
||||
ServiceDiscount,
|
||||
UserDiscount,
|
||||
} from "@root/model/cart";
|
||||
import { ServiceType, SERVICE_LIST, Tariff } from "../../model/tariff";
|
||||
import { Tariff_BACKEND } from "@root/model/tariff";
|
||||
import { User } from "../../model/user";
|
||||
import { findPrivilegeById } from "@root/stores/privileges";
|
||||
|
||||
@ -38,6 +38,8 @@ export function calcCartData({
|
||||
};
|
||||
|
||||
cartItems.forEach((cartItem) => {
|
||||
|
||||
console.log(cartItem)
|
||||
console.log(cartItem.tariff.privilegeId)
|
||||
const privilege = findPrivilegeById(cartItem.tariff.privilegeId);
|
||||
console.log(privilege)
|
||||
|
||||
@ -17,24 +17,34 @@ export type ServiceType = (typeof SERVICE_LIST)[number]["serviceKey"];
|
||||
|
||||
export type PrivilegeType = "unlim" | "gencount" | "activequiz" | "abcount" | "extended";
|
||||
|
||||
export interface Privilege {
|
||||
serviceKey: ServiceType;
|
||||
name: PrivilegeType;
|
||||
privilegeId: string;
|
||||
description: string;
|
||||
/** Единица измерения привелегии: время в днях/кол-во */
|
||||
type: "day" | "count";
|
||||
/** Стоимость одной единицы привелегии */
|
||||
price: number;
|
||||
}
|
||||
|
||||
export interface Tariff {
|
||||
id: string;
|
||||
export interface Privilege_BACKEND {
|
||||
name: string;
|
||||
privilegeId: string;
|
||||
/** Количество единиц привелегии */
|
||||
serviceKey: string;
|
||||
amount: number;
|
||||
/** Кастомная цена, если есть, то используется вместо privilege.price */
|
||||
customPricePerUnit?: number;
|
||||
isFront?: boolean
|
||||
description: string;
|
||||
price: number;
|
||||
type: string;
|
||||
value: string;
|
||||
updatedAt: string;
|
||||
_id: string;
|
||||
}
|
||||
export type Tariff_BACKEND = {
|
||||
_id: string,
|
||||
name: string,
|
||||
price: number,
|
||||
isCustom: boolean,
|
||||
isFront: boolean,
|
||||
privilegies: Privilege_BACKEND[],
|
||||
isDeleted: boolean,
|
||||
createdAt: string,
|
||||
updatedAt: string
|
||||
}
|
||||
export type Tariff_FRONTEND = {
|
||||
id: string,
|
||||
name: string,
|
||||
amount:number,
|
||||
isFront: boolean,
|
||||
privilegeId: string,
|
||||
customPricePerUnit: number
|
||||
}
|
||||
@ -6,11 +6,11 @@ import axios from "axios";
|
||||
|
||||
import { CustomTextField } from "@root/kitUI/CustomTextField";
|
||||
|
||||
import { Tariff } from "@root/model/tariff";
|
||||
|
||||
import { addTariffs } from "@root/stores/tariffs";
|
||||
import { authStore } from "@root/stores/auth";
|
||||
import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges";
|
||||
import { Tariff_BACKEND } from "@root/model/tariff";
|
||||
|
||||
export default function CreateTariff() {
|
||||
const theme = useTheme();
|
||||
@ -29,77 +29,77 @@ export default function CreateTariff() {
|
||||
|
||||
console.log(privilege);
|
||||
|
||||
function handleCreateTariffClick() {
|
||||
if (nameField === "") {
|
||||
enqueueSnackbar("Пустое название тарифа");
|
||||
}
|
||||
if (amountField === "") {
|
||||
enqueueSnackbar("Пустое кол-во едениц привилегия");
|
||||
}
|
||||
if (privilegeIdField === "") {
|
||||
enqueueSnackbar("Не выбрана привилегия");
|
||||
}
|
||||
// function handleCreateTariffClick() {
|
||||
// if (nameField === "") {
|
||||
// enqueueSnackbar("Пустое название тарифа");
|
||||
// }
|
||||
// if (amountField === "") {
|
||||
// enqueueSnackbar("Пустое кол-во едениц привилегия");
|
||||
// }
|
||||
// if (privilegeIdField === "") {
|
||||
// enqueueSnackbar("Не выбрана привилегия");
|
||||
// }
|
||||
|
||||
const amount = Number(amountField);
|
||||
const customPrice = Number(customPriceField);
|
||||
// const amount = Number(amountField);
|
||||
// const customPrice = Number(customPriceField);
|
||||
|
||||
if (isNaN(amount) || !privilege) return;
|
||||
// if (isNaN(amount) || !privilege) return;
|
||||
|
||||
const newTariff: Tariff = {
|
||||
id: nanoid(5),
|
||||
name: nameField,
|
||||
amount:amount,
|
||||
isFront: true,
|
||||
privilegeId: privilege.privilegeId,
|
||||
customPricePerUnit: customPrice ? customPrice / amount : undefined,
|
||||
};
|
||||
addTariffs([newTariff]);
|
||||
// const newTariff: Tariff = {
|
||||
// id: nanoid(5),
|
||||
// name: nameField,
|
||||
// amount:amount,
|
||||
// isFront: true,
|
||||
// privilegeId: privilege.privilegeId,
|
||||
// customPricePerUnit: customPrice ? customPrice / amount : undefined,
|
||||
// };
|
||||
// addTariffs([newTariff]);
|
||||
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
const createTariff = async () => {
|
||||
if (nameField === "" || amountField === "" || privilegeIdField === "") {
|
||||
return;
|
||||
}
|
||||
// const createTariff = async () => {
|
||||
// if (nameField === "" || amountField === "" || privilegeIdField === "") {
|
||||
// return;
|
||||
// }
|
||||
|
||||
try {
|
||||
if (!privilege) {
|
||||
throw new Error("Привилегия не выбрана");
|
||||
}
|
||||
// try {
|
||||
// if (!privilege) {
|
||||
// throw new Error("Привилегия не выбрана");
|
||||
// }
|
||||
|
||||
if (!privilege._id) {
|
||||
return;
|
||||
}
|
||||
// if (!privilege._id) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
const { data } = await axios({
|
||||
url: "https://admin.pena.digital/strator/tariff/",
|
||||
method: "post",
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
data: {
|
||||
name: nameField,
|
||||
price: Number(customPriceField) * 100,
|
||||
isCustom: false,
|
||||
privilegies: [
|
||||
{
|
||||
name: privilege.name,
|
||||
privilegeId: privilege._id,
|
||||
serviceKey: privilege.serviceKey,
|
||||
description: privilege.description,
|
||||
type: privilege.type,
|
||||
value: privilege.value,
|
||||
price: privilege.price,
|
||||
amount: Number(amountField),
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
enqueueSnackbar((error as Error).message);
|
||||
}
|
||||
};
|
||||
// const { data } = await axios({
|
||||
// url: "https://admin.pena.digital/strator/tariff/",
|
||||
// method: "post",
|
||||
// headers: {
|
||||
// Authorization: `Bearer ${token}`,
|
||||
// },
|
||||
// data: {
|
||||
// name: nameField,
|
||||
// price: Number(customPriceField) * 100,
|
||||
// isCustom: false,
|
||||
// privilegies: [
|
||||
// {
|
||||
// name: privilege.name,
|
||||
// privilegeId: privilege._id,
|
||||
// serviceKey: privilege.serviceKey,
|
||||
// description: privilege.description,
|
||||
// type: privilege.type,
|
||||
// value: privilege.value,
|
||||
// price: privilege.price,
|
||||
// amount: Number(amountField),
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// });
|
||||
// } catch (error) {
|
||||
// enqueueSnackbar((error as Error).message);
|
||||
// }
|
||||
// };
|
||||
|
||||
return (
|
||||
<Container
|
||||
@ -210,16 +210,16 @@ isFront: true,
|
||||
type="number"
|
||||
/>
|
||||
<Button
|
||||
onClick={() => {
|
||||
const privilege = findPrivilegeById(privilegeIdField);
|
||||
if (true) {
|
||||
//тариф создан на основе привилегии из БЕКЕНДА
|
||||
createTariff();
|
||||
} else {
|
||||
//тариф создан на основе привилегии из ФРОНТА
|
||||
handleCreateTariffClick();
|
||||
}
|
||||
}}
|
||||
// onClick={() => {
|
||||
// const privilege = findPrivilegeById(privilegeIdField);
|
||||
// if (true) {
|
||||
// //тариф создан на основе привилегии из БЕКЕНДА
|
||||
// createTariff();
|
||||
// } else {
|
||||
// //тариф создан на основе привилегии из ФРОНТА
|
||||
// handleCreateTariffClick();
|
||||
// }
|
||||
// }}
|
||||
>
|
||||
|
||||
Создать
|
||||
|
||||
@ -6,10 +6,10 @@ import Modal from "@mui/material/Modal";
|
||||
import TextField from "@mui/material/TextField";
|
||||
import axios from "axios";
|
||||
import { authStore } from "@root/stores/auth";
|
||||
import {TariffDG, Privilege} from "./types"
|
||||
import { Privilege, Tariff_FRONTEND } from "@root/model/tariff";
|
||||
import { findPrivilegeById } from "@root/stores/privileges";
|
||||
import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges";
|
||||
import { useTariffStore, updateTariffs } from "@root/stores/tariffs";
|
||||
import { useTariffStore, updateTariff } from "@root/stores/tariffs";
|
||||
import { arrayBuffer } from "stream/consumers";
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ const editTariff = ({
|
||||
});
|
||||
}
|
||||
interface Props {
|
||||
tariff: TariffDG | undefined,
|
||||
tariff: Tariff_FRONTEND,
|
||||
getTariffs: () => void
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { useState } from "react";
|
||||
import { useState, useEffect } from "react";
|
||||
import { Container, Typography } from "@mui/material";
|
||||
import { GridSelectionModel } from "@mui/x-data-grid";
|
||||
|
||||
@ -8,10 +8,59 @@ import Privileges from "./Privileges/Privileges";
|
||||
import TariffsDG from "./tariffsDG";
|
||||
import CreateTariff from "./CreateTariff";
|
||||
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";
|
||||
|
||||
export default function Tariffs() {
|
||||
const [selectedTariffs, setSelectedTariffs] = useState<GridSelectionModel>([]);
|
||||
|
||||
const getTariffs = () => {
|
||||
axios({
|
||||
method: "get",
|
||||
url: "https://admin.pena.digital/strator/tariff",
|
||||
})
|
||||
.then((data: any) => {
|
||||
//Получили список тарифов. Сразу убираем удалённые и записываем остальное в стор
|
||||
data.data.tariffs.forEach((tariff:Tariff_BACKEND) => {
|
||||
if (!tariff.isDeleted) {
|
||||
let toFrontTariff = {
|
||||
id: tariff._id,
|
||||
name: tariff.name,
|
||||
amount: tariff.privilegies[0].amount,
|
||||
isFront: false,
|
||||
privilegeId: tariff.privilegies[0].privilegeId,
|
||||
customPricePerUnit: tariff.price
|
||||
}
|
||||
|
||||
updateTariff(toFrontTariff)
|
||||
}
|
||||
})
|
||||
|
||||
// data.data.tariffs.forEach(async (t:any) => {
|
||||
// if (t._id) {
|
||||
// console.log(t._id)
|
||||
// await axios({
|
||||
// method: "delete",
|
||||
// url: "https://admin.pena.digital/strator/tariff/delete",
|
||||
// headers: {
|
||||
// Authorization: `Bearer ${token}`,
|
||||
// },
|
||||
// data: { id: t._id },
|
||||
// });
|
||||
// }
|
||||
|
||||
// })
|
||||
})
|
||||
.catch((error) => {
|
||||
enqueueSnackbar("Ошибка получения тарифов");
|
||||
});
|
||||
};
|
||||
useEffect(() => {
|
||||
getTariffs();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Container
|
||||
sx={{
|
||||
@ -38,6 +87,7 @@ export default function Tariffs() {
|
||||
<TariffsDG
|
||||
selectedTariffs={selectedTariffs}
|
||||
handleSelectionChange={(selectionModel) => setSelectedTariffs(selectionModel)}
|
||||
getTariffs={getTariffs}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
@ -16,41 +16,25 @@ import axios from "axios";
|
||||
import { authStore } from "@root/stores/auth";
|
||||
import DeleteModal from "@root/kitUI/DeleteModal";
|
||||
import EditModal from "./EditModal";
|
||||
import { TariffDG, Privilege } from "./types";
|
||||
import { Tariff_FRONTEND } from "@root/model/tariff";
|
||||
|
||||
interface Props {
|
||||
selectedTariffs: GridSelectionModel;
|
||||
handleSelectionChange: (selectionModel: GridSelectionModel) => void;
|
||||
getTariffs: () => void
|
||||
}
|
||||
|
||||
interface MergedTariff {
|
||||
_id: string;
|
||||
id: string;
|
||||
name: string;
|
||||
privilegeId: string;
|
||||
serviceName: string;
|
||||
price: number;
|
||||
isCustom: boolean;
|
||||
createdAt: string;
|
||||
isDeleted: boolean;
|
||||
amount?: number;
|
||||
customPricePerUnit?: number;
|
||||
privilegies: Privilege[];
|
||||
isFront: boolean;
|
||||
}
|
||||
|
||||
export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Props) {
|
||||
export default function TariffsDG({ selectedTariffs, handleSelectionChange, getTariffs }: Props) {
|
||||
const { token } = authStore();
|
||||
|
||||
const exampleTariffs = useTariffStore((state) => state.tariffs);
|
||||
const [tariffs, setTariffs] = useState<any>();
|
||||
const tariffs = useTariffStore((state) => state.tariffs);
|
||||
|
||||
const [deletedRows, setDeletedRows] = useState<string[]>([]);
|
||||
const [openDeleteModal, setOpenDeleteModal] = useState(false);
|
||||
const [changedTariff, setChangedTariff] = useState<TariffDG | undefined>();
|
||||
|
||||
const [changingTariff, setChangingTariff] = useState<Tariff_FRONTEND | undefined>();
|
||||
const [errorDelete, setErrorDelete] = useState(false);
|
||||
|
||||
const mergeTariffs: MergedTariff[] = [...exampleTariffs, ...(tariffs || [])];
|
||||
|
||||
const tariffDeleteDataGrid = async (tarifIid: string) => {
|
||||
if (exampleTariffs.find((tariff) => tariff.id === tarifIid)) {
|
||||
@ -113,46 +97,16 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
enqueueSnackbar(`Not deleted: ${notDeleted.join(", ")}`);
|
||||
};
|
||||
|
||||
const getTariffs = () => {
|
||||
axios({
|
||||
method: "get",
|
||||
url: "https://admin.pena.digital/strator/tariff",
|
||||
})
|
||||
.then((data: any) => {
|
||||
setTariffs(data.data.tariffs);
|
||||
|
||||
// data.data.tariffs.forEach(async (t:any) => {
|
||||
// if (t._id) {
|
||||
// console.log(t._id)
|
||||
// await axios({
|
||||
// method: "delete",
|
||||
// url: "https://admin.pena.digital/strator/tariff/delete",
|
||||
// headers: {
|
||||
// Authorization: `Bearer ${token}`,
|
||||
// },
|
||||
// data: { id: t._id },
|
||||
// });
|
||||
// }
|
||||
|
||||
// })
|
||||
})
|
||||
.catch((error) => {
|
||||
enqueueSnackbar("Ошибка получения тарифов");
|
||||
});
|
||||
};
|
||||
useEffect(() => {
|
||||
getTariffs();
|
||||
}, []);
|
||||
|
||||
const columns: GridColDef[] = [
|
||||
{ field: "id", headerName: "ID", width: 100 },
|
||||
{ field: "name", headerName: "Название тарифа", width: 150 },
|
||||
{ field: "amount", headerName: "Количество", width: 110 },
|
||||
{ field: "serviceName", headerName: "Сервис", width: 150 }, //инфо из гитлаба.
|
||||
{ field: "privilegeName", headerName: "Привелегия", width: 150 },
|
||||
{ field: "amount", headerName: "Количество", width: 110 },
|
||||
{ field: "type", headerName: "Единица", width: 100 },
|
||||
{ field: "pricePerUnit", headerName: "Цена за ед.", width: 100 },
|
||||
{ field: "isCustomPrice", headerName: "Кастомная цена", width: 130 },
|
||||
{ field: "customPricePerUnit", headerName: "Кастомная цена", width: 130 },
|
||||
{ field: "total", headerName: "Сумма", width: 60 },
|
||||
{
|
||||
field: "delete",
|
||||
@ -177,7 +131,7 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
renderCell: ({ row }) => {
|
||||
// console.log(row)
|
||||
return (
|
||||
<IconButton onClick={() => setChangedTariff(row)}>
|
||||
<IconButton onClick={() => setChangingTariff(row)}>
|
||||
<ModeEditOutlineOutlinedIcon />
|
||||
</IconButton>
|
||||
);
|
||||
@ -185,42 +139,8 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
},
|
||||
];
|
||||
|
||||
const privilegiesName = (array: Privilege[]) => {
|
||||
const name = array.map(({ name }) => name);
|
||||
return name[0];
|
||||
};
|
||||
|
||||
console.log(mergeTariffs);
|
||||
const gridData = mergeTariffs
|
||||
.filter((tariff) => !tariff.isDeleted)
|
||||
.map((tariff) => {
|
||||
console.log(tariff);
|
||||
return {
|
||||
id: tariff._id ? tariff._id : tariff.id,
|
||||
name: tariff.name,
|
||||
serviceName: SERVICE_LIST.find(
|
||||
(service) => service.serviceKey === findPrivilegeById(tariff.privilegeId)?.serviceKey
|
||||
)?.displayName,
|
||||
privilegeName: tariff.privilegies
|
||||
? privilegiesName(tariff.privilegies)
|
||||
: `(${tariff.privilegeId}) ${findPrivilegeById(tariff.privilegeId)?.description ?? "Привилегия не найдена"}`,
|
||||
privilege: tariff.privilegies ? tariff.privilegies : [],
|
||||
amount: tariff.amount,
|
||||
type: findPrivilegeById(tariff.privilegeId)?.type === "count" ? "день" : "шт.",
|
||||
pricePerUnit: tariff.customPricePerUnit
|
||||
? tariff.customPricePerUnit ?? findPrivilegeById(tariff.privilegeId)?.price
|
||||
: tariff.price,
|
||||
isCustomPrice: tariff.customPricePerUnit === undefined ? "Нет" : "Да",
|
||||
isDeleted: tariff.isDeleted,
|
||||
total: tariff.amount
|
||||
? tariff.amount * (tariff.customPricePerUnit ?? findPrivilegeById(tariff.privilegeId)?.price ?? 0)
|
||||
: 0,
|
||||
isFront: tariff.isFront ? tariff.isFront : false,
|
||||
};
|
||||
});
|
||||
|
||||
const selectedTariff = gridData.find((tariff) => tariff.id === selectedTariffs[0]);
|
||||
const selectedTariffPrivilege = selectedTariff ? selectedTariff.privilege : [];
|
||||
// const selectedTariff = gridData.find((tariff) => tariff.id === selectedTariffs[0]);
|
||||
// const selectedTariffPrivilege = selectedTariff ? selectedTariff.privilege : [];
|
||||
|
||||
const allName = () => {
|
||||
const selectedNames = [];
|
||||
@ -234,15 +154,12 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
return selectedNames;
|
||||
};
|
||||
|
||||
console.log(allName());
|
||||
console.log(gridData);
|
||||
|
||||
return (
|
||||
<>
|
||||
<DataGrid
|
||||
disableSelectionOnClick={true}
|
||||
checkboxSelection={true}
|
||||
rows={gridData}
|
||||
rows={tariffs}
|
||||
columns={columns}
|
||||
getRowId={(row) => row.id}
|
||||
components={{ Toolbar: GridToolbar }}
|
||||
@ -257,7 +174,7 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
) : (
|
||||
<React.Fragment />
|
||||
)}
|
||||
<DeleteModal
|
||||
{/* <DeleteModal
|
||||
tariffDelete={tariffDelete}
|
||||
errorDelete={errorDelete}
|
||||
tariffId={selectedTariffs}
|
||||
@ -266,9 +183,9 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
||||
handleClose={() => {
|
||||
setOpenDeleteModal(false);
|
||||
}}
|
||||
/>
|
||||
{console.log(changedTariff)}
|
||||
<EditModal tariff={changedTariff} getTariffs={getTariffs} />
|
||||
/> */}
|
||||
{console.log(changingTariff)}
|
||||
<EditModal tariff={changingTariff} getTariffs={getTariffs} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
export interface TariffDG {
|
||||
id: string;
|
||||
name: string;
|
||||
serviceName: "Шаблонизатор документов" | "Опросник" | "Аналитика сокращателя" | undefined;
|
||||
privilege: Privilege[];
|
||||
amount: number | undefined;
|
||||
type?: string;
|
||||
value?: string;
|
||||
pricePerUnit: number | undefined;
|
||||
total: number;
|
||||
}
|
||||
export interface Privilege {
|
||||
name: string;
|
||||
privilegeId: string;
|
||||
serviceKey: string;
|
||||
amount: number;
|
||||
description: string;
|
||||
price: number;
|
||||
type: string;
|
||||
value: string;
|
||||
updatedAt: string;
|
||||
_id: string;
|
||||
}
|
||||
@ -1,9 +1,10 @@
|
||||
import { Tariff } from "@root/model/tariff";
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
import { Tariff_BACKEND, Tariff_FRONTEND } from "@root/model/tariff";
|
||||
|
||||
|
||||
interface TariffStore {
|
||||
tariffs: Tariff[];
|
||||
tariffs: Tariff_FRONTEND[]
|
||||
}
|
||||
|
||||
export const useTariffStore = create<TariffStore>()(
|
||||
@ -18,11 +19,30 @@ export const useTariffStore = create<TariffStore>()(
|
||||
)
|
||||
);
|
||||
|
||||
export const addTariffs = (newTariffs: Tariff[]) =>
|
||||
useTariffStore.setState((state) => ({ tariffs: [...state.tariffs, ...newTariffs] }));
|
||||
|
||||
export const updateTariffs = (newTariff: Tariff[]) => useTariffStore.setState((state) => ({ tariffs: newTariff }));
|
||||
export const resetTariffs = (newTariff: Tariff_FRONTEND[]) => useTariffStore.setState((state) => ({ tariffs: newTariff }));
|
||||
|
||||
export const updateTariff = (tariff: Tariff_FRONTEND) => {
|
||||
let stateTariffs = useTariffStore.getState().tariffs
|
||||
let index
|
||||
stateTariffs.forEach((e,i) => { //ищем такой тариф для замены на новый
|
||||
if (e.id == tariff.id) index = i
|
||||
})
|
||||
if (index === undefined) {// не нашли. Добавляем
|
||||
addTariffs([tariff])
|
||||
} else { //нашли. Заменяем
|
||||
stateTariffs[index] = tariff
|
||||
useTariffStore.setState(() => ({tariffs: stateTariffs}))
|
||||
}
|
||||
}
|
||||
|
||||
export const addTariffs = (newTariffs: Tariff_FRONTEND[]) => {
|
||||
let stateTariffs = useTariffStore.getState().tariffs
|
||||
let newArrayTariffs = [...stateTariffs, ...newTariffs]
|
||||
newArrayTariffs.forEach((tariff) => {
|
||||
updateTariff(tariff)
|
||||
})
|
||||
}
|
||||
export const deleteTariffs = (tariffId: string) =>
|
||||
useTariffStore.setState((state) => ({
|
||||
tariffs: state.tariffs.filter((tariff) => tariff.id !== tariffId),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user