feat: attrs on product
This commit is contained in:
		@@ -6,5 +6,6 @@ import type { BarcodeAttributeSchema } from './BarcodeAttributeSchema';
 | 
			
		||||
export type BarcodeSchema = {
 | 
			
		||||
    barcode: string;
 | 
			
		||||
    attributes: Array<BarcodeAttributeSchema>;
 | 
			
		||||
    additionalField?: (string | null);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ export type BarcodeTemplateCreateRequest = {
 | 
			
		||||
    isDefault: boolean;
 | 
			
		||||
    size: BarcodeTemplateSizeSchema;
 | 
			
		||||
    additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
 | 
			
		||||
    additionalField?: (string | null);
 | 
			
		||||
    attributeIds: Array<number>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ export type BarcodeTemplateSchema = {
 | 
			
		||||
    isDefault: boolean;
 | 
			
		||||
    size: BarcodeTemplateSizeSchema;
 | 
			
		||||
    additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
 | 
			
		||||
    additionalField?: (string | null);
 | 
			
		||||
    id: number;
 | 
			
		||||
    attributes: Array<BarcodeTemplateAttributeSchema>;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ export type BarcodeTemplateUpdateRequest = {
 | 
			
		||||
    isDefault: boolean;
 | 
			
		||||
    size: BarcodeTemplateSizeSchema;
 | 
			
		||||
    additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
 | 
			
		||||
    additionalField?: (string | null);
 | 
			
		||||
    id: number;
 | 
			
		||||
    attributeIds: Array<number>;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -13,5 +13,6 @@ export type ProductSchema = {
 | 
			
		||||
    brand?: (string | null);
 | 
			
		||||
    color?: (string | null);
 | 
			
		||||
    composition?: (string | null);
 | 
			
		||||
    size?: (string | null);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,13 @@ type Props = {
 | 
			
		||||
    attributes: BarcodeAttributeSchema[]
 | 
			
		||||
    barcode?: string;
 | 
			
		||||
    quantity: number;
 | 
			
		||||
    additionalField?: string | null;
 | 
			
		||||
}
 | 
			
		||||
type Ref = HTMLDivElement;
 | 
			
		||||
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 MAX_BARCODE_SIZE = 100;
 | 
			
		||||
    const STEP = (MAX_BARCODE_SIZE - MIN_BARCODE_SIZE) / MAX_ATTRIBUTES;
 | 
			
		||||
@@ -52,6 +53,14 @@ const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContai
 | 
			
		||||
                                {getAttributeText(attr)}
 | 
			
		||||
                            </Text>
 | 
			
		||||
                        ))}
 | 
			
		||||
                        {props.additionalField && (
 | 
			
		||||
                            <Text
 | 
			
		||||
                                className={styles['barcode-attribute-text']}
 | 
			
		||||
                                size={"xs"}
 | 
			
		||||
                            >
 | 
			
		||||
                                {props.additionalField}
 | 
			
		||||
                            </Text>
 | 
			
		||||
                        )}
 | 
			
		||||
                    </Flex>
 | 
			
		||||
                </>
 | 
			
		||||
            ))}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    .barcode-container {
 | 
			
		||||
        max-height: 1.45in;
 | 
			
		||||
        text-align: left;
 | 
			
		||||
        margin: 1.25mm;
 | 
			
		||||
        padding: 1.25mm;
 | 
			
		||||
 
 | 
			
		||||
@@ -126,7 +126,7 @@ const PrintBarcodeModal = ({
 | 
			
		||||
                quantity={quantity}
 | 
			
		||||
                ref={barcodeRef}
 | 
			
		||||
                attributes={barcodeData?.attributes || []}
 | 
			
		||||
 | 
			
		||||
                additionalField={barcodeData?.additionalField}
 | 
			
		||||
            />
 | 
			
		||||
        </>
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import {
 | 
			
		||||
} from "../../../../client";
 | 
			
		||||
import {ContextModalProps} from "@mantine/modals";
 | 
			
		||||
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
 | 
			
		||||
    from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx";
 | 
			
		||||
import BarcodeTemplateAdditionalFieldTable
 | 
			
		||||
@@ -69,6 +69,11 @@ const BarcodeTemplateFormModal = ({
 | 
			
		||||
                                label={"Использовать как стандартный шаблон"}
 | 
			
		||||
                                checked={form.getInputProps('isDefault').value as boolean}
 | 
			
		||||
                                {...form.getInputProps('isDefault')}/>
 | 
			
		||||
                            <Textarea
 | 
			
		||||
                                label={"Дополнительное поле"}
 | 
			
		||||
                                placeholder={"Введите дополнительное поле"}
 | 
			
		||||
                                {...form.getInputProps('additionalField')}
 | 
			
		||||
                            />
 | 
			
		||||
                        </Flex>
 | 
			
		||||
 | 
			
		||||
                    </Fieldset>
 | 
			
		||||
 
 | 
			
		||||
@@ -89,6 +89,11 @@ const CreateProductModal = ({
 | 
			
		||||
                            label={"Цвет"}
 | 
			
		||||
                            {...form.getInputProps('color')}
 | 
			
		||||
                        />
 | 
			
		||||
                        <TextInput
 | 
			
		||||
                            placeholder={"Введите размер"}
 | 
			
		||||
                            label={"Размер"}
 | 
			
		||||
                            {...form.getInputProps('size')}
 | 
			
		||||
                        />
 | 
			
		||||
                    </Fieldset>
 | 
			
		||||
                    <Flex justify={"flex-end"} mt={rem(5)} gap={rem(10)}>
 | 
			
		||||
                        <Button onClick={() => onCancelClick()} variant={"subtle"}>Отменить</Button>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user