feat: shipping warehouse page
This commit is contained in:
4
.env
4
.env
@@ -1,3 +1,3 @@
|
||||
VITE_BOT_NAME=DencoFulfillmentTestBot
|
||||
VITE_BOT_ID=6467915685
|
||||
VITE_BOT_NAME=DencoCrmTestBot
|
||||
VITE_BOT_ID=7510759553
|
||||
VITE_API_URL=http://test.crm.denco.store/api
|
||||
@@ -24,6 +24,7 @@ export type { BarcodeTemplateUpdateResponse } from './models/BarcodeTemplateUpda
|
||||
export type { BaseEnumListSchema } from './models/BaseEnumListSchema';
|
||||
export type { BaseEnumSchema } from './models/BaseEnumSchema';
|
||||
export type { BaseMarketplaceSchema } from './models/BaseMarketplaceSchema';
|
||||
export type { BaseShippingWarehouseSchema } from './models/BaseShippingWarehouseSchema';
|
||||
export type { BillPaymentStatus } from './models/BillPaymentStatus';
|
||||
export type { BillStatusUpdateRequest } from './models/BillStatusUpdateRequest';
|
||||
export type { Body_upload_product_image } from './models/Body_upload_product_image';
|
||||
@@ -52,6 +53,8 @@ export type { CreatePositionResponse } from './models/CreatePositionResponse';
|
||||
export type { CreateServiceKitSchema } from './models/CreateServiceKitSchema';
|
||||
export type { CreateServicesKitRequest } from './models/CreateServicesKitRequest';
|
||||
export type { CreateServicesKitResponse } from './models/CreateServicesKitResponse';
|
||||
export type { CreateShippingWarehouseRequest } from './models/CreateShippingWarehouseRequest';
|
||||
export type { CreateShippingWarehouseResponse } from './models/CreateShippingWarehouseResponse';
|
||||
export type { CreateUserRequest } from './models/CreateUserRequest';
|
||||
export type { CreateUserResponse } from './models/CreateUserResponse';
|
||||
export type { DealAddKitRequest } from './models/DealAddKitRequest';
|
||||
@@ -110,6 +113,8 @@ export type { DeletePayRateRequest } from './models/DeletePayRateRequest';
|
||||
export type { DeletePayRateResponse } from './models/DeletePayRateResponse';
|
||||
export type { DeletePositionRequest } from './models/DeletePositionRequest';
|
||||
export type { DeletePositionResponse } from './models/DeletePositionResponse';
|
||||
export type { DeleteShippingWarehouseRequest } from './models/DeleteShippingWarehouseRequest';
|
||||
export type { DeleteShippingWarehouseResponse } from './models/DeleteShippingWarehouseResponse';
|
||||
export type { GetAllBarcodeTemplateAttributesResponse } from './models/GetAllBarcodeTemplateAttributesResponse';
|
||||
export type { GetAllBarcodeTemplateSizesResponse } from './models/GetAllBarcodeTemplateSizesResponse';
|
||||
export type { GetAllBarcodeTemplatesResponse } from './models/GetAllBarcodeTemplatesResponse';
|
||||
@@ -179,6 +184,8 @@ export type { UpdatePayRateResponse } from './models/UpdatePayRateResponse';
|
||||
export type { UpdateServiceKitSchema } from './models/UpdateServiceKitSchema';
|
||||
export type { UpdateServicesKitRequest } from './models/UpdateServicesKitRequest';
|
||||
export type { UpdateServicesKitResponse } from './models/UpdateServicesKitResponse';
|
||||
export type { UpdateShippingWarehouseRequest } from './models/UpdateShippingWarehouseRequest';
|
||||
export type { UpdateShippingWarehouseResponse } from './models/UpdateShippingWarehouseResponse';
|
||||
export type { UpdateTimeTrackingRecordRequest } from './models/UpdateTimeTrackingRecordRequest';
|
||||
export type { UpdateTimeTrackingRecordResponse } from './models/UpdateTimeTrackingRecordResponse';
|
||||
export type { UpdateUserRequest } from './models/UpdateUserRequest';
|
||||
|
||||
8
src/client/models/BaseShippingWarehouseSchema.ts
Normal file
8
src/client/models/BaseShippingWarehouseSchema.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type BaseShippingWarehouseSchema = {
|
||||
name: string;
|
||||
};
|
||||
|
||||
9
src/client/models/CreateShippingWarehouseRequest.ts
Normal file
9
src/client/models/CreateShippingWarehouseRequest.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import type { BaseShippingWarehouseSchema } from './BaseShippingWarehouseSchema';
|
||||
export type CreateShippingWarehouseRequest = {
|
||||
shippingWarehouse: BaseShippingWarehouseSchema;
|
||||
};
|
||||
|
||||
9
src/client/models/CreateShippingWarehouseResponse.ts
Normal file
9
src/client/models/CreateShippingWarehouseResponse.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type CreateShippingWarehouseResponse = {
|
||||
ok: boolean;
|
||||
message: string;
|
||||
};
|
||||
|
||||
@@ -14,5 +14,6 @@ export type DealSummary = {
|
||||
totalPrice: number;
|
||||
rank: number;
|
||||
baseMarketplace?: (BaseMarketplaceSchema | null);
|
||||
shipmentWarehouseId: (number | null);
|
||||
};
|
||||
|
||||
|
||||
8
src/client/models/DeleteShippingWarehouseRequest.ts
Normal file
8
src/client/models/DeleteShippingWarehouseRequest.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type DeleteShippingWarehouseRequest = {
|
||||
shippingWarehouseId: number;
|
||||
};
|
||||
|
||||
9
src/client/models/DeleteShippingWarehouseResponse.ts
Normal file
9
src/client/models/DeleteShippingWarehouseResponse.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type DeleteShippingWarehouseResponse = {
|
||||
ok: boolean;
|
||||
message: string;
|
||||
};
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type ShippingWarehouseSchema = {
|
||||
id: number;
|
||||
name: string;
|
||||
id: number;
|
||||
};
|
||||
|
||||
|
||||
9
src/client/models/UpdateShippingWarehouseRequest.ts
Normal file
9
src/client/models/UpdateShippingWarehouseRequest.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import type { ShippingWarehouseSchema } from './ShippingWarehouseSchema';
|
||||
export type UpdateShippingWarehouseRequest = {
|
||||
shippingWarehouse: ShippingWarehouseSchema;
|
||||
};
|
||||
|
||||
9
src/client/models/UpdateShippingWarehouseResponse.ts
Normal file
9
src/client/models/UpdateShippingWarehouseResponse.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type UpdateShippingWarehouseResponse = {
|
||||
ok: boolean;
|
||||
message: string;
|
||||
};
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import type { CreateShippingWarehouseRequest } from '../models/CreateShippingWarehouseRequest';
|
||||
import type { CreateShippingWarehouseResponse } from '../models/CreateShippingWarehouseResponse';
|
||||
import type { DeleteShippingWarehouseRequest } from '../models/DeleteShippingWarehouseRequest';
|
||||
import type { DeleteShippingWarehouseResponse } from '../models/DeleteShippingWarehouseResponse';
|
||||
import type { GetAllShippingWarehousesResponse } from '../models/GetAllShippingWarehousesResponse';
|
||||
import type { UpdateShippingWarehouseRequest } from '../models/UpdateShippingWarehouseRequest';
|
||||
import type { UpdateShippingWarehouseResponse } from '../models/UpdateShippingWarehouseResponse';
|
||||
import type { CancelablePromise } from '../core/CancelablePromise';
|
||||
import { OpenAPI } from '../core/OpenAPI';
|
||||
import { request as __request } from '../core/request';
|
||||
@@ -18,4 +24,64 @@ export class ShippingWarehouseService {
|
||||
url: '/shipping-warehouse/get-all',
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Create
|
||||
* @returns CreateShippingWarehouseResponse Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static createShippingWarehouse({
|
||||
requestBody,
|
||||
}: {
|
||||
requestBody: CreateShippingWarehouseRequest,
|
||||
}): CancelablePromise<CreateShippingWarehouseResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/shipping-warehouse/create',
|
||||
body: requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: `Validation Error`,
|
||||
},
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Update
|
||||
* @returns UpdateShippingWarehouseResponse Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static updateShippingWarehouse({
|
||||
requestBody,
|
||||
}: {
|
||||
requestBody: UpdateShippingWarehouseRequest,
|
||||
}): CancelablePromise<UpdateShippingWarehouseResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/shipping-warehouse/update',
|
||||
body: requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: `Validation Error`,
|
||||
},
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Delete
|
||||
* @returns DeleteShippingWarehouseResponse Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static deleteShippingWarehouse({
|
||||
requestBody,
|
||||
}: {
|
||||
requestBody: DeleteShippingWarehouseRequest,
|
||||
}): CancelablePromise<DeleteShippingWarehouseResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/shipping-warehouse/delete',
|
||||
body: requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: `Validation Error`,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {Center, Flex, Image, rem, Stack, Tooltip, UnstyledButton, useMantineColorScheme} from '@mantine/core';
|
||||
import {
|
||||
IconBarcode,
|
||||
IconBox,
|
||||
IconBox, IconBuildingWarehouse,
|
||||
IconCash,
|
||||
IconDashboard,
|
||||
IconFileBarcode,
|
||||
@@ -71,6 +71,11 @@ const mockdata = [
|
||||
icon: IconFileBarcode,
|
||||
label: 'Штрихкоды',
|
||||
href: '/barcode'
|
||||
},
|
||||
{
|
||||
icon: IconBuildingWarehouse,
|
||||
label: 'Склады отгрузки',
|
||||
href: '/shipping_warehouses'
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
20
src/hooks/useCRUD.tsx
Normal file
20
src/hooks/useCRUD.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
type Props<T> = {
|
||||
onCreate: (element: T) => void;
|
||||
onChange: (element: T) => void;
|
||||
onDelete: (element: T) => void;
|
||||
};
|
||||
|
||||
export function useCRUD<T>(props: Props<T>) {
|
||||
const onCreate = (element: T) => {
|
||||
props.onCreate(element);
|
||||
}
|
||||
const onChange = (element: T) => {
|
||||
props.onChange(element);
|
||||
|
||||
}
|
||||
const onDelete = (element: T) => {
|
||||
props.onDelete(element);
|
||||
}
|
||||
|
||||
return {onCreate, onChange, onDelete};
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import CreatePaymentRecordModal from "../pages/AdminPage/modals/CreatePaymentRec
|
||||
import ServiceKitModalForm from "../pages/ServicesPage/modals/ServicesKitModalForm.tsx";
|
||||
import ServicesKitSelectModal from "./ServicesKitSelectModal/ServicesKitSelectModal.tsx";
|
||||
import SelectDealProductsModal from "../pages/LeadsPage/modals/SelectDealProductsModal.tsx";
|
||||
import ShippingWarehouseForm from "../pages/ShippingWarehousesPage/modals/ShippingWarehouseForm.tsx";
|
||||
|
||||
export const modals = {
|
||||
enterDeadline: EnterDeadlineModal,
|
||||
@@ -40,5 +41,6 @@ export const modals = {
|
||||
createPaymentRecord: CreatePaymentRecordModal,
|
||||
serviceKitModalForm: ServiceKitModalForm,
|
||||
servicesKitSelectModal: ServicesKitSelectModal,
|
||||
selectDealProductsModal: SelectDealProductsModal
|
||||
selectDealProductsModal: SelectDealProductsModal,
|
||||
shippingWarehouseForm: ShippingWarehouseForm
|
||||
}
|
||||
|
||||
@@ -8,9 +8,12 @@ import {IconEdit} from "@tabler/icons-react";
|
||||
import {MRT_TableOptions} from "mantine-react-table";
|
||||
import {useDealPageContext} from "../../../LeadsPage/contexts/DealPageContext.tsx";
|
||||
|
||||
type Props = CRUDTableProps<DealSummary>;
|
||||
type RestProps = {
|
||||
viewOnly?: boolean;
|
||||
}
|
||||
type Props = CRUDTableProps<DealSummary> & RestProps;
|
||||
|
||||
const DealsTable: FC<Props> = ({items}) => {
|
||||
const DealsTable: FC<Props> = ({items, viewOnly = true}) => {
|
||||
const columns = useDealsTableColumns();
|
||||
const {setSelectedDeal} = useDealPageContext();
|
||||
const onEditClick = (dealSummary: DealSummary) => {
|
||||
@@ -26,14 +29,15 @@ const DealsTable: FC<Props> = ({items}) => {
|
||||
restProps={{
|
||||
enableSorting: true,
|
||||
enableColumnActions: false,
|
||||
enablePagination: true,
|
||||
enableBottomToolbar: true,
|
||||
enablePagination: !viewOnly,
|
||||
enableBottomToolbar: !viewOnly,
|
||||
paginationDisplayMode: "pages",
|
||||
enableRowActions: true,
|
||||
renderRowActions: ({row}) => (
|
||||
<Flex gap="md">
|
||||
<Tooltip label="Редактировать">
|
||||
<ActionIcon
|
||||
disabled={viewOnly}
|
||||
onClick={() => onEditClick(row.original)}
|
||||
variant={"default"}>
|
||||
<IconEdit/>
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
import {CRUDTableProps} from "../../../../types/CRUDTable.tsx";
|
||||
import {DealSummary, ShippingWarehouseSchema} from "../../../../client";
|
||||
import {FC} from "react";
|
||||
import {BaseTable} from "../../../../components/BaseTable/BaseTable.tsx";
|
||||
import useShippingWarehouseTableColumns from "./columns.tsx";
|
||||
import {ActionIcon, Flex, Text, Tooltip} from "@mantine/core";
|
||||
import {IconEdit, IconTrash} from "@tabler/icons-react";
|
||||
import {MRT_TableOptions} from "mantine-react-table";
|
||||
import {modals} from "@mantine/modals";
|
||||
|
||||
type RestProps = {
|
||||
summaries: DealSummary[];
|
||||
};
|
||||
type Props = CRUDTableProps<ShippingWarehouseSchema> & RestProps;
|
||||
|
||||
const ShippingWarehouseTable: FC<Props> = ({
|
||||
onChange,
|
||||
onDelete,
|
||||
items,
|
||||
summaries
|
||||
}) => {
|
||||
const columns = useShippingWarehouseTableColumns();
|
||||
|
||||
const onEditClick = (element: ShippingWarehouseSchema) => {
|
||||
if (!onChange) return;
|
||||
modals.openContextModal({
|
||||
modal: "shippingWarehouseForm",
|
||||
title: 'Редактирование склада отгрузки',
|
||||
withCloseButton: false,
|
||||
innerProps: {
|
||||
element,
|
||||
onChange,
|
||||
summaries: summaries.filter(s => s.shipmentWarehouseId === element.id).slice(0, 5)
|
||||
},
|
||||
size: "xl"
|
||||
})
|
||||
}
|
||||
const onDeleteClick = (element: ShippingWarehouseSchema) => {
|
||||
if (!onDelete) return;
|
||||
modals.openConfirmModal({
|
||||
title: 'Удаление склада отгрузки',
|
||||
children: (
|
||||
<Text size="sm">
|
||||
Вы уверены что хотите удалить склад отгрузки {element.name}
|
||||
</Text>
|
||||
),
|
||||
labels: {confirm: 'Да', cancel: "Нет"},
|
||||
confirmProps: {color: 'red'},
|
||||
onConfirm: () => {
|
||||
onDelete(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
return (
|
||||
<BaseTable
|
||||
data={items}
|
||||
columns={columns}
|
||||
restProps={{
|
||||
enableColumnActions: false,
|
||||
enableSorting: false,
|
||||
enableRowActions: true,
|
||||
renderRowActions: ({row}) => (
|
||||
<Flex gap="md">
|
||||
<Tooltip label="Редактировать">
|
||||
<ActionIcon
|
||||
onClick={() => onEditClick(row.original)}
|
||||
variant={"default"}>
|
||||
<IconEdit/>
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
<Tooltip label="Удалить">
|
||||
<ActionIcon onClick={() => onDeleteClick(row.original)} variant={"default"}>
|
||||
<IconTrash/>
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
</Flex>
|
||||
)
|
||||
} as MRT_TableOptions<ShippingWarehouseSchema>}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default ShippingWarehouseTable;
|
||||
@@ -0,0 +1,18 @@
|
||||
import {useMemo} from "react";
|
||||
import {MRT_ColumnDef} from "mantine-react-table";
|
||||
import {ShippingWarehouseSchema} from "../../../../client";
|
||||
|
||||
const useShippingWarehouseTableColumns = () => {
|
||||
return useMemo<MRT_ColumnDef<ShippingWarehouseSchema>[]>(() => [
|
||||
{
|
||||
accessorKey:"id",
|
||||
header:"ID"
|
||||
},
|
||||
{
|
||||
accessorKey:"name",
|
||||
header:"Название"
|
||||
}
|
||||
], []);
|
||||
}
|
||||
|
||||
export default useShippingWarehouseTableColumns;
|
||||
1
src/pages/ShippingWarehousesPage/index.ts
Normal file
1
src/pages/ShippingWarehousesPage/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export {ShippingWarehousesPage} from './ui/ShippingWarehousesPage.tsx';
|
||||
@@ -0,0 +1,64 @@
|
||||
import BaseFormModal, {CreateEditFormProps} from "../../ClientsPage/modals/BaseFormModal/BaseFormModal.tsx";
|
||||
import {DealSummary, ShippingWarehouseSchema} from "../../../client";
|
||||
import {ContextModalProps} from "@mantine/modals";
|
||||
import {useForm} from "@mantine/form";
|
||||
import {Input, TextInput} from "@mantine/core";
|
||||
import DealsTable from "../../DealsPage/components/DealsTable/DealsTable.tsx";
|
||||
import {DealPageContextProvider} from "../../LeadsPage/contexts/DealPageContext.tsx";
|
||||
import DealEditDrawer from "../../LeadsPage/drawers/DealEditDrawer/DealEditDrawer.tsx";
|
||||
|
||||
type RestProps = {
|
||||
summaries: DealSummary[];
|
||||
}
|
||||
type Props = CreateEditFormProps<ShippingWarehouseSchema> & RestProps;
|
||||
const ShippingWarehouseForm = ({
|
||||
context,
|
||||
innerProps,
|
||||
id
|
||||
}: ContextModalProps<Props>) => {
|
||||
|
||||
const isEditing = 'onChange' in innerProps;
|
||||
|
||||
const form = useForm<ShippingWarehouseSchema>({
|
||||
initialValues: isEditing ? innerProps.element : {
|
||||
id: -1,
|
||||
name: ""
|
||||
}
|
||||
});
|
||||
return (
|
||||
<DealPageContextProvider>
|
||||
|
||||
<BaseFormModal
|
||||
{...innerProps}
|
||||
closeOnSubmit
|
||||
form={form}
|
||||
onClose={() => context.closeContextModal(id)}
|
||||
>
|
||||
<BaseFormModal.Body>
|
||||
<>
|
||||
<TextInput
|
||||
label={"Склад отгрузки"}
|
||||
placeholder={"Введите название склада отгрузки"}
|
||||
{...form.getInputProps("name")}
|
||||
/>
|
||||
{isEditing &&
|
||||
<Input.Wrapper
|
||||
label={"Последние 5 сделок"}
|
||||
error={form.getInputProps("phoneNumber").error}
|
||||
>
|
||||
<DealsTable
|
||||
viewOnly={true}
|
||||
items={innerProps.summaries}/>
|
||||
</Input.Wrapper>
|
||||
}
|
||||
</>
|
||||
</BaseFormModal.Body>
|
||||
</BaseFormModal>
|
||||
<DealEditDrawer
|
||||
/>
|
||||
|
||||
</DealPageContextProvider>
|
||||
)
|
||||
}
|
||||
|
||||
export default ShippingWarehouseForm;
|
||||
@@ -0,0 +1,17 @@
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
gap: rem(10);
|
||||
}
|
||||
|
||||
.top-panel {
|
||||
padding: rem(5);
|
||||
gap: rem(10);
|
||||
display: flex;
|
||||
|
||||
}
|
||||
|
||||
.top-panel-last-item {
|
||||
margin-left: auto;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
import styles from "../../ServicesPage/ui/ServicesPage.module.css";
|
||||
import PageBlock from "../../../components/PageBlock/PageBlock.tsx";
|
||||
import ShippingWarehousesTable from "../components/ShippingWarehousesTable/ShippingWarehousesTable.tsx";
|
||||
import useShippingWarehousesList
|
||||
from "../../../components/Selects/ShippingWarehouseAutocomplete/hooks/useShippingWarehousesList.tsx";
|
||||
import {Button} from "@mantine/core";
|
||||
import {modals} from "@mantine/modals";
|
||||
import {useCRUD} from "../../../hooks/useCRUD.tsx";
|
||||
import {ShippingWarehouseSchema, ShippingWarehouseService} from "../../../client";
|
||||
import {notifications} from "../../../shared/lib/notifications.ts";
|
||||
import {useDealSummariesFull} from "../../LeadsPage/hooks/useDealSummaries.tsx";
|
||||
|
||||
export const ShippingWarehousesPage = () => {
|
||||
const {shippingWarehouses, refetch} = useShippingWarehousesList();
|
||||
const {objects: summaries} = useDealSummariesFull();
|
||||
const crud = useCRUD<ShippingWarehouseSchema>({
|
||||
onChange: (element) => {
|
||||
ShippingWarehouseService
|
||||
.updateShippingWarehouse({
|
||||
requestBody: {
|
||||
shippingWarehouse: element
|
||||
}
|
||||
})
|
||||
.then(async ({ok, message}) => {
|
||||
notifications.guess(ok, {message});
|
||||
if (!ok) return;
|
||||
await refetch();
|
||||
})
|
||||
},
|
||||
onCreate: (element) => {
|
||||
ShippingWarehouseService
|
||||
.createShippingWarehouse({
|
||||
requestBody: {
|
||||
shippingWarehouse: element
|
||||
}
|
||||
})
|
||||
.then(async ({ok, message}) => {
|
||||
notifications.guess(ok, {message});
|
||||
if (!ok) return;
|
||||
await refetch();
|
||||
})
|
||||
},
|
||||
onDelete: (element) => {
|
||||
ShippingWarehouseService
|
||||
.deleteShippingWarehouse({
|
||||
requestBody: {
|
||||
shippingWarehouseId: element.id
|
||||
}
|
||||
})
|
||||
.then(async ({ok, message}) => {
|
||||
notifications.guess(ok, {message});
|
||||
if (!ok) return;
|
||||
await refetch();
|
||||
})
|
||||
}
|
||||
});
|
||||
const onCreateClick = () => {
|
||||
modals.openContextModal({
|
||||
modal: "shippingWarehouseForm",
|
||||
title: 'Редактирование склада отгрузки',
|
||||
withCloseButton: false,
|
||||
innerProps: {
|
||||
onCreate: crud.onCreate,
|
||||
summaries: []
|
||||
},
|
||||
})
|
||||
}
|
||||
return (
|
||||
<div className={styles['container']}>
|
||||
<PageBlock>
|
||||
<div className={styles['top-panel']}>
|
||||
<Button
|
||||
onClick={onCreateClick}
|
||||
variant={"default"}
|
||||
>
|
||||
Создать склад отгрузки
|
||||
</Button>
|
||||
</div>
|
||||
</PageBlock>
|
||||
<PageBlock>
|
||||
<ShippingWarehousesTable
|
||||
items={shippingWarehouses}
|
||||
summaries={summaries}
|
||||
{...crud}
|
||||
/>
|
||||
</PageBlock>
|
||||
</div>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import { Route as DealsDealIdImport } from './routes/deals.$dealId'
|
||||
// Create Virtual Routes
|
||||
|
||||
const TestLazyImport = createFileRoute('/test')()
|
||||
const ShippingwarehousesLazyImport = createFileRoute('/shipping_warehouses')()
|
||||
const ServicesLazyImport = createFileRoute('/services')()
|
||||
const ProductsLazyImport = createFileRoute('/products')()
|
||||
const LoginLazyImport = createFileRoute('/login')()
|
||||
@@ -34,6 +35,13 @@ const TestLazyRoute = TestLazyImport.update({
|
||||
getParentRoute: () => rootRoute,
|
||||
} as any).lazy(() => import('./routes/test.lazy').then((d) => d.Route))
|
||||
|
||||
const ShippingwarehousesLazyRoute = ShippingwarehousesLazyImport.update({
|
||||
path: '/shipping_warehouses',
|
||||
getParentRoute: () => rootRoute,
|
||||
} as any).lazy(() =>
|
||||
import('./routes/shipping_warehouses.lazy').then((d) => d.Route),
|
||||
)
|
||||
|
||||
const ServicesLazyRoute = ServicesLazyImport.update({
|
||||
path: '/services',
|
||||
getParentRoute: () => rootRoute,
|
||||
@@ -139,6 +147,13 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof ServicesLazyImport
|
||||
parentRoute: typeof rootRoute
|
||||
}
|
||||
'/shipping_warehouses': {
|
||||
id: '/shipping_warehouses'
|
||||
path: '/shipping_warehouses'
|
||||
fullPath: '/shipping_warehouses'
|
||||
preLoaderRoute: typeof ShippingwarehousesLazyImport
|
||||
parentRoute: typeof rootRoute
|
||||
}
|
||||
'/test': {
|
||||
id: '/test'
|
||||
path: '/test'
|
||||
@@ -167,6 +182,7 @@ export const routeTree = rootRoute.addChildren({
|
||||
LoginLazyRoute,
|
||||
ProductsLazyRoute,
|
||||
ServicesLazyRoute,
|
||||
ShippingwarehousesLazyRoute,
|
||||
TestLazyRoute,
|
||||
DealsDealIdRoute,
|
||||
})
|
||||
@@ -187,6 +203,7 @@ export const routeTree = rootRoute.addChildren({
|
||||
"/login",
|
||||
"/products",
|
||||
"/services",
|
||||
"/shipping_warehouses",
|
||||
"/test",
|
||||
"/deals/$dealId"
|
||||
]
|
||||
@@ -215,6 +232,9 @@ export const routeTree = rootRoute.addChildren({
|
||||
"/services": {
|
||||
"filePath": "services.lazy.tsx"
|
||||
},
|
||||
"/shipping_warehouses": {
|
||||
"filePath": "shipping_warehouses.lazy.tsx"
|
||||
},
|
||||
"/test": {
|
||||
"filePath": "test.lazy.tsx"
|
||||
},
|
||||
|
||||
6
src/routes/shipping_warehouses.lazy.tsx
Normal file
6
src/routes/shipping_warehouses.lazy.tsx
Normal file
@@ -0,0 +1,6 @@
|
||||
import {createLazyFileRoute} from "@tanstack/react-router";
|
||||
import {ShippingWarehousesPage} from "../pages/ShippingWarehousesPage";
|
||||
|
||||
export const Route = createLazyFileRoute('/shipping_warehouses')({
|
||||
component: ShippingWarehousesPage
|
||||
});
|
||||
Reference in New Issue
Block a user