diff --git a/packages/build/webpack/app.view.template.xml b/packages/build/webpack/app.view.template.xml index ea50190236..02fa115e0f 100644 --- a/packages/build/webpack/app.view.template.xml +++ b/packages/build/webpack/app.view.template.xml @@ -15,11 +15,11 @@ <% } %> <% if (htmlWebpackPlugin.options.permissionClasses) { %> - + <% htmlWebpackPlugin.options.permissionClasses.forEach((permissionClass) => { %> <% }); %> - + <% } %> <% if (htmlWebpackPlugin.options.requiresLogin) { %> diff --git a/packages/build/webpack/constants.js b/packages/build/webpack/constants.js index e1e36a07dd..aeca160482 100644 --- a/packages/build/webpack/constants.js +++ b/packages/build/webpack/constants.js @@ -56,7 +56,7 @@ const watchPort = process.env.WATCH_PORT || 3001; // These minification options are a re-declaration of the default minification options // for the HtmlWebpackPlugin with the addition of `caseSensitive` because LabKey's -// view templates can contain case-sensitive elements (e.g. ``). +// view templates can contain case-sensitive elements (e.g. ``). // For more information see https://github.com/jantimon/html-webpack-plugin#minification. const minifyTemplateOptions = { caseSensitive: true, diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index b7c6a9b063..3ba76b23a2 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.11.2", + "version": "6.11.3-fb-multifolder.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.11.2", + "version": "6.11.3-fb-multifolder.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "17.0.0", diff --git a/packages/components/package.json b/packages/components/package.json index d3dd1f8922..88a376a1a3 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.11.2", + "version": "6.11.3-fb-multifolder.0", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ diff --git a/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx b/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx index 455e70f178..2bd4ca801a 100644 --- a/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx +++ b/packages/components/src/internal/components/domainproperties/AdvancedSettings.test.tsx @@ -60,6 +60,8 @@ describe('AdvancedSettings', () => { field: field1, onHide: jest.fn(), onApply: jest.fn(), + phiLevelEnabled: true, + phiLevelDisabledReason: null, showDefaultValueSettings: true, allowUniqueConstraintProperties: true, defaultDefaultValueType: DOMAIN_EDITABLE_DEFAULT, diff --git a/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx b/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx index 6de4dd032f..e932ff8122 100644 --- a/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx +++ b/packages/components/src/internal/components/domainproperties/AdvancedSettings.tsx @@ -56,6 +56,8 @@ interface AdvancedSettingsProps { maxPhiLevel: string; onApply: (any) => any; onHide: () => any; + phiLevelDisabledReason: string; + phiLevelEnabled: boolean; showDefaultValueSettings: boolean; } @@ -352,7 +354,15 @@ export class AdvancedSettings extends React.PureComponent { - const { index, field, domainIndex, domainFormDisplayOptions, allowUniqueConstraintProperties } = this.props; + const { + index, + field, + domainIndex, + domainFormDisplayOptions, + allowUniqueConstraintProperties, + phiLevelEnabled, + phiLevelDisabledReason, + } = this.props; const { measure, dimension, @@ -365,9 +375,7 @@ export class AdvancedSettings extends React.PureComponent level.value === PHI) !== undefined; const disablePhiSelect = - domainFormDisplayOptions.phiLevelDisabled || - field.disablePhiLevel || - (PHI !== undefined && !currentValueExists); + !phiLevelEnabled || field.disablePhiLevel || (PHI !== undefined && !currentValueExists); return ( <> @@ -377,14 +385,15 @@ export class AdvancedSettings extends React.PureComponent -
+
+ {!phiLevelEnabled && phiLevelDisabledReason && phiLevelDisabledReason + (PHI !== "NotPHI" ? ". Change this PHI Level to \"Not PHI\" before saving." : "")} + Multi-folder {MULTI_FOLDER_TIP} + +
+ ); +}); + interface CollapsibleFieldsProps extends PropsWithChildren { checked: boolean; collapseFields: () => void; @@ -383,7 +408,7 @@ export const SearchIndexing: FC = memo(props => { }); interface SettingsContainerProps extends PropsWithChildren { - tipBody: string | JSX.Element; + tipBody?: string | JSX.Element; tipTitle?: string; title: string; } @@ -392,7 +417,7 @@ const SettingsContainer: FC = memo(({ children, title, t
{title} - {tipBody} + {tipBody && {tipBody}}
{children} @@ -445,6 +470,8 @@ export class AdvancedSettings extends React.PureComponent + + + + )} diff --git a/packages/components/src/internal/components/domainproperties/list/models.ts b/packages/components/src/internal/components/domainproperties/list/models.ts index 4921f82138..f932115106 100644 --- a/packages/components/src/internal/components/domainproperties/list/models.ts +++ b/packages/components/src/internal/components/domainproperties/list/models.ts @@ -40,6 +40,7 @@ export interface AdvancedSettingsForm extends EachItemSettings, EntireListSettin eachItemIndex: boolean; entireListIndex: boolean; fileAttachmentIndex: boolean; + multiFolder: boolean; titleColumn: string; } @@ -74,6 +75,7 @@ export class ListModel extends Record({ eachItemBodySetting: undefined, eachItemBodyTemplate: undefined, fileAttachmentIndex: undefined, + multiFolder: undefined, listId: undefined, discussionSettingEnum: undefined, containerPath: undefined, @@ -103,6 +105,7 @@ export class ListModel extends Record({ declare eachItemBodySetting: number; declare eachItemBodyTemplate: string; declare fileAttachmentIndex: false; + declare multiFolder: false; declare listId: number; declare discussionSettingEnum: string; declare containerPath: string; diff --git a/packages/components/src/internal/components/domainproperties/models.tsx b/packages/components/src/internal/components/domainproperties/models.tsx index c7030e6dff..2f3d642879 100644 --- a/packages/components/src/internal/components/domainproperties/models.tsx +++ b/packages/components/src/internal/components/domainproperties/models.tsx @@ -164,6 +164,8 @@ interface IDomainDesign { name: string; // set of fields to initialize a manually created design newDesignFields?: List; + phiLevelEnabled: boolean; + phiLevelDisabledReason?: string; queryName?: string; schemaName?: string; showDefaultValueSettings: boolean; @@ -199,6 +201,8 @@ export class DomainDesign schemaName: undefined, queryName: undefined, disabledSystemFields: undefined, + phiLevelEnabled: true, + phiLevelDisabledReason: undefined, }) implements IDomainDesign { @@ -230,6 +234,8 @@ export class DomainDesign declare schemaName: string; declare queryName: string; declare disabledSystemFields?: string[]; + declare phiLevelEnabled: boolean; + declare phiLevelDisabledReason?: string; static create(rawModel: any, exception?: any): DomainDesign { let fields = List(); @@ -2105,7 +2111,6 @@ export interface IDomainFormDisplayOptions { hideTextOptions?: boolean; hideValidators?: boolean; isDragDisabled?: boolean; - phiLevelDisabled?: boolean; retainReservedFields?: boolean; showFilterCriteria?: boolean; showScannableOption?: boolean;