diff --git a/src/hooks/tariff.hook.ts b/src/hooks/tariff.hook.ts new file mode 100644 index 0000000..5374082 --- /dev/null +++ b/src/hooks/tariff.hook.ts @@ -0,0 +1,52 @@ +import { useEffect, useState } from "react"; +import axios from "axios"; + +export type Privilege = { + 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 UseTariffs = { + tariffs: Record | undefined; + isError: boolean; + isLoading: boolean; + errorMessage: string; +}; + +export const useTariffs = (): UseTariffs => { + const [tariffs, setTariffs] = useState>(); + const [isLoading, setIsLoading] = useState(false); + const [isError, setIsError] = useState(false); + const [errorMessage, setErrorMessage] = useState(""); + + useEffect(() => { + const getPrivilegies = async () => { + const { data } = await axios>({ + method: "get", + url: "https://admin.pena.digital/strator/tariff/", + }); + + return data; + }; + + setIsLoading(true); + getPrivilegies() + .then(setTariffs) + .catch(() => { + setIsError(true); + setErrorMessage("Ошибка при получении тарифов"); + }) + .finally(() => setIsLoading(false)); + }, []); + + return { tariffs, isError, isLoading, errorMessage }; +}; diff --git a/src/hooks/useCombinedPrivileges.hook.ts b/src/hooks/useCombinedPrivileges.hook.ts index 0279324..fc54284 100644 --- a/src/hooks/useCombinedPrivileges.hook.ts +++ b/src/hooks/useCombinedPrivileges.hook.ts @@ -1,6 +1,6 @@ import { usePrivilegeStore } from "@root/stores/privileges"; - import { usePrivilegies } from "./privilege.hook"; +import { addMergedPrivileges } from "@root/stores/mergedPrivileges"; export type mergedPrivilege = { createdAt?: string; @@ -24,7 +24,7 @@ export const useCombinedPrivileges = () => { if (privilegies) { mergedPrivileges.push(...privilegies.Шаблонизатор, ...examplePrivileges); - } - return { mergedPrivileges, isError, errorMessage }; + addMergedPrivileges(mergedPrivileges, isError, errorMessage); + } }; diff --git a/src/pages/Setting/ListPrivilegie.tsx b/src/pages/Setting/ListPrivilegie.tsx index 2f344d6..0b66e28 100644 --- a/src/pages/Setting/ListPrivilegie.tsx +++ b/src/pages/Setting/ListPrivilegie.tsx @@ -1,9 +1,11 @@ import { Typography } from "@mui/material"; import { СardPrivilegie } from "./CardPrivilegie"; -import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook"; +import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; export default function ListPrivilegie() { - const { mergedPrivileges, isError, errorMessage } = useCombinedPrivileges(); + const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore(); + + console.log(mergedPrivileges); return ( <> diff --git a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx index e7a6c44..9d225c9 100644 --- a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx +++ b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx @@ -6,12 +6,11 @@ import axios from "axios"; import { CustomTextField } from "@root/kitUI/CustomTextField"; -import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook"; - import { Tariff } from "@root/model/tariff"; import { addTariffs } from "@root/stores/tariffs"; import { authStore } from "@root/stores/auth"; +import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; export default function CreateTariff() { const theme = useTheme(); @@ -19,7 +18,7 @@ export default function CreateTariff() { const [amountField, setAmountField] = useState(""); const [customPriceField, setCustomPriceField] = useState(""); const [privilegeIdField, setPrivilegeIdField] = useState(""); - const { mergedPrivileges, isError, errorMessage } = useCombinedPrivileges(); + const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore(); const { token } = authStore(); const findPrivilegeById = (privilegeId: string) => { @@ -28,8 +27,6 @@ export default function CreateTariff() { const privilege = findPrivilegeById(privilegeIdField); - console.log(privilege); - function handleCreateTariffClick() { if (nameField === "") { enqueueSnackbar("Пустое название тарифа"); @@ -56,17 +53,13 @@ export default function CreateTariff() { }; addTariffs([newTariff]); - - axios({}) - .then((response) => { - console.log(response.data); - }) - .catch((error) => { - console.error(error); - }); } const createTariff = async () => { + if (nameField === "" || amountField === "" || privilegeIdField === "") { + return; + } + try { if (!privilege) { throw new Error("Привилегия не выбрана"); @@ -214,7 +207,6 @@ export default function CreateTariff() { handleCreateTariffClick(); createTariff(); }} - // disabled={privilegeIdField === "" || amountField === "" || nameField === ""} > Создать diff --git a/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx b/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx index b4a9952..754a567 100644 --- a/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx +++ b/src/pages/dashboard/Content/Tariffs/Privileges/Privileges.tsx @@ -1,7 +1,7 @@ import { GridColDef } from "@mui/x-data-grid"; import DataGrid from "@kitUI/datagrid"; -import { useCombinedPrivileges } from "@root/hooks/useCombinedPrivileges.hook"; import { Typography } from "@mui/material"; +import { mergedPrivilegeStore } from "@root/stores/mergedPrivileges"; const columns: GridColDef[] = [ { field: "id", headerName: "id", width: 40 }, @@ -12,8 +12,7 @@ const columns: GridColDef[] = [ ]; export default function Privileges() { - const { mergedPrivileges, isError, errorMessage } = useCombinedPrivileges(); - + const { mergedPrivileges, isError, errorMessage } = mergedPrivilegeStore(); const privilegesGridData = mergedPrivileges.map((privilege) => ({ id: privilege.privilegeId, name: privilege.name, diff --git a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx index 8d789e3..ffdda50 100644 --- a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx +++ b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx @@ -16,8 +16,6 @@ interface Props { export default function TariffsDG({ handleSelectionChange }: Props) { const tariffs = useTariffStore((state) => state.tariffs); - console.log(tariffs); - const columns: GridColDef[] = [ { field: "id", headerName: "ID", width: 100 }, { field: "name", headerName: "Название тарифа", width: 150 }, diff --git a/src/stores/mergedPrivileges.ts b/src/stores/mergedPrivileges.ts new file mode 100644 index 0000000..241c229 --- /dev/null +++ b/src/stores/mergedPrivileges.ts @@ -0,0 +1,43 @@ +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: [...state.mergedPrivileges, ...newPrivileges], + isError: isError, + errorMessage: errorMessage, + })); +};