box-ui-elements 23.3.0-beta.5 → 23.3.0-beta.7

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.
Files changed (94) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +1 -1
  3. package/dist/openwith.js +1 -1
  4. package/dist/picker.js +1 -1
  5. package/dist/preview.css +1 -1
  6. package/dist/preview.js +1 -1
  7. package/dist/sharing.js +1 -1
  8. package/dist/sidebar.css +1 -1
  9. package/dist/sidebar.js +1 -1
  10. package/dist/uploader.js +1 -1
  11. package/es/features/metadata-instance-editor/CascadePolicy.js +60 -2
  12. package/es/features/metadata-instance-editor/CascadePolicy.js.flow +72 -1
  13. package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
  14. package/es/features/metadata-instance-editor/CascadePolicy.scss +15 -1
  15. package/es/features/metadata-instance-editor/CascadePolicy.stories.js +24 -0
  16. package/es/features/metadata-instance-editor/CascadePolicy.stories.js.flow +31 -0
  17. package/es/features/metadata-instance-editor/CascadePolicy.stories.js.map +1 -0
  18. package/es/features/metadata-instance-editor/Instance.js +14 -2
  19. package/es/features/metadata-instance-editor/Instance.js.flow +23 -3
  20. package/es/features/metadata-instance-editor/Instance.js.map +1 -1
  21. package/es/features/metadata-instance-editor/Instances.js +2 -0
  22. package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
  23. package/es/features/metadata-instance-editor/Instances.js.map +1 -1
  24. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
  25. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
  26. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
  27. package/es/features/metadata-instance-editor/messages.js +20 -0
  28. package/es/features/metadata-instance-editor/messages.js.flow +26 -0
  29. package/es/features/metadata-instance-editor/messages.js.map +1 -1
  30. package/i18n/bn-IN.js +5 -0
  31. package/i18n/bn-IN.properties +10 -0
  32. package/i18n/da-DK.js +5 -0
  33. package/i18n/da-DK.properties +10 -0
  34. package/i18n/de-DE.js +5 -0
  35. package/i18n/de-DE.properties +10 -0
  36. package/i18n/en-AU.js +5 -0
  37. package/i18n/en-AU.properties +10 -0
  38. package/i18n/en-CA.js +5 -0
  39. package/i18n/en-CA.properties +10 -0
  40. package/i18n/en-GB.js +5 -0
  41. package/i18n/en-GB.properties +10 -0
  42. package/i18n/en-US.js +5 -0
  43. package/i18n/en-US.properties +10 -0
  44. package/i18n/en-x-pseudo.js +1016 -1011
  45. package/i18n/en-x-pseudo.properties +1021 -1011
  46. package/i18n/es-419.js +5 -0
  47. package/i18n/es-419.properties +10 -0
  48. package/i18n/es-ES.js +5 -0
  49. package/i18n/es-ES.properties +10 -0
  50. package/i18n/fi-FI.js +5 -0
  51. package/i18n/fi-FI.properties +10 -0
  52. package/i18n/fr-CA.js +5 -0
  53. package/i18n/fr-CA.properties +10 -0
  54. package/i18n/fr-FR.js +5 -0
  55. package/i18n/fr-FR.properties +10 -0
  56. package/i18n/hi-IN.js +5 -0
  57. package/i18n/hi-IN.properties +10 -0
  58. package/i18n/it-IT.js +5 -0
  59. package/i18n/it-IT.properties +10 -0
  60. package/i18n/ja-JP.js +5 -0
  61. package/i18n/ja-JP.properties +10 -0
  62. package/i18n/ko-KR.js +5 -0
  63. package/i18n/ko-KR.properties +10 -0
  64. package/i18n/nb-NO.js +5 -0
  65. package/i18n/nb-NO.properties +10 -0
  66. package/i18n/nl-NL.js +5 -0
  67. package/i18n/nl-NL.properties +10 -0
  68. package/i18n/pl-PL.js +5 -0
  69. package/i18n/pl-PL.properties +10 -0
  70. package/i18n/pt-BR.js +5 -0
  71. package/i18n/pt-BR.properties +10 -0
  72. package/i18n/ru-RU.js +5 -0
  73. package/i18n/ru-RU.properties +10 -0
  74. package/i18n/sv-SE.js +5 -0
  75. package/i18n/sv-SE.properties +10 -0
  76. package/i18n/tr-TR.js +5 -0
  77. package/i18n/tr-TR.properties +10 -0
  78. package/i18n/zh-CN.js +5 -0
  79. package/i18n/zh-CN.properties +10 -0
  80. package/i18n/zh-TW.js +5 -0
  81. package/i18n/zh-TW.properties +10 -0
  82. package/package.json +2 -2
  83. package/src/features/metadata-instance-editor/CascadePolicy.js +72 -1
  84. package/src/features/metadata-instance-editor/CascadePolicy.scss +15 -1
  85. package/src/features/metadata-instance-editor/CascadePolicy.stories.js +31 -0
  86. package/src/features/metadata-instance-editor/Instance.js +23 -3
  87. package/src/features/metadata-instance-editor/Instances.js +3 -0
  88. package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
  89. package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +51 -0
  90. package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +9 -9
  91. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +4 -1
  92. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +2 -0
  93. package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
  94. package/src/features/metadata-instance-editor/messages.js +26 -0
