diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 60ef0ee334..5b473ecc50 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,16 +1,16 @@ { "name": "@labkey/components", - "version": "7.12.1", + "version": "7.13.0-fb-mvtc.22", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "7.12.1", + "version": "7.13.0-fb-mvtc.22", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", - "@labkey/api": "1.44.1", + "@labkey/api": "1.45.0-fb-mvtc.5", "@testing-library/dom": "~10.4.1", "@testing-library/jest-dom": "~6.9.1", "@testing-library/react": "~16.3.0", @@ -3535,9 +3535,9 @@ } }, "node_modules/@labkey/api": { - "version": "1.44.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-1.44.1.tgz", - "integrity": "sha512-VUS4KLfwAsE45A3MnJUU3j97ei0ncQHv6OVVAN3kitID0xe8+mZ7B39zETVye3Dqgwa8TbYvsCp2t46QmBmwVQ==", + "version": "1.45.0-fb-mvtc.5", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-1.45.0-fb-mvtc.5.tgz", + "integrity": "sha512-aZSJ+rRRwktytQkkE1v/uQyaF73MNlcOfun8qXSHrI/m3X1rWp7xqYUx8s2Socx4pYRxs521L4f8Rw/MHHOCdg==", "license": "Apache-2.0" }, "node_modules/@labkey/build": { diff --git a/packages/components/package.json b/packages/components/package.json index 564640e28d..1405892871 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "7.12.1", + "version": "7.13.0-fb-mvtc.22", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ @@ -50,7 +50,7 @@ "homepage": "https://github.com/LabKey/labkey-ui-components#readme", "dependencies": { "@hello-pangea/dnd": "18.0.1", - "@labkey/api": "1.44.1", + "@labkey/api": "1.45.0-fb-mvtc.5", "@testing-library/dom": "~10.4.1", "@testing-library/jest-dom": "~6.9.1", "@testing-library/react": "~16.3.0", diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index ee0242840f..21b0746291 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,6 +1,13 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages +### version 7.X +*Released*: X January 2026 +- Multi value text choices + - Added new MULTI_CHOICE_RANGE_URI for defining MVTC fields and updated utils to check against data type + - renamed joinValues prop for SelectInput to skipJoinValues to align with its actual usage + - Modified FilterFacetedSelector and QueryFilterPanel to handle array value selecting for MVTC + ### version 7.12.1 *Released*: 14 January 2026 - Merge from release26.1-SNAPSHOT to develop diff --git a/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx b/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx index a32c20ab08..827c7bba9b 100644 --- a/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx +++ b/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx @@ -22,6 +22,7 @@ import { DOMAIN_LAST_ENTERED_DEFAULT, DOMAIN_NON_EDITABLE_DEFAULT, INT_RANGE_URI, + MULTI_CHOICE_RANGE_URI, PHILEVEL_FULL_PHI, PHILEVEL_LIMITED_PHI, } from './constants'; @@ -226,4 +227,38 @@ describe('AdvancedSettings', () => { id = createFormInputId(DOMAIN_FIELD_SHOWNINDETAILSVIEW, _domainIndex, _index); expect(document.querySelectorAll('#' + id)).toHaveLength(1); }); + + test('Multi-value Text Choice hidden properties', async () => { + await act(async () => { + renderWithAppContext( + + ); + }); + + let id = createFormInputId(DOMAIN_FIELD_DEFAULT_VALUE_TYPE, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_HIDDEN, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_SHOWNININSERTVIEW, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_SHOWNINUPDATESVIEW, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_SHOWNINDETAILSVIEW, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_PHI, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(1); + id = createFormInputId(DOMAIN_FIELD_CONSTRAINT, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(0); + id = createFormInputId(DOMAIN_FIELD_MEASURE, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(0); + id = createFormInputId(DOMAIN_FIELD_DIMENSION, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(0); + id = createFormInputId(DOMAIN_FIELD_MVENABLED, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(0); + id = createFormInputId(DOMAIN_FIELD_RECOMMENDEDVARIABLE, _domainIndex, _index); + expect(document.querySelectorAll('#' + id)).toHaveLength(0); + }); }); diff --git a/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx b/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx index b5c667c71d..d1b1485553 100644 --- a/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx +++ b/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx @@ -448,7 +448,7 @@ export class AdvancedSettings extends React.PureComponent )} - {allowUniqueConstraintProperties && !field.isCalculatedField() && ( + {allowUniqueConstraintProperties && !field.isCalculatedField() && !field.isMultiChoiceField() && (
)} - - Make this field a recommended variable - -
- Indicates that this is an important variable. These variables will be displayed as - recommended when creating new charts or reports. -
-
-
+ {!field.isMultiChoiceField() && ( + + Make this field a recommended variable + +
+ Indicates that this is an important variable. These variables will be displayed as + recommended when creating new charts or reports. +
+
+
+ )} {PropDescType.isMvEnableable(field.dataType.rangeURI) && !field.isCalculatedField() && !isApp() && ( { renderWithAppContext( ); }); @@ -41,10 +41,10 @@ describe('CalculatedFieldOptions', () => { renderWithAppContext( ); }); @@ -62,10 +62,10 @@ describe('CalculatedFieldOptions', () => { renderWithAppContext( ); }); @@ -123,6 +123,7 @@ describe('CalculatedFieldOptions', () => { List.of( { name: 'b', dataType: { name: 'text' } } as DomainField, { name: 'c', dataType: { name: 'calculation' } } as DomainField, + { name: 'c', dataType: { name: 'multiChoice' } } as DomainField, { name: 'd', dataType: { name: 'INT' } } as DomainField ), [{ Name: 'a', DataType: 'integer' } as SystemField] diff --git a/packages/components/src/internal/components/domainproperties/CalculatedFieldOptions.tsx b/packages/components/src/internal/components/domainproperties/CalculatedFieldOptions.tsx index 25db7d7c16..46dcb839c2 100644 --- a/packages/components/src/internal/components/domainproperties/CalculatedFieldOptions.tsx +++ b/packages/components/src/internal/components/domainproperties/CalculatedFieldOptions.tsx @@ -12,7 +12,7 @@ import { DOMAIN_FIELD_CLIENT_SIDE_ERROR, DOMAIN_FIELD_VALUE_EXPRESSION, SEVERITY import { DomainField, DomainFieldError, SystemField } from './models'; import { SectionHeading } from './SectionHeading'; import { isFieldFullyLocked, isFieldPartiallyLocked } from './propertiesUtil'; -import { CALCULATED_TYPE, PropDescType } from './PropDescType'; +import { CALCULATED_TYPE, MULTI_CHOICE_TYPE, PropDescType } from './PropDescType'; import { parseCalculatedColumn } from './actions'; // export for jest testing @@ -47,7 +47,7 @@ export const getColumnTypeMap = ( colTypeMap[df.Name] = df.DataType.toUpperCase(); }); domainFields?.forEach(df => { - if (df.dataType.name !== CALCULATED_TYPE.name) { + if (df.dataType.name !== CALCULATED_TYPE.name && df.dataType.name !== MULTI_CHOICE_TYPE.name) { colTypeMap[df.name] = df.dataType.name.toLowerCase() === 'int' ? 'INTEGER' : df.dataType.name.toUpperCase(); } }); @@ -163,20 +163,20 @@ export const CalculatedFieldOptions: FC = memo(props => { >
- +