box-ui-elements 23.4.0-beta.1 → 23.4.0-beta.3
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/sidebar.js +1 -1
- package/es/common/types/metadata.js.flow +1 -0
- package/es/common/types/metadata.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/i18n/bn-IN.js +4 -4
- package/i18n/bn-IN.properties +4 -4
- package/i18n/da-DK.js +4 -4
- package/i18n/da-DK.properties +4 -4
- package/i18n/de-DE.js +4 -4
- package/i18n/de-DE.properties +4 -4
- package/i18n/es-419.js +3 -3
- package/i18n/es-419.properties +3 -3
- package/i18n/es-ES.js +3 -3
- package/i18n/es-ES.properties +3 -3
- package/i18n/fi-FI.js +3 -3
- package/i18n/fi-FI.properties +3 -3
- package/i18n/fr-CA.js +4 -4
- package/i18n/fr-CA.properties +4 -4
- package/i18n/fr-FR.js +4 -4
- package/i18n/fr-FR.properties +4 -4
- package/i18n/hi-IN.js +4 -4
- package/i18n/hi-IN.properties +4 -4
- package/i18n/it-IT.js +4 -4
- package/i18n/it-IT.properties +4 -4
- package/i18n/ko-KR.js +4 -4
- package/i18n/ko-KR.properties +4 -4
- package/i18n/nb-NO.js +4 -4
- package/i18n/nb-NO.properties +4 -4
- package/i18n/nl-NL.js +4 -4
- package/i18n/nl-NL.properties +4 -4
- package/i18n/pl-PL.js +4 -4
- package/i18n/pl-PL.properties +4 -4
- package/i18n/pt-BR.js +4 -4
- package/i18n/pt-BR.properties +4 -4
- package/i18n/ru-RU.js +4 -4
- package/i18n/ru-RU.properties +4 -4
- package/i18n/sv-SE.js +4 -4
- package/i18n/sv-SE.properties +4 -4
- package/i18n/tr-TR.js +4 -4
- package/i18n/tr-TR.properties +4 -4
- package/i18n/zh-CN.js +4 -4
- package/i18n/zh-CN.properties +4 -4
- package/i18n/zh-TW.js +4 -4
- package/i18n/zh-TW.properties +4 -4
- package/package.json +1 -1
- package/src/common/types/metadata.js +1 -0
- 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":"metadata.js","names":["FIELD_TYPE_DATE","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_MULTISELECT","FIELD_TYPE_STRING","FIELD_TYPE_TAXONOMY"],"sources":["../../../src/common/types/metadata.js"],"sourcesContent":["// @flow strict\nimport {\n FIELD_TYPE_DATE,\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_MULTISELECT,\n FIELD_TYPE_STRING,\n FIELD_TYPE_TAXONOMY,\n} from '../../features/metadata-instance-fields/constants';\nimport type { SkillCards } from './skills';\n\ntype MetadataFieldType =\n | typeof FIELD_TYPE_DATE\n | typeof FIELD_TYPE_ENUM\n | typeof FIELD_TYPE_FLOAT\n | typeof FIELD_TYPE_MULTISELECT\n | typeof FIELD_TYPE_STRING\n | typeof FIELD_TYPE_TAXONOMY;\n\ntype MetadataTemplateFieldOption = {\n id?: string,\n key: string,\n};\n\nexport type TaxonomyLevel = {\n description: string,\n displayName: string,\n level: number,\n};\n\ntype MetadataTemplateField = {\n description?: string,\n displayName: string,\n hidden?: boolean,\n id: string,\n isHidden?: boolean,\n key: string, // V2\n options?: Array<MetadataTemplateFieldOption>, // V3\n type: MetadataFieldType,\n levels?: Array<TaxonomyLevel>,\n namespace?: string,\n taxonomyKey?: string,\n taxonomy_key?: string,\n};\n\ntype MetadataTemplate = {\n displayName?: string,\n fields?: Array<MetadataTemplateField>,\n hidden?: boolean,\n id: string,\n isHidden?: boolean,\n scope: string, // V2\n templateKey: string, // V3\n};\n\ntype MetadataTemplateSchemaResponse = {\n data?: MetadataTemplate,\n};\n\ntype MetadataSkillsTemplate = {\n archivedItemTemplate?: {\n archiveDate: string,\n },\n boxSkillsCards?: SkillCards,\n};\n\n// $FlowFixMe flow strict doesn't like use of \"any\"\ntype MetadataFieldValue = string | number | Array<any>;\n\ntype MetadataFields = { [string]: MetadataFieldValue };\n\ntype MetadataQueryInstanceTypeField = {\n displayName: string,\n key: string,\n options?: MetadataTemplateFieldOption,\n type: string,\n value: ?MetadataFieldValue,\n};\n\ntype MetadataQueryInstanceTemplate = {\n fields: Array<MetadataQueryInstanceTypeField>,\n id: string,\n};\n\ntype MetadataType = {\n enterprise?: MetadataQueryInstanceTemplate,\n global?: MetadataSkillsTemplate,\n};\n\ntype MetadataCascadePolicy = {\n canEdit?: boolean,\n id?: string,\n};\n\ntype MetadataCascadingPolicyData = {\n id?: string,\n isEnabled: boolean,\n overwrite: boolean,\n};\n\ntype MetadataInstance = {\n canEdit: boolean,\n cascadePolicy?: MetadataCascadePolicy,\n data: MetadataFields,\n id: string,\n};\n\ntype MetadataInstanceV2 = {\n $canEdit: boolean,\n $id: string,\n $parent: string,\n $scope: string,\n $template: string,\n $type: string,\n $typeVersion: number,\n $version: number,\n};\n\ntype MetadataEditor = {\n hasError?: boolean,\n instance: MetadataInstance,\n isDirty?: boolean,\n template: MetadataTemplate,\n};\n\ntype MetadataSuggestion = {\n $scope: string,\n $templateKey: string,\n suggestions: { [key: string]: string | number | string[] },\n};\n\ntype MetadataOptionEntryAncestor = {\n id: string,\n display_name: string,\n level: string,\n};\n\ntype MetadataOptionEntry = {\n id: string,\n display_name: string,\n level: number,\n ancestors: MetadataOptionEntryAncestor[],\n deprecated: boolean,\n selectable: boolean,\n};\n\ntype MetadataOptions = {\n entries: MetadataOptionEntry[],\n next_marker: string | null,\n result_count: number,\n};\n\ntype MetadataTemplateInstanceField = {\n description?: string,\n displayName?: string,\n hidden?: boolean,\n id?: string,\n key: string, // V2\n levels?: Array<TaxonomyLevel>,\n options?: Array<MetadataTemplateFieldOption>, // V3\n type: MetadataFieldType,\n value: MetadataFieldValue,\n};\n\ntype MetadataTemplateInstance = {\n canEdit: boolean,\n displayName?: string,\n hidden?: boolean,\n id: string,\n fields: MetadataTemplateInstanceField[],\n scope: string,\n templateKey: string,\n type: string,\n};\n\nexport type {\n MetadataTemplateInstanceField,\n MetadataTemplateInstance,\n MetadataFieldType,\n MetadataTemplateFieldOption,\n MetadataTemplateField,\n MetadataTemplate,\n MetadataTemplateSchemaResponse,\n MetadataFieldValue,\n MetadataFields,\n MetadataQueryInstanceTypeField,\n MetadataType,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataInstanceV2,\n MetadataEditor,\n MetadataSuggestion,\n MetadataOptions,\n};\n"],"mappings":"AACA,SACIA,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,QAChB,mDAAmD;;AA0D1D","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"metadata.js","names":["FIELD_TYPE_DATE","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_MULTISELECT","FIELD_TYPE_STRING","FIELD_TYPE_TAXONOMY"],"sources":["../../../src/common/types/metadata.js"],"sourcesContent":["// @flow strict\nimport {\n FIELD_TYPE_DATE,\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_MULTISELECT,\n FIELD_TYPE_STRING,\n FIELD_TYPE_TAXONOMY,\n} from '../../features/metadata-instance-fields/constants';\nimport type { SkillCards } from './skills';\n\ntype MetadataFieldType =\n | typeof FIELD_TYPE_DATE\n | typeof FIELD_TYPE_ENUM\n | typeof FIELD_TYPE_FLOAT\n | typeof FIELD_TYPE_MULTISELECT\n | typeof FIELD_TYPE_STRING\n | typeof FIELD_TYPE_TAXONOMY;\n\ntype MetadataTemplateFieldOption = {\n id?: string,\n key: string,\n};\n\nexport type TaxonomyLevel = {\n description: string,\n displayName: string,\n level: number,\n};\n\ntype MetadataTemplateField = {\n description?: string,\n displayName: string,\n hidden?: boolean,\n id: string,\n isHidden?: boolean,\n key: string, // V2\n options?: Array<MetadataTemplateFieldOption>, // V3\n type: MetadataFieldType,\n levels?: Array<TaxonomyLevel>,\n namespace?: string,\n taxonomyKey?: string,\n taxonomy_key?: string,\n};\n\ntype MetadataTemplate = {\n displayName?: string,\n fields?: Array<MetadataTemplateField>,\n hidden?: boolean,\n id: string,\n isHidden?: boolean,\n scope: string, // V2\n templateKey: string, // V3\n};\n\ntype MetadataTemplateSchemaResponse = {\n data?: MetadataTemplate,\n};\n\ntype MetadataSkillsTemplate = {\n archivedItemTemplate?: {\n archiveDate: string,\n },\n boxSkillsCards?: SkillCards,\n};\n\n// $FlowFixMe flow strict doesn't like use of \"any\"\ntype MetadataFieldValue = string | number | Array<any>;\n\ntype MetadataFields = { [string]: MetadataFieldValue };\n\ntype MetadataQueryInstanceTypeField = {\n displayName: string,\n key: string,\n options?: MetadataTemplateFieldOption,\n type: string,\n value: ?MetadataFieldValue,\n};\n\ntype MetadataQueryInstanceTemplate = {\n fields: Array<MetadataQueryInstanceTypeField>,\n id: string,\n};\n\ntype MetadataType = {\n enterprise?: MetadataQueryInstanceTemplate,\n global?: MetadataSkillsTemplate,\n};\n\ntype MetadataCascadePolicy = {\n canEdit?: boolean,\n id?: string,\n cascadePolicyType?: string,\n};\n\ntype MetadataCascadingPolicyData = {\n id?: string,\n isEnabled: boolean,\n overwrite: boolean,\n};\n\ntype MetadataInstance = {\n canEdit: boolean,\n cascadePolicy?: MetadataCascadePolicy,\n data: MetadataFields,\n id: string,\n};\n\ntype MetadataInstanceV2 = {\n $canEdit: boolean,\n $id: string,\n $parent: string,\n $scope: string,\n $template: string,\n $type: string,\n $typeVersion: number,\n $version: number,\n};\n\ntype MetadataEditor = {\n hasError?: boolean,\n instance: MetadataInstance,\n isDirty?: boolean,\n template: MetadataTemplate,\n};\n\ntype MetadataSuggestion = {\n $scope: string,\n $templateKey: string,\n suggestions: { [key: string]: string | number | string[] },\n};\n\ntype MetadataOptionEntryAncestor = {\n id: string,\n display_name: string,\n level: string,\n};\n\ntype MetadataOptionEntry = {\n id: string,\n display_name: string,\n level: number,\n ancestors: MetadataOptionEntryAncestor[],\n deprecated: boolean,\n selectable: boolean,\n};\n\ntype MetadataOptions = {\n entries: MetadataOptionEntry[],\n next_marker: string | null,\n result_count: number,\n};\n\ntype MetadataTemplateInstanceField = {\n description?: string,\n displayName?: string,\n hidden?: boolean,\n id?: string,\n key: string, // V2\n levels?: Array<TaxonomyLevel>,\n options?: Array<MetadataTemplateFieldOption>, // V3\n type: MetadataFieldType,\n value: MetadataFieldValue,\n};\n\ntype MetadataTemplateInstance = {\n canEdit: boolean,\n displayName?: string,\n hidden?: boolean,\n id: string,\n fields: MetadataTemplateInstanceField[],\n scope: string,\n templateKey: string,\n type: string,\n};\n\nexport type {\n MetadataTemplateInstanceField,\n MetadataTemplateInstance,\n MetadataFieldType,\n MetadataTemplateFieldOption,\n MetadataTemplateField,\n MetadataTemplate,\n MetadataTemplateSchemaResponse,\n MetadataFieldValue,\n MetadataFields,\n MetadataQueryInstanceTypeField,\n MetadataType,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataInstanceV2,\n MetadataEditor,\n MetadataSuggestion,\n MetadataOptions,\n};\n"],"mappings":"AACA,SACIA,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,QAChB,mDAAmD;;AA0D1D","ignoreList":[]}
|
|
@@ -26,10 +26,12 @@ const agents = [{
|
|
|
26
26
|
const CascadePolicy = ({
|
|
27
27
|
canEdit,
|
|
28
28
|
canUseAIFolderExtraction,
|
|
29
|
+
canUseAIFolderExtractionAgentSelector,
|
|
29
30
|
isCascadingEnabled,
|
|
30
31
|
isCascadingOverwritten,
|
|
31
32
|
isCustomMetadata,
|
|
32
33
|
isAIFolderExtractionEnabled,
|
|
34
|
+
isExistingAIExtractionCascadePolicy,
|
|
33
35
|
onAIFolderExtractionToggle,
|
|
34
36
|
onCascadeToggle,
|
|
35
37
|
onCascadeModeChange,
|
|
@@ -41,7 +43,8 @@ const CascadePolicy = ({
|
|
|
41
43
|
return canEdit ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
42
44
|
className: "metadata-cascade-editor"
|
|
43
45
|
}, /*#__PURE__*/React.createElement("div", {
|
|
44
|
-
className: "metadata-cascade-enable"
|
|
46
|
+
className: "metadata-cascade-enable",
|
|
47
|
+
"data-testid": "metadata-cascade-enable"
|
|
45
48
|
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FormattedMessage, _extends({
|
|
46
49
|
tagName: "strong"
|
|
47
50
|
}, messages.enableCascadePolicy)), !isCustomMetadata && /*#__PURE__*/React.createElement(Toggle, {
|
|
@@ -85,6 +88,7 @@ const CascadePolicy = ({
|
|
|
85
88
|
}, messages.enableAIAutofill)), /*#__PURE__*/React.createElement(Toggle, {
|
|
86
89
|
className: "metadata-cascade-toggle",
|
|
87
90
|
isOn: isAIFolderExtractionEnabled,
|
|
91
|
+
isDisabled: isExistingAIExtractionCascadePolicy,
|
|
88
92
|
label: "",
|
|
89
93
|
onChange: e => onAIFolderExtractionToggle(e.target.checked)
|
|
90
94
|
})), /*#__PURE__*/React.createElement("div", {
|
|
@@ -93,7 +97,7 @@ const CascadePolicy = ({
|
|
|
93
97
|
className: "cascade-policy-link",
|
|
94
98
|
href: AI_LINK,
|
|
95
99
|
target: "_blank"
|
|
96
|
-
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), /*#__PURE__*/React.createElement("div", {
|
|
100
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), canUseAIFolderExtractionAgentSelector && /*#__PURE__*/React.createElement("div", {
|
|
97
101
|
className: "metadata-cascade-ai-agent-selector"
|
|
98
102
|
}, /*#__PURE__*/React.createElement(TooltipProvider, null, /*#__PURE__*/React.createElement(BoxAiAgentSelector, {
|
|
99
103
|
agents: agents,
|
|
@@ -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}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadePolicy.js","names":["React","FormattedMessage","BoxAiAgentSelector","InlineNotice","TooltipProvider","BoxAiLogo","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","COMMUNITY_LINK","AI_LINK","PRICING_LINK","agents","id","name","isEnterpriseDefault","CascadePolicy","canEdit","canUseAIFolderExtraction","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","onAIFolderExtractionToggle","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","Fragment","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","onErrorAction","requestState","selectedAgent","variant","aiAutofillNotice","values","pricingLink","aiAutofillPricingDetails"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { BoxAiAgentSelector } from '@box/box-ai-agent-selector';\nimport { InlineNotice, TooltipProvider } from '@box/blueprint-web';\n// $FlowFixMe\nimport BoxAiLogo from '@box/blueprint-web-assets/icons/Logo/BoxAiLogo';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\nconst PRICING_LINK = 'https://www.box.com/pricing';\n\nconst agents = [\n {\n id: '1',\n name: 'Basic',\n isEnterpriseDefault: true,\n },\n {\n id: '2',\n name: 'Enhanced (Gemini 2.5 Pro)',\n isEnterpriseDefault: false,\n },\n];\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n onAIFolderExtractionToggle,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n return canEdit ? (\n <>\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiLogo className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n <div className=\"metadata-cascade-ai-agent-selector\">\n <TooltipProvider>\n <BoxAiAgentSelector\n agents={agents}\n onErrorAction={() => {}}\n requestState=\"success\"\n selectedAgent={agents[0]}\n variant=\"sidebar\"\n />\n </TooltipProvider>\n </div>\n <InlineNotice className=\"metadata-cascade-ai-notice\" variant=\"info\">\n <FormattedMessage\n {...messages.aiAutofillNotice}\n values={{\n pricingLink: (\n <Link className=\"cascade-policy-link\" href={PRICING_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillPricingDetails} />\n </Link>\n ),\n }}\n />\n </InlineNotice>\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CascadePolicy.js","names":["React","FormattedMessage","BoxAiAgentSelector","InlineNotice","TooltipProvider","BoxAiLogo","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","COMMUNITY_LINK","AI_LINK","PRICING_LINK","agents","id","name","isEnterpriseDefault","CascadePolicy","canEdit","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingAIExtractionCascadePolicy","onAIFolderExtractionToggle","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","Fragment","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","isDisabled","aiAutofillDescription","aiAutofillLearnMore","onErrorAction","requestState","selectedAgent","variant","aiAutofillNotice","values","pricingLink","aiAutofillPricingDetails"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { BoxAiAgentSelector } from '@box/box-ai-agent-selector';\nimport { InlineNotice, TooltipProvider } from '@box/blueprint-web';\n// $FlowFixMe\nimport BoxAiLogo from '@box/blueprint-web-assets/icons/Logo/BoxAiLogo';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\nconst PRICING_LINK = 'https://www.box.com/pricing';\n\nconst agents = [\n {\n id: '1',\n name: 'Basic',\n isEnterpriseDefault: true,\n },\n {\n id: '2',\n name: 'Enhanced (Gemini 2.5 Pro)',\n isEnterpriseDefault: false,\n },\n];\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n canUseAIFolderExtractionAgentSelector: boolean,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n isExistingAIExtractionCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n canUseAIFolderExtractionAgentSelector,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n isExistingAIExtractionCascadePolicy,\n onAIFolderExtractionToggle,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n return canEdit ? (\n <>\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\" data-testid=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiLogo className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingAIExtractionCascadePolicy}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n {canUseAIFolderExtractionAgentSelector && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <TooltipProvider>\n <BoxAiAgentSelector\n agents={agents}\n onErrorAction={() => {}}\n requestState=\"success\"\n selectedAgent={agents[0]}\n variant=\"sidebar\"\n />\n </TooltipProvider>\n </div>\n )}\n <InlineNotice className=\"metadata-cascade-ai-notice\" variant=\"info\">\n <FormattedMessage\n {...messages.aiAutofillNotice}\n values={{\n pricingLink: (\n <Link className=\"cascade-policy-link\" href={PRICING_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillPricingDetails} />\n </Link>\n ),\n }}\n />\n </InlineNotice>\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,7 +27,7 @@ import MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';
|
|
|
27
27
|
import Footer from './Footer';
|
|
28
28
|
import messages from './messages';
|
|
29
29
|
import { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';
|
|
30
|
-
import TEMPLATE_CUSTOM_PROPERTIES from './constants';
|
|
30
|
+
import { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
31
31
|
import { JSON_PATCH_OP_REMOVE, JSON_PATCH_OP_ADD, JSON_PATCH_OP_REPLACE, JSON_PATCH_OP_TEST } from '../../common/constants';
|
|
32
32
|
import { isValidValue } from '../metadata-instance-fields/validateMetadataField';
|
|
33
33
|
import { isHidden } from './metadataUtil';
|
|
@@ -128,6 +128,7 @@ class Instance extends React.PureComponent {
|
|
|
128
128
|
const {
|
|
129
129
|
data: currentData,
|
|
130
130
|
errors,
|
|
131
|
+
isAIFolderExtractionEnabled,
|
|
131
132
|
isCascadingEnabled,
|
|
132
133
|
isCascadingOverwritten
|
|
133
134
|
} = this.state;
|
|
@@ -137,13 +138,15 @@ class Instance extends React.PureComponent {
|
|
|
137
138
|
this.setState({
|
|
138
139
|
isBusy: true,
|
|
139
140
|
isEditing: false,
|
|
140
|
-
|
|
141
|
+
// reset state if cascading policy is removed
|
|
142
|
+
isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false
|
|
141
143
|
});
|
|
142
144
|
onSave(id, this.createJSONPatch(currentData, originalData), isCascadingPolicyApplicable ? {
|
|
143
145
|
canEdit: cascadePolicy ? cascadePolicy.canEdit : false,
|
|
144
146
|
id: cascadePolicy ? cascadePolicy.id : undefined,
|
|
145
147
|
isEnabled: isCascadingEnabled,
|
|
146
|
-
overwrite: isCascadingOverwritten
|
|
148
|
+
overwrite: isCascadingOverwritten,
|
|
149
|
+
isAIFolderExtractionEnabled
|
|
147
150
|
} : undefined, cloneDeep(currentData));
|
|
148
151
|
});
|
|
149
152
|
/**
|
|
@@ -276,13 +279,14 @@ class Instance extends React.PureComponent {
|
|
|
276
279
|
const {
|
|
277
280
|
data,
|
|
278
281
|
isCascadingEnabled,
|
|
279
|
-
isCascadingOverwritten
|
|
282
|
+
isCascadingOverwritten,
|
|
283
|
+
isAIFolderExtractionEnabled
|
|
280
284
|
} = this.state;
|
|
281
285
|
const hasDataChanged = !isEqual(data, this.props.data);
|
|
282
286
|
let hasCascadingChanged = false;
|
|
283
287
|
if (isCascadingPolicyApplicable) {
|
|
284
288
|
// isCascadingOverwritten always starts out as false, so true signifies a change
|
|
285
|
-
hasCascadingChanged = isCascadingOverwritten || isCascadingEnabled !== this.
|
|
289
|
+
hasCascadingChanged = isCascadingOverwritten || isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) || isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);
|
|
286
290
|
}
|
|
287
291
|
|
|
288
292
|
// Callback to parent to tell that something is dirty
|
|
@@ -387,11 +391,11 @@ class Instance extends React.PureComponent {
|
|
|
387
391
|
* @return {Object} - react state
|
|
388
392
|
*/
|
|
389
393
|
getState(props) {
|
|
390
|
-
const isCascadingEnabled = this.
|
|
394
|
+
const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);
|
|
391
395
|
return {
|
|
392
396
|
data: cloneDeep(props.data),
|
|
393
397
|
errors: {},
|
|
394
|
-
isAIFolderExtractionEnabled:
|
|
398
|
+
isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),
|
|
395
399
|
isBusy: false,
|
|
396
400
|
isCascadingEnabled,
|
|
397
401
|
isCascadingOverwritten: false,
|
|
@@ -439,18 +443,31 @@ class Instance extends React.PureComponent {
|
|
|
439
443
|
return this.renderDeleteMessage(isFile, template);
|
|
440
444
|
}
|
|
441
445
|
/**
|
|
442
|
-
* Determines if cascading policy is enabled based on
|
|
446
|
+
* Determines if cascading policy is enabled through props based on
|
|
443
447
|
* whether it has an id or not.
|
|
444
448
|
*
|
|
445
449
|
* @param {Object} props - component props
|
|
446
450
|
* @return {boolean} true if cascading policy is enabled
|
|
447
451
|
*/
|
|
448
|
-
|
|
452
|
+
isCascadingEnabledThroughProps(props) {
|
|
449
453
|
if (props.cascadePolicy) {
|
|
450
454
|
return !!props.cascadePolicy.id;
|
|
451
455
|
}
|
|
452
456
|
return false;
|
|
453
457
|
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Determines if ai extraction is enabled based on
|
|
461
|
+
* if cascade policy type is ai_extract
|
|
462
|
+
*
|
|
463
|
+
* @param {Object} props - component props
|
|
464
|
+
* @return {boolean} true if ai extraction is enabled
|
|
465
|
+
*/
|
|
466
|
+
isAIFolderExtractionEnabledThroughProps({
|
|
467
|
+
cascadePolicy
|
|
468
|
+
}) {
|
|
469
|
+
return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;
|
|
470
|
+
}
|
|
454
471
|
/**
|
|
455
472
|
* Creates JSON Patch operations from the passed in
|
|
456
473
|
* data while comparing it to the original data from props.
|
|
@@ -546,6 +563,7 @@ class Instance extends React.PureComponent {
|
|
|
546
563
|
render() {
|
|
547
564
|
const {
|
|
548
565
|
canUseAIFolderExtraction = false,
|
|
566
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
549
567
|
cascadePolicy = {},
|
|
550
568
|
isDirty,
|
|
551
569
|
isCascadingPolicyApplicable,
|
|
@@ -573,6 +591,7 @@ class Instance extends React.PureComponent {
|
|
|
573
591
|
|
|
574
592
|
// Animate short and tall cards at consistent speeds.
|
|
575
593
|
const animationDuration = (fields.length + 1) * 50;
|
|
594
|
+
const isExistingAIExtractionCascadePolicy = this.isCascadingEnabledThroughProps(this.props) && this.isAIFolderExtractionEnabledThroughProps(this.props);
|
|
576
595
|
return /*#__PURE__*/React.createElement("div", {
|
|
577
596
|
ref: this.collapsibleRef
|
|
578
597
|
}, /*#__PURE__*/React.createElement(Collapsible, {
|
|
@@ -600,10 +619,12 @@ class Instance extends React.PureComponent {
|
|
|
600
619
|
}, isCascadingPolicyApplicable && /*#__PURE__*/React.createElement(CascadePolicy, {
|
|
601
620
|
canEdit: isEditing && !!cascadePolicy.canEdit,
|
|
602
621
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
622
|
+
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
603
623
|
isAIFolderExtractionEnabled: isAIFolderExtractionEnabled,
|
|
604
624
|
isCascadingEnabled: isCascadingEnabled,
|
|
605
625
|
isCascadingOverwritten: isCascadingOverwritten,
|
|
606
626
|
isCustomMetadata: isProperties,
|
|
627
|
+
isExistingAIExtractionCascadePolicy: isExistingAIExtractionCascadePolicy,
|
|
607
628
|
onAIFolderExtractionToggle: this.onAIFolderExtractionToggle,
|
|
608
629
|
onCascadeModeChange: this.onCascadeModeChange,
|
|
609
630
|
onCascadeToggle: this.onCascadeToggle,
|
|
@@ -617,6 +638,7 @@ class Instance extends React.PureComponent {
|
|
|
617
638
|
canEdit: isEditing,
|
|
618
639
|
data: data,
|
|
619
640
|
errors: errors,
|
|
641
|
+
isDisabled: isAIFolderExtractionEnabled,
|
|
620
642
|
onFieldChange: this.onFieldChange,
|
|
621
643
|
onFieldRemove: this.onFieldRemove,
|
|
622
644
|
template: template
|
|
@@ -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}
|