privilegies на privileges
This commit is contained in:
parent
a7664bd3cd
commit
aa2e3bf134
@ -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"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user