From 05ef4afce866308a042bfe12bca656d3e48b56d5 Mon Sep 17 00:00:00 2001 From: fakz9 Date: Thu, 9 May 2024 03:33:36 +0300 Subject: [PATCH] feat: temp barcode templates --- src/client/index.ts | 1 + ...arcodeTemplateAdditionalAttributeSchema.ts | 9 +++ .../models/BarcodeTemplateCreateRequest.ts | 2 + src/client/models/BarcodeTemplateSchema.ts | 2 + .../models/BarcodeTemplateUpdateRequest.ts | 2 + src/client/models/ProductCreateRequest.ts | 2 + src/client/models/ProductSchema.ts | 2 + .../BarcodeTemplateAdditionalFieldTable.tsx | 78 +++++++++++++++++-- .../BarcodeTemplateFormModal.tsx | 18 ++++- .../components/ProductsTable/columns.tsx | 8 +- .../CreateProductModal/CreateProductModal.tsx | 9 ++- src/routes/test.lazy.tsx | 18 ----- 12 files changed, 122 insertions(+), 29 deletions(-) create mode 100644 src/client/models/BarcodeTemplateAdditionalAttributeSchema.ts diff --git a/src/client/index.ts b/src/client/index.ts index b1d0b92..2e9397c 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -9,6 +9,7 @@ export type { OpenAPIConfig } from './core/OpenAPI'; export type { AuthLoginRequest } from './models/AuthLoginRequest'; export type { AuthLoginResponse } from './models/AuthLoginResponse'; +export type { BarcodeTemplateAdditionalAttributeSchema } from './models/BarcodeTemplateAdditionalAttributeSchema'; export type { BarcodeTemplateAttributeSchema } from './models/BarcodeTemplateAttributeSchema'; export type { BarcodeTemplateCreateRequest } from './models/BarcodeTemplateCreateRequest'; export type { BarcodeTemplateCreateResponse } from './models/BarcodeTemplateCreateResponse'; diff --git a/src/client/models/BarcodeTemplateAdditionalAttributeSchema.ts b/src/client/models/BarcodeTemplateAdditionalAttributeSchema.ts new file mode 100644 index 0000000..98205bd --- /dev/null +++ b/src/client/models/BarcodeTemplateAdditionalAttributeSchema.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type BarcodeTemplateAdditionalAttributeSchema = { + name: string; + value: string; +}; + diff --git a/src/client/models/BarcodeTemplateCreateRequest.ts b/src/client/models/BarcodeTemplateCreateRequest.ts index 1da5081..94c3cfb 100644 --- a/src/client/models/BarcodeTemplateCreateRequest.ts +++ b/src/client/models/BarcodeTemplateCreateRequest.ts @@ -2,11 +2,13 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateAdditionalAttributeSchema } from './BarcodeTemplateAdditionalAttributeSchema'; export type BarcodeTemplateCreateRequest = { name: string; isDefault: boolean; width: number; height: number; + additionalAttributes: Array; attributeIds: Array; }; diff --git a/src/client/models/BarcodeTemplateSchema.ts b/src/client/models/BarcodeTemplateSchema.ts index 87069a3..53cf1cb 100644 --- a/src/client/models/BarcodeTemplateSchema.ts +++ b/src/client/models/BarcodeTemplateSchema.ts @@ -2,12 +2,14 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateAdditionalAttributeSchema } from './BarcodeTemplateAdditionalAttributeSchema'; import type { BarcodeTemplateAttributeSchema } from './BarcodeTemplateAttributeSchema'; export type BarcodeTemplateSchema = { name: string; isDefault: boolean; width: number; height: number; + additionalAttributes: Array; id: number; attributes: Array; }; diff --git a/src/client/models/BarcodeTemplateUpdateRequest.ts b/src/client/models/BarcodeTemplateUpdateRequest.ts index 86bf32f..8392aa3 100644 --- a/src/client/models/BarcodeTemplateUpdateRequest.ts +++ b/src/client/models/BarcodeTemplateUpdateRequest.ts @@ -2,11 +2,13 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateAdditionalAttributeSchema } from './BarcodeTemplateAdditionalAttributeSchema'; export type BarcodeTemplateUpdateRequest = { name: string; isDefault: boolean; width: number; height: number; + additionalAttributes: Array; id: number; attributeIds: Array; }; diff --git a/src/client/models/ProductCreateRequest.ts b/src/client/models/ProductCreateRequest.ts index 2debc6d..f188405 100644 --- a/src/client/models/ProductCreateRequest.ts +++ b/src/client/models/ProductCreateRequest.ts @@ -2,10 +2,12 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateSchema } from './BarcodeTemplateSchema'; export type ProductCreateRequest = { name: string; article: string; clientId: number; barcodes: Array; + barcodeTemplate?: (BarcodeTemplateSchema | null); }; diff --git a/src/client/models/ProductSchema.ts b/src/client/models/ProductSchema.ts index aeaec26..8888d73 100644 --- a/src/client/models/ProductSchema.ts +++ b/src/client/models/ProductSchema.ts @@ -2,11 +2,13 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateSchema } from './BarcodeTemplateSchema'; export type ProductSchema = { id: number; name: string; article: string; clientId: number; barcodes: Array; + barcodeTemplate?: (BarcodeTemplateSchema | null); }; diff --git a/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx b/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx index a618baa..3f3cff6 100644 --- a/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx +++ b/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx @@ -1,7 +1,75 @@ -import {GetInputProps} from "@mantine/form/lib/types"; -import {FC} from "react"; +import {FC, useEffect, useState} from "react"; +import {ActionIcon, Button, Flex, rem, TextInput} from "@mantine/core"; +import {BarcodeTemplateAdditionalAttributeSchema} from "../../../../client"; +import {IconX} from "@tabler/icons-react"; +import {isEqual} from "lodash"; -type Props = GetInputProps> -const BarcodeTemplateAdditionalFieldTable:FC = (props:Props) => { +type FieldType = BarcodeTemplateAdditionalAttributeSchema; +type Props = { + onChange: (value: FieldType[]) => void; + value?: FieldType[]; + error?: string | null; +} +const BarcodeTemplateAdditionalFieldTable: FC = (props: Props) => { + const {value, onChange} = props; + const [innerValue, setInnerValue] = useState(props.value || []); + console.log(innerValue); + const onNameChange = (field: FieldType, newName: string) => { + const newField = {...field, name: newName}; + const newFields = innerValue.map(f => f === field ? newField : f); + setInnerValue(newFields); + onChange(newFields); + } + const onValueChange = (field: FieldType, newValue: string) => { + const newField = {...field, value: newValue}; + const newFields = innerValue.map(f => f === field ? newField : f); + setInnerValue(newFields); + onChange(newFields); + } + const onCreateField = () => { + const newField = {name: "", value: ""}; + setInnerValue([...innerValue, newField]); + onChange([...innerValue, newField]); + } + const onDeleteField = (field: FieldType) => { + const newFields = innerValue.filter(f => f !== field); + setInnerValue(newFields); + onChange(newFields); + } + useEffect(() => { + if (isEqual(value, innerValue)) return; + setInnerValue(value || []); + }, [value]); + return ( + <> + + {/*{innerValue.length === 0 && Дополнительных полей нет}*/} + {innerValue.map((field, idx) => ( + + onDeleteField(field)} variant={"default"}> + + + event && + onNameChange(field, event.target.value)}/> + event && + onValueChange(field, event.target.value)} + /> + + )) + } + + + + ) +} -} \ No newline at end of file +export default BarcodeTemplateAdditionalFieldTable; \ No newline at end of file diff --git a/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx b/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx index 7ce096b..128d0a9 100644 --- a/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx +++ b/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx @@ -1,11 +1,17 @@ import BaseFormModal, {CreateEditFormProps} from "../../../ClientsPage/modals/BaseFormModal/BaseFormModal.tsx"; -import {BarcodeTemplateAttributeSchema, BarcodeTemplateSchema} from "../../../../client"; +import { + BarcodeTemplateAdditionalAttributeSchema, + BarcodeTemplateAttributeSchema, + BarcodeTemplateSchema +} from "../../../../client"; import {ContextModalProps} from "@mantine/modals"; import {useForm} from "@mantine/form"; import {Checkbox, Fieldset, Flex, NumberInput, rem, TextInput} from "@mantine/core"; import {IconX} from "@tabler/icons-react"; import BarcodeTemplateAttributeMultiselect from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx"; +import BarcodeTemplateAdditionalFieldTable + from "../../components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx"; type Props = CreateEditFormProps const BarcodeTemplateFormModal = ({ @@ -19,7 +25,8 @@ const BarcodeTemplateFormModal = ({ width: undefined, height: undefined, isDefault: false, - attributes: [] as Array + attributes: [] as Array, + additionalAttributes: [] as Array } as Partial; const form = useForm>({ initialValues: initialValues, @@ -30,7 +37,7 @@ const BarcodeTemplateFormModal = ({ name: (name: string | undefined) => name && name.trim() !== '' ? null : "Необходимо ввести название шаблона", } }) - + console.log(form.values.additionalAttributes); return ( + { ) - } + }, + enableSorting: false, + }, + { + accessorKey: "barcodeTemplate.name", + header: "Шаблон штрихкода", + enableSorting: false, } ], []); diff --git a/src/pages/ProductsPage/modals/CreateProductModal/CreateProductModal.tsx b/src/pages/ProductsPage/modals/CreateProductModal/CreateProductModal.tsx index dd02145..8838315 100644 --- a/src/pages/ProductsPage/modals/CreateProductModal/CreateProductModal.tsx +++ b/src/pages/ProductsPage/modals/CreateProductModal/CreateProductModal.tsx @@ -3,6 +3,7 @@ import {Button, Flex, rem, TagsInput, TextInput} from "@mantine/core"; import {useForm} from "@mantine/form"; import {BaseProduct, CreateProductRequest} from "../../types.ts"; import {ProductSchema} from "../../../../client"; +import BarcodeTemplateSelect from "../../../../components/Selects/BarcodeTemplateSelect/BarcodeTemplateSelect.tsx"; type CreateProps = { clientId: number; @@ -26,7 +27,8 @@ const CreateProductModal = ({ const initialValues = isEditProps ? { name: innerProps.product.name, article: innerProps.product.article, - barcodes: innerProps.product.barcodes + barcodes: innerProps.product.barcodes, + barcodeTemplate: innerProps.product.barcodeTemplate } : { name: '', article: '', @@ -69,6 +71,11 @@ const CreateProductModal = ({ label={"Штрихкоды"} {...form.getInputProps('barcodes')} /> + {isEditProps ? diff --git a/src/routes/test.lazy.tsx b/src/routes/test.lazy.tsx index 0890c02..60b5e61 100644 --- a/src/routes/test.lazy.tsx +++ b/src/routes/test.lazy.tsx @@ -1,6 +1,4 @@ import {createLazyFileRoute} from "@tanstack/react-router"; -import {Fieldset, Flex, NumberInput} from "@mantine/core"; -import {IconCross, IconX} from "@tabler/icons-react"; import {useEffect} from "react"; import {openContextModal} from "@mantine/modals"; @@ -22,22 +20,6 @@ function TestPage() { }, []); return ( <> -
- - - - - - - -
);