@@ -1,6 +1,9 @@
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
3
  import { FormattedMessage } from 'react-intl';
4
+ import { BoxAiAgentSelector } from '@box/box-ai-agent-selector';
5
+ import { InlineNotice, TooltipProvider } from '@box/blueprint-web';
6
+ import BoxAiLogo from '@box/blueprint-web-assets/icons/Logo/BoxAiLogo';
4
7
  import Toggle from '../../components/toggle';
5
8
  import { RadioButton, RadioGroup } from '../../components/radio';
6
9
  import Link from '../../components/link/Link';
@@ -8,11 +11,25 @@ import IconAlertDefault from '../../icons/general/IconAlertDefault';
8
11
  import messages from './messages';
9
12
  import './CascadePolicy.scss';
10
13
  const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
14
+ const AI_LINK = 'https://www.box.com/ai';
15
+ const PRICING_LINK = 'https://www.box.com/pricing';
16
+ const agents = [{
17
+ id: '1',
18
+ name: 'Basic',
19
+ isEnterpriseDefault: true
20
+ }, {
21
+ id: '2',
22
+ name: 'Enhanced (Gemini 2.5 Pro)',
23
+ isEnterpriseDefault: false
24
+ }];
11
25
  const CascadePolicy = ({
12
26
  canEdit,
27
+ canUseAIFolderExtraction,
13
28
  isCascadingEnabled,
14
29
  isCascadingOverwritten,
15
30
  isCustomMetadata,
31
+ isAIFolderExtractionEnabled,
32
+ onAIFolderExtractionToggle,
16
33
  onCascadeToggle,
17
34
  onCascadeModeChange,
18
35
  shouldShowCascadeOptions
@@ -34,7 +51,7 @@ const CascadePolicy = ({
34
51
  })), !isCustomMetadata ? /*#__PURE__*/React.createElement("div", {
35
52
  className: "cascade-policy-text"
36
53
  }, /*#__PURE__*/React.createElement(FormattedMessage, messages.applyCascadePolicyText), "\xA0", /*#__PURE__*/React.createElement(Link, {
37
- className: "cascade-policy-learnmore-link",
54
+ className: "cascade-policy-link",
38
55
  href: COMMUNITY_LINK,
39
56
  target: "_blank"
40
57
  }, /*#__PURE__*/React.createElement(FormattedMessage, messages.cascadePolicyLearnMore))) : /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.cannotApplyCascadePolicyText)))), shouldShowCascadeOptions && /*#__PURE__*/React.createElement("div", {
@@ -53,7 +70,48 @@ const CascadePolicy = ({
53
70
  }), /*#__PURE__*/React.createElement(RadioButton, {
54
71
  label: /*#__PURE__*/React.createElement(FormattedMessage, messages.cascadePolicyOverwriteMode),
55
72
  value: "overwrite"
56
- }))))) : readOnlyState;
73
+ })))), shouldShowCascadeOptions && canUseAIFolderExtraction && /*#__PURE__*/React.createElement("div", {
74
+ className: "metadata-cascade-editor",
75
+ "data-testid": "ai-folder-extraction"
76
+ }, /*#__PURE__*/React.createElement("div", {
77
+ className: "metadata-cascade-enable"
78
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(BoxAiLogo, {
79
+ className: "metadata-cascade-ai-logo",
80
+ width: 16,
81
+ height: 16
82
+ }), /*#__PURE__*/React.createElement(FormattedMessage, _extends({
83
+ tagName: "strong"
84
+ }, messages.enableAIAutofill)), /*#__PURE__*/React.createElement(Toggle, {
85
+ className: "metadata-cascade-toggle",
86
+ isOn: isAIFolderExtractionEnabled,
87
+ label: "",
88
+ onChange: e => onAIFolderExtractionToggle(e.target.checked)
89
+ })), /*#__PURE__*/React.createElement("div", {
90
+ className: "cascade-policy-text"
91
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillDescription), "\xA0", /*#__PURE__*/React.createElement(Link, {
92
+ className: "cascade-policy-link",
93
+ href: AI_LINK,
94
+ target: "_blank"
95
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), /*#__PURE__*/React.createElement("div", {
96
+ className: "metadata-cascade-ai-agent-selector"
97
+ }, /*#__PURE__*/React.createElement(TooltipProvider, null, /*#__PURE__*/React.createElement(BoxAiAgentSelector, {
98
+ agents: agents,
99
+ onErrorAction: () => {},
100
+ requestState: "success",
101
+ selectedAgent: agents[0],
102
+ variant: "sidebar"
103
+ }))), /*#__PURE__*/React.createElement(InlineNotice, {
104
+ className: "metadata-cascade-ai-notice",
105
+ variant: "info"
106
+ }, /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.aiAutofillNotice, {
107
+ values: {
108
+ pricingLink: /*#__PURE__*/React.createElement(Link, {
109
+ className: "cascade-policy-link",
110
+ href: PRICING_LINK,
111
+ target: "_blank"
112
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillPricingDetails))
113
+ }
114
+ })))))) : readOnlyState;
57
115
  };
