feat: attrs on product
This commit is contained in:
		@@ -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);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>
 | 
				
			||||||
                </>
 | 
					                </>
 | 
				
			||||||
            ))}
 | 
					            ))}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,7 +126,7 @@ const PrintBarcodeModal = ({
 | 
				
			|||||||
                quantity={quantity}
 | 
					                quantity={quantity}
 | 
				
			||||||
                ref={barcodeRef}
 | 
					                ref={barcodeRef}
 | 
				
			||||||
                attributes={barcodeData?.attributes || []}
 | 
					                attributes={barcodeData?.attributes || []}
 | 
				
			||||||
 | 
					                additionalField={barcodeData?.additionalField}
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
        </>
 | 
					        </>
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user