diff --git a/package.json b/package.json index 4a5947e..ff88fc5 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/api/privilegies.ts b/src/api/privilegies.ts index 3223fc0..1382406 100644 --- a/src/api/privilegies.ts +++ b/src/api/privilegies.ts @@ -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 ): Promise<[unknown, string?]> => { try { - const putedPrivilegie = await makeRequest< + const putedPrivilege = await makeRequest< Omit, 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( + const privilegesResponse = await makeRequest( { url: baseUrl + "/privilege", method: "get", @@ -83,7 +83,7 @@ export const requestPrivilegies = async ( } ); - return [privilegiesResponse]; + return [privilegesResponse]; } catch (nativeError) { const [error] = parseAxiosError(nativeError); diff --git a/src/api/tariffs.ts b/src/api/tariffs.ts index 86a566f..d8031fa 100644 --- a/src/api/tariffs.ts +++ b/src/api/tariffs.ts @@ -10,7 +10,7 @@ type CreateTariffBackendRequest = { name: string; price: number; isCustom: boolean; - privilegies: Omit[]; + privileges: Omit[]; }; 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, }, }); diff --git a/src/kitUI/Cart/Cart.tsx b/src/kitUI/Cart/Cart.tsx index b947388..fc3fc52 100644 --- a/src/kitUI/Cart/Cart.tsx +++ b/src/kitUI/Cart/Cart.tsx @@ -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)); diff --git a/src/model/tariff.ts b/src/model/tariff.ts index 950b7b6..0d6376d 100644 --- a/src/model/tariff.ts +++ b/src/model/tariff.ts @@ -23,5 +23,5 @@ export type EditTariffRequestBody = { name: string; price: number; isCustom: boolean; - privilegies: Omit[]; + privileges: Omit[]; }; diff --git a/src/pages/Setting/CardPrivilegie.tsx b/src/pages/Setting/CardPrivilegie.tsx index a8bb03b..4e72417 100644 --- a/src/pages/Setting/CardPrivilegie.tsx +++ b/src/pages/Setting/CardPrivilegie.tsx @@ -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(false); const [inputValue, setInputValue] = useState(""); const priceRef = useRef(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, @@ -29,11 +29,11 @@ export const СardPrivilegie = ({ privilege }: CardPrivilegie) => { amount: 1, type: privilege.type, value: privilege.value, - price: Number(inputValue), + 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); } }; @@ -85,20 +85,10 @@ export const СardPrivilegie = ({ privilege }: CardPrivilegie) => { }, }} placement="top" - title={ - - {privilege.description} - - } + title={{privilege.description}} > - + { - + {inputOpen ? ( { /> ) : (
- price: {privilege.price} + price: {privilege.price / 100}
)} - - {translationType[privilege.type]} - + {translationType[privilege.type]}
); diff --git a/src/pages/Setting/ListPrivilegie.tsx b/src/pages/Setting/ListPrivilegie.tsx index 59cd472..62618a6 100644 --- a/src/pages/Setting/ListPrivilegie.tsx +++ b/src/pages/Setting/ListPrivilegie.tsx @@ -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} /> diff --git a/src/pages/Setting/PrivilegiesWrapper.tsx b/src/pages/Setting/PrivilegiesWrapper.tsx index 44b0a4d..6926678 100644 --- a/src/pages/Setting/PrivilegiesWrapper.tsx +++ b/src/pages/Setting/PrivilegiesWrapper.tsx @@ -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) => )} - {isExpanded && } + {isExpanded && } ); diff --git a/src/pages/Setting/SettingRoles.tsx b/src/pages/Setting/SettingRoles.tsx index 6b230d6..5937b40 100644 --- a/src/pages/Setting/SettingRoles.tsx +++ b/src/pages/Setting/SettingRoles.tsx @@ -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 => { } /> - + ); }; diff --git a/src/pages/dashboard/Content/ServiceUsersDG.tsx b/src/pages/dashboard/Content/ServiceUsersDG.tsx index 1df394d..9f0c9cd 100644 --- a/src/pages/dashboard/Content/ServiceUsersDG.tsx +++ b/src/pages/dashboard/Content/ServiceUsersDG.tsx @@ -7,40 +7,69 @@ import DataGrid from "@kitUI/datagrid"; import type { UserType } from "@root/api/roles"; const columns: GridColDef[] = [ - { field: "login", headerName: "Логин", width: 200, valueGetter: ({ row }) => row.login, }, - { field: "email", headerName: "E-mail", width: 200, valueGetter: ({ row }) => row.email, }, - { field: "phoneNumber", headerName: "Номер телефона", width: 200, valueGetter: ({ row }) => row.phoneNumber, }, - { field: "isDeleted", headerName: "Удалено", width: 100, valueGetter: ({ row }) => `${row.isDeleted ? "true" : "false"}`, }, - { field: "createdAt", headerName: "Дата создания", width: 200, valueGetter: ({ row }) => row.createdAt, }, + { + field: "login", + headerName: "Логин", + width: 200, + valueGetter: ({ row }) => row.login, + }, + { + field: "email", + headerName: "E-mail", + width: 200, + valueGetter: ({ row }) => row.email, + }, + { + field: "phoneNumber", + headerName: "Номер телефона", + width: 200, + valueGetter: ({ row }) => row.phoneNumber, + }, + { + field: "isDeleted", + headerName: "Удалено", + width: 100, + valueGetter: ({ row }) => `${row.isDeleted ? "true" : "false"}`, + }, + { + field: "createdAt", + headerName: "Дата создания", + width: 200, + valueGetter: ({ row }) => row.createdAt, + }, ]; interface Props { - handleSelectionChange: (selectionModel: GridSelectionModel) => void; - users: UserType[]; + handleSelectionChange: (selectionModel: GridSelectionModel) => void; + users: UserType[]; } export default function ServiceUsersDG({ - handleSelectionChange, - users = [], + handleSelectionChange, + users = [], }: Props) { - const navigate = useNavigate(); + const navigate = useNavigate(); - return ( - <> - {users.length ? ( - users._id} - checkboxSelection={true} - rows={users} - columns={columns} - components={{ Toolbar: GridToolbar }} - onSelectionModelChange={handleSelectionChange} - onRowClick={({ row }) => navigate(row._id)} - /> - ) : ( - Loading... - )} - - ); + return ( + <> + {users.length ? ( + users._id} + checkboxSelection={true} + rows={users} + columns={columns} + components={{ Toolbar: GridToolbar }} + onSelectionModelChange={handleSelectionChange} + onCellClick={({ row }, event) => { + event.stopPropagation(); + + navigate(row._id); + }} + /> + ) : ( + Loading... + )} + + ); } diff --git a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx index 7c26f2f..7bbfb17 100644 --- a/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx +++ b/src/pages/dashboard/Content/Tariffs/CreateTariff.tsx @@ -59,7 +59,7 @@ export default function CreateTariff() { name: nameField, price: Number(customPriceField) * 100, isCustom: false, - privilegies: [ + privileges: [ { name: privilege.name, privilegeId: privilege.privilegeId ?? "", diff --git a/src/pages/dashboard/Content/Tariffs/EditModal.tsx b/src/pages/dashboard/Content/Tariffs/EditModal.tsx index d27a079..c167f26 100644 --- a/src/pages/dashboard/Content/Tariffs/EditModal.tsx +++ b/src/pages/dashboard/Content/Tariffs/EditModal.tsx @@ -93,7 +93,7 @@ export default function EditModal() { sx={{ marginBottom: "10px" }} /> - Цена за единицу: {tariff.privilegies[0].price} + Цена за единицу: {tariff.privileges[0].price} - + diff --git a/src/pages/dashboard/Content/Tariffs/index.tsx b/src/pages/dashboard/Content/Tariffs/index.tsx index 7fcea6b..b5a40e8 100644 --- a/src/pages/dashboard/Content/Tariffs/index.tsx +++ b/src/pages/dashboard/Content/Tariffs/index.tsx @@ -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 ( diff --git a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx index 9639d0a..59404c8 100644 --- a/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx +++ b/src/pages/dashboard/Content/Tariffs/tariffsDG.tsx @@ -27,11 +27,11 @@ const columns: GridColDef[] = [ }, }, { 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) }, { diff --git a/src/pages/dashboard/Content/Users.tsx b/src/pages/dashboard/Content/Users.tsx index c96d41d..7fd8010 100644 --- a/src/pages/dashboard/Content/Users.tsx +++ b/src/pages/dashboard/Content/Users.tsx @@ -19,7 +19,6 @@ import { } from "@mui/material"; import { GridSelectionModel } from "@mui/x-data-grid"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import ClearIcon from "@mui/icons-material/Clear"; import ConditionalRender from "@root/pages/Setting/ConditionalRender"; import ModalUser from "@root/pages/dashboard/ModalUser"; @@ -37,12 +36,6 @@ const Users: React.FC = () => { const radioboxes = ["admin", "manager", "user"]; const [selectedValue, setSelectedValue] = React.useState("admin"); - const handleChange = (event: React.ChangeEvent) => { - setSelectedValue(event.target.value); - - if (selectedValue === "manager") { - } - }; const navigate = useNavigate(); @@ -51,30 +44,25 @@ const Users: React.FC = () => { const handleChangeData = () => { getRoles_mock().then((mockdata) => { setData(mockdata); + setAccordionText(mockdata[0].desc || ""); }); }; - const [accordionHeader, setAccordionHeader] = React.useState("none"); const [accordionState, setAccordionState] = React.useState(true); const [accordionText, setAccordionText] = React.useState(""); - const handleChangeAccordion = (text: string) => { - if (text == "") { - setAccordionState(true); - setAccordionHeader("none"); - } else { - handleToggleAccordion(); - setAccordionHeader("flex"); - } - accordionState ? setAccordionText(text) : setAccordionText(""); + const handleChange = (value: string) => { + setSelectedValue(value); + setAccordionText(data.find(({ name }) => name === value)?.desc || ""); + + if (selectedValue === "manager") { + } }; const handleToggleAccordion = () => { setAccordionState(!accordionState); }; - handleChangeData(); - const [roles, setRoles] = React.useState([]); const [users, setUsers] = React.useState([]); const [manager, setManager] = React.useState([]); @@ -83,6 +71,10 @@ const Users: React.FC = () => { const { userId } = useParams(); + useEffect(() => { + handleChangeData(); + }, []); + useEffect(() => { if (userId) { setActiveUserId(userId); @@ -115,9 +107,7 @@ const Users: React.FC = () => { }); }, [selectedValue]); - const [selectedTariffs, setSelectedTariffs] = useState( - [] - ); + const [selectedTariffs, setSelectedTariffs] = useState([]); return (