feat: attrs on product

This commit is contained in:
2024-05-11 00:24:52 +03:00
parent 004ad9a562
commit 270f96bf8d
10 changed files with 29 additions and 4 deletions

View File

@@ -6,5 +6,6 @@ import type { BarcodeAttributeSchema } from './BarcodeAttributeSchema';
export type BarcodeSchema = { export type BarcodeSchema = {
barcode: string; barcode: string;
attributes: Array<BarcodeAttributeSchema>; attributes: Array<BarcodeAttributeSchema>;
additionalField?: (string | null);
}; };

View File

@@ -9,6 +9,7 @@ export type BarcodeTemplateCreateRequest = {
isDefault: boolean; isDefault: boolean;
size: BarcodeTemplateSizeSchema; size: BarcodeTemplateSizeSchema;
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>; additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
additionalField?: (string | null);
attributeIds: Array<number>; attributeIds: Array<number>;
}; };

View File

@@ -10,6 +10,7 @@ export type BarcodeTemplateSchema = {
isDefault: boolean; isDefault: boolean;
size: BarcodeTemplateSizeSchema; size: BarcodeTemplateSizeSchema;
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>; additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
additionalField?: (string | null);
id: number; id: number;
attributes: Array<BarcodeTemplateAttributeSchema>; attributes: Array<BarcodeTemplateAttributeSchema>;
}; };

View File

@@ -9,6 +9,7 @@ export type BarcodeTemplateUpdateRequest = {
isDefault: boolean; isDefault: boolean;
size: BarcodeTemplateSizeSchema; size: BarcodeTemplateSizeSchema;
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>; additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
additionalField?: (string | null);
id: number; id: number;
attributeIds: Array<number>; attributeIds: Array<number>;
}; };

View File

@@ -13,5 +13,6 @@ export type ProductSchema = {
brand?: (string | null); brand?: (string | null);
color?: (string | null); color?: (string | null);
composition?: (string | null); composition?: (string | null);
size?: (string | null);
}; };

View File

@@ -8,12 +8,13 @@ type Props = {
attributes: BarcodeAttributeSchema[] attributes: BarcodeAttributeSchema[]
barcode?: string; barcode?: string;
quantity: number; quantity: number;
additionalField?: string | null;
} }
type Ref = HTMLDivElement; type Ref = HTMLDivElement;
const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContainer(props: Props, ref) { const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContainer(props: Props, ref) {
const {attributes, barcode, quantity} = props; const {attributes, barcode, quantity, additionalField} = props;
const MAX_ATTRIBUTES = 6; const MAX_ATTRIBUTES = additionalField ? 5 : 6;
const MIN_BARCODE_SIZE = 30; const MIN_BARCODE_SIZE = 30;
const MAX_BARCODE_SIZE = 100; const MAX_BARCODE_SIZE = 100;
const STEP = (MAX_BARCODE_SIZE - MIN_BARCODE_SIZE) / MAX_ATTRIBUTES; const STEP = (MAX_BARCODE_SIZE - MIN_BARCODE_SIZE) / MAX_ATTRIBUTES;
@@ -52,6 +53,14 @@ const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContai
{getAttributeText(attr)} {getAttributeText(attr)}
</Text> </Text>
))} ))}
{props.additionalField && (
<Text
className={styles['barcode-attribute-text']}
size={"xs"}
>
{props.additionalField}
</Text>
)}
</Flex> </Flex>
</> </>
))} ))}

View File

@@ -9,6 +9,7 @@
.barcode-container { .barcode-container {
max-height: 1.45in;
text-align: left; text-align: left;
margin: 1.25mm; margin: 1.25mm;
padding: 1.25mm; padding: 1.25mm;

View File

@@ -126,7 +126,7 @@ const PrintBarcodeModal = ({
quantity={quantity} quantity={quantity}
ref={barcodeRef} ref={barcodeRef}
attributes={barcodeData?.attributes || []} attributes={barcodeData?.attributes || []}
additionalField={barcodeData?.additionalField}
/> />
</> </>
) )

View File

@@ -6,7 +6,7 @@ import {
} from "../../../../client"; } from "../../../../client";
import {ContextModalProps} from "@mantine/modals"; import {ContextModalProps} from "@mantine/modals";
import {useForm} from "@mantine/form"; import {useForm} from "@mantine/form";
import {Checkbox, Fieldset, Flex, rem, TextInput} from "@mantine/core"; import {Checkbox, Fieldset, Flex, rem, Textarea, TextInput} from "@mantine/core";
import BarcodeTemplateAttributeMultiselect import BarcodeTemplateAttributeMultiselect
from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx"; from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx";
import BarcodeTemplateAdditionalFieldTable import BarcodeTemplateAdditionalFieldTable
@@ -69,6 +69,11 @@ const BarcodeTemplateFormModal = ({
label={"Использовать как стандартный шаблон"} label={"Использовать как стандартный шаблон"}
checked={form.getInputProps('isDefault').value as boolean} checked={form.getInputProps('isDefault').value as boolean}
{...form.getInputProps('isDefault')}/> {...form.getInputProps('isDefault')}/>
<Textarea
label={"Дополнительное поле"}
placeholder={"Введите дополнительное поле"}
{...form.getInputProps('additionalField')}
/>
</Flex> </Flex>
</Fieldset> </Fieldset>

View File

@@ -89,6 +89,11 @@ const CreateProductModal = ({
label={"Цвет"} label={"Цвет"}
{...form.getInputProps('color')} {...form.getInputProps('color')}
/> />
<TextInput
placeholder={"Введите размер"}
label={"Размер"}
{...form.getInputProps('size')}
/>
</Fieldset> </Fieldset>
<Flex justify={"flex-end"} mt={rem(5)} gap={rem(10)}> <Flex justify={"flex-end"} mt={rem(5)} gap={rem(10)}>
<Button onClick={() => onCancelClick()} variant={"subtle"}>Отменить</Button> <Button onClick={() => onCancelClick()} variant={"subtle"}>Отменить</Button>