privilegies на privileges

This commit is contained in:
Nastya 2023-09-16 21:02:01 +03:00
parent a7664bd3cd
commit aa2e3bf134
21 changed files with 78 additions and 78 deletions

@ -6,7 +6,7 @@
"@date-io/dayjs": "^2.15.0",
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@frontend/kitui": "^1.0.44",
"@frontend/kitui": "^1.0.52",
"@material-ui/pickers": "^3.3.10",
"@mui/icons-material": "^5.10.3",
"@mui/material": "^5.10.5",

@ -5,7 +5,7 @@ import { parseAxiosError } from "@root/utils/parse-error";
import { PrivilegeWithAmount } from "@frontend/kitui";
import type { TMockData } from "./roles";
type SeverPrivilegiesResponse = {
type SeverPrivilegesResponse = {
templategen: PrivilegeWithAmount[];
};
@ -29,11 +29,11 @@ export const getRoles = async (): Promise<[TMockData | null, string?]> => {
}
};
export const putPrivilegie = async (
export const putPrivilege = async (
body: Omit<PrivilegeWithAmount, "_id" | "updatedAt">
): Promise<[unknown, string?]> => {
try {
const putedPrivilegie = await makeRequest<
const putedPrivilege = await makeRequest<
Omit<PrivilegeWithAmount, "_id" | "updatedAt">,
unknown
>({
@ -42,7 +42,7 @@ export const putPrivilegie = async (
body,
});
return [putedPrivilegie];
return [putedPrivilege];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
@ -50,19 +50,19 @@ export const putPrivilegie = async (
}
};
export const requestServicePrivilegies = async (): Promise<
[SeverPrivilegiesResponse | null, string?]
export const requestServicePrivileges = async (): Promise<
[SeverPrivilegesResponse | null, string?]
> => {
try {
const privilegiesResponse = await makeRequest<
const privilegesResponse = await makeRequest<
never,
SeverPrivilegiesResponse
SeverPrivilegesResponse
>({
url: baseUrl + "/privilege/service",
method: "get",
});
return [privilegiesResponse];
return [privilegesResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
@ -70,11 +70,11 @@ export const requestServicePrivilegies = async (): Promise<
}
};
export const requestPrivilegies = async (
export const requestPrivileges = async (
signal: AbortSignal | undefined
): Promise<[PrivilegeWithAmount[], string?]> => {
try {
const privilegiesResponse = await makeRequest<never, PrivilegeWithAmount[]>(
const privilegesResponse = await makeRequest<never, PrivilegeWithAmount[]>(
{
url: baseUrl + "/privilege",
method: "get",
@ -83,7 +83,7 @@ export const requestPrivilegies = async (
}
);
return [privilegiesResponse];
return [privilegesResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);

@ -10,7 +10,7 @@ type CreateTariffBackendRequest = {
name: string;
price: number;
isCustom: boolean;
privilegies: Omit<PrivilegeWithAmount, "_id" | "updatedAt">[];
privileges: Omit<PrivilegeWithAmount, "_id" | "updatedAt">[];
};
type GetTariffsResponse = {
@ -54,7 +54,7 @@ export const putTariff = async (tariff: Tariff): Promise<[null, string?]> => {
name: tariff.name,
price: tariff.price ?? 0,
isCustom: false,
privilegies: tariff.privilegies,
privileges: tariff.privileges,
},
});

@ -18,7 +18,7 @@ import { useState } from "react";
import { setCartData, useCartStore } from "@root/stores/cart";
import { useTariffStore } from "@root/stores/tariffs";
import { useDiscountStore } from "@root/stores/discounts";
import { requestPrivilegies } from "@root/services/privilegies.service";
import { requestPrivileges } from "@root/services/privilegies.service";
import { requestDiscounts } from "@root/services/discounts.service";
import { DiscountTooltip } from "./DiscountTooltip";
import CartItemRow from "./CartItemRow";
@ -43,7 +43,7 @@ export default function Cart() {
const cartDiscountsResultFactor = findDiscountFactor(cartData?.appliedCartPurchasesDiscount) * findDiscountFactor(cartData?.appliedLoyaltyDiscount);
async function handleCalcCartClick() {
await requestPrivilegies();
await requestPrivileges();
await requestDiscounts();
const cartTariffs = tariffs.filter(tariff => selectedTariffIds.includes(tariff._id));

@ -23,5 +23,5 @@ export type EditTariffRequestBody = {
name: string;
price: number;
isCustom: boolean;
privilegies: Omit<PrivilegeWithAmount, "_id" | "updatedAt">[];
privileges: Omit<PrivilegeWithAmount, "_id" | "updatedAt">[];
};

@ -3,13 +3,13 @@ import { enqueueSnackbar } from "notistack";
import { Box, IconButton, TextField, Tooltip, Typography } from "@mui/material";
import ModeEditOutlineOutlinedIcon from "@mui/icons-material/ModeEditOutlineOutlined";
import { PrivilegeWithAmount } from "@frontend/kitui";
import { putPrivilegie } from "@root/api/privilegies";
import { putPrivilege } from "@root/api/privilegies";
interface CardPrivilegie {
interface CardPrivilege {
privilege: PrivilegeWithAmount;
}
export const СardPrivilegie = ({ privilege }: CardPrivilegie) => {
export const СardPrivilege = ({ privilege }: CardPrivilege) => {
const [inputOpen, setInputOpen] = useState<boolean>(false);
const [inputValue, setInputValue] = useState<string>("");
const priceRef = useRef<HTMLDivElement>(null);
@ -20,8 +20,8 @@ export const СardPrivilegie = ({ privilege }: CardPrivilegie) => {
mb: "за МБ",
};
const putPrivilegies = async () => {
const [_, putedPrivilegieError] = await putPrivilegie({
const putPrivileges = async () => {
const [_, putedPrivilegeError] = await putPrivilege({
name: privilege.name,
privilegeId: privilege.privilegeId,
serviceKey: privilege.serviceKey,
@ -32,8 +32,8 @@ export const СardPrivilegie = ({ privilege }: CardPrivilegie) => {
price: 100 * Number(inputValue),
});
if (putedPrivilegieError) {
return enqueueSnackbar(putedPrivilegieError);
if (putedPrivilegeError) {
return enqueueSnackbar(putedPrivilegeError);
}
if (!priceRef.current) {
@ -50,7 +50,7 @@ export const СardPrivilegie = ({ privilege }: CardPrivilegie) => {
return setInputOpen(false);
}
if (event.key === "Enter" && inputValue !== "") {
putPrivilegies();
putPrivileges();
setInputOpen(false);
}
};

@ -1,21 +1,21 @@
import { useEffect } from "react";
import { usePrivilegeStore } from "@root/stores/privilegesStore";
import { requestPrivilegies } from "@root/services/privilegies.service";
import { requestPrivileges } from "@root/services/privilegies.service";
import { СardPrivilegie } from "./CardPrivilegie";
import { СardPrivilege } from "./CardPrivilegie";
export default function ListPrivilegie() {
export default function ListPrivilege() {
const privileges = usePrivilegeStore((state) => state.privileges);
useEffect(() => {
requestPrivilegies();
requestPrivileges();
}, []);
return (
<>
{privileges.map(privilege => (
<СardPrivilegie
<СardPrivilege
key={privilege._id}
privilege={privilege}
/>

@ -2,7 +2,7 @@ import { useState } from "react";
import { Box, SxProps, Theme, Typography, useMediaQuery, useTheme } from "@mui/material";
import ListPrivilegie from "./ListPrivilegie";
import ListPrivilege from "./ListPrivilegie";
interface CustomWrapperProps {
text: string;
@ -10,7 +10,7 @@ interface CustomWrapperProps {
result?: boolean;
}
export const PrivilegiesWrapper = ({ text, sx, result }: CustomWrapperProps) => {
export const PrivilegesWrapper = ({ text, sx, result }: CustomWrapperProps) => {
const theme = useTheme();
const upMd = useMediaQuery(theme.breakpoints.up("md"));
const upSm = useMediaQuery(theme.breakpoints.up("sm"));
@ -121,7 +121,7 @@ export const PrivilegiesWrapper = ({ text, sx, result }: CustomWrapperProps) =>
)}
</Box>
</Box>
{isExpanded && <ListPrivilegie />}
{isExpanded && <ListPrivilege />}
</Box>
</Box>
);

@ -4,7 +4,7 @@ import { CustomWrapper } from "@root/kitUI/CustomWrapper";
import FormDeleteRoles from "./FormDeleteRoles";
import FormCreateRoles from "./FormCreateRoles";
import { PrivilegiesWrapper } from "./PrivilegiesWrapper";
import { PrivilegesWrapper } from "./PrivilegiesWrapper";
import theme from "../../theme";
@ -110,7 +110,7 @@ export const SettingRoles = (): JSX.Element => {
}
/>
<PrivilegiesWrapper text="Привилегии" sx={{ mt: "50px" }} />
<PrivilegesWrapper text="Привилегии" sx={{ mt: "50px" }} />
</AccordionDetails>
);
};

@ -59,7 +59,7 @@ export default function CreateTariff() {
name: nameField,
price: Number(customPriceField) * 100,
isCustom: false,
privilegies: [
privileges: [
{
name: privilege.name,
privilegeId: privilege.privilegeId ?? "",

@ -93,7 +93,7 @@ export default function EditModal() {
sx={{ marginBottom: "10px" }}
/>
<Typography>
Цена за единицу: {tariff.privilegies[0].price}
Цена за единицу: {tariff.privileges[0].price}
</Typography>
<TextField
type="number"

@ -3,7 +3,7 @@ import DataGrid from "@kitUI/datagrid";
import { Tooltip, IconButton } from "@mui/material";
import { usePrivilegeStore } from "@root/stores/privilegesStore";
import AutorenewIcon from "@mui/icons-material/Autorenew";
import { requestPrivilegies } from "@root/services/privilegies.service";
import { requestPrivileges } from "@root/services/privilegies.service";
const columns: GridColDef[] = [
{ field: "id", headerName: "id", width: 150 },
@ -28,7 +28,7 @@ export default function Privileges() {
return (
<>
<Tooltip title="обновить список привилегий">
<IconButton onClick={requestPrivilegies}>
<IconButton onClick={requestPrivileges}>
<AutorenewIcon sx={{ color: "white" }} />
</IconButton>
</Tooltip>

@ -2,7 +2,7 @@ import { useEffect } from "react";
import { Container, Typography } from "@mui/material";
import { requestTariffs } from "@root/services/tariffs.service";
import { requestPrivilegies } from "@root/services/privilegies.service";
import { requestPrivileges } from "@root/services/privilegies.service";
import CreateTariff from "./CreateTariff";
import Privileges from "./Privileges/Privileges";
@ -12,7 +12,7 @@ import TariffsInfo from "./TariffsInfo";
export default function Tariffs() {
useEffect(() => {
requestTariffs();
requestPrivilegies();
requestPrivileges();
}, []);
return (

@ -27,11 +27,11 @@ const columns: GridColDef<Tariff, string | number>[] = [
},
},
{ field: "name", headerName: "Название тарифа", width: 150, valueGetter: ({ row }) => row.name },
{ field: "amount", headerName: "Количество", width: 110, valueGetter: ({ row }) => row.privilegies[0].amount },
{ field: "serviceName", headerName: "Сервис", width: 150, valueGetter: ({ row }) => row.privilegies[0].serviceKey },
{ field: "privilegeName", headerName: "Привилегия", width: 150, valueGetter: ({ row }) => row.privilegies[0].name },
{ field: "type", headerName: "Единица", width: 100, valueGetter: ({ row }) => row.privilegies[0].type },
{ field: "pricePerUnit", headerName: "Цена за ед.", width: 100, valueGetter: ({ row }) => row.privilegies[0].price },
{ field: "amount", headerName: "Количество", width: 110, valueGetter: ({ row }) => row.privileges[0].amount },
{ field: "serviceName", headerName: "Сервис", width: 150, valueGetter: ({ row }) => row.privileges[0].serviceKey },
{ field: "privilegeName", headerName: "Привилегия", width: 150, valueGetter: ({ row }) => row.privileges[0].name },
{ field: "type", headerName: "Единица", width: 100, valueGetter: ({ row }) => row.privileges[0].type },
{ field: "pricePerUnit", headerName: "Цена за ед.", width: 100, valueGetter: ({ row }) => row.privileges[0].price },
{ field: "isCustom", headerName: "Кастомная цена", width: 130, valueGetter: ({ row }) => row.isCustom ? "Да" : "Нет" },
{ field: "total", headerName: "Сумма", width: 60, valueGetter: ({ row }) => getTariffPrice(row) },
{

@ -80,7 +80,7 @@ export const UserTab = ({ userId }: UserTabProps) => {
Внутренний кошелек
</Typography>
<Typography sx={{ lineHeight: "20px", fontWeight: "bold" }}>
{`${account?.wallet.money || 0} ${
{`${account ? account.wallet.money / 100 : 0} ${
account?.wallet.currency || "RUB"
}.`}
</Typography>

@ -1,14 +1,14 @@
import { resetPrivilegeArray } from "@root/stores/privilegesStore";
import { exampleCartValues } from "@stores/mocks/exampleCartValues";
import { requestServicePrivilegies } from "@root/api/privilegies";
import { requestServicePrivileges } from "@root/api/privilegies";
import type { PrivilegeWithAmount } from "@frontend/kitui";
const mutatePrivilegies = (privilegies: PrivilegeWithAmount[]) => {
const mutatePrivileges = (privileges: PrivilegeWithAmount[]) => {
let extracted: PrivilegeWithAmount[] = [];
for (let serviceKey in privilegies) {
for (let serviceKey in privileges) {
//Приходит объект. В его значениях массивы привилегий для разных сервисов. Высыпаем в общую кучу и обновляем стор
extracted = extracted.concat(privilegies[serviceKey]);
extracted = extracted.concat(privileges[serviceKey]);
}
let readyArray = extracted.map((privilege) => ({
@ -25,15 +25,15 @@ const mutatePrivilegies = (privilegies: PrivilegeWithAmount[]) => {
resetPrivilegeArray([...readyArray, ...exampleCartValues.privileges]);
};
export const requestPrivilegies = async () => {
const [privilegiesResponse, privilegiesError] =
await requestServicePrivilegies();
export const requestPrivileges = async () => {
const [privilegesResponse, privilegesError] =
await requestServicePrivileges();
if (privilegiesError) {
return console.error(privilegiesError);
if (privilegesError) {
return console.error(privilegesError);
}
if (privilegiesResponse) {
mutatePrivilegies(privilegiesResponse.templategen);
if (privilegesResponse) {
mutatePrivileges(privilegesResponse.templategen);
}
};

@ -811,7 +811,7 @@ const templategenTariff1: Tariff = {
name: "templategenTariff1",
price: 0,
isCustom: false,
privilegies: [
privileges: [
{
_id: "p1",
name: "n1",
@ -834,7 +834,7 @@ const templategenTariff2: Tariff = {
name: "templategenTariff2",
price: 0,
isCustom: false,
privilegies: [
privileges: [
{
_id: "p5",
name: "n5",
@ -857,7 +857,7 @@ const customTemplategenTariff: Tariff = {
name: "templategenTariff3",
price: 0,
isCustom: true,
privilegies: [
privileges: [
{
_id: "p1",
name: "n1",
@ -880,7 +880,7 @@ const squizTariff: Tariff = {
name: "squizTariff",
price: 0,
isCustom: false,
privilegies: [
privileges: [
{
_id: "p2",
name: "n2",
@ -903,7 +903,7 @@ const reducerTariff: Tariff = {
name: "reducerTariff",
price: 0,
isCustom: false,
privilegies: [
privileges: [
{
_id: "p3",
name: "n3",

@ -20,10 +20,10 @@ export function calcCart(
const serviceTariffType: Record<string, number> = {};
tariffs.forEach(tariff => {
let serviceData = cartData.services.find(service => service.serviceKey === tariff.privilegies[0].serviceKey);
let serviceData = cartData.services.find(service => service.serviceKey === tariff.privileges[0].serviceKey);
if (!serviceData) {
serviceData = {
serviceKey: tariff.privilegies[0].serviceKey,
serviceKey: tariff.privileges[0].serviceKey,
tariffs: [],
price: 0,
appliedServiceDiscount: null,
@ -40,7 +40,7 @@ export function calcCart(
};
serviceData.tariffs.push(tariffCartData);
tariff.privilegies.forEach(privilege => {
tariff.privileges.forEach(privilege => {
serviceTariffType[privilege.serviceKey] ??= +tariff.isCustom;
const isIncompatibleTariffs = serviceTariffType[privilege.serviceKey] ^ +tariff.isCustom;
if (isIncompatibleTariffs) throw new Error("Если взят готовый тариф, то кастомный на этот сервис сделать уже нельзя");

@ -1,6 +1,6 @@
import { useEffect } from "react";
import { requestPrivilegies } from "@root/api/privilegies";
import { requestPrivileges } from "@root/api/privilegies";
import type { PrivilegeWithAmount } from "@frontend/kitui";
@ -14,13 +14,13 @@ export default function usePrivileges({
useEffect(() => {
const controller = new AbortController();
requestPrivilegies(controller.signal).then(
([privilegiesResponse, privilegiesError]) => {
if (privilegiesError) {
return onError?.(privilegiesError);
requestPrivileges(controller.signal).then(
([privilegesResponse, privilegesError]) => {
if (privilegesError) {
return onError?.(privilegesError);
}
onNewPrivileges(privilegiesResponse);
onNewPrivileges(privilegesResponse);
}
);

@ -1,5 +1,5 @@
import { Tariff } from "@frontend/kitui";
export function getTariffPrice(tariff: Tariff) {
return tariff.price || tariff.privilegies.reduce((sum, privilege) => sum + privilege.amount * privilege.price, 0);
return tariff.price || tariff.privileges.reduce((sum, privilege) => sum + privilege.amount * privilege.price, 0);
}

@ -1433,10 +1433,10 @@
lodash.isundefined "^3.0.1"
lodash.uniq "^4.5.0"
"@frontend/kitui@^1.0.44":
version "1.0.44"
resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.44.tgz#7a6e48e37294b6cc283e22fa0fe6ee4903a843aa"
integrity sha1-em5I43KUtswoPiL6D+buSQOoQ6o=
"@frontend/kitui@^1.0.52":
version "1.0.52"
resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.52.tgz#3b1c28f889da80ab325ab2b511108632fa925f1c"
integrity sha1-Oxwo+InagKsyWrK1ERCGMvqSXxw=
dependencies:
immer "^10.0.2"
reconnecting-eventsource "^1.6.2"