58
116
  export default CascadePolicy;
59
117
  //# sourceMappingURL=CascadePolicy.js.map
@@ -2,6 +2,10 @@
2
2
  import * as React from 'react';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
 
5
+ import { BoxAiAgentSelector } from '@box/box-ai-agent-selector';
6
+ import { InlineNotice, TooltipProvider } from '@box/blueprint-web';
7
+ import BoxAiLogo from '@box/blueprint-web-assets/icons/Logo/BoxAiLogo';
8
+
5
9
  import Toggle from '../../components/toggle';
6
10
  import { RadioButton, RadioGroup } from '../../components/radio';
7
11
  import Link from '../../components/link/Link';
@@ -10,12 +14,30 @@ import messages from './messages';
10
14
  import './CascadePolicy.scss';
11
15
 
12
16
  const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
17
+ const AI_LINK = 'https://www.box.com/ai';
18
+ const PRICING_LINK = 'https://www.box.com/pricing';
19
+
20
+ const agents = [
21
+ {
22
+ id: '1',
23
+ name: 'Basic',
24
+ isEnterpriseDefault: true,
25
+ },
26
+ {
27
+ id: '2',
28
+ name: 'Enhanced (Gemini 2.5 Pro)',
29
+ isEnterpriseDefault: false,
30
+ },
31
+ ];
13
32
 
