89 lines
2.5 KiB
TypeScript
89 lines
2.5 KiB
TypeScript
import { useState, useEffect } from "react";
|
||
import { authStore } from "@root/stores/auth";
|
||
|
||
import { resetPrivilegeArray } from "@root/stores/privilegesStore";
|
||
import { exampleCartValues } from "@stores/mocks/exampleCartValues";
|
||
|
||
import type { RealPrivilege } from "@root/model/privilege";
|
||
|
||
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 SeverPrivilegiesResponse = {
|
||
templategen: RealPrivilege[];
|
||
};
|
||
|
||
type UsePrivilegies = {
|
||
requestPrivilegies: () => Promise<void>;
|
||
isError: boolean;
|
||
isLoading: boolean;
|
||
errorMessage: string;
|
||
};
|
||
|
||
const baseUrl =
|
||
process.env.NODE_ENV === "production"
|
||
? "/strator"
|
||
: "https://admin.pena.digital/strator";
|
||
|
||
export const usePrivilegies = (): UsePrivilegies => {
|
||
const [privilegies, setPrivilegies] = useState<RealPrivilege[]>([]);
|
||
const [isLoading, setIsLoading] = useState(false);
|
||
const [isError, setIsError] = useState(false);
|
||
const [errorMessage, setErrorMessage] = useState("");
|
||
const { makeRequest } = authStore.getState();
|
||
|
||
useEffect(() => {
|
||
let extracted: RealPrivilege[] = [];
|
||
for (let serviceKey in privilegies) {
|
||
//Приходит объект. В его значениях массивы привилегий для разных сервисов. Высыпаем в общую кучу и обновляем стор
|
||
extracted = extracted.concat(privilegies[serviceKey]);
|
||
}
|
||
|
||
let readyArray = extracted.map((privilege) => ({
|
||
serviceKey: privilege.serviceKey,
|
||
privilegeId: privilege.privilegeId,
|
||
name: privilege.name,
|
||
description: privilege.description,
|
||
type: privilege.type,
|
||
price: privilege.price,
|
||
value: privilege.value,
|
||
id: privilege._id,
|
||
}));
|
||
|
||
resetPrivilegeArray([...readyArray, ...exampleCartValues.privileges]);
|
||
}, [privilegies]);
|
||
|
||
const requestPrivilegies = async () => {
|
||
setIsLoading(true);
|
||
|
||
await makeRequest<never, SeverPrivilegiesResponse>({
|
||
url: baseUrl + "/privilege/service",
|
||
method: "get",
|
||
})
|
||
.then(({ templategen }) => setPrivilegies(templategen))
|
||
.catch(() => {
|
||
setIsError(true);
|
||
setErrorMessage("Ошибка при получении привилегий");
|
||
})
|
||
.finally(() => setIsLoading(false));
|
||
};
|
||
|
||
return {
|
||
requestPrivilegies,
|
||
isError,
|
||
isLoading,
|
||
errorMessage,
|
||
};
|
||
};
|