diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f5fbd5b0dbb4d3151a61104f9fab046eabcc319..114949d92a09c4e13a292feece3c501bc155b58c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed project search field updating () - Fixed export error when invalid polygons are present in overlapping frames () - Fixed image quality option for tasks created from images () +- Updating label attributes when label contains number attributes () ### Security diff --git a/cvat-ui/package-lock.json b/cvat-ui/package-lock.json index b45037afa037fe7a6994e03d9547ce148285c451..0e776ddaff48808a56f422c64a8a37b9428b211c 100644 --- a/cvat-ui/package-lock.json +++ b/cvat-ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.15.3", + "version": "1.15.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/cvat-ui/package.json b/cvat-ui/package.json index 9330505fd154d039fd9f73b2702e213386bcbe6f..d040c036bd9c8c1804814ec3dffcbf9c7a44c6af 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.15.3", + "version": "1.15.4", "description": "CVAT single-page application", "main": "src/index.tsx", "scripts": { diff --git a/cvat-ui/src/components/labels-editor/label-form.tsx b/cvat-ui/src/components/labels-editor/label-form.tsx index 23f16c962c68a6bff44ebbc265446d0eb83bf24f..53d6969b96066b8f3cfa4f6b35d26e2efe86f7f7 100644 --- a/cvat-ui/src/components/labels-editor/label-form.tsx +++ b/cvat-ui/src/components/labels-editor/label-form.tsx @@ -161,20 +161,20 @@ export default class LabelForm extends React.Component { const locked = attr ? attr.id >= 0 : false; const existedValues = attr ? attr.values : []; - const validator = (_: any, values: string[], callback: any): void => { + const validator = (_: any, values: string[]): Promise => { if (locked && existedValues) { if (!equalArrayHead(existedValues, values)) { - callback('You can only append new values'); + return Promise.reject(new Error('You can only append new values')); } } for (const value of values) { if (!patterns.validateAttributeValue.pattern.test(value)) { - callback(`Invalid attribute value: "${value}"`); + return Promise.reject(new Error(`Invalid attribute value: "${value}"`)); } } - callback(); + return Promise.resolve(); }; return ( @@ -223,35 +223,35 @@ export default class LabelForm extends React.Component { private renderNumberRangeInput(fieldInstance: any, attr: Attribute | null): JSX.Element { const { key } = fieldInstance; const locked = attr ? attr.id >= 0 : false; - const value = attr ? attr.values.join(';') : ''; + const value = attr ? attr.values : ''; - const validator = (_: any, strNumbers: string, callback: any): void => { + const validator = (_: any, strNumbers: string): Promise => { const numbers = strNumbers.split(';').map((number): number => Number.parseFloat(number)); if (numbers.length !== 3) { - callback('Three numbers are expected'); + return Promise.reject(new Error('Three numbers are expected')); } for (const number of numbers) { if (Number.isNaN(number)) { - callback(`"${number}" is not a number`); + return Promise.reject(new Error(`"${number}" is not a number`)); } } const [min, max, step] = numbers; if (min >= max) { - callback('Minimum must be less than maximum'); + return Promise.reject(new Error('Minimum must be less than maximum')); } if (max - min < step) { - callback('Step must be less than minmax difference'); + return Promise.reject(new Error('Step must be less than minmax difference')); } if (step <= 0) { - callback('Step must be a positive number'); + return Promise.reject(new Error('Step must be a positive number')); } - callback(); + return Promise.resolve(); }; return ( @@ -339,7 +339,7 @@ export default class LabelForm extends React.Component { {() => ( @@ -507,6 +507,10 @@ export default class LabelForm extends React.Component { label.attributes.map( (attribute: Attribute): Store => ({ ...attribute, + values: + attribute.input_type.toUpperCase() === 'NUMBER' ? + attribute.values.join(';') : + attribute.values, type: attribute.input_type.toUpperCase(), }), ) :