14
33
  type Props = {
15
34
  canEdit: boolean,
35
+ canUseAIFolderExtraction: boolean,
36
+ isAIFolderExtractionEnabled: boolean,
16
37
  isCascadingEnabled: boolean,
17
38
  isCascadingOverwritten: boolean,
18
39
  isCustomMetadata: boolean,
40
+ onAIFolderExtractionToggle: (value: boolean) => void,
19
41
  onCascadeModeChange: (value: boolean) => void,
20
42
  onCascadeToggle: (value: boolean) => void,
21
43
  shouldShowCascadeOptions: boolean,
@@ -23,9 +45,12 @@ type Props = {
23
45
 
24
46
  const CascadePolicy = ({
25
47
  canEdit,
48
+ canUseAIFolderExtraction,
26
49
  isCascadingEnabled,
27
50
  isCascadingOverwritten,
28
51
  isCustomMetadata,
52
+ isAIFolderExtractionEnabled,
53
+ onAIFolderExtractionToggle,
29
54
  onCascadeToggle,
30
55
  onCascadeModeChange,
31
56
  shouldShowCascadeOptions,
@@ -57,7 +82,7 @@ const CascadePolicy = ({
57
82
  <div className="cascade-policy-text">
58
83
  <FormattedMessage {...messages.applyCascadePolicyText} />
59
84
  &nbsp;
60
- <Link className="cascade-policy-learnmore-link" href={COMMUNITY_LINK} target="_blank">
85
+ <Link className="cascade-policy-link" href={COMMUNITY_LINK} target="_blank">
61
86
  <FormattedMessage {...messages.cascadePolicyLearnMore} />
62
87
  </Link>
63
88
  </div>
@@ -96,6 +121,52 @@ const CascadePolicy = ({
96
121
  </div>
97
122
  </div>
98
123
  )}
124
+ {shouldShowCascadeOptions && canUseAIFolderExtraction && (
125
+ <div className="metadata-cascade-editor" data-testid="ai-folder-extraction">
126
+ <div className="metadata-cascade-enable">
127
+ <div>
128
+ <BoxAiLogo className="metadata-cascade-ai-logo" width={16} height={16} />
129
+ <FormattedMessage tagName="strong" {...messages.enableAIAutofill} />
130
+ <Toggle
131
+ className="metadata-cascade-toggle"
132
+ isOn={isAIFolderExtractionEnabled}
133
+ label=""
134
+ onChange={e => onAIFolderExtractionToggle(e.target.checked)}
135
+ />
136
+ </div>
137
+ <div className="cascade-policy-text">
138
+ <FormattedMessage {...messages.aiAutofillDescription} />
139
+ &nbsp;
140
+ <Link className="cascade-policy-link" href={AI_LINK} target="_blank">
141
+ <FormattedMessage {...messages.aiAutofillLearnMore} />
142
+ </Link>
143
+ </div>
144
+ <div className="metadata-cascade-ai-agent-selector">
145
+ <TooltipProvider>
146
+ <BoxAiAgentSelector
147
+ agents={agents}
148
+ onErrorAction={() => {}}
149
+ requestState="success"
150
+ selectedAgent={agents[0]}
151
+ variant="sidebar"
152
+ />
153
+ </TooltipProvider>
154
+ </div>
155
+ <InlineNotice className="metadata-cascade-ai-notice" variant="info">
156
+ <FormattedMessage
157
+ {...messages.aiAutofillNotice}
158
+ values={{
159
+ pricingLink: (
160
+ <Link className="cascade-policy-link" href={PRICING_LINK} target="_blank">
161
+ <FormattedMessage {...messages.aiAutofillPricingDetails} />
162
+ </Link>
163
+ ),
164
+ }}
165
+ />
166
+ </InlineNotice>
167
+ </div>
168
+ </div>
169
+ )}
99
170
  </>
100
171
  ) : (
101
172
  readOnlyState
@@ -1 +1 @@
1
- {"version":3,"file":"CascadePolicy.js","names":["React","FormattedMessage","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","COMMUNITY_LINK","CascadePolicy","canEdit","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","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"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\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';\n\ntype Props = {\n canEdit: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\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 &nbsp;\n <Link className=\"cascade-policy-learnmore-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 </>\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","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';\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 &nbsp;\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 &nbsp;\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":[]}
@@ -40,6 +40,16 @@ $cascade-policy-background: #f1e2fd;
40
40
  .metadata-cascade-enable {
41
41
  margin: 10px 0;
42
42
  padding: 14px 15px;
43
+
44
+ .metadata-cascade-ai-logo {
45
+ position: relative;
46
+ top: 3px;
47
+ margin-right: 3px;
48
+ }
49
+
50
+ .metadata-cascade-ai-notice {
51
+ margin-top: 12px;
52
+ }
43
53
  }
44
54
 
45
55
  .toggle-container.metadata-cascade-toggle {
@@ -52,7 +62,7 @@ $cascade-policy-background: #f1e2fd;
52
62
  clear: left;
53
63
  }
54
64
 
55
- .cascade-policy-learnmore-link {
65
+ .cascade-policy-link {
56
66
  color: $bdl-box-blue;
57
67
  }
58
68
 
@@ -68,3 +78,7 @@ $cascade-policy-background: #f1e2fd;
68
78
  }
69
79
  }
70
80
  }
81
+
82
+ .metadata-cascade-ai-agent-selector {
83
+ margin-top: 4px;
84
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import CascadePolicy from './CascadePolicy';
3
+ export const withoutAIMetadataExtraction = () => /*#__PURE__*/React.createElement(CascadePolicy, {
4
+ canEdit: true,
5
+ isCascadingEnabled: true,
6
+ onCascadeModeChange: () => {},
7
+ onCascadeToggle: () => {},
8
+ shouldShowCascadeOptions: true
9
+ });
10
+ export const withAIMetadataExtraction = () => /*#__PURE__*/React.createElement(CascadePolicy, {
11
+ canEdit: true,
12
+ canUseAIFolderExtraction: true,
13
+ isAIFolderExtractionEnabled: true,
14
+ isCascadingEnabled: true,
15
+ onAIFolderExtractionToggle: () => {},
16
+ onCascadeModeChange: () => {},
17
+ onCascadeToggle: () => {},
18
+ shouldShowCascadeOptions: true
19
+ });
20
+ export default {
21
+ title: 'Features/Metadata Instance Editor/CascadePolicy',
22
+ component: CascadePolicy
23
+ };
24
+ //# sourceMappingURL=CascadePolicy.stories.js.map
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ import CascadePolicy from './CascadePolicy';
4
+
5
+ export const withoutAIMetadataExtraction = () => (
6
+ <CascadePolicy
7
+ canEdit
8
+ isCascadingEnabled
9
+ onCascadeModeChange={() => {}}
10
+ onCascadeToggle={() => {}}
11
+ shouldShowCascadeOptions
12
+ />
13
+ );
14
+
15
+ export const withAIMetadataExtraction = () => (
16
+ <CascadePolicy
17
+ canEdit
18
+ canUseAIFolderExtraction
19
+ isAIFolderExtractionEnabled
20
+ isCascadingEnabled
21
+ onAIFolderExtractionToggle={() => {}}
22
+ onCascadeModeChange={() => {}}
23
+ onCascadeToggle={() => {}}
24
+ shouldShowCascadeOptions
25
+ />
26
+ );
27
+
28
+ export default {
29
+ title: 'Features/Metadata Instance Editor/CascadePolicy',
30
+ component: CascadePolicy,
31
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CascadePolicy.stories.js","names":["React","CascadePolicy","withoutAIMetadataExtraction","createElement","canEdit","isCascadingEnabled","onCascadeModeChange","onCascadeToggle","shouldShowCascadeOptions","withAIMetadataExtraction","canUseAIFolderExtraction","isAIFolderExtractionEnabled","onAIFolderExtractionToggle","title","component"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.stories.js"],"sourcesContent":["import * as React from 'react';\n\nimport CascadePolicy from './CascadePolicy';\n\nexport const withoutAIMetadataExtraction = () => (\n <CascadePolicy\n canEdit\n isCascadingEnabled\n onCascadeModeChange={() => {}}\n onCascadeToggle={() => {}}\n shouldShowCascadeOptions\n />\n);\n\nexport const withAIMetadataExtraction = () => (\n <CascadePolicy\n canEdit\n canUseAIFolderExtraction\n isAIFolderExtractionEnabled\n isCascadingEnabled\n onAIFolderExtractionToggle={() => {}}\n onCascadeModeChange={() => {}}\n onCascadeToggle={() => {}}\n shouldShowCascadeOptions\n />\n);\n\nexport default {\n title: 'Features/Metadata Instance Editor/CascadePolicy',\n component: CascadePolicy,\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,aAAa,MAAM,iBAAiB;AAE3C,OAAO,MAAMC,2BAA2B,GAAGA,CAAA,kBACvCF,KAAA,CAAAG,aAAA,CAACF,aAAa;EACVG,OAAO;EACPC,kBAAkB;EAClBC,mBAAmB,EAAEA,CAAA,KAAM,CAAC,CAAE;EAC9BC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAE;EAC1BC,wBAAwB;AAAA,CAC3B,CACJ;AAED,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,kBACpCT,KAAA,CAAAG,aAAA,CAACF,aAAa;EACVG,OAAO;EACPM,wBAAwB;EACxBC,2BAA2B;EAC3BN,kBAAkB;EAClBO,0BAA0B,EAAEA,CAAA,KAAM,CAAC,CAAE;EACrCN,mBAAmB,EAAEA,CAAA,KAAM,CAAC,CAAE;EAC9BC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAE;EAC1BC,wBAAwB;AAAA,CAC3B,CACJ;AAED,eAAe;EACXK,KAAK,EAAE,iDAAiD;EACxDC,SAAS,EAAEb;AACf,CAAC","ignoreList":[]}
@@ -239,6 +239,11 @@ class Instance extends React.PureComponent {
239
239
  isCascadingOverwritten: value
240
240
  }, this.setDirty);
241
241
  });
242
+ _defineProperty(this, "onAIFolderExtractionToggle", value => {
243
+ this.setState({
244
+ isAIFolderExtractionEnabled: value
245
+ }, this.setDirty);
246
+ });
242
247
  /**
243
248
  * Render the correct delete message to show based on custom metadata and file/folder metadata
244
249
  */
@@ -382,15 +387,17 @@ class Instance extends React.PureComponent {
382
387
  * @return {Object} - react state
383
388
  */
384
389
  getState(props) {
390
+ const isCascadingEnabled = this.isCascadingEnabled(props);
385
391
  return {
386
392
  data: cloneDeep(props.data),
387
393
  errors: {},
394
+ isAIFolderExtractionEnabled: false,
388
395
  isBusy: false,
389
- isCascadingEnabled: this.isCascadingEnabled(props),
396
+ isCascadingEnabled,
390
397
  isCascadingOverwritten: false,
391
398
  isEditing: false,
392
399
  shouldConfirmRemove: false,
393
- shouldShowCascadeOptions: false
400
+ shouldShowCascadeOptions: isCascadingEnabled
394
401
  };
395
402
  }
396
403
 
@@ -538,6 +545,7 @@ class Instance extends React.PureComponent {
538
545
  }
539
546
  render() {
540
547
  const {
548
+ canUseAIFolderExtraction = false,
541
549
  cascadePolicy = {},
542
550
  isDirty,
543
551
  isCascadingPolicyApplicable,
@@ -551,6 +559,7 @@ class Instance extends React.PureComponent {
551
559
  data,
552
560
  errors,
553
561
  isBusy,
562
+ isAIFolderExtractionEnabled,
554
563
  isCascadingEnabled,
555
564
  shouldConfirmRemove,
556
565
  shouldShowCascadeOptions,
@@ -590,9 +599,12 @@ class Instance extends React.PureComponent {
590
599
  className: "metadata-instance-editor-instance"
591
600
  }, isCascadingPolicyApplicable && /*#__PURE__*/React.createElement(CascadePolicy, {
592
601
  canEdit: isEditing && !!cascadePolicy.canEdit,
602
+ canUseAIFolderExtraction: canUseAIFolderExtraction,
603
+ isAIFolderExtractionEnabled: isAIFolderExtractionEnabled,
593
604
  isCascadingEnabled: isCascadingEnabled,
594
605
  isCascadingOverwritten: isCascadingOverwritten,
595
606
  isCustomMetadata: isProperties,
607
+ onAIFolderExtractionToggle: this.onAIFolderExtractionToggle,
596
608
  onCascadeModeChange: this.onCascadeModeChange,
597
609
  onCascadeToggle: this.onCascadeToggle,
598
610
  shouldShowCascadeOptions: shouldShowCascadeOptions
@@ -47,6 +47,7 @@ import './Instance.scss';
47
47
 
48
48
  type Props = {
49
49
  canEdit: boolean,
50
+ canUseAIFolderExtraction?: boolean,
50
51
  cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line
51
52
  data: MetadataFields,
52
53
  hasError: boolean,
@@ -69,6 +70,7 @@ type Props = {
69
70
  type State = {
70
71
  data: Object,
71
72
  errors: { [string]: React.Node },
73
+ isAIFolderExtractionEnabled: boolean,
72
74
  isBusy: boolean,
73
75
  isCascadingEnabled: boolean,
74
76
  isCascadingOverwritten: boolean,
@@ -327,21 +329,28 @@ class Instance extends React.PureComponent<Props, State> {
327
329
  );
328
330
  };
329
331
 
332
+ onAIFolderExtractionToggle = (value: boolean) => {
333
+ this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);
334
+ };
335
+
330
336
  /**
331
337
  * Returns the state from props
332
338
  *
333
339
  * @return {Object} - react state
334
340
  */
335
341
  getState(props: Props): State {
342
+ const isCascadingEnabled = this.isCascadingEnabled(props);
343
+
336
344
  return {
337
345
  data: cloneDeep(props.data),
338
346
  errors: {},
347
+ isAIFolderExtractionEnabled: false,
339
348
  isBusy: false,
340
- isCascadingEnabled: this.isCascadingEnabled(props),
349
+ isCascadingEnabled,
341
350
  isCascadingOverwritten: false,
342
351
  isEditing: false,
343
352
  shouldConfirmRemove: false,
344
- shouldShowCascadeOptions: false,
353
+ shouldShowCascadeOptions: isCascadingEnabled,
345
354
  };
346
355
  }
347
356
 
@@ -579,12 +588,20 @@ class Instance extends React.PureComponent<Props, State> {
579
588
  };
580
589
 
581
590
  render() {
582
- const { cascadePolicy = {}, isDirty, isCascadingPolicyApplicable, isOpen, template }: Props = this.props;
591
+ const {
592
+ canUseAIFolderExtraction = false,
593
+ cascadePolicy = {},
594
+ isDirty,
595
+ isCascadingPolicyApplicable,
596
+ isOpen,
597
+ template,
598
+ }: Props = this.props;
583
599
  const { fields = [] } = template;
584
600
  const {
585
601
  data,
586
602
  errors,
587
603
  isBusy,
604
+ isAIFolderExtractionEnabled,
588
605
  isCascadingEnabled,
589
606
  shouldConfirmRemove,
590
607
  shouldShowCascadeOptions,
@@ -629,9 +646,12 @@ class Instance extends React.PureComponent<Props, State> {
629
646
  {isCascadingPolicyApplicable && (
630
647
  <CascadePolicy
631
648
  canEdit={isEditing && !!cascadePolicy.canEdit}
649
+ canUseAIFolderExtraction={canUseAIFolderExtraction}
650
+ isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}
632
651
  isCascadingEnabled={isCascadingEnabled}
633
652
  isCascadingOverwritten={isCascadingOverwritten}
634
653
  isCustomMetadata={isProperties}
654
+ onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}
635
655
  onCascadeModeChange={this.onCascadeModeChange}
636
656
  onCascadeToggle={this.onCascadeToggle}
637
657
  shouldShowCascadeOptions={shouldShowCascadeOptions}