box-ui-elements 23.4.0-beta.30 → 23.4.0-beta.32
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.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.css +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/common/types/metadata.js.flow +6 -0
- package/es/common/types/metadata.js.map +1 -1
- package/es/elements/content-sidebar/SidebarNav.js +14 -3
- package/es/elements/content-sidebar/SidebarNav.js.flow +23 -3
- package/es/elements/content-sidebar/SidebarNav.js.map +1 -1
- package/es/elements/content-sidebar/SidebarNavTablist.js +58 -17
- package/es/elements/content-sidebar/SidebarNavTablist.js.flow +80 -21
- package/es/elements/content-sidebar/SidebarNavTablist.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +53 -23
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +69 -27
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +26 -4
- package/es/features/metadata-instance-editor/Instance.js.flow +33 -4
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/features/metadata-instance-editor/constants.js +4 -1
- package/es/features/metadata-instance-editor/constants.js.flow +10 -1
- package/es/features/metadata-instance-editor/constants.js.map +1 -1
- package/es/features/metadata-instance-editor/messages.js +16 -0
- package/es/features/metadata-instance-editor/messages.js.flow +21 -0
- package/es/features/metadata-instance-editor/messages.js.map +1 -1
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js +32 -0
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js.flow +36 -0
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js.map +1 -0
- package/i18n/bn-IN.js +4 -0
- package/i18n/da-DK.js +4 -0
- package/i18n/de-DE.js +4 -0
- package/i18n/en-AU.js +4 -0
- package/i18n/en-CA.js +4 -0
- package/i18n/en-GB.js +4 -0
- package/i18n/en-US.js +4 -0
- package/i18n/en-US.properties +8 -0
- package/i18n/en-x-pseudo.js +4 -0
- package/i18n/es-419.js +4 -0
- package/i18n/es-ES.js +4 -0
- package/i18n/fi-FI.js +4 -0
- package/i18n/fr-CA.js +4 -0
- package/i18n/fr-FR.js +4 -0
- package/i18n/hi-IN.js +4 -0
- package/i18n/it-IT.js +4 -0
- package/i18n/ja-JP.js +4 -0
- package/i18n/ko-KR.js +4 -0
- package/i18n/nb-NO.js +4 -0
- package/i18n/nl-NL.js +4 -0
- package/i18n/pl-PL.js +4 -0
- package/i18n/pt-BR.js +4 -0
- package/i18n/ru-RU.js +4 -0
- package/i18n/sv-SE.js +4 -0
- package/i18n/tr-TR.js +4 -0
- package/i18n/zh-CN.js +4 -0
- package/i18n/zh-TW.js +4 -0
- package/package.json +7 -7
- package/src/common/types/metadata.js +6 -0
- package/src/elements/content-sidebar/SidebarNav.js +23 -3
- package/src/elements/content-sidebar/SidebarNavTablist.js +80 -21
- package/src/elements/content-sidebar/__tests__/SidebarNav.test.js +99 -147
- package/src/elements/content-sidebar/__tests__/SidebarNavTablist.test.js +189 -42
- package/src/features/metadata-instance-editor/CascadePolicy.js +69 -27
- package/src/features/metadata-instance-editor/Instance.js +33 -4
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +70 -63
- package/src/features/metadata-instance-editor/__tests__/Instance.test.js +34 -19
- package/src/features/metadata-instance-editor/__tests__/Instances.test.js +15 -10
- package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +53 -10
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +2 -1
- package/src/features/metadata-instance-editor/constants.js +10 -1
- package/src/features/metadata-instance-editor/messages.js +21 -0
- package/src/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js +36 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +0 -108
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { InlineNotice } from '@box/blueprint-web';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { FormattedMessage, useIntl } from 'react-intl';
|
|
6
|
+
|
|
5
7
|
// $FlowFixMe
|
|
6
|
-
import
|
|
8
|
+
import { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';
|
|
9
|
+
// $FlowFixMe
|
|
10
|
+
import { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';
|
|
7
11
|
import Toggle from '../../components/toggle';
|
|
8
12
|
import { RadioButton, RadioGroup } from '../../components/radio';
|
|
9
13
|
import Link from '../../components/link/Link';
|
|
10
14
|
import IconAlertDefault from '../../icons/general/IconAlertDefault';
|
|
11
15
|
import messages from './messages';
|
|
12
16
|
import './CascadePolicy.scss';
|
|
17
|
+
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';
|
|
13
18
|
const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
|
|
14
19
|
const AI_LINK = 'https://www.box.com/ai';
|
|
15
|
-
const agents = [{
|
|
16
|
-
id: '1',
|
|
17
|
-
name: 'Basic',
|
|
18
|
-
isEnterpriseDefault: true
|
|
19
|
-
}, {
|
|
20
|
-
id: '2',
|
|
21
|
-
name: 'Enhanced (Gemini 2.5 Pro)',
|
|
22
|
-
isEnterpriseDefault: false
|
|
23
|
-
}];
|
|
24
20
|
const CascadePolicy = ({
|
|
25
21
|
canEdit,
|
|
26
22
|
canUseAIFolderExtraction,
|
|
@@ -29,16 +25,47 @@ const CascadePolicy = ({
|
|
|
29
25
|
isCascadingOverwritten,
|
|
30
26
|
isCustomMetadata,
|
|
31
27
|
isAIFolderExtractionEnabled,
|
|
32
|
-
|
|
28
|
+
isExistingCascadePolicy,
|
|
33
29
|
onAIFolderExtractionToggle,
|
|
30
|
+
onAIAgentSelect,
|
|
34
31
|
onCascadeToggle,
|
|
35
32
|
onCascadeModeChange,
|
|
36
33
|
shouldShowCascadeOptions
|
|
37
34
|
}) => {
|
|
35
|
+
const {
|
|
36
|
+
formatMessage
|
|
37
|
+
} = useIntl();
|
|
38
38
|
const readOnlyState = isCascadingEnabled ? /*#__PURE__*/React.createElement("div", {
|
|
39
39
|
className: "metadata-cascade-notice"
|
|
40
40
|
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.metadataCascadePolicyEnabledInfo)) : null;
|
|
41
|
-
|
|
41
|
+
const agents = React.useMemo(() => [{
|
|
42
|
+
id: STANDARD_AGENT_ID,
|
|
43
|
+
name: formatMessage(messages.standardAgentName),
|
|
44
|
+
isEnterpriseDefault: true
|
|
45
|
+
}, {
|
|
46
|
+
id: ENHANCED_AGENT_ID,
|
|
47
|
+
name: formatMessage(messages.enhancedAgentName),
|
|
48
|
+
isEnterpriseDefault: false,
|
|
49
|
+
customIcon: BoxAiAdvancedColor
|
|
50
|
+
}], [formatMessage]);
|
|
51
|
+
|
|
52
|
+
// BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>
|
|
53
|
+
// Since we're passing in our own agents, we don't need to make an API call,
|
|
54
|
+
// so we wrap the store data in a Promise to satisfy the component's interface requirements.
|
|
55
|
+
const agentFetcher = useCallback(() => {
|
|
56
|
+
return Promise.resolve({
|
|
57
|
+
agents
|
|
58
|
+
});
|
|
59
|
+
}, [agents]);
|
|
60
|
+
const handleAgentSelect = useCallback(agent => {
|
|
61
|
+
if (onAIAgentSelect) {
|
|
62
|
+
onAIAgentSelect(agent);
|
|
63
|
+
}
|
|
64
|
+
}, [onAIAgentSelect]);
|
|
65
|
+
return canEdit ? /*#__PURE__*/React.createElement(React.Fragment, null, isExistingCascadePolicy && /*#__PURE__*/React.createElement(InlineNotice, {
|
|
66
|
+
variant: "info",
|
|
67
|
+
variantIconAriaLabel: formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)
|
|
68
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.cascadePolicyOptionsDisabledNotice)), /*#__PURE__*/React.createElement("div", {
|
|
42
69
|
className: "metadata-cascade-editor"
|
|
43
70
|
}, /*#__PURE__*/React.createElement("div", {
|
|
44
71
|
className: "metadata-cascade-enable",
|
|
@@ -46,6 +73,7 @@ const CascadePolicy = ({
|
|
|
46
73
|
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FormattedMessage, _extends({
|
|
47
74
|
tagName: "strong"
|
|
48
75
|
}, messages.enableCascadePolicy)), !isCustomMetadata && /*#__PURE__*/React.createElement(Toggle, {
|
|
76
|
+
"aria-label": formatMessage(messages.enableCascadePolicy),
|
|
49
77
|
className: `metadata-cascade-toggle ${isCascadingEnabled ? 'cascade-on' : 'cascade-off'}`,
|
|
50
78
|
isOn: isCascadingEnabled,
|
|
51
79
|
label: "",
|
|
@@ -67,9 +95,11 @@ const CascadePolicy = ({
|
|
|
67
95
|
onChange: e => onCascadeModeChange(e.target.value === 'overwrite'),
|
|
68
96
|
value: isCascadingOverwritten ? 'overwrite' : 'skip'
|
|
69
97
|
}, /*#__PURE__*/React.createElement(RadioButton, {
|
|
98
|
+
isDisabled: isExistingCascadePolicy,
|
|
70
99
|
label: /*#__PURE__*/React.createElement(FormattedMessage, messages.cascadePolicySkipMode),
|
|
71
100
|
value: "skip"
|
|
72
101
|
}), /*#__PURE__*/React.createElement(RadioButton, {
|
|
102
|
+
isDisabled: isExistingCascadePolicy,
|
|
73
103
|
label: /*#__PURE__*/React.createElement(FormattedMessage, messages.cascadePolicyOverwriteMode),
|
|
74
104
|
value: "overwrite"
|
|
75
105
|
})))), shouldShowCascadeOptions && canUseAIFolderExtraction && /*#__PURE__*/React.createElement("div", {
|
|
@@ -77,16 +107,17 @@ const CascadePolicy = ({
|
|
|
77
107
|
"data-testid": "ai-folder-extraction"
|
|
78
108
|
}, /*#__PURE__*/React.createElement("div", {
|
|
79
109
|
className: "metadata-cascade-enable"
|
|
80
|
-
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(
|
|
110
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(BoxAiColor, {
|
|
81
111
|
className: "metadata-cascade-ai-logo",
|
|
82
112
|
width: 16,
|
|
83
113
|
height: 16
|
|
84
114
|
}), /*#__PURE__*/React.createElement(FormattedMessage, _extends({
|
|
85
115
|
tagName: "strong"
|
|
86
116
|
}, messages.enableAIAutofill)), /*#__PURE__*/React.createElement(Toggle, {
|
|
117
|
+
"aria-label": formatMessage(messages.enableAIAutofill),
|
|
87
118
|
className: "metadata-cascade-toggle",
|
|
88
119
|
isOn: isAIFolderExtractionEnabled,
|
|
89
|
-
isDisabled:
|
|
120
|
+
isDisabled: isExistingCascadePolicy,
|
|
90
121
|
label: "",
|
|
91
122
|
onChange: e => onAIFolderExtractionToggle(e.target.checked)
|
|
92
123
|
})), /*#__PURE__*/React.createElement("div", {
|
|
@@ -95,14 +126,13 @@ const CascadePolicy = ({
|
|
|
95
126
|
className: "cascade-policy-link",
|
|
96
127
|
href: AI_LINK,
|
|
97
128
|
target: "_blank"
|
|
98
|
-
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), canUseAIFolderExtractionAgentSelector && /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), canUseAIFolderExtractionAgentSelector && isAIFolderExtractionEnabled && /*#__PURE__*/React.createElement("div", {
|
|
99
130
|
className: "metadata-cascade-ai-agent-selector"
|
|
100
|
-
}, /*#__PURE__*/React.createElement(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
variant: "sidebar"
|
|
131
|
+
}, /*#__PURE__*/React.createElement(BoxAiAgentSelectorWithApiContainer, {
|
|
132
|
+
disabled: isExistingCascadePolicy,
|
|
133
|
+
fetcher: agentFetcher,
|
|
134
|
+
onSelectAgent: handleAgentSelect,
|
|
135
|
+
recordAction: () => {}
|
|
106
136
|
}))))) : readOnlyState;
|
|
107
137
|
};
|
|
108
138
|
export default CascadePolicy;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { FormattedMessage } from 'react-intl';
|
|
4
3
|
|
|
5
|
-
import {
|
|
4
|
+
import { InlineNotice } from '@box/blueprint-web';
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
import { FormattedMessage, useIntl } from 'react-intl';
|
|
7
|
+
|
|
8
|
+
// $FlowFixMe
|
|
9
|
+
import { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';
|
|
10
|
+
import { type AgentType } from '@box/box-ai-agent-selector';
|
|
11
|
+
|
|
6
12
|
// $FlowFixMe
|
|
7
|
-
import
|
|
13
|
+
import { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';
|
|
8
14
|
|
|
9
15
|
import Toggle from '../../components/toggle';
|
|
10
16
|
import { RadioButton, RadioGroup } from '../../components/radio';
|
|
@@ -12,23 +18,11 @@ import Link from '../../components/link/Link';
|
|
|
12
18
|
import IconAlertDefault from '../../icons/general/IconAlertDefault';
|
|
13
19
|
import messages from './messages';
|
|
14
20
|
import './CascadePolicy.scss';
|
|
21
|
+
import { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';
|
|
15
22
|
|
|
16
23
|
const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
|
|
17
24
|
const AI_LINK = 'https://www.box.com/ai';
|
|
18
25
|
|
|
19
|
-
const agents = [
|
|
20
|
-
{
|
|
21
|
-
id: '1',
|
|
22
|
-
name: 'Basic',
|
|
23
|
-
isEnterpriseDefault: true,
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: '2',
|
|
27
|
-
name: 'Enhanced (Gemini 2.5 Pro)',
|
|
28
|
-
isEnterpriseDefault: false,
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
|
-
|
|
32
26
|
type Props = {
|
|
33
27
|
canEdit: boolean,
|
|
34
28
|
canUseAIFolderExtraction: boolean,
|
|
@@ -37,8 +31,9 @@ type Props = {
|
|
|
37
31
|
isCascadingEnabled: boolean,
|
|
38
32
|
isCascadingOverwritten: boolean,
|
|
39
33
|
isCustomMetadata: boolean,
|
|
40
|
-
|
|
34
|
+
isExistingCascadePolicy: boolean,
|
|
41
35
|
onAIFolderExtractionToggle: (value: boolean) => void,
|
|
36
|
+
onAIAgentSelect?: (agent: AgentType | null) => void,
|
|
42
37
|
onCascadeModeChange: (value: boolean) => void,
|
|
43
38
|
onCascadeToggle: (value: boolean) => void,
|
|
44
39
|
shouldShowCascadeOptions: boolean,
|
|
@@ -52,26 +47,71 @@ const CascadePolicy = ({
|
|
|
52
47
|
isCascadingOverwritten,
|
|
53
48
|
isCustomMetadata,
|
|
54
49
|
isAIFolderExtractionEnabled,
|
|
55
|
-
|
|
50
|
+
isExistingCascadePolicy,
|
|
56
51
|
onAIFolderExtractionToggle,
|
|
52
|
+
onAIAgentSelect,
|
|
57
53
|
onCascadeToggle,
|
|
58
54
|
onCascadeModeChange,
|
|
59
55
|
shouldShowCascadeOptions,
|
|
60
56
|
}: Props) => {
|
|
57
|
+
const { formatMessage } = useIntl();
|
|
58
|
+
|
|
61
59
|
const readOnlyState = isCascadingEnabled ? (
|
|
62
60
|
<div className="metadata-cascade-notice">
|
|
63
61
|
<FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />
|
|
64
62
|
</div>
|
|
65
63
|
) : null;
|
|
66
64
|
|
|
65
|
+
const agents = React.useMemo(
|
|
66
|
+
() => [
|
|
67
|
+
{
|
|
68
|
+
id: STANDARD_AGENT_ID,
|
|
69
|
+
name: formatMessage(messages.standardAgentName),
|
|
70
|
+
isEnterpriseDefault: true,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: ENHANCED_AGENT_ID,
|
|
74
|
+
name: formatMessage(messages.enhancedAgentName),
|
|
75
|
+
isEnterpriseDefault: false,
|
|
76
|
+
customIcon: BoxAiAdvancedColor,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
[formatMessage],
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>
|
|
83
|
+
// Since we're passing in our own agents, we don't need to make an API call,
|
|
84
|
+
// so we wrap the store data in a Promise to satisfy the component's interface requirements.
|
|
85
|
+
const agentFetcher = useCallback(() => {
|
|
86
|
+
return Promise.resolve({ agents });
|
|
87
|
+
}, [agents]);
|
|
88
|
+
|
|
89
|
+
const handleAgentSelect = useCallback(
|
|
90
|
+
(agent: AgentType | null) => {
|
|
91
|
+
if (onAIAgentSelect) {
|
|
92
|
+
onAIAgentSelect(agent);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
[onAIAgentSelect],
|
|
96
|
+
);
|
|
97
|
+
|
|
67
98
|
return canEdit ? (
|
|
68
99
|
<>
|
|
100
|
+
{isExistingCascadePolicy && (
|
|
101
|
+
<InlineNotice
|
|
102
|
+
variant="info"
|
|
103
|
+
variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}
|
|
104
|
+
>
|
|
105
|
+
<FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />
|
|
106
|
+
</InlineNotice>
|
|
107
|
+
)}
|
|
69
108
|
<div className="metadata-cascade-editor">
|
|
70
109
|
<div className="metadata-cascade-enable" data-testid="metadata-cascade-enable">
|
|
71
110
|
<div>
|
|
72
111
|
<FormattedMessage tagName="strong" {...messages.enableCascadePolicy} />
|
|
73
112
|
{!isCustomMetadata && (
|
|
74
113
|
<Toggle
|
|
114
|
+
aria-label={formatMessage(messages.enableCascadePolicy)}
|
|
75
115
|
className={`metadata-cascade-toggle ${
|
|
76
116
|
isCascadingEnabled ? 'cascade-on' : 'cascade-off'
|
|
77
117
|
}`}
|
|
@@ -113,10 +153,12 @@ const CascadePolicy = ({
|
|
|
113
153
|
value={isCascadingOverwritten ? 'overwrite' : 'skip'}
|
|
114
154
|
>
|
|
115
155
|
<RadioButton
|
|
156
|
+
isDisabled={isExistingCascadePolicy}
|
|
116
157
|
label={<FormattedMessage {...messages.cascadePolicySkipMode} />}
|
|
117
158
|
value="skip"
|
|
118
159
|
/>
|
|
119
160
|
<RadioButton
|
|
161
|
+
isDisabled={isExistingCascadePolicy}
|
|
120
162
|
label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}
|
|
121
163
|
value="overwrite"
|
|
122
164
|
/>
|
|
@@ -128,12 +170,13 @@ const CascadePolicy = ({
|
|
|
128
170
|
<div className="metadata-cascade-editor" data-testid="ai-folder-extraction">
|
|
129
171
|
<div className="metadata-cascade-enable">
|
|
130
172
|
<div>
|
|
131
|
-
<
|
|
173
|
+
<BoxAiColor className="metadata-cascade-ai-logo" width={16} height={16} />
|
|
132
174
|
<FormattedMessage tagName="strong" {...messages.enableAIAutofill} />
|
|
133
175
|
<Toggle
|
|
176
|
+
aria-label={formatMessage(messages.enableAIAutofill)}
|
|
134
177
|
className="metadata-cascade-toggle"
|
|
135
178
|
isOn={isAIFolderExtractionEnabled}
|
|
136
|
-
isDisabled={
|
|
179
|
+
isDisabled={isExistingCascadePolicy}
|
|
137
180
|
label=""
|
|
138
181
|
onChange={e => onAIFolderExtractionToggle(e.target.checked)}
|
|
139
182
|
/>
|
|
@@ -145,14 +188,13 @@ const CascadePolicy = ({
|
|
|
145
188
|
<FormattedMessage {...messages.aiAutofillLearnMore} />
|
|
146
189
|
</Link>
|
|
147
190
|
</div>
|
|
148
|
-
{canUseAIFolderExtractionAgentSelector && (
|
|
191
|
+
{canUseAIFolderExtractionAgentSelector && isAIFolderExtractionEnabled && (
|
|
149
192
|
<div className="metadata-cascade-ai-agent-selector">
|
|
150
|
-
<
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
variant="sidebar"
|
|
193
|
+
<BoxAiAgentSelectorWithApiContainer
|
|
194
|
+
disabled={isExistingCascadePolicy}
|
|
195
|
+
fetcher={agentFetcher}
|
|
196
|
+
onSelectAgent={handleAgentSelect}
|
|
197
|
+
recordAction={() => {}}
|
|
156
198
|
/>
|
|
157
199
|
</div>
|
|
158
200
|
)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadePolicy.js","names":["React","FormattedMessage","BoxAiAgentSelector","BoxAiLogo","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","COMMUNITY_LINK","AI_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"],"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';\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';\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 <BoxAiAgentSelector\n agents={agents}\n onErrorAction={() => {}}\n requestState=\"success\"\n selectedAgent={agents[0]}\n variant=\"sidebar\"\n />\n </div>\n )}\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","InlineNotice","useCallback","FormattedMessage","useIntl","BoxAiAdvancedColor","BoxAiColor","BoxAiAgentSelectorWithApiContainer","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","STANDARD_AGENT_ID","ENHANCED_AGENT_ID","COMMUNITY_LINK","AI_LINK","CascadePolicy","canEdit","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingCascadePolicy","onAIFolderExtractionToggle","onAIAgentSelect","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","formatMessage","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","agents","useMemo","id","name","standardAgentName","isEnterpriseDefault","enhancedAgentName","customIcon","agentFetcher","Promise","resolve","handleAgentSelect","agent","Fragment","variant","variantIconAriaLabel","cascadePolicyOptionsDisabledNoticeIconAriaLabel","cascadePolicyOptionsDisabledNotice","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","isDisabled","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","disabled","fetcher","onSelectAgent","recordAction"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport { InlineNotice } from '@box/blueprint-web';\nimport { useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\n// $FlowFixMe\nimport { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';\nimport { type AgentType } from '@box/box-ai-agent-selector';\n\n// $FlowFixMe\nimport { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';\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';\nimport { STANDARD_AGENT_ID, ENHANCED_AGENT_ID } from './constants';\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';\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 isExistingCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onAIAgentSelect?: (agent: AgentType | null) => 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 isExistingCascadePolicy,\n onAIFolderExtractionToggle,\n onAIAgentSelect,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const { formatMessage } = useIntl();\n\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n const agents = React.useMemo(\n () => [\n {\n id: STANDARD_AGENT_ID,\n name: formatMessage(messages.standardAgentName),\n isEnterpriseDefault: true,\n },\n {\n id: ENHANCED_AGENT_ID,\n name: formatMessage(messages.enhancedAgentName),\n isEnterpriseDefault: false,\n customIcon: BoxAiAdvancedColor,\n },\n ],\n [formatMessage],\n );\n\n // BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>\n // Since we're passing in our own agents, we don't need to make an API call,\n // so we wrap the store data in a Promise to satisfy the component's interface requirements.\n const agentFetcher = useCallback(() => {\n return Promise.resolve({ agents });\n }, [agents]);\n\n const handleAgentSelect = useCallback(\n (agent: AgentType | null) => {\n if (onAIAgentSelect) {\n onAIAgentSelect(agent);\n }\n },\n [onAIAgentSelect],\n );\n\n return canEdit ? (\n <>\n {isExistingCascadePolicy && (\n <InlineNotice\n variant=\"info\"\n variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}\n >\n <FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />\n </InlineNotice>\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 aria-label={formatMessage(messages.enableCascadePolicy)}\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 isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n isDisabled={isExistingCascadePolicy}\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 <BoxAiColor className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n aria-label={formatMessage(messages.enableAIAutofill)}\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingCascadePolicy}\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 && isAIFolderExtractionEnabled && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <BoxAiAgentSelectorWithApiContainer\n disabled={isExistingCascadePolicy}\n fetcher={agentFetcher}\n onSelectAgent={handleAgentSelect}\n recordAction={() => {}}\n />\n </div>\n )}\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 { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
30
|
+
import { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES, ENHANCED_AGENT_CONFIGURATION, ENHANCED_AGENT_ID } 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';
|
|
@@ -126,6 +126,7 @@ class Instance extends React.PureComponent {
|
|
|
126
126
|
onSave
|
|
127
127
|
} = this.props;
|
|
128
128
|
const {
|
|
129
|
+
cascadePolicyConfiguration,
|
|
129
130
|
data: currentData,
|
|
130
131
|
errors,
|
|
131
132
|
isAIFolderExtractionEnabled,
|
|
@@ -146,7 +147,8 @@ class Instance extends React.PureComponent {
|
|
|
146
147
|
id: cascadePolicy ? cascadePolicy.id : undefined,
|
|
147
148
|
isEnabled: isCascadingEnabled,
|
|
148
149
|
overwrite: isCascadingOverwritten,
|
|
149
|
-
isAIFolderExtractionEnabled
|
|
150
|
+
isAIFolderExtractionEnabled,
|
|
151
|
+
cascadePolicyConfiguration
|
|
150
152
|
} : undefined, cloneDeep(currentData));
|
|
151
153
|
});
|
|
152
154
|
/**
|
|
@@ -247,6 +249,24 @@ class Instance extends React.PureComponent {
|
|
|
247
249
|
isAIFolderExtractionEnabled: value
|
|
248
250
|
}, this.setDirty);
|
|
249
251
|
});
|
|
252
|
+
/**
|
|
253
|
+
* Handles the selection of an AI agent
|
|
254
|
+
* @param {AgentType | null} agent - The selected agent
|
|
255
|
+
*/
|
|
256
|
+
_defineProperty(this, "onAIAgentSelect", agent => {
|
|
257
|
+
// '2' is the id for the enhanced agent
|
|
258
|
+
if (agent && agent.id === ENHANCED_AGENT_ID) {
|
|
259
|
+
this.setState({
|
|
260
|
+
cascadePolicyConfiguration: {
|
|
261
|
+
agent: ENHANCED_AGENT_CONFIGURATION
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
} else {
|
|
265
|
+
this.setState({
|
|
266
|
+
cascadePolicyConfiguration: null
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
});
|
|
250
270
|
/**
|
|
251
271
|
* Render the correct delete message to show based on custom metadata and file/folder metadata
|
|
252
272
|
*/
|
|
@@ -393,6 +413,7 @@ class Instance extends React.PureComponent {
|
|
|
393
413
|
getState(props) {
|
|
394
414
|
const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);
|
|
395
415
|
return {
|
|
416
|
+
cascadePolicyConfiguration: null,
|
|
396
417
|
data: cloneDeep(props.data),
|
|
397
418
|
errors: {},
|
|
398
419
|
isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),
|
|
@@ -591,7 +612,7 @@ class Instance extends React.PureComponent {
|
|
|
591
612
|
|
|
592
613
|
// Animate short and tall cards at consistent speeds.
|
|
593
614
|
const animationDuration = (fields.length + 1) * 50;
|
|
594
|
-
const
|
|
615
|
+
const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);
|
|
595
616
|
return /*#__PURE__*/React.createElement("div", {
|
|
596
617
|
ref: this.collapsibleRef
|
|
597
618
|
}, /*#__PURE__*/React.createElement(Collapsible, {
|
|
@@ -624,7 +645,8 @@ class Instance extends React.PureComponent {
|
|
|
624
645
|
isCascadingEnabled: isCascadingEnabled,
|
|
625
646
|
isCascadingOverwritten: isCascadingOverwritten,
|
|
626
647
|
isCustomMetadata: isProperties,
|
|
627
|
-
|
|
648
|
+
isExistingCascadePolicy: isExistingCascadePolicy,
|
|
649
|
+
onAIAgentSelect: this.onAIAgentSelect,
|
|
628
650
|
onAIFolderExtractionToggle: this.onAIFolderExtractionToggle,
|
|
629
651
|
onCascadeModeChange: this.onCascadeModeChange,
|
|
630
652
|
onCascadeToggle: this.onCascadeToggle,
|
|
@@ -6,6 +6,7 @@ import isEqual from 'lodash/isEqual';
|
|
|
6
6
|
import cloneDeep from 'lodash/cloneDeep';
|
|
7
7
|
import noop from 'lodash/noop';
|
|
8
8
|
|
|
9
|
+
import type { AgentType } from '@box/box-ai-agent-selector';
|
|
9
10
|
import Collapsible from '../../components/collapsible/Collapsible';
|
|
10
11
|
import Form from '../../components/form-elements/form/Form';
|
|
11
12
|
import LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';
|
|
@@ -24,7 +25,12 @@ import MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';
|
|
|
24
25
|
import Footer from './Footer';
|
|
25
26
|
import messages from './messages';
|
|
26
27
|
import { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';
|
|
27
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
CASCADE_POLICY_TYPE_AI_EXTRACT,
|
|
30
|
+
TEMPLATE_CUSTOM_PROPERTIES,
|
|
31
|
+
ENHANCED_AGENT_CONFIGURATION,
|
|
32
|
+
ENHANCED_AGENT_ID,
|
|
33
|
+
} from './constants';
|
|
28
34
|
import {
|
|
29
35
|
JSON_PATCH_OP_REMOVE,
|
|
30
36
|
JSON_PATCH_OP_ADD,
|
|
@@ -38,6 +44,7 @@ import type {
|
|
|
38
44
|
MetadataFields,
|
|
39
45
|
MetadataTemplate,
|
|
40
46
|
MetadataCascadePolicy,
|
|
47
|
+
MetadataCascadePolicyConfiguration,
|
|
41
48
|
MetadataCascadingPolicyData,
|
|
42
49
|
MetadataTemplateField,
|
|
43
50
|
MetadataFieldValue,
|
|
@@ -69,6 +76,7 @@ type Props = {
|
|
|
69
76
|
};
|
|
70
77
|
|
|
71
78
|
type State = {
|
|
79
|
+
cascadePolicyConfiguration: MetadataCascadePolicyConfiguration | null,
|
|
72
80
|
data: Object,
|
|
73
81
|
errors: { [string]: React.Node },
|
|
74
82
|
isAIFolderExtractionEnabled: boolean,
|
|
@@ -212,6 +220,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
212
220
|
onSave,
|
|
213
221
|
}: Props = this.props;
|
|
214
222
|
const {
|
|
223
|
+
cascadePolicyConfiguration,
|
|
215
224
|
data: currentData,
|
|
216
225
|
errors,
|
|
217
226
|
isAIFolderExtractionEnabled,
|
|
@@ -229,6 +238,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
229
238
|
// reset state if cascading policy is removed
|
|
230
239
|
isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,
|
|
231
240
|
});
|
|
241
|
+
|
|
232
242
|
onSave(
|
|
233
243
|
id,
|
|
234
244
|
this.createJSONPatch(currentData, originalData),
|
|
@@ -239,6 +249,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
239
249
|
isEnabled: isCascadingEnabled,
|
|
240
250
|
overwrite: isCascadingOverwritten,
|
|
241
251
|
isAIFolderExtractionEnabled,
|
|
252
|
+
cascadePolicyConfiguration,
|
|
242
253
|
}
|
|
243
254
|
: undefined,
|
|
244
255
|
cloneDeep(currentData),
|
|
@@ -342,6 +353,23 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
342
353
|
this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);
|
|
343
354
|
};
|
|
344
355
|
|
|
356
|
+
/**
|
|
357
|
+
* Handles the selection of an AI agent
|
|
358
|
+
* @param {AgentType | null} agent - The selected agent
|
|
359
|
+
*/
|
|
360
|
+
onAIAgentSelect = (agent: AgentType | null): void => {
|
|
361
|
+
// '2' is the id for the enhanced agent
|
|
362
|
+
if (agent && agent.id === ENHANCED_AGENT_ID) {
|
|
363
|
+
this.setState({
|
|
364
|
+
cascadePolicyConfiguration: {
|
|
365
|
+
agent: ENHANCED_AGENT_CONFIGURATION,
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
} else {
|
|
369
|
+
this.setState({ cascadePolicyConfiguration: null });
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
|
|
345
373
|
/**
|
|
346
374
|
* Returns the state from props
|
|
347
375
|
*
|
|
@@ -351,6 +379,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
351
379
|
const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);
|
|
352
380
|
|
|
353
381
|
return {
|
|
382
|
+
cascadePolicyConfiguration: null,
|
|
354
383
|
data: cloneDeep(props.data),
|
|
355
384
|
errors: {},
|
|
356
385
|
isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),
|
|
@@ -641,8 +670,7 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
641
670
|
// Animate short and tall cards at consistent speeds.
|
|
642
671
|
const animationDuration = (fields.length + 1) * 50;
|
|
643
672
|
|
|
644
|
-
const
|
|
645
|
-
this.isCascadingEnabledThroughProps(this.props) && this.isAIFolderExtractionEnabledThroughProps(this.props);
|
|
673
|
+
const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);
|
|
646
674
|
|
|
647
675
|
return (
|
|
648
676
|
<div ref={this.collapsibleRef}>
|
|
@@ -681,7 +709,8 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
681
709
|
isCascadingEnabled={isCascadingEnabled}
|
|
682
710
|
isCascadingOverwritten={isCascadingOverwritten}
|
|
683
711
|
isCustomMetadata={isProperties}
|
|
684
|
-
|
|
712
|
+
isExistingCascadePolicy={isExistingCascadePolicy}
|
|
713
|
+
onAIAgentSelect={this.onAIAgentSelect}
|
|
685
714
|
onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}
|
|
686
715
|
onCascadeModeChange={this.onCascadeModeChange}
|
|
687
716
|
onCascadeToggle={this.onCascadeToggle}
|