box-ui-elements 23.3.1-beta.1 → 23.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sharing.js.LICENSE.txt +10 -0
- package/dist/sidebar.js +1 -1
- package/es/common/types/metadata.js.flow +1 -0
- package/es/common/types/metadata.js.map +1 -1
- package/es/components/notification/Notification.js +17 -8
- package/es/components/notification/Notification.js.flow +15 -8
- package/es/components/notification/Notification.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +6 -2
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +19 -12
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +31 -9
- package/es/features/metadata-instance-editor/Instance.js.flow +41 -9
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/features/metadata-instance-editor/Instances.js +2 -0
- package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
- package/es/features/metadata-instance-editor/Instances.js.map +1 -1
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.flow +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js +2 -0
- package/es/features/metadata-instance-editor/TemplatedInstance.js.flow +11 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js.map +1 -1
- package/es/features/metadata-instance-editor/constants.js +2 -1
- package/es/features/metadata-instance-editor/constants.js.flow +3 -1
- package/es/features/metadata-instance-editor/constants.js.map +1 -1
- package/es/features/metadata-instance-fields/DateMetadataField.js +30 -25
- package/es/features/metadata-instance-fields/DateMetadataField.js.flow +31 -27
- package/es/features/metadata-instance-fields/DateMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/EnumMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/EnumMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/EnumMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/FloatMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/IntegerMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MetadataField.js +7 -0
- package/es/features/metadata-instance-fields/MetadataField.js.flow +8 -0
- package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/TextMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/TextMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/TextMetadataField.js.map +1 -1
- package/package.json +1 -1
- package/src/common/types/metadata.js +1 -0
- package/src/components/notification/Notification.js +15 -8
- package/src/components/notification/__tests__/Notification.test.js +21 -1
- package/src/features/metadata-instance-editor/CascadePolicy.js +19 -12
- package/src/features/metadata-instance-editor/Instance.js +41 -9
- package/src/features/metadata-instance-editor/Instances.js +3 -0
- package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
- package/src/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/src/features/metadata-instance-editor/TemplatedInstance.js +11 -1
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +92 -1
- package/src/features/metadata-instance-editor/__tests__/Instance.test.js +207 -2
- package/src/features/metadata-instance-editor/__tests__/Instances.test.js +92 -3
- package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +105 -0
- package/src/features/metadata-instance-editor/__tests__/TemplatedInstance.test.js +83 -1
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +16 -5
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +4 -2
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap +2 -2
- package/src/features/metadata-instance-editor/constants.js +3 -1
- package/src/features/metadata-instance-fields/DateMetadataField.js +31 -27
- package/src/features/metadata-instance-fields/EnumMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/FloatMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/IntegerMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/MetadataField.js +8 -0
- package/src/features/metadata-instance-fields/MultiSelectMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/TextMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/__tests__/DateMetadataField.test.js +59 -8
- package/src/features/metadata-instance-fields/__tests__/EnumMetadataField.test.js +63 -18
- package/src/features/metadata-instance-fields/__tests__/FloatMetadataField.test.js +68 -4
- package/src/features/metadata-instance-fields/__tests__/IntegerMetadataField.test.js +90 -4
- package/src/features/metadata-instance-fields/__tests__/MultiSelectMetadataField.test.js +95 -7
- package/src/features/metadata-instance-fields/__tests__/TextMetadataField.test.js +107 -14
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/DateMetadataField.test.js.snap +0 -18
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/EnumMetadataField.test.js.snap +0 -84
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/FloatMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/IntegerMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/MultiSelectMetadataField.test.js.snap +0 -58
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/TextMetadataField.test.js.snap +0 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataField.js","names":["React","FormattedMessage","InlineError","TextMetadataField","EnumMetadataField","DateMetadataField","FloatMetadataField","IntegerMetadataField","MultiSelectMetadataField","ReadOnlyMetadataField","messages","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","FIELD_TYPE_STRING","FIELD_TYPE_DATE","FIELD_TYPE_MULTISELECT","MetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","error","isHidden","canEdit","onChange","onRemove","options","type","createElement","Error","title","invalidMetadataFieldType"],"sources":["../../../src/features/metadata-instance-fields/MetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport InlineError from '../../components/inline-error/InlineError';\n\nimport TextMetadataField from './TextMetadataField';\nimport EnumMetadataField from './EnumMetadataField';\nimport DateMetadataField from './DateMetadataField';\nimport FloatMetadataField from './FloatMetadataField';\nimport IntegerMetadataField from './IntegerMetadataField';\nimport MultiSelectMetadataField from './MultiSelectMetadataField';\nimport ReadOnlyMetadataField from './ReadOnlyMetadataField';\nimport messages from './messages';\nimport type { MetadataFieldValue, MetadataTemplateFieldOption, MetadataFieldType } from '../../common/types/metadata';\n\nimport {\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_INTEGER,\n FIELD_TYPE_STRING,\n FIELD_TYPE_DATE,\n FIELD_TYPE_MULTISELECT,\n} from './constants';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canEdit: boolean,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n error?: React.Node,\n isHidden?: boolean,\n onChange?: (key: string, value: MetadataFieldValue) => void,\n onRemove?: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n type: MetadataFieldType,\n};\n\nconst MetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n error,\n isHidden,\n canEdit,\n onChange,\n onRemove,\n options,\n type,\n}: Props) => {\n if (isHidden) {\n return null;\n }\n\n if (!canEdit) {\n return (\n <ReadOnlyMetadataField\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n type={type}\n />\n );\n }\n\n if (!onChange || !onRemove) {\n throw new Error('Need to have onChange and onRemove');\n }\n\n switch (type) {\n case FIELD_TYPE_STRING:\n return (\n <TextMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n case FIELD_TYPE_FLOAT:\n return (\n <FloatMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_INTEGER:\n return (\n <IntegerMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_ENUM:\n return (\n <EnumMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_MULTISELECT:\n return (\n <MultiSelectMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_DATE:\n return (\n <DateMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n default:\n return (\n <InlineError title={type}>\n <FormattedMessage {...messages.invalidMetadataFieldType} />\n </InlineError>\n );\n }\n};\n\nexport default MetadataField;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,OAAOC,WAAW,MAAM,2CAA2C;AAEnE,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,kBAAkB,MAAM,sBAAsB;AACrD,OAAOC,oBAAoB,MAAM,wBAAwB;AACzD,OAAOC,wBAAwB,MAAM,4BAA4B;AACjE,OAAOC,qBAAqB,MAAM,yBAAyB;AAC3D,OAAOC,QAAQ,MAAM,YAAY;AAGjC,SACIC,eAAe,EACfC,gBAAgB,EAChBC,kBAAkB,EAClBC,iBAAiB,EACjBC,eAAe,EACfC,sBAAsB,QACnB,aAAa;
|
|
1
|
+
{"version":3,"file":"MetadataField.js","names":["React","FormattedMessage","InlineError","TextMetadataField","EnumMetadataField","DateMetadataField","FloatMetadataField","IntegerMetadataField","MultiSelectMetadataField","ReadOnlyMetadataField","messages","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","FIELD_TYPE_STRING","FIELD_TYPE_DATE","FIELD_TYPE_MULTISELECT","MetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","error","isDisabled","isHidden","canEdit","onChange","onRemove","options","type","createElement","Error","title","invalidMetadataFieldType"],"sources":["../../../src/features/metadata-instance-fields/MetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport InlineError from '../../components/inline-error/InlineError';\n\nimport TextMetadataField from './TextMetadataField';\nimport EnumMetadataField from './EnumMetadataField';\nimport DateMetadataField from './DateMetadataField';\nimport FloatMetadataField from './FloatMetadataField';\nimport IntegerMetadataField from './IntegerMetadataField';\nimport MultiSelectMetadataField from './MultiSelectMetadataField';\nimport ReadOnlyMetadataField from './ReadOnlyMetadataField';\nimport messages from './messages';\nimport type { MetadataFieldValue, MetadataTemplateFieldOption, MetadataFieldType } from '../../common/types/metadata';\n\nimport {\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_INTEGER,\n FIELD_TYPE_STRING,\n FIELD_TYPE_DATE,\n FIELD_TYPE_MULTISELECT,\n} from './constants';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canEdit: boolean,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n error?: React.Node,\n isDisabled?: boolean,\n isHidden?: boolean,\n onChange?: (key: string, value: MetadataFieldValue) => void,\n onRemove?: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n type: MetadataFieldType,\n};\n\nconst MetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n error,\n isDisabled,\n isHidden,\n canEdit,\n onChange,\n onRemove,\n options,\n type,\n}: Props) => {\n if (isHidden) {\n return null;\n }\n\n if (!canEdit) {\n return (\n <ReadOnlyMetadataField\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n type={type}\n />\n );\n }\n\n if (!onChange || !onRemove) {\n throw new Error('Need to have onChange and onRemove');\n }\n\n switch (type) {\n case FIELD_TYPE_STRING:\n return (\n <TextMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n case FIELD_TYPE_FLOAT:\n return (\n <FloatMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_INTEGER:\n return (\n <IntegerMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_ENUM:\n return (\n <EnumMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_MULTISELECT:\n return (\n <MultiSelectMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_DATE:\n return (\n <DateMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n default:\n return (\n <InlineError title={type}>\n <FormattedMessage {...messages.invalidMetadataFieldType} />\n </InlineError>\n );\n }\n};\n\nexport default MetadataField;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ const MultiSelectMetadataField = ({
|
|
|
10
10
|
dataValue,
|
|
11
11
|
displayName,
|
|
12
12
|
description,
|
|
13
|
+
isDisabled,
|
|
13
14
|
onChange,
|
|
14
15
|
onRemove,
|
|
15
16
|
options = []
|
|
@@ -23,6 +24,7 @@ const MultiSelectMetadataField = ({
|
|
|
23
24
|
className: "bdl-MultiSelectMetadataField-desc"
|
|
24
25
|
}, description), /*#__PURE__*/React.createElement(MultiSelect, {
|
|
25
26
|
blurExceptionClassNames: blurExceptionClassNames,
|
|
27
|
+
isDisabled: isDisabled,
|
|
26
28
|
isEscapedWithReference: true,
|
|
27
29
|
isScrollable: true,
|
|
28
30
|
onChange: selectedOptions => {
|
|
@@ -18,6 +18,7 @@ type Props = {
|
|
|
18
18
|
dataValue?: MetadataFieldValue,
|
|
19
19
|
description?: string,
|
|
20
20
|
displayName: string,
|
|
21
|
+
isDisabled?: boolean,
|
|
21
22
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
22
23
|
onRemove: (key: string) => void,
|
|
23
24
|
options?: Array<MetadataTemplateFieldOption>,
|
|
@@ -29,6 +30,7 @@ const MultiSelectMetadataField = ({
|
|
|
29
30
|
dataValue,
|
|
30
31
|
displayName,
|
|
31
32
|
description,
|
|
33
|
+
isDisabled,
|
|
32
34
|
onChange,
|
|
33
35
|
onRemove,
|
|
34
36
|
options = [],
|
|
@@ -41,6 +43,7 @@ const MultiSelectMetadataField = ({
|
|
|
41
43
|
{!!description && <i className="bdl-MultiSelectMetadataField-desc">{description}</i>}
|
|
42
44
|
<MultiSelect
|
|
43
45
|
blurExceptionClassNames={blurExceptionClassNames}
|
|
46
|
+
isDisabled={isDisabled}
|
|
44
47
|
isEscapedWithReference
|
|
45
48
|
isScrollable
|
|
46
49
|
onChange={(selectedOptions: Array<SelectOptionProp>) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectMetadataField.js","names":["React","FormattedMessage","Label","MultiSelect","messages","MultiSelectMetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","onChange","onRemove","options","placeholder","createElement","metadataFieldMultiSelectValue","className","text","isEscapedWithReference","isScrollable","selectedOptions","length","map","value","option","displayText","key","selectedValues","MultiSelectMetadataFieldBase"],"sources":["../../../src/features/metadata-instance-fields/MultiSelectMetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Label from '../../components/label/Label';\nimport MultiSelect from '../../components/select-field/MultiSelectField';\nimport type { SelectOptionProp } from '../../components/select-field/props';\n\nimport messages from './messages';\n\nimport type { MetadataFieldValue, MetadataTemplateFieldOption } from '../../common/types/metadata';\n\nimport './MultiSelectMetadataField.scss';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n onChange: (key: string, value: MetadataFieldValue) => void,\n onRemove: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n};\n\nconst MultiSelectMetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n onChange,\n onRemove,\n options = [],\n}: Props) => {\n const placeholder = <FormattedMessage {...messages.metadataFieldMultiSelectValue} />;\n\n return (\n <div className=\"bdl-MultiSelectMetadataField\">\n <Label text={displayName}>\n {!!description && <i className=\"bdl-MultiSelectMetadataField-desc\">{description}</i>}\n <MultiSelect\n blurExceptionClassNames={blurExceptionClassNames}\n isEscapedWithReference\n isScrollable\n onChange={(selectedOptions: Array<SelectOptionProp>) => {\n if (selectedOptions.length) {\n onChange(\n dataKey,\n selectedOptions.map(({ value }) => value),\n );\n } else {\n onRemove(dataKey);\n }\n }}\n options={options.map(option => ({\n displayText: option.key,\n value: option.key,\n }))}\n placeholder={placeholder}\n selectedValues={dataValue}\n />\n </Label>\n </div>\n );\n};\n\nexport { MultiSelectMetadataField as MultiSelectMetadataFieldBase };\nexport default MultiSelectMetadataField;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,OAAOC,KAAK,MAAM,8BAA8B;AAChD,OAAOC,WAAW,MAAM,gDAAgD;AAGxE,OAAOC,QAAQ,MAAM,YAAY;AAIjC,OAAO,iCAAiC;
|
|
1
|
+
{"version":3,"file":"MultiSelectMetadataField.js","names":["React","FormattedMessage","Label","MultiSelect","messages","MultiSelectMetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","isDisabled","onChange","onRemove","options","placeholder","createElement","metadataFieldMultiSelectValue","className","text","isEscapedWithReference","isScrollable","selectedOptions","length","map","value","option","displayText","key","selectedValues","MultiSelectMetadataFieldBase"],"sources":["../../../src/features/metadata-instance-fields/MultiSelectMetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Label from '../../components/label/Label';\nimport MultiSelect from '../../components/select-field/MultiSelectField';\nimport type { SelectOptionProp } from '../../components/select-field/props';\n\nimport messages from './messages';\n\nimport type { MetadataFieldValue, MetadataTemplateFieldOption } from '../../common/types/metadata';\n\nimport './MultiSelectMetadataField.scss';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n isDisabled?: boolean,\n onChange: (key: string, value: MetadataFieldValue) => void,\n onRemove: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n};\n\nconst MultiSelectMetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n isDisabled,\n onChange,\n onRemove,\n options = [],\n}: Props) => {\n const placeholder = <FormattedMessage {...messages.metadataFieldMultiSelectValue} />;\n\n return (\n <div className=\"bdl-MultiSelectMetadataField\">\n <Label text={displayName}>\n {!!description && <i className=\"bdl-MultiSelectMetadataField-desc\">{description}</i>}\n <MultiSelect\n blurExceptionClassNames={blurExceptionClassNames}\n isDisabled={isDisabled}\n isEscapedWithReference\n isScrollable\n onChange={(selectedOptions: Array<SelectOptionProp>) => {\n if (selectedOptions.length) {\n onChange(\n dataKey,\n selectedOptions.map(({ value }) => value),\n );\n } else {\n onRemove(dataKey);\n }\n }}\n options={options.map(option => ({\n displayText: option.key,\n value: option.key,\n }))}\n placeholder={placeholder}\n selectedValues={dataValue}\n />\n </Label>\n </div>\n );\n};\n\nexport { MultiSelectMetadataField as MultiSelectMetadataFieldBase };\nexport default MultiSelectMetadataField;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,OAAOC,KAAK,MAAM,8BAA8B;AAChD,OAAOC,WAAW,MAAM,gDAAgD;AAGxE,OAAOC,QAAQ,MAAM,YAAY;AAIjC,OAAO,iCAAiC;AAcxC,MAAMC,wBAAwB,GAAGA,CAAC;EAC9BC,uBAAuB;EACvBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,UAAU;EACVC,QAAQ;EACRC,QAAQ;EACRC,OAAO,GAAG;AACP,CAAC,KAAK;EACT,MAAMC,WAAW,gBAAGf,KAAA,CAAAgB,aAAA,CAACf,gBAAgB,EAAKG,QAAQ,CAACa,6BAAgC,CAAC;EAEpF,oBACIjB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAC;EAA8B,gBACzClB,KAAA,CAAAgB,aAAA,CAACd,KAAK;IAACiB,IAAI,EAAEV;EAAY,GACpB,CAAC,CAACC,WAAW,iBAAIV,KAAA,CAAAgB,aAAA;IAAGE,SAAS,EAAC;EAAmC,GAAER,WAAe,CAAC,eACpFV,KAAA,CAAAgB,aAAA,CAACb,WAAW;IACRG,uBAAuB,EAAEA,uBAAwB;IACjDK,UAAU,EAAEA,UAAW;IACvBS,sBAAsB;IACtBC,YAAY;IACZT,QAAQ,EAAGU,eAAwC,IAAK;MACpD,IAAIA,eAAe,CAACC,MAAM,EAAE;QACxBX,QAAQ,CACJL,OAAO,EACPe,eAAe,CAACE,GAAG,CAAC,CAAC;UAAEC;QAAM,CAAC,KAAKA,KAAK,CAC5C,CAAC;MACL,CAAC,MAAM;QACHZ,QAAQ,CAACN,OAAO,CAAC;MACrB;IACJ,CAAE;IACFO,OAAO,EAAEA,OAAO,CAACU,GAAG,CAACE,MAAM,KAAK;MAC5BC,WAAW,EAAED,MAAM,CAACE,GAAG;MACvBH,KAAK,EAAEC,MAAM,CAACE;IAClB,CAAC,CAAC,CAAE;IACJb,WAAW,EAAEA,WAAY;IACzBc,cAAc,EAAErB;EAAU,CAC7B,CACE,CACN,CAAC;AAEd,CAAC;AAED,SAASH,wBAAwB,IAAIyB,4BAA4B;AACjE,eAAezB,wBAAwB","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
3
3
|
import TextInput from '../../components/text-input';
|
|
4
4
|
import messages from './messages';
|
|
5
5
|
import './TextMetadataField.scss';
|
|
@@ -9,11 +9,14 @@ const TextMetadataField = ({
|
|
|
9
9
|
displayName,
|
|
10
10
|
description,
|
|
11
11
|
error,
|
|
12
|
-
|
|
12
|
+
isDisabled,
|
|
13
13
|
onChange,
|
|
14
14
|
onRemove,
|
|
15
15
|
type = 'text'
|
|
16
16
|
}) => {
|
|
17
|
+
const {
|
|
18
|
+
formatMessage
|
|
19
|
+
} = useIntl();
|
|
17
20
|
let value = '';
|
|
18
21
|
if (typeof dataValue === 'number') {
|
|
19
22
|
value = dataValue;
|
|
@@ -25,6 +28,7 @@ const TextMetadataField = ({
|
|
|
25
28
|
description: description,
|
|
26
29
|
error: error,
|
|
27
30
|
hideOptionalLabel: true,
|
|
31
|
+
disabled: isDisabled,
|
|
28
32
|
label: displayName,
|
|
29
33
|
name: dataKey,
|
|
30
34
|
onChange: event => {
|
|
@@ -35,11 +39,10 @@ const TextMetadataField = ({
|
|
|
35
39
|
onRemove(dataKey);
|
|
36
40
|
}
|
|
37
41
|
},
|
|
38
|
-
placeholder:
|
|
42
|
+
placeholder: formatMessage(messages.metadataFieldSetValue),
|
|
39
43
|
type: type,
|
|
40
44
|
value: value
|
|
41
45
|
});
|
|
42
46
|
};
|
|
43
|
-
export
|
|
44
|
-
export default injectIntl(TextMetadataField);
|
|
47
|
+
export default TextMetadataField;
|
|
45
48
|
//# sourceMappingURL=TextMetadataField.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
4
|
|
|
5
5
|
import TextInput from '../../components/text-input';
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ type Props = {
|
|
|
14
14
|
description?: string,
|
|
15
15
|
displayName: string,
|
|
16
16
|
error?: React.Node,
|
|
17
|
-
|
|
17
|
+
isDisabled?: boolean,
|
|
18
18
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
19
19
|
onRemove: (key: string) => void,
|
|
20
20
|
type?: string,
|
|
@@ -26,11 +26,13 @@ const TextMetadataField = ({
|
|
|
26
26
|
displayName,
|
|
27
27
|
description,
|
|
28
28
|
error,
|
|
29
|
-
|
|
29
|
+
isDisabled,
|
|
30
30
|
onChange,
|
|
31
31
|
onRemove,
|
|
32
32
|
type = 'text',
|
|
33
33
|
}: Props) => {
|
|
34
|
+
const { formatMessage } = useIntl();
|
|
35
|
+
|
|
34
36
|
let value = '';
|
|
35
37
|
|
|
36
38
|
if (typeof dataValue === 'number') {
|
|
@@ -45,6 +47,7 @@ const TextMetadataField = ({
|
|
|
45
47
|
description={description}
|
|
46
48
|
error={error}
|
|
47
49
|
hideOptionalLabel
|
|
50
|
+
disabled={isDisabled}
|
|
48
51
|
label={displayName}
|
|
49
52
|
name={dataKey}
|
|
50
53
|
onChange={(event: SyntheticKeyboardEvent<HTMLInputElement>) => {
|
|
@@ -55,12 +58,11 @@ const TextMetadataField = ({
|
|
|
55
58
|
onRemove(dataKey);
|
|
56
59
|
}
|
|
57
60
|
}}
|
|
58
|
-
placeholder={
|
|
61
|
+
placeholder={formatMessage(messages.metadataFieldSetValue)}
|
|
59
62
|
type={type}
|
|
60
63
|
value={value}
|
|
61
64
|
/>
|
|
62
65
|
);
|
|
63
66
|
};
|
|
64
67
|
|
|
65
|
-
export
|
|
66
|
-
export default injectIntl(TextMetadataField);
|
|
68
|
+
export default TextMetadataField;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMetadataField.js","names":["React","
|
|
1
|
+
{"version":3,"file":"TextMetadataField.js","names":["React","useIntl","TextInput","messages","TextMetadataField","dataKey","dataValue","displayName","description","error","isDisabled","onChange","onRemove","type","formatMessage","value","createElement","className","hideOptionalLabel","disabled","label","name","event","currentTarget","placeholder","metadataFieldSetValue"],"sources":["../../../src/features/metadata-instance-fields/TextMetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport TextInput from '../../components/text-input';\n\nimport messages from './messages';\nimport type { MetadataFieldValue } from '../../common/types/metadata';\nimport './TextMetadataField.scss';\n\ntype Props = {\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n error?: React.Node,\n isDisabled?: boolean,\n onChange: (key: string, value: MetadataFieldValue) => void,\n onRemove: (key: string) => void,\n type?: string,\n};\n\nconst TextMetadataField = ({\n dataKey,\n dataValue,\n displayName,\n description,\n error,\n isDisabled,\n onChange,\n onRemove,\n type = 'text',\n}: Props) => {\n const { formatMessage } = useIntl();\n\n let value = '';\n\n if (typeof dataValue === 'number') {\n value = dataValue;\n } else if (dataValue) {\n value = dataValue;\n }\n\n return (\n <TextInput\n className=\"bdl-TextMetadataField\"\n description={description}\n error={error}\n hideOptionalLabel\n disabled={isDisabled}\n label={displayName}\n name={dataKey}\n onChange={(event: SyntheticKeyboardEvent<HTMLInputElement>) => {\n const currentTarget = (event.currentTarget: HTMLInputElement);\n if (currentTarget.value) {\n onChange(dataKey, currentTarget.value);\n } else {\n onRemove(dataKey);\n }\n }}\n placeholder={formatMessage(messages.metadataFieldSetValue)}\n type={type}\n value={value}\n />\n );\n};\n\nexport default TextMetadataField;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAOC,SAAS,MAAM,6BAA6B;AAEnD,OAAOC,QAAQ,MAAM,YAAY;AAEjC,OAAO,0BAA0B;AAcjC,MAAMC,iBAAiB,GAAGA,CAAC;EACvBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,KAAK;EACLC,UAAU;EACVC,QAAQ;EACRC,QAAQ;EACRC,IAAI,GAAG;AACJ,CAAC,KAAK;EACT,MAAM;IAAEC;EAAc,CAAC,GAAGb,OAAO,CAAC,CAAC;EAEnC,IAAIc,KAAK,GAAG,EAAE;EAEd,IAAI,OAAOT,SAAS,KAAK,QAAQ,EAAE;IAC/BS,KAAK,GAAGT,SAAS;EACrB,CAAC,MAAM,IAAIA,SAAS,EAAE;IAClBS,KAAK,GAAGT,SAAS;EACrB;EAEA,oBACIN,KAAA,CAAAgB,aAAA,CAACd,SAAS;IACNe,SAAS,EAAC,uBAAuB;IACjCT,WAAW,EAAEA,WAAY;IACzBC,KAAK,EAAEA,KAAM;IACbS,iBAAiB;IACjBC,QAAQ,EAAET,UAAW;IACrBU,KAAK,EAAEb,WAAY;IACnBc,IAAI,EAAEhB,OAAQ;IACdM,QAAQ,EAAGW,KAA+C,IAAK;MAC3D,MAAMC,aAAa,GAAID,KAAK,CAACC,aAAgC;MAC7D,IAAIA,aAAa,CAACR,KAAK,EAAE;QACrBJ,QAAQ,CAACN,OAAO,EAAEkB,aAAa,CAACR,KAAK,CAAC;MAC1C,CAAC,MAAM;QACHH,QAAQ,CAACP,OAAO,CAAC;MACrB;IACJ,CAAE;IACFmB,WAAW,EAAEV,aAAa,CAACX,QAAQ,CAACsB,qBAAqB,CAAE;IAC3DZ,IAAI,EAAEA,IAAK;IACXE,KAAK,EAAEA;EAAM,CAChB,CAAC;AAEV,CAAC;AAED,eAAeX,iBAAiB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -3,9 +3,13 @@ import * as React from 'react';
|
|
|
3
3
|
import { defineMessages, injectIntl } from 'react-intl';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
|
|
6
|
+
// $FlowFixMe
|
|
7
|
+
import { Information, Check, AlertTriangle, AlertBadge, XMark } from '@box/blueprint-web-assets/icons/Medium';
|
|
8
|
+
|
|
6
9
|
import InfoBadge16 from '../../icon/line/InfoBadge16';
|
|
7
10
|
import CircleCheck16 from '../../icon/line/CircleCheck16';
|
|
8
11
|
import TriangleAlert16 from '../../icon/line/TriangleAlert16';
|
|
12
|
+
|
|
9
13
|
import XBadge16 from '../../icon/line/XBadge16';
|
|
10
14
|
import X16 from '../../icon/fill/X16';
|
|
11
15
|
|
|
@@ -30,10 +34,10 @@ const DURATION_TIMES = {
|
|
|
30
34
|
};
|
|
31
35
|
|
|
32
36
|
const ICON_RENDERER: { [string]: Function } = {
|
|
33
|
-
[TYPE_DEFAULT]:
|
|
34
|
-
[TYPE_ERROR]:
|
|
35
|
-
[TYPE_INFO]:
|
|
36
|
-
[TYPE_WARN]:
|
|
37
|
+
[TYPE_DEFAULT]: useV2Icons => (useV2Icons ? <Information /> : <InfoBadge16 />),
|
|
38
|
+
[TYPE_ERROR]: useV2Icons => (useV2Icons ? <AlertBadge /> : <XBadge16 />),
|
|
39
|
+
[TYPE_INFO]: useV2Icons => (useV2Icons ? <Check /> : <CircleCheck16 />),
|
|
40
|
+
[TYPE_WARN]: useV2Icons => (useV2Icons ? <AlertTriangle /> : <TriangleAlert16 />),
|
|
37
41
|
};
|
|
38
42
|
|
|
39
43
|
const messages = defineMessages({
|
|
@@ -69,6 +73,7 @@ type Props = {
|
|
|
69
73
|
*/
|
|
70
74
|
type: NotificationType,
|
|
71
75
|
overflow?: 'wrap' | 'ellipsis',
|
|
76
|
+
useV2Icons?: boolean,
|
|
72
77
|
};
|
|
73
78
|
|
|
74
79
|
class Notification extends React.Component<Props> {
|
|
@@ -101,14 +106,16 @@ class Notification extends React.Component<Props> {
|
|
|
101
106
|
|
|
102
107
|
render() {
|
|
103
108
|
const contents = this.getChildren();
|
|
104
|
-
const { intl, type, overflow, className } = this.props;
|
|
109
|
+
const { intl, type, overflow, className, useV2Icons } = this.props;
|
|
105
110
|
const { formatMessage } = intl;
|
|
106
111
|
const classes = classNames('notification', type, overflow, className);
|
|
112
|
+
const iconRenderer = ICON_RENDERER[type](useV2Icons);
|
|
113
|
+
const iconColor = useV2Icons ? '#222' : '#fff';
|
|
107
114
|
|
|
108
115
|
return (
|
|
109
116
|
<div className={classes}>
|
|
110
|
-
{React.cloneElement(
|
|
111
|
-
color:
|
|
117
|
+
{React.cloneElement(iconRenderer, {
|
|
118
|
+
color: iconColor,
|
|
112
119
|
height: 20,
|
|
113
120
|
width: 20,
|
|
114
121
|
})}
|
|
@@ -119,7 +126,7 @@ class Notification extends React.Component<Props> {
|
|
|
119
126
|
onClick={this.onClose}
|
|
120
127
|
type="button"
|
|
121
128
|
>
|
|
122
|
-
<X16 />
|
|
129
|
+
{useV2Icons ? <XMark height={32} width={32} /> : <X16 />}
|
|
123
130
|
</button>
|
|
124
131
|
</div>
|
|
125
132
|
);
|
|
@@ -46,7 +46,7 @@ describe('components/notification/Notification', () => {
|
|
|
46
46
|
expect(component.find('div.notification').hasClass(type)).toBe(true);
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
test('should render
|
|
49
|
+
test('should render local icons per notification type', () => {
|
|
50
50
|
const component = mount(<Notification type={type}>test</Notification>);
|
|
51
51
|
const infoBadge16Count = type === TYPE_DEFAULT ? 1 : 0;
|
|
52
52
|
const CircleCheck16Count = type === TYPE_INFO ? 1 : 0;
|
|
@@ -57,6 +57,26 @@ describe('components/notification/Notification', () => {
|
|
|
57
57
|
expect(component.find('XBadge16').length).toBe(XBadge16Count);
|
|
58
58
|
expect(component.find('CircleCheck16').length).toBe(CircleCheck16Count);
|
|
59
59
|
expect(component.find('TriangleAlert16').length).toBe(TriangleAlert16Count);
|
|
60
|
+
|
|
61
|
+
// Does not render v2 icons
|
|
62
|
+
expect(component.find(`svg[role="img"]`).length).toBe(0);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('should render v2 icons when useV2Icons is true', () => {
|
|
66
|
+
const component = mount(
|
|
67
|
+
<Notification type={type} useV2Icons={true}>
|
|
68
|
+
test
|
|
69
|
+
</Notification>,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Type icon and Close button
|
|
73
|
+
expect(component.find(`svg[role="img"]`).length).toBe(2);
|
|
74
|
+
|
|
75
|
+
// Does not render local icons
|
|
76
|
+
expect(component.find('InfoBadge16').length).toBe(0);
|
|
77
|
+
expect(component.find('XBadge16').length).toBe(0);
|
|
78
|
+
expect(component.find('CircleCheck16').length).toBe(0);
|
|
79
|
+
expect(component.find('TriangleAlert16').length).toBe(0);
|
|
60
80
|
});
|
|
61
81
|
});
|
|
62
82
|
|
|
@@ -34,10 +34,12 @@ const agents = [
|
|
|
34
34
|
type Props = {
|
|
35
35
|
canEdit: boolean,
|
|
36
36
|
canUseAIFolderExtraction: boolean,
|
|
37
|
+
canUseAIFolderExtractionAgentSelector: boolean,
|
|
37
38
|
isAIFolderExtractionEnabled: boolean,
|
|
38
39
|
isCascadingEnabled: boolean,
|
|
39
40
|
isCascadingOverwritten: boolean,
|
|
40
41
|
isCustomMetadata: boolean,
|
|
42
|
+
isExistingAIExtractionCascadePolicy: boolean,
|
|
41
43
|
onAIFolderExtractionToggle: (value: boolean) => void,
|
|
42
44
|
onCascadeModeChange: (value: boolean) => void,
|
|
43
45
|
onCascadeToggle: (value: boolean) => void,
|
|
@@ -47,10 +49,12 @@ type Props = {
|
|
|
47
49
|
const CascadePolicy = ({
|
|
48
50
|
canEdit,
|
|
49
51
|
canUseAIFolderExtraction,
|
|
52
|
+
canUseAIFolderExtractionAgentSelector,
|
|
50
53
|
isCascadingEnabled,
|
|
51
54
|
isCascadingOverwritten,
|
|
52
55
|
isCustomMetadata,
|
|
53
56
|
isAIFolderExtractionEnabled,
|
|
57
|
+
isExistingAIExtractionCascadePolicy,
|
|
54
58
|
onAIFolderExtractionToggle,
|
|
55
59
|
onCascadeToggle,
|
|
56
60
|
onCascadeModeChange,
|
|
@@ -65,7 +69,7 @@ const CascadePolicy = ({
|
|
|
65
69
|
return canEdit ? (
|
|
66
70
|
<>
|
|
67
71
|
<div className="metadata-cascade-editor">
|
|
68
|
-
<div className="metadata-cascade-enable">
|
|
72
|
+
<div className="metadata-cascade-enable" data-testid="metadata-cascade-enable">
|
|
69
73
|
<div>
|
|
70
74
|
<FormattedMessage tagName="strong" {...messages.enableCascadePolicy} />
|
|
71
75
|
{!isCustomMetadata && (
|
|
@@ -131,6 +135,7 @@ const CascadePolicy = ({
|
|
|
131
135
|
<Toggle
|
|
132
136
|
className="metadata-cascade-toggle"
|
|
133
137
|
isOn={isAIFolderExtractionEnabled}
|
|
138
|
+
isDisabled={isExistingAIExtractionCascadePolicy}
|
|
134
139
|
label=""
|
|
135
140
|
onChange={e => onAIFolderExtractionToggle(e.target.checked)}
|
|
136
141
|
/>
|
|
@@ -142,17 +147,19 @@ const CascadePolicy = ({
|
|
|
142
147
|
<FormattedMessage {...messages.aiAutofillLearnMore} />
|
|
143
148
|
</Link>
|
|
144
149
|
</div>
|
|
145
|
-
|
|
146
|
-
<
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
150
|
+
{canUseAIFolderExtractionAgentSelector && (
|
|
151
|
+
<div className="metadata-cascade-ai-agent-selector">
|
|
152
|
+
<TooltipProvider>
|
|
153
|
+
<BoxAiAgentSelector
|
|
154
|
+
agents={agents}
|
|
155
|
+
onErrorAction={() => {}}
|
|
156
|
+
requestState="success"
|
|
157
|
+
selectedAgent={agents[0]}
|
|
158
|
+
variant="sidebar"
|
|
159
|
+
/>
|
|
160
|
+
</TooltipProvider>
|
|
161
|
+
</div>
|
|
162
|
+
)}
|
|
156
163
|
<InlineNotice className="metadata-cascade-ai-notice" variant="info">
|
|
157
164
|
<FormattedMessage
|
|
158
165
|
{...messages.aiAutofillNotice}
|
|
@@ -24,7 +24,7 @@ import MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';
|
|
|
24
24
|
import Footer from './Footer';
|
|
25
25
|
import messages from './messages';
|
|
26
26
|
import { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';
|
|
27
|
-
import TEMPLATE_CUSTOM_PROPERTIES from './constants';
|
|
27
|
+
import { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
28
28
|
import {
|
|
29
29
|
JSON_PATCH_OP_REMOVE,
|
|
30
30
|
JSON_PATCH_OP_ADD,
|
|
@@ -48,6 +48,7 @@ import './Instance.scss';
|
|
|
48
48
|
type Props = {
|
|
49
49
|
canEdit: boolean,
|
|
50
50
|
canUseAIFolderExtraction?: boolean,
|
|
51
|
+
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
51
52
|
cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line
|
|
52
53
|
data: MetadataFields,
|
|
53
54
|
hasError: boolean,
|
|
@@ -210,7 +211,13 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
210
211
|
isCascadingPolicyApplicable,
|
|
211
212
|
onSave,
|
|
212
213
|
}: Props = this.props;
|
|
213
|
-
const {
|
|
214
|
+
const {
|
|
215
|
+
data: currentData,
|
|
216
|
+
errors,
|
|
217
|
+
isAIFolderExtractionEnabled,
|
|
218
|
+
isCascadingEnabled,
|
|
219
|
+
isCascadingOverwritten,
|
|
220
|
+
}: State = this.state;
|
|
214
221
|
|
|
215
222
|
if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {
|
|
216
223
|
return;
|
|
@@ -219,7 +226,8 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
219
226
|
this.setState({
|
|
220
227
|
isBusy: true,
|
|
221
228
|
isEditing: false,
|
|
222
|
-
|
|
229
|
+
// reset state if cascading policy is removed
|
|
230
|
+
isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,
|
|
223
231
|
});
|
|
224
232
|
onSave(
|
|
225
233
|
id,
|
|
@@ -230,6 +238,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
230
238
|
id: cascadePolicy ? cascadePolicy.id : undefined,
|
|
231
239
|
isEnabled: isCascadingEnabled,
|
|
232
240
|
overwrite: isCascadingOverwritten,
|
|
241
|
+
isAIFolderExtractionEnabled,
|
|
233
242
|
}
|
|
234
243
|
: undefined,
|
|
235
244
|
cloneDeep(currentData),
|
|
@@ -339,12 +348,12 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
339
348
|
* @return {Object} - react state
|
|
340
349
|
*/
|
|
341
350
|
getState(props: Props): State {
|
|
342
|
-
const isCascadingEnabled = this.
|
|
351
|
+
const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);
|
|
343
352
|
|
|
344
353
|
return {
|
|
345
354
|
data: cloneDeep(props.data),
|
|
346
355
|
errors: {},
|
|
347
|
-
isAIFolderExtractionEnabled:
|
|
356
|
+
isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),
|
|
348
357
|
isBusy: false,
|
|
349
358
|
isCascadingEnabled,
|
|
350
359
|
isCascadingOverwritten: false,
|
|
@@ -420,13 +429,16 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
420
429
|
*/
|
|
421
430
|
setDirty = (type?: string): void => {
|
|
422
431
|
const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;
|
|
423
|
-
const { data, isCascadingEnabled, isCascadingOverwritten } = this.state;
|
|
432
|
+
const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;
|
|
424
433
|
const hasDataChanged = !isEqual(data, this.props.data);
|
|
425
434
|
let hasCascadingChanged = false;
|
|
426
435
|
|
|
427
436
|
if (isCascadingPolicyApplicable) {
|
|
428
437
|
// isCascadingOverwritten always starts out as false, so true signifies a change
|
|
429
|
-
hasCascadingChanged =
|
|
438
|
+
hasCascadingChanged =
|
|
439
|
+
isCascadingOverwritten ||
|
|
440
|
+
isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||
|
|
441
|
+
isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);
|
|
430
442
|
}
|
|
431
443
|
|
|
432
444
|
// Callback to parent to tell that something is dirty
|
|
@@ -442,19 +454,30 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
442
454
|
fieldKeyToTypeMap: Object;
|
|
443
455
|
|
|
444
456
|
/**
|
|
445
|
-
* Determines if cascading policy is enabled based on
|
|
457
|
+
* Determines if cascading policy is enabled through props based on
|
|
446
458
|
* whether it has an id or not.
|
|
447
459
|
*
|
|
448
460
|
* @param {Object} props - component props
|
|
449
461
|
* @return {boolean} true if cascading policy is enabled
|
|
450
462
|
*/
|
|
451
|
-
|
|
463
|
+
isCascadingEnabledThroughProps(props: Props) {
|
|
452
464
|
if (props.cascadePolicy) {
|
|
453
465
|
return !!props.cascadePolicy.id;
|
|
454
466
|
}
|
|
455
467
|
return false;
|
|
456
468
|
}
|
|
457
469
|
|
|
470
|
+
/**
|
|
471
|
+
* Determines if ai extraction is enabled based on
|
|
472
|
+
* if cascade policy type is ai_extract
|
|
473
|
+
*
|
|
474
|
+
* @param {Object} props - component props
|
|
475
|
+
* @return {boolean} true if ai extraction is enabled
|
|
476
|
+
*/
|
|
477
|
+
isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {
|
|
478
|
+
return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;
|
|
479
|
+
}
|
|
480
|
+
|
|
458
481
|
/**
|
|
459
482
|
* Toggles the edit mode
|
|
460
483
|
*
|
|
@@ -590,6 +613,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
590
613
|
render() {
|
|
591
614
|
const {
|
|
592
615
|
canUseAIFolderExtraction = false,
|
|
616
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
593
617
|
cascadePolicy = {},
|
|
594
618
|
isDirty,
|
|
595
619
|
isCascadingPolicyApplicable,
|
|
@@ -617,6 +641,9 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
617
641
|
// Animate short and tall cards at consistent speeds.
|
|
618
642
|
const animationDuration = (fields.length + 1) * 50;
|
|
619
643
|
|
|
644
|
+
const isExistingAIExtractionCascadePolicy =
|
|
645
|
+
this.isCascadingEnabledThroughProps(this.props) && this.isAIFolderExtractionEnabledThroughProps(this.props);
|
|
646
|
+
|
|
620
647
|
return (
|
|
621
648
|
<div ref={this.collapsibleRef}>
|
|
622
649
|
<Collapsible
|
|
@@ -647,10 +674,14 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
647
674
|
<CascadePolicy
|
|
648
675
|
canEdit={isEditing && !!cascadePolicy.canEdit}
|
|
649
676
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
677
|
+
canUseAIFolderExtractionAgentSelector={
|
|
678
|
+
canUseAIFolderExtractionAgentSelector
|
|
679
|
+
}
|
|
650
680
|
isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}
|
|
651
681
|
isCascadingEnabled={isCascadingEnabled}
|
|
652
682
|
isCascadingOverwritten={isCascadingOverwritten}
|
|
653
683
|
isCustomMetadata={isProperties}
|
|
684
|
+
isExistingAIExtractionCascadePolicy={isExistingAIExtractionCascadePolicy}
|
|
654
685
|
onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}
|
|
655
686
|
onCascadeModeChange={this.onCascadeModeChange}
|
|
656
687
|
onCascadeToggle={this.onCascadeToggle}
|
|
@@ -669,6 +700,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
669
700
|
canEdit={isEditing}
|
|
670
701
|
data={data}
|
|
671
702
|
errors={errors}
|
|
703
|
+
isDisabled={isAIFolderExtractionEnabled}
|
|
672
704
|
onFieldChange={this.onFieldChange}
|
|
673
705
|
onFieldRemove={this.onFieldRemove}
|
|
674
706
|
template={template}
|
|
@@ -7,6 +7,7 @@ import type { JSONPatchOperations } from '../../common/types/api';
|
|
|
7
7
|
|
|
8
8
|
type Props = {
|
|
9
9
|
canUseAIFolderExtraction?: boolean,
|
|
10
|
+
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
10
11
|
editors?: Array<MetadataEditor>,
|
|
11
12
|
isCascadingPolicyApplicable?: boolean,
|
|
12
13
|
onModification?: (id: string, isDirty: boolean) => void,
|
|
@@ -22,6 +23,7 @@ type Props = {
|
|
|
22
23
|
|
|
23
24
|
const Instances = ({
|
|
24
25
|
canUseAIFolderExtraction = false,
|
|
26
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
25
27
|
isCascadingPolicyApplicable = false,
|
|
26
28
|
editors = [],
|
|
27
29
|
onModification,
|
|
@@ -37,6 +39,7 @@ const Instances = ({
|
|
|
37
39
|
<Instance
|
|
38
40
|
canEdit={instance.canEdit}
|
|
39
41
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
42
|
+
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
40
43
|
cascadePolicy={instance.cascadePolicy}
|
|
41
44
|
data={instance.data}
|
|
42
45
|
hasError={hasError}
|
|
@@ -15,6 +15,7 @@ type Props = {
|
|
|
15
15
|
blurExceptionClassNames?: Array<string>,
|
|
16
16
|
canAdd: boolean,
|
|
17
17
|
canUseAIFolderExtraction?: boolean,
|
|
18
|
+
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
18
19
|
editors?: Array<MetadataEditor>,
|
|
19
20
|
isCascadingPolicyApplicable?: boolean,
|
|
20
21
|
isDropdownBusy?: boolean,
|
|
@@ -37,6 +38,7 @@ const MetadataInstanceEditor = ({
|
|
|
37
38
|
blurExceptionClassNames,
|
|
38
39
|
canAdd,
|
|
39
40
|
canUseAIFolderExtraction = false,
|
|
41
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
40
42
|
isCascadingPolicyApplicable = false,
|
|
41
43
|
isDropdownBusy,
|
|
42
44
|
editors = [],
|
|
@@ -64,6 +66,7 @@ const MetadataInstanceEditor = ({
|
|
|
64
66
|
<ScrollWrapper>
|
|
65
67
|
<Instances
|
|
66
68
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
69
|
+
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
67
70
|
editors={editors}
|
|
68
71
|
isCascadingPolicyApplicable={isCascadingPolicyApplicable}
|
|
69
72
|
onModification={onModification}
|
|
@@ -13,7 +13,7 @@ import { Flyout, Overlay } from '../../components/flyout';
|
|
|
13
13
|
|
|
14
14
|
import MenuToggle from '../../components/dropdown-menu/MenuToggle';
|
|
15
15
|
import messages from './messages';
|
|
16
|
-
import TEMPLATE_CUSTOM_PROPERTIES from './constants';
|
|
16
|
+
import { TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
17
17
|
import type { MetadataTemplate } from '../../common/types/metadata';
|
|
18
18
|
import './TemplateDropdown.scss';
|
|
19
19
|
|