box-ui-elements 23.3.1-beta.1 → 23.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sharing.js.LICENSE.txt +10 -0
- package/dist/sidebar.js +1 -1
- package/es/common/types/metadata.js.flow +1 -0
- package/es/common/types/metadata.js.map +1 -1
- package/es/components/notification/Notification.js +17 -8
- package/es/components/notification/Notification.js.flow +15 -8
- package/es/components/notification/Notification.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +6 -2
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +19 -12
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +31 -9
- package/es/features/metadata-instance-editor/Instance.js.flow +41 -9
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/features/metadata-instance-editor/Instances.js +2 -0
- package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
- package/es/features/metadata-instance-editor/Instances.js.map +1 -1
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.flow +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js +2 -0
- package/es/features/metadata-instance-editor/TemplatedInstance.js.flow +11 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js.map +1 -1
- package/es/features/metadata-instance-editor/constants.js +2 -1
- package/es/features/metadata-instance-editor/constants.js.flow +3 -1
- package/es/features/metadata-instance-editor/constants.js.map +1 -1
- package/es/features/metadata-instance-fields/DateMetadataField.js +30 -25
- package/es/features/metadata-instance-fields/DateMetadataField.js.flow +31 -27
- package/es/features/metadata-instance-fields/DateMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/EnumMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/EnumMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/EnumMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/FloatMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/IntegerMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MetadataField.js +7 -0
- package/es/features/metadata-instance-fields/MetadataField.js.flow +8 -0
- package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/TextMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/TextMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/TextMetadataField.js.map +1 -1
- package/package.json +1 -1
- package/src/common/types/metadata.js +1 -0
- package/src/components/notification/Notification.js +15 -8
- package/src/components/notification/__tests__/Notification.test.js +21 -1
- package/src/features/metadata-instance-editor/CascadePolicy.js +19 -12
- package/src/features/metadata-instance-editor/Instance.js +41 -9
- package/src/features/metadata-instance-editor/Instances.js +3 -0
- package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
- package/src/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/src/features/metadata-instance-editor/TemplatedInstance.js +11 -1
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +92 -1
- package/src/features/metadata-instance-editor/__tests__/Instance.test.js +207 -2
- package/src/features/metadata-instance-editor/__tests__/Instances.test.js +92 -3
- package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +105 -0
- package/src/features/metadata-instance-editor/__tests__/TemplatedInstance.test.js +83 -1
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +16 -5
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +4 -2
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap +2 -2
- package/src/features/metadata-instance-editor/constants.js +3 -1
- package/src/features/metadata-instance-fields/DateMetadataField.js +31 -27
- package/src/features/metadata-instance-fields/EnumMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/FloatMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/IntegerMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/MetadataField.js +8 -0
- package/src/features/metadata-instance-fields/MultiSelectMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/TextMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/__tests__/DateMetadataField.test.js +59 -8
- package/src/features/metadata-instance-fields/__tests__/EnumMetadataField.test.js +63 -18
- package/src/features/metadata-instance-fields/__tests__/FloatMetadataField.test.js +68 -4
- package/src/features/metadata-instance-fields/__tests__/IntegerMetadataField.test.js +90 -4
- package/src/features/metadata-instance-fields/__tests__/MultiSelectMetadataField.test.js +95 -7
- package/src/features/metadata-instance-fields/__tests__/TextMetadataField.test.js +107 -14
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/DateMetadataField.test.js.snap +0 -18
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/EnumMetadataField.test.js.snap +0 -84
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/FloatMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/IntegerMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/MultiSelectMetadataField.test.js.snap +0 -58
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/TextMetadataField.test.js.snap +0 -31
|
@@ -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}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","TEMPLATE_CUSTOM_PROPERTIES","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","currentData","errors","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","shouldShowCascadeOptions","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","isAIFolderExtractionEnabled","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","isOpen","animationDuration","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport TEMPLATE_CUSTOM_PROPERTIES from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const { data: currentData, errors, isCascadingEnabled, isCascadingOverwritten }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n shouldShowCascadeOptions: false,\n });\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabled(props);\n\n return {\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: false,\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged = isCascadingOverwritten || isCascadingEnabled !== this.isCascadingEnabled(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabled(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isOpen","animationDuration","isExistingAIExtractionCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES } from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingAIExtractionCascadePolicy =\n this.isCascadingEnabledThroughProps(this.props) && this.isAIFolderExtractionEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={\n canUseAIFolderExtractionAgentSelector\n }\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingAIExtractionCascadePolicy={isExistingAIExtractionCascadePolicy}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":";;;;;;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,EAAEC,gBAAgB,QAAQ,YAAY;AACzD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,gBAAgB;AACpC,OAAOC,SAAS,MAAM,kBAAkB;AACxC,OAAOC,IAAI,MAAM,aAAa;AAE9B,OAAOC,WAAW,MAAM,0CAA0C;AAClE,OAAOC,IAAI,MAAM,0CAA0C;AAC3D,OAAOC,uBAAuB,MAAM,4DAA4D;AAChG,OAAOC,WAAW,MAAM,2CAA2C;AACnE,OAAOC,OAAO,MAAM,0BAA0B;AAC9C,OAAOC,mBAAmB,MAAM,yCAAyC;AACzE,OAAOC,eAAe,MAAM,qCAAqC;AACjE,OAAOC,QAAQ,MAAM,8BAA8B;AACnD,SAASC,gBAAgB,QAAQ,wBAAwB;AACzD,SAASC,cAAc,QAAQ,iBAAiB;AAEhD,OAAOC,aAAa,MAAM,iBAAiB;AAC3C,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,cAAc,MAAM,kBAAkB;AAC7C,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,QAAQ,MAAM,YAAY;AACjC,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,uCAAuC;AAC5F,SAASC,8BAA8B,EAAEC,0BAA0B,QAAQ,aAAa;AACxF,SACIC,oBAAoB,EACpBC,iBAAiB,EACjBC,qBAAqB,EACrBC,kBAAkB,QACf,wBAAwB;AAC/B,SAASC,YAAY,QAAQ,mDAAmD;AAChF,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,gBAAgB,QAAQ,wBAAwB;AAUzD,OAAO,iBAAiB;AAqCxB,MAAMC,uBAAuB,GAAGA,CAACC,MAAqC,GAAG,EAAE,KACvEA,MAAM,CAACC,MAAM,CAAC,CAACC,IAAI,EAAE;EAAEC,GAAG;EAAEC;AAAK,CAAC,KAAK;EACnCF,IAAI,CAACC,GAAG,CAAC,GAAGC,IAAI;EAChB,OAAOF,IAAI;AACf,CAAC,EAAE,CAAC,CAAC,CAAC;AAEV,MAAMG,QAAQ,GAAGA,CAACC,IAAY,EAAEH,GAAW,EAAEC,IAAY,KAAK;EAC1D,MAAMG,KAAK,GAAGD,IAAI,CAACH,GAAG,CAAC;EAEvB,QAAQC,IAAI;IACR,KAAKhB,gBAAgB;MACjB,OAAOoB,UAAU,CAACD,KAAK,CAAC;IAE5B,KAAKlB,kBAAkB;MACnB,OAAOoB,QAAQ,CAACF,KAAK,EAAE,EAAE,CAAC;IAE9B;MACI,OAAOA,KAAK;EACpB;AACJ,CAAC;AAED,MAAMG,QAAQ,SAAS7C,KAAK,CAAC8C,aAAa,CAAe;EAMrDC,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAuChB;AACJ;AACA;AACA;AACA;IAJIC,eAAA,mBAKW,MAAY;MACnB,MAAM;QAAEC,EAAE;QAAEC;MAAsB,CAAC,GAAG,IAAI,CAACH,KAAK;MAChD,IAAI,CAACI,QAAQ,CAAC,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACL,KAAK,CAAC,CAAC;;MAExC;MACA,IAAIG,cAAc,EAAE;QAChBA,cAAc,CAACD,EAAE,EAAE,KAAK,CAAC;MAC7B;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJID,eAAA,0BAKkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC;QAAEE,mBAAmB,EAAE;MAAK,CAAC,CAAC;IAChD,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIL,eAAA,0BAKkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC;QAAEE,mBAAmB,EAAE;MAAM,CAAC,CAAC;IACjD,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIL,eAAA,mBAKW,MAAY;MACnB,IAAI,CAAC,IAAI,CAACM,SAAS,CAAC,CAAC,EAAE;QACnB;MACJ;MAEA,MAAM;QAAEL,EAAE;QAAEM;MAAgB,CAAC,GAAG,IAAI,CAACR,KAAK;MAC1C,IAAIQ,QAAQ,EAAE;QACVA,QAAQ,CAACN,EAAE,CAAC;QACZ,IAAI,CAACE,QAAQ,CAAC;UAAEK,MAAM,EAAE;QAAK,CAAC,CAAC;MACnC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIR,eAAA,iBAKS,MAAY;MACjB,MAAM;QACFS,aAAa;QACbjB,IAAI,EAAEkB,YAAY;QAClBT,EAAE;QACFU,OAAO;QACPC,2BAA2B;QAC3BC;MACG,CAAC,GAAG,IAAI,CAACd,KAAK;MACrB,MAAM;QACFP,IAAI,EAAEsB,WAAW;QACjBC,MAAM;QACNC,2BAA2B;QAC3BC,kBAAkB;QAClBC;MACG,CAAC,GAAG,IAAI,CAACC,KAAK;MAErB,IAAI,CAAC,IAAI,CAACb,SAAS,CAAC,CAAC,IAAI,CAACK,OAAO,IAAI,CAACE,MAAM,IAAIO,MAAM,CAACC,IAAI,CAACN,MAAM,CAAC,CAACO,MAAM,EAAE;QACxE;MACJ;MAEA,IAAI,CAACnB,QAAQ,CAAC;QACVK,MAAM,EAAE,IAAI;QACZF,SAAS,EAAE,KAAK;QAChB;QACAU,2BAA2B,EAAEC,kBAAkB,GAAGD,2BAA2B,GAAG;MACpF,CAAC,CAAC;MACFH,MAAM,CACFZ,EAAE,EACF,IAAI,CAACsB,eAAe,CAACT,WAAW,EAAEJ,YAAY,CAAC,EAC/CE,2BAA2B,GACrB;QACIY,OAAO,EAAEf,aAAa,GAAGA,aAAa,CAACe,OAAO,GAAG,KAAK;QACtDvB,EAAE,EAAEQ,aAAa,GAAGA,aAAa,CAACR,EAAE,GAAGwB,SAAS;QAChDC,SAAS,EAAET,kBAAkB;QAC7BU,SAAS,EAAET,sBAAsB;QACjCF;MACJ,CAAC,GACDS,SAAS,EACfrE,SAAS,CAAC0D,WAAW,CACzB,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPId,eAAA,wBAQgB,CAACX,GAAW,EAAEI,KAAyB,EAAEH,IAAY,KAAW;MAC5E,MAAM;QAAEE,IAAI;QAAEuB;MAAc,CAAC,GAAG,IAAI,CAACI,KAAK;;MAE1C;MACA,IAAI,CAAC,IAAI,CAACb,SAAS,CAAC,CAAC,IAAInD,OAAO,CAACqC,IAAI,CAACH,GAAG,CAAC,EAAEI,KAAK,CAAC,EAAE;QAChD;MACJ;MAEA,MAAMmC,OAAO,GAAG9C,YAAY,CAACQ,IAAI,EAAEG,KAAK,CAAC;MACzC,MAAMoC,WAAW,GAAAC,aAAA,KAAQf,MAAM,CAAE;MACjC,MAAMgB,SAAS,GAAG3E,SAAS,CAACoC,IAAI,CAAC;MACjCuC,SAAS,CAAC1C,GAAG,CAAC,GAAGI,KAAK;MAEtB,IAAImC,OAAO,EAAE;QACT,OAAOC,WAAW,CAACxC,GAAG,CAAC;MAC3B,CAAC,MAAM;QACHwC,WAAW,CAACxC,GAAG,CAAC,gBAAGtC,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAKoB,QAAQ,CAAC4D,YAAe,CAAC;MACtE;MAEA,IAAI,CAAC9B,QAAQ,CAAC;QAAEX,IAAI,EAAEuC,SAAS;QAAEhB,MAAM,EAAEc;MAAY,CAAC,EAAE,MAAM;QAC1D,IAAI,CAACK,QAAQ,CAAC5C,IAAI,CAAC;MACvB,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIU,eAAA,wBAMiBX,GAAW,IAAW;MACnC,IAAI,CAAC,IAAI,CAACiB,SAAS,CAAC,CAAC,EAAE;QACnB;MACJ;MAEA,MAAM;QAAEd,IAAI;QAAEuB;MAAc,CAAC,GAAG,IAAI,CAACI,KAAK;MAC1C,MAAMY,SAAS,GAAG3E,SAAS,CAACoC,IAAI,CAAC;MACjC,MAAMqC,WAAW,GAAAC,aAAA,KAAQf,MAAM,CAAE;MACjC,OAAOgB,SAAS,CAAC1C,GAAG,CAAC;MACrB,OAAOwC,WAAW,CAACxC,GAAG,CAAC;MACvB,IAAI,CAACc,QAAQ,CAAC;QAAEX,IAAI,EAAEuC,SAAS;QAAEhB,MAAM,EAAEc;MAAY,CAAC,EAAE,IAAI,CAACK,QAAQ,CAAC;IAC1E,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIlC,eAAA,0BAMmBP,KAAc,IAAK;MAClC,MAAM;QAAEmB;MAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;MACzD,IAAI,CAACa,2BAA2B,EAAE;QAC9B;MACJ;MAEA,IAAI,CAACT,QAAQ,CACT;QACIc,kBAAkB,EAAExB,KAAK;QACzB0C,wBAAwB,EAAE1C;MAC9B,CAAC,EACD,IAAI,CAACyC,QACT,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIlC,eAAA,8BAOuBP,KAAc,IAAW;MAC5C,MAAM;QAAEmB;MAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;MACzD,IAAI,CAACa,2BAA2B,EAAE;QAC9B;MACJ;MAEA,IAAI,CAACT,QAAQ,CACT;QACIe,sBAAsB,EAAEzB;MAC5B,CAAC,EACD,IAAI,CAACyC,QACT,CAAC;IACL,CAAC;IAAAlC,eAAA,qCAE6BP,KAAc,IAAK;MAC7C,IAAI,CAACU,QAAQ,CAAC;QAAEa,2BAA2B,EAAEvB;MAAM,CAAC,EAAE,IAAI,CAACyC,QAAQ,CAAC;IACxE,CAAC;IAiDD;AACJ;AACA;IAFIlC,eAAA,8BAGsB,CAACoC,MAAe,EAAEC,QAAgB,KAAK;MACzD,IAAIC,OAAO;MACX,MAAMC,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;MAExE,IAAI8D,YAAY,EAAE;QACdD,OAAO,GAAGF,MAAM,GAAG,yCAAyC,GAAG,2CAA2C;MAC9G,CAAC,MAAM;QACHE,OAAO,GAAGF,MAAM,GAAG,mCAAmC,GAAG,qCAAqC;MAClG;MAEA,oBACIrF,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAAwF,QAAA,KACTpE,QAAQ,CAACiE,OAAO,CAAC;QACrBI,MAAM,EAAE;UACJC,YAAY,EAAEN,QAAQ,CAACO;QAC3B;MAAE,EACL,CAAC;IAEV,CAAC;IAWD;AACJ;AACA;AACA;AACA;AACA;IALI5C,eAAA,mBAMYV,IAAa,IAAW;MAChC,MAAM;QAAEW,EAAE;QAAEW,2BAA2B;QAAEV;MAAsB,CAAC,GAAG,IAAI,CAACH,KAAK;MAC7E,MAAM;QAAEP,IAAI;QAAEyB,kBAAkB;QAAEC,sBAAsB;QAAEF;MAA4B,CAAC,GAAG,IAAI,CAACG,KAAK;MACpG,MAAM0B,cAAc,GAAG,CAAC1F,OAAO,CAACqC,IAAI,EAAE,IAAI,CAACO,KAAK,CAACP,IAAI,CAAC;MACtD,IAAIsD,mBAAmB,GAAG,KAAK;MAE/B,IAAIlC,2BAA2B,EAAE;QAC7B;QACAkC,mBAAmB,GACf5B,sBAAsB,IACtBD,kBAAkB,KAAK,IAAI,CAAC8B,8BAA8B,CAAC,IAAI,CAAChD,KAAK,CAAC,IACtEiB,2BAA2B,KAAK,IAAI,CAACgC,uCAAuC,CAAC,IAAI,CAACjD,KAAK,CAAC;MAChG;;MAEA;MACA,IAAIG,cAAc,EAAE;QAChBA,cAAc,CAACD,EAAE,EAAE4C,cAAc,IAAIC,mBAAmB,EAAExD,IAAI,CAAC;MACnE;IACJ,CAAC;IAAAU,eAAA,sCAIGjD,KAAK,CAACkG,SAAS,CAAC,CAAC;IA6BrB;AACJ;AACA;AACA;AACA;AACA;IALIjD,eAAA,0BAMkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC+C,SAAS,KAAK;QACxB5C,SAAS,EAAE,CAAC4C,SAAS,CAAC5C;MAC1B,CAAC,CAAC,CAAC;IACP,CAAC;IAAAN,eAAA,2BA6FkB,MAAM;MACrB,MAAM;QAAEmD,IAAI;QAAExC;MAAe,CAAC,GAAG,IAAI,CAACZ,KAAK;MAC3C,MAAM;QAAES;MAAc,CAAC,GAAG,IAAI,CAACW,KAAK;MACpC,MAAMK,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC,CAAC;MAC9B,MAAMlB,SAAS,GAAG,IAAI,CAACA,SAAS,CAAC,CAAC;MAClC,MAAM8C,aAAa,GAAGlG,UAAU,CAAC,wCAAwC,EAAE;QACvE,8CAA8C,EAAEoD;MACpD,CAAC,CAAC;MAEF,IAAIkB,OAAO,IAAI,CAACb,OAAO,IAAI,CAACH,MAAM,EAAE;QAChC,MAAM6C,qBAAqB,GAAGF,IAAI,CAACG,aAAa,CAACjF,QAAQ,CAACkF,mBAAmB,CAAC;QAC9E,oBACIxG,KAAA,CAAAiF,aAAA,CAACtE,OAAO;UAAC8F,QAAQ,EAAC,UAAU;UAACC,IAAI,EAAEJ;QAAsB,gBACrDtG,KAAA,CAAAiF,aAAA,CAACvE,WAAW;UACR,cAAY4F,qBAAsB;UAClC,gBAAc/C,SAAU;UACxBoD,SAAS,EAAEN,aAAc;UACzB,qBAAkB,uBAAuB;UACzCO,OAAO,EAAE,IAAI,CAACC,eAAgB;UAC9BtE,IAAI,EAAC;QAAQ,gBAEbvC,KAAA,CAAAiF,aAAA,CAACnE,QAAQ,MAAE,CACF,CACR,CAAC;MAElB;MACA,OAAO,IAAI;IACf,CAAC;IAnfG,IAAI,CAACsD,KAAK,GAAG,IAAI,CAACf,QAAQ,CAACL,KAAK,CAAC;IACjC,IAAI,CAAC8D,iBAAiB,GAAG5E,uBAAuB,CAACc,KAAK,CAACsC,QAAQ,CAACnD,MAAM,CAAC;EAC3E;EAEA4E,kBAAkBA,CAAC;IAAEC,QAAQ,EAAEC,YAAY;IAAErD,OAAO,EAAEsD;EAAmB,CAAC,EAAEf,SAAgB,EAAQ;IAChG,MAAMgB,cAAc,GAAG,IAAI,CAACC,cAAc,CAACC,OAAO;IAClD,MAAM;MAAEL,QAAQ;MAAEpD;IAAe,CAAC,GAAG,IAAI,CAACZ,KAAK;IAC/C,MAAM;MAAEO;IAAiB,CAAC,GAAG4C,SAAS;IAEtC,IAAIgB,cAAc,IAAI,IAAI,CAAC/C,KAAK,CAACd,mBAAmB,EAAE;MAClDtC,cAAc,CAACmG,cAAc,EAAE;QAC3BG,KAAK,EAAE,OAAO;QACdC,QAAQ,EAAE;MACd,CAAC,CAAC;IACN;IAEA,IAAIP,QAAQ,IAAIA,QAAQ,KAAKC,YAAY,EAAE;MACvC;MACA;MACA;MACA;MACA,IAAI,CAAC7D,QAAQ,CAAC;QAAEK,MAAM,EAAE,KAAK;QAAEF,SAAS,EAAE;MAAK,CAAC,CAAC;IACrD,CAAC,MAAM,IAAI2D,WAAW,IAAI,CAACtD,OAAO,EAAE;MAChC;MACA;MACA;MACA;MACA;MACA,IAAIL,SAAS,EAAE;QACX;QACA,IAAI,CAACH,QAAQ,CAAC;UAAEK,MAAM,EAAE;QAAM,CAAC,CAAC;MACpC,CAAC,MAAM;QACH;QACA,IAAI,CAACL,QAAQ,CAAC;UAAEK,MAAM,EAAE,KAAK;UAAEU,sBAAsB,EAAE;QAAM,CAAC,CAAC;MACnE;IACJ;EACJ;EAqMA;AACJ;AACA;AACA;AACA;EACId,QAAQA,CAACL,KAAY,EAAS;IAC1B,MAAMkB,kBAAkB,GAAG,IAAI,CAAC8B,8BAA8B,CAAChD,KAAK,CAAC;IAErE,OAAO;MACHP,IAAI,EAAEpC,SAAS,CAAC2C,KAAK,CAACP,IAAI,CAAC;MAC3BuB,MAAM,EAAE,CAAC,CAAC;MACVC,2BAA2B,EAAE,IAAI,CAACgC,uCAAuC,CAACjD,KAAK,CAAC;MAChFS,MAAM,EAAE,KAAK;MACbS,kBAAkB;MAClBC,sBAAsB,EAAE,KAAK;MAC7BZ,SAAS,EAAE,KAAK;MAChBD,mBAAmB,EAAE,KAAK;MAC1B8B,wBAAwB,EAAElB;IAC9B,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;EACIsD,QAAQA,CAAA,EAAe;IACnB,MAAM;MAAE9D,aAAa,GAAG,CAAC,CAAC;MAAEsD,QAAQ;MAAEnD,2BAA2B;MAAEyB;IAAgB,CAAC,GAAG,IAAI,CAACtC,KAAK;IACjG,MAAMwC,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;IAExE,MAAMa,IAAI,GAAGsB,2BAA2B,IAAIH,aAAa,CAACR,EAAE,GAAG,SAAS,GAAG,SAAS;IAEpF,oBACIlD,KAAA,CAAAiF,aAAA;MAAM0B,SAAS,EAAC;IAAyC,gBACrD3G,KAAA,CAAAiF,aAAA,CAACrE,mBAAmB;MAAC2B,IAAI,EAAEA;IAAK,CAAE,CAAC,eACnCvC,KAAA,CAAAiF,aAAA;MACI0B,SAAS,EAAExG,UAAU,CAAC,8CAA8C,EAAE;QAClE,6CAA6C,EAAE6G;MACnD,CAAC;IAAE,GAEFxB,YAAY,gBAAGxF,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAKoB,QAAQ,CAACmG,WAAc,CAAC,GAAGnC,QAAQ,CAACO,WACxE,CAAC,EACNmB,QAAQ,iBAAIhH,KAAA,CAAAiF,aAAA,CAACpE,eAAe;MAAC6G,KAAK,EAAE3G;IAAiB,CAAE,CACtD,CAAC;EAEf;EAyBA;AACJ;AACA;EACI4G,sBAAsBA,CAAA,EAAe;IACjC,MAAM;MAAErC,QAAQ;MAAEzB;IAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;IACnE,MAAMqC,MAAM,GAAG,CAACxB,2BAA2B;IAC3C,OAAO,IAAI,CAAC+D,mBAAmB,CAACvC,MAAM,EAAEC,QAAQ,CAAC;EACrD;EAkCA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIU,8BAA8BA,CAAChD,KAAY,EAAE;IACzC,IAAIA,KAAK,CAACU,aAAa,EAAE;MACrB,OAAO,CAAC,CAACV,KAAK,CAACU,aAAa,CAACR,EAAE;IACnC;IACA,OAAO,KAAK;EAChB;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI+C,uCAAuCA,CAAC;IAAEvC;EAAqB,CAAC,EAAE;IAC9D,OAAOA,aAAa,EAAEmE,iBAAiB,KAAKpG,8BAA8B;EAC9E;EAcA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI+C,eAAeA,CAACT,WAAmB,EAAEJ,YAAoB,EAAuB;IAC5E,MAAMmE,GAAG,GAAG,EAAE;IACd,MAAMrF,IAAI,GAAGpC,SAAS,CAAC0D,WAAW,CAAC,CAAC,CAAC;;IAErC;IACA;IACAM,MAAM,CAACC,IAAI,CAACX,YAAY,CAAC,CAACoE,OAAO,CAACzF,GAAG,IAAI;MACrC,MAAMC,IAAI,GAAG,IAAI,CAACuE,iBAAiB,CAACxE,GAAG,CAAC;MACxC,MAAM0F,aAAa,GAAGxF,QAAQ,CAACmB,YAAY,EAAErB,GAAG,EAAEC,IAAI,CAAC;MACvD,MAAM0F,IAAI,GAAG,IAAI3F,GAAG,EAAE;MAEtB,IAAI+B,MAAM,CAAC6D,SAAS,CAACC,cAAc,CAACC,IAAI,CAAC3F,IAAI,EAAEH,GAAG,CAAC,EAAE;QACjD,MAAMI,KAAK,GAAGF,QAAQ,CAACC,IAAI,EAAEH,GAAG,EAAEC,IAAI,CAAC;;QAEvC;QACA,IAAI,CAACnC,OAAO,CAACsC,KAAK,EAAEsF,aAAa,CAAC,EAAE;UAChC;UACAF,GAAG,CAACO,IAAI,CAAC;YACLC,EAAE,EAAExG,kBAAkB;YACtBmG,IAAI;YACJvF,KAAK,EAAEsF;UACX,CAAC,CAAC;UACFF,GAAG,CAACO,IAAI,CAAC;YACLC,EAAE,EAAEzG,qBAAqB;YACzBoG,IAAI;YACJvF;UACJ,CAAC,CAAC;QACN;MACJ,CAAC,MAAM;QACH;QACA;QACAoF,GAAG,CAACO,IAAI,CAAC;UACLC,EAAE,EAAExG,kBAAkB;UACtBmG,IAAI;UACJvF,KAAK,EAAEsF;QACX,CAAC,CAAC;QACFF,GAAG,CAACO,IAAI,CAAC;UAAEC,EAAE,EAAE3G,oBAAoB;UAAEsG;QAAK,CAAC,CAAC;MAChD;MACA,OAAOxF,IAAI,CAACH,GAAG,CAAC;IACpB,CAAC,CAAC;;IAEF;IACA+B,MAAM,CAACC,IAAI,CAAC7B,IAAI,CAAC,CAACsF,OAAO,CAACzF,GAAG,IAAI;MAC7B,MAAMC,IAAI,GAAG,IAAI,CAACuE,iBAAiB,CAACxE,GAAG,CAAC;MACxC,MAAMI,KAAK,GAAGF,QAAQ,CAACC,IAAI,EAAEH,GAAG,EAAEC,IAAI,CAAC;MAEvCuF,GAAG,CAACO,IAAI,CAAC;QACLC,EAAE,EAAE1G,iBAAiB;QACrBqG,IAAI,EAAE,IAAI3F,GAAG,EAAE;QACfI;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,OAAOoF,GAAG;EACd;;EAEA;AACJ;AACA;AACA;AACA;EACIrD,OAAOA,CAAA,EAAY;IACf,MAAM;MAAEA,OAAO;MAAEtB,cAAc;MAAEK,QAAQ;MAAEM;IAAc,CAAC,GAAG,IAAI,CAACd,KAAK;IACvE,OACIyB,OAAO,IACP,OAAOjB,QAAQ,KAAK,UAAU,IAC9B,OAAOM,MAAM,KAAK,UAAU,IAC5B,OAAOX,cAAc,KAAK,UAAU;EAE5C;;EAEA;AACJ;AACA;AACA;AACA;EACII,SAASA,CAAA,EAAY;IACjB,MAAM;MAAEA;IAAiB,CAAC,GAAG,IAAI,CAACa,KAAK;IACvC,OAAO,IAAI,CAACK,OAAO,CAAC,CAAC,IAAIlB,SAAS;EACtC;EA+BAgF,MAAMA,CAAA,EAAG;IACL,MAAM;MACFC,wBAAwB,GAAG,KAAK;MAChCC,qCAAqC,GAAG,KAAK;MAC7C/E,aAAa,GAAG,CAAC,CAAC;MAClBE,OAAO;MACPC,2BAA2B;MAC3B6E,MAAM;MACNpD;IACG,CAAC,GAAG,IAAI,CAACtC,KAAK;IACrB,MAAM;MAAEb,MAAM,GAAG;IAAG,CAAC,GAAGmD,QAAQ;IAChC,MAAM;MACF7C,IAAI;MACJuB,MAAM;MACNP,MAAM;MACNQ,2BAA2B;MAC3BC,kBAAkB;MAClBZ,mBAAmB;MACnB8B,wBAAwB;MACxBjB;IACG,CAAC,GAAG,IAAI,CAACC,KAAK;IACrB,MAAMoB,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;IACxE,MAAM6B,SAAS,GAAG,IAAI,CAACA,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC+B,QAAQ,IAAItD,QAAQ,CAACsD,QAAQ,CAAC,EAAE;MACjC,OAAO,IAAI;IACf;;IAEA;IACA,MAAMqD,iBAAiB,GAAG,CAACxG,MAAM,CAACoC,MAAM,GAAG,CAAC,IAAI,EAAE;IAElD,MAAMqE,mCAAmC,GACrC,IAAI,CAAC5C,8BAA8B,CAAC,IAAI,CAAChD,KAAK,CAAC,IAAI,IAAI,CAACiD,uCAAuC,CAAC,IAAI,CAACjD,KAAK,CAAC;IAE/G,oBACIhD,KAAA,CAAAiF,aAAA;MAAK4D,GAAG,EAAE,IAAI,CAACzB;IAAe,gBAC1BpH,KAAA,CAAAiF,aAAA,CAAC1E,WAAW;MACRoI,iBAAiB,EAAEA,iBAAkB;MACrCG,WAAW,EAAE;QACT,CAAC7G,gBAAgB,GAAG;MACxB,CAAE;MACF8G,eAAe;MACfC,iBAAiB,EAAE,IAAI,CAACC,gBAAgB,CAAC,CAAE;MAC3CC,UAAU;MACVR,MAAM,EAAEA,MAAO;MACfS,KAAK,EAAE,IAAI,CAAC3B,QAAQ,CAAC;IAAE,GAEtBlE,mBAAmB,iBAChBtD,KAAA,CAAAiF,aAAA,CAACxE,uBAAuB;MAAC2I,SAAS,EAAE3F;IAAO,gBACvCzD,KAAA,CAAAiF,aAAA,CAAC7D,6BAA6B;MAC1BiI,mBAAmB,EAAE,IAAI,CAAC1B,sBAAsB,CAAC,CAAE;MACnD2B,QAAQ,EAAE,IAAI,CAACC,eAAgB;MAC/BC,SAAS,EAAE,IAAI,CAAChG;IAAS,CAC5B,CACoB,CAC5B,EACA,CAACF,mBAAmB,iBACjBtD,KAAA,CAAAiF,aAAA,CAACxE,uBAAuB;MAAC2I,SAAS,EAAE3F;IAAO,gBACvCzD,KAAA,CAAAiF,aAAA,CAACzE,IAAI;MAACiJ,aAAa,EAAE7F,OAAO,GAAG,IAAI,CAACE,MAAM,GAAGxD;IAAK,gBAC9CN,KAAA,CAAAiF,aAAA;MAAK0B,SAAS,EAAC;IAAmC,GAC7C9C,2BAA2B,iBACxB7D,KAAA,CAAAiF,aAAA,CAAChE,aAAa;MACVwD,OAAO,EAAElB,SAAS,IAAI,CAAC,CAACG,aAAa,CAACe,OAAQ;MAC9C+D,wBAAwB,EAAEA,wBAAyB;MACnDC,qCAAqC,EACjCA,qCACH;MACDxE,2BAA2B,EAAEA,2BAA4B;MACzDC,kBAAkB,EAAEA,kBAAmB;MACvCC,sBAAsB,EAAEA,sBAAuB;MAC/CuF,gBAAgB,EAAElE,YAAa;MAC/BoD,mCAAmC,EAAEA,mCAAoC;MACzEe,0BAA0B,EAAE,IAAI,CAACA,0BAA2B;MAC5DC,mBAAmB,EAAE,IAAI,CAACA,mBAAoB;MAC9CC,eAAe,EAAE,IAAI,CAACA,eAAgB;MACtCzE,wBAAwB,EAAEA;IAAyB,CACtD,CACJ,EACAI,YAAY,gBACTxF,KAAA,CAAAiF,aAAA,CAAC9D,cAAc;MACXsD,OAAO,EAAElB,SAAU;MACnBd,IAAI,EAAEA,IAAK;MACXqH,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,aAAa,EAAE,IAAI,CAACA;IAAc,CACrC,CAAC,gBAEF/J,KAAA,CAAAiF,aAAA,CAAC/D,iBAAiB;MACduD,OAAO,EAAElB,SAAU;MACnBd,IAAI,EAAEA,IAAK;MACXuB,MAAM,EAAEA,MAAO;MACfgG,UAAU,EAAE/F,2BAA4B;MACxC6F,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCzE,QAAQ,EAAEA;IAAS,CACtB,CAEJ,CAAC,EACL/B,SAAS,iBACNvD,KAAA,CAAAiF,aAAA,CAAC5D,MAAM;MACHiI,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxB9F,QAAQ,EAAE,IAAI,CAACyG,eAAgB;MAC/BC,QAAQ,EAAEtG;IAAQ,CACrB,CAEH,CACe,CAEpB,CACZ,CAAC;EAEd;AACJ;AAACX,eAAA,CA5mBKJ,QAAQ,kBACY;EAClBJ,IAAI,EAAE,CAAC,CAAC;EACRmB,OAAO,EAAE;AACb,CAAC;AA0mBL,SAASf,QAAQ,IAAIsH,YAAY;AACjC,eAAelK,UAAU,CAAC4C,QAAQ,CAAC","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import Instance from './Instance';
|
|
3
3
|
const Instances = ({
|
|
4
4
|
canUseAIFolderExtraction = false,
|
|
5
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
5
6
|
isCascadingPolicyApplicable = false,
|
|
6
7
|
editors = [],
|
|
7
8
|
onModification,
|
|
@@ -21,6 +22,7 @@ const Instances = ({
|
|
|
21
22
|
return /*#__PURE__*/React.createElement(Instance, {
|
|
22
23
|
canEdit: instance.canEdit,
|
|
23
24
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
25
|
+
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
24
26
|
cascadePolicy: instance.cascadePolicy,
|
|
25
27
|
data: instance.data,
|
|
26
28
|
hasError: hasError,
|
|
@@ -7,6 +7,7 @@ import type { JSONPatchOperations } from '../../common/types/api';
|
|
|
7
7
|
|
|
8
8
|
type Props = {
|
|
9
9
|
canUseAIFolderExtraction?: boolean,
|
|
10
|
+
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
10
11
|
editors?: Array<MetadataEditor>,
|
|
11
12
|
isCascadingPolicyApplicable?: boolean,
|
|
12
13
|
onModification?: (id: string, isDirty: boolean) => void,
|
|
@@ -22,6 +23,7 @@ type Props = {
|
|
|
22
23
|
|
|
23
24
|
const Instances = ({
|
|
24
25
|
canUseAIFolderExtraction = false,
|
|
26
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
25
27
|
isCascadingPolicyApplicable = false,
|
|
26
28
|
editors = [],
|
|
27
29
|
onModification,
|
|
@@ -37,6 +39,7 @@ const Instances = ({
|
|
|
37
39
|
<Instance
|
|
38
40
|
canEdit={instance.canEdit}
|
|
39
41
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
42
|
+
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
40
43
|
cascadePolicy={instance.cascadePolicy}
|
|
41
44
|
data={instance.data}
|
|
42
45
|
hasError={hasError}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instances.js","names":["React","Instance","Instances","canUseAIFolderExtraction","isCascadingPolicyApplicable","editors","onModification","onRemove","onSave","selectedTemplateKey","map","isDirty","instance","hasError","template","templateKey","isOpen","length","createElement","canEdit","cascadePolicy","data","id","key"],"sources":["../../../src/features/metadata-instance-editor/Instances.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport Instance from './Instance';\nimport type { MetadataEditor, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\n\ntype Props = {\n canUseAIFolderExtraction?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n};\n\nconst Instances = ({\n canUseAIFolderExtraction = false,\n isCascadingPolicyApplicable = false,\n editors = [],\n onModification,\n onRemove,\n onSave,\n selectedTemplateKey,\n}: Props) =>\n editors.map<React.Element<typeof Instance>>(\n ({ isDirty = false, instance, hasError = false, template }: MetadataEditor) => {\n const { templateKey } = template;\n const isOpen = editors.length === 1 || templateKey === selectedTemplateKey;\n return (\n <Instance\n canEdit={instance.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n cascadePolicy={instance.cascadePolicy}\n data={instance.data}\n hasError={hasError}\n id={instance.id}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n isDirty={isDirty}\n isOpen={isOpen}\n key={`${instance.id}-${templateKey}`}\n onModification={onModification}\n onSave={onSave}\n onRemove={onRemove}\n template={template}\n />\n );\n },\n );\n\nexport default Instances;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,QAAQ,MAAM,YAAY;
|
|
1
|
+
{"version":3,"file":"Instances.js","names":["React","Instance","Instances","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isCascadingPolicyApplicable","editors","onModification","onRemove","onSave","selectedTemplateKey","map","isDirty","instance","hasError","template","templateKey","isOpen","length","createElement","canEdit","cascadePolicy","data","id","key"],"sources":["../../../src/features/metadata-instance-editor/Instances.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport Instance from './Instance';\nimport type { MetadataEditor, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\n\ntype Props = {\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n};\n\nconst Instances = ({\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n isCascadingPolicyApplicable = false,\n editors = [],\n onModification,\n onRemove,\n onSave,\n selectedTemplateKey,\n}: Props) =>\n editors.map<React.Element<typeof Instance>>(\n ({ isDirty = false, instance, hasError = false, template }: MetadataEditor) => {\n const { templateKey } = template;\n const isOpen = editors.length === 1 || templateKey === selectedTemplateKey;\n return (\n <Instance\n canEdit={instance.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}\n cascadePolicy={instance.cascadePolicy}\n data={instance.data}\n hasError={hasError}\n id={instance.id}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n isDirty={isDirty}\n isOpen={isOpen}\n key={`${instance.id}-${templateKey}`}\n onModification={onModification}\n onSave={onSave}\n onRemove={onRemove}\n template={template}\n />\n );\n },\n );\n\nexport default Instances;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,QAAQ,MAAM,YAAY;AAoBjC,MAAMC,SAAS,GAAGA,CAAC;EACfC,wBAAwB,GAAG,KAAK;EAChCC,qCAAqC,GAAG,KAAK;EAC7CC,2BAA2B,GAAG,KAAK;EACnCC,OAAO,GAAG,EAAE;EACZC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AACG,CAAC,KACJJ,OAAO,CAACK,GAAG,CACP,CAAC;EAAEC,OAAO,GAAG,KAAK;EAAEC,QAAQ;EAAEC,QAAQ,GAAG,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3E,MAAM;IAAEC;EAAY,CAAC,GAAGD,QAAQ;EAChC,MAAME,MAAM,GAAGX,OAAO,CAACY,MAAM,KAAK,CAAC,IAAIF,WAAW,KAAKN,mBAAmB;EAC1E,oBACIV,KAAA,CAAAmB,aAAA,CAAClB,QAAQ;IACLmB,OAAO,EAAEP,QAAQ,CAACO,OAAQ;IAC1BjB,wBAAwB,EAAEA,wBAAyB;IACnDC,qCAAqC,EAAEA,qCAAsC;IAC7EiB,aAAa,EAAER,QAAQ,CAACQ,aAAc;IACtCC,IAAI,EAAET,QAAQ,CAACS,IAAK;IACpBR,QAAQ,EAAEA,QAAS;IACnBS,EAAE,EAAEV,QAAQ,CAACU,EAAG;IAChBlB,2BAA2B,EAAEA,2BAA4B;IACzDO,OAAO,EAAEA,OAAQ;IACjBK,MAAM,EAAEA,MAAO;IACfO,GAAG,EAAE,GAAGX,QAAQ,CAACU,EAAE,IAAIP,WAAW,EAAG;IACrCT,cAAc,EAAEA,cAAe;IAC/BE,MAAM,EAAEA,MAAO;IACfD,QAAQ,EAAEA,QAAS;IACnBO,QAAQ,EAAEA;EAAS,CACtB,CAAC;AAEV,CACJ,CAAC;AAEL,eAAeb,SAAS","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ const MetadataInstanceEditor = ({
|
|
|
9
9
|
blurExceptionClassNames,
|
|
10
10
|
canAdd,
|
|
11
11
|
canUseAIFolderExtraction = false,
|
|
12
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
12
13
|
isCascadingPolicyApplicable = false,
|
|
13
14
|
isDropdownBusy,
|
|
14
15
|
editors = [],
|
|
@@ -36,6 +37,7 @@ const MetadataInstanceEditor = ({
|
|
|
36
37
|
canAdd: canAdd
|
|
37
38
|
}) : /*#__PURE__*/React.createElement(ScrollWrapper, null, /*#__PURE__*/React.createElement(Instances, {
|
|
38
39
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
40
|
+
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
39
41
|
editors: editors,
|
|
40
42
|
isCascadingPolicyApplicable: isCascadingPolicyApplicable,
|
|
41
43
|
onModification: onModification,
|
|
@@ -15,6 +15,7 @@ type Props = {
|
|
|
15
15
|
blurExceptionClassNames?: Array<string>,
|
|
16
16
|
canAdd: boolean,
|
|
17
17
|
canUseAIFolderExtraction?: boolean,
|
|
18
|
+
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
18
19
|
editors?: Array<MetadataEditor>,
|
|
19
20
|
isCascadingPolicyApplicable?: boolean,
|
|
20
21
|
isDropdownBusy?: boolean,
|
|
@@ -37,6 +38,7 @@ const MetadataInstanceEditor = ({
|
|
|
37
38
|
blurExceptionClassNames,
|
|
38
39
|
canAdd,
|
|
39
40
|
canUseAIFolderExtraction = false,
|
|
41
|
+
canUseAIFolderExtractionAgentSelector = false,
|
|
40
42
|
isCascadingPolicyApplicable = false,
|
|
41
43
|
isDropdownBusy,
|
|
42
44
|
editors = [],
|
|
@@ -64,6 +66,7 @@ const MetadataInstanceEditor = ({
|
|
|
64
66
|
<ScrollWrapper>
|
|
65
67
|
<Instances
|
|
66
68
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
69
|
+
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
67
70
|
editors={editors}
|
|
68
71
|
isCascadingPolicyApplicable={isCascadingPolicyApplicable}
|
|
69
72
|
onModification={onModification}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataInstanceEditor.js","names":["React","ScrollWrapper","Header","Instances","EmptyContent","MetadataInstanceEditorContext","MetadataInstanceEditor","blurExceptionClassNames","canAdd","canUseAIFolderExtraction","isCascadingPolicyApplicable","isDropdownBusy","editors","onModification","onRemove","onAdd","onSave","selectedTemplateKey","templates","title","createElement","Provider","value","className","length"],"sources":["../../../src/features/metadata-instance-editor/MetadataInstanceEditor.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport ScrollWrapper from '../../components/scroll-wrapper';\n\nimport Header from './Header';\nimport Instances from './Instances';\nimport EmptyContent from './EmptyContent';\nimport type { MetadataEditor, MetadataTemplate, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport MetadataInstanceEditorContext from './MetadataInstanceEditorContext';\nimport './MetadataInstanceEditor.scss';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canAdd: boolean,\n canUseAIFolderExtraction?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n isDropdownBusy?: boolean,\n onAdd?: (template: MetadataTemplate) => void,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n templateFilters?: Array<string> | string,\n templates: Array<MetadataTemplate>,\n title?: React.Node,\n};\n\nconst MetadataInstanceEditor = ({\n blurExceptionClassNames,\n canAdd,\n canUseAIFolderExtraction = false,\n isCascadingPolicyApplicable = false,\n isDropdownBusy,\n editors = [],\n onModification,\n onRemove,\n onAdd,\n onSave,\n selectedTemplateKey,\n templates,\n title,\n}: Props) => (\n <MetadataInstanceEditorContext.Provider value={{ blurExceptionClassNames }}>\n <div className=\"metadata-instance-editor\">\n <Header\n canAdd={canAdd}\n editors={editors}\n isDropdownBusy={isDropdownBusy}\n onAdd={onAdd}\n templates={templates}\n title={title}\n />\n {editors.length === 0 ? (\n <EmptyContent canAdd={canAdd} />\n ) : (\n <ScrollWrapper>\n <Instances\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n editors={editors}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n onModification={onModification}\n onRemove={onRemove}\n onSave={onSave}\n selectedTemplateKey={selectedTemplateKey}\n />\n </ScrollWrapper>\n )}\n </div>\n </MetadataInstanceEditorContext.Provider>\n);\n\nexport default MetadataInstanceEditor;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,aAAa,MAAM,iCAAiC;AAE3D,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,YAAY,MAAM,gBAAgB;AAGzC,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAO,+BAA+B;
|
|
1
|
+
{"version":3,"file":"MetadataInstanceEditor.js","names":["React","ScrollWrapper","Header","Instances","EmptyContent","MetadataInstanceEditorContext","MetadataInstanceEditor","blurExceptionClassNames","canAdd","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isCascadingPolicyApplicable","isDropdownBusy","editors","onModification","onRemove","onAdd","onSave","selectedTemplateKey","templates","title","createElement","Provider","value","className","length"],"sources":["../../../src/features/metadata-instance-editor/MetadataInstanceEditor.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport ScrollWrapper from '../../components/scroll-wrapper';\n\nimport Header from './Header';\nimport Instances from './Instances';\nimport EmptyContent from './EmptyContent';\nimport type { MetadataEditor, MetadataTemplate, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport MetadataInstanceEditorContext from './MetadataInstanceEditorContext';\nimport './MetadataInstanceEditor.scss';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canAdd: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n isDropdownBusy?: boolean,\n onAdd?: (template: MetadataTemplate) => void,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n templateFilters?: Array<string> | string,\n templates: Array<MetadataTemplate>,\n title?: React.Node,\n};\n\nconst MetadataInstanceEditor = ({\n blurExceptionClassNames,\n canAdd,\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n isCascadingPolicyApplicable = false,\n isDropdownBusy,\n editors = [],\n onModification,\n onRemove,\n onAdd,\n onSave,\n selectedTemplateKey,\n templates,\n title,\n}: Props) => (\n <MetadataInstanceEditorContext.Provider value={{ blurExceptionClassNames }}>\n <div className=\"metadata-instance-editor\">\n <Header\n canAdd={canAdd}\n editors={editors}\n isDropdownBusy={isDropdownBusy}\n onAdd={onAdd}\n templates={templates}\n title={title}\n />\n {editors.length === 0 ? (\n <EmptyContent canAdd={canAdd} />\n ) : (\n <ScrollWrapper>\n <Instances\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}\n editors={editors}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n onModification={onModification}\n onRemove={onRemove}\n onSave={onSave}\n selectedTemplateKey={selectedTemplateKey}\n />\n </ScrollWrapper>\n )}\n </div>\n </MetadataInstanceEditorContext.Provider>\n);\n\nexport default MetadataInstanceEditor;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,aAAa,MAAM,iCAAiC;AAE3D,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,YAAY,MAAM,gBAAgB;AAGzC,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAO,+BAA+B;AAyBtC,MAAMC,sBAAsB,GAAGA,CAAC;EAC5BC,uBAAuB;EACvBC,MAAM;EACNC,wBAAwB,GAAG,KAAK;EAChCC,qCAAqC,GAAG,KAAK;EAC7CC,2BAA2B,GAAG,KAAK;EACnCC,cAAc;EACdC,OAAO,GAAG,EAAE;EACZC,cAAc;EACdC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,mBAAmB;EACnBC,SAAS;EACTC;AACG,CAAC,kBACJpB,KAAA,CAAAqB,aAAA,CAAChB,6BAA6B,CAACiB,QAAQ;EAACC,KAAK,EAAE;IAAEhB;EAAwB;AAAE,gBACvEP,KAAA,CAAAqB,aAAA;EAAKG,SAAS,EAAC;AAA0B,gBACrCxB,KAAA,CAAAqB,aAAA,CAACnB,MAAM;EACHM,MAAM,EAAEA,MAAO;EACfK,OAAO,EAAEA,OAAQ;EACjBD,cAAc,EAAEA,cAAe;EAC/BI,KAAK,EAAEA,KAAM;EACbG,SAAS,EAAEA,SAAU;EACrBC,KAAK,EAAEA;AAAM,CAChB,CAAC,EACDP,OAAO,CAACY,MAAM,KAAK,CAAC,gBACjBzB,KAAA,CAAAqB,aAAA,CAACjB,YAAY;EAACI,MAAM,EAAEA;AAAO,CAAE,CAAC,gBAEhCR,KAAA,CAAAqB,aAAA,CAACpB,aAAa,qBACVD,KAAA,CAAAqB,aAAA,CAAClB,SAAS;EACNM,wBAAwB,EAAEA,wBAAyB;EACnDC,qCAAqC,EAAEA,qCAAsC;EAC7EG,OAAO,EAAEA,OAAQ;EACjBF,2BAA2B,EAAEA,2BAA4B;EACzDG,cAAc,EAAEA,cAAe;EAC/BC,QAAQ,EAAEA,QAAS;EACnBE,MAAM,EAAEA,MAAO;EACfC,mBAAmB,EAAEA;AAAoB,CAC5C,CACU,CAElB,CAC+B,CAC3C;AAED,eAAeZ,sBAAsB","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@ import LoadingIndicator from '../../components/loading-indicator';
|
|
|
14
14
|
import { Flyout, Overlay } from '../../components/flyout';
|
|
15
15
|
import MenuToggle from '../../components/dropdown-menu/MenuToggle';
|
|
16
16
|
import messages from './messages';
|
|
17
|
-
import TEMPLATE_CUSTOM_PROPERTIES from './constants';
|
|
17
|
+
import { TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
18
18
|
import './TemplateDropdown.scss';
|
|
19
19
|
const getAvailableTemplates = (allTemplates, usedTemplates) => allTemplates.filter(template => usedTemplates.findIndex(usedTemplate => usedTemplate.templateKey === template.templateKey && usedTemplate.scope === template.scope) === -1);
|
|
20
20
|
class TemplateDropdown extends React.PureComponent {
|
|
@@ -13,7 +13,7 @@ import { Flyout, Overlay } from '../../components/flyout';
|
|
|
13
13
|
|
|
14
14
|
import MenuToggle from '../../components/dropdown-menu/MenuToggle';
|
|
15
15
|
import messages from './messages';
|
|
16
|
-
import TEMPLATE_CUSTOM_PROPERTIES from './constants';
|
|
16
|
+
import { TEMPLATE_CUSTOM_PROPERTIES } from './constants';
|
|
17
17
|
import type { MetadataTemplate } from '../../common/types/metadata';
|
|
18
18
|
import './TemplateDropdown.scss';
|
|
19
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateDropdown.js","names":["React","classNames","isEqual","FormattedMessage","injectIntl","DatalistItem","SelectorDropdown","SearchForm","PlainButton","LoadingIndicator","Flyout","Overlay","MenuToggle","messages","TEMPLATE_CUSTOM_PROPERTIES","getAvailableTemplates","allTemplates","usedTemplates","filter","template","findIndex","usedTemplate","templateKey","scope","TemplateDropdown","PureComponent","constructor","props","_defineProperty","isDropdownBusy","onAdd","activeTemplate","defaultTemplateIcon","activeTemplateIcon","templates","title","state","hasUnusedTemplates","length","hasTemplates","hasResults","indicatorOrMessage","createElement","className","message","id","metadataTemplatesServerHasNoTemplates","metadataTemplatesNoRemainingTemplates","metadataTemplatesNoResults","renderedTemplates","map","isTemplateSelected","buttonClassName","key","tabIndex","type","getTemplateName","Fragment","isAlwaysOpen","onSelect","index","selector","getSelector","shouldScroll","intl","filterText","label","onChange","handleUserInput","placeholder","formatMessage","metadataTemplateSearchPlaceholder","shouldPreventClearEventPropagation","useClearButton","value","userInput","setState","customTitle","defaultMessage","displayName","toLowerCase","includes","onDropdownToggle","isDropdownOpen","entryButton","buttonToggleClassName","metadataTemplateAdd","componentDidUpdate","prevTemplates","prevUsedTemplates","_extends","render","flyoutClassName","closeOnClick","closeOnClickOutside","constrainToWindowWithPin","onClose","onOpen","position","shouldDefaultFocus","renderEntryButton","getDropdown","TemplateDropdownBase"],"sources":["../../../src/features/metadata-instance-editor/TemplateDropdown.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport DatalistItem from '../../components/datalist-item';\nimport SelectorDropdown from '../../components/selector-dropdown';\nimport SearchForm from '../../components/search-form/SearchForm';\nimport PlainButton from '../../components/plain-button';\nimport LoadingIndicator from '../../components/loading-indicator';\nimport { Flyout, Overlay } from '../../components/flyout';\n\nimport MenuToggle from '../../components/dropdown-menu/MenuToggle';\nimport messages from './messages';\nimport TEMPLATE_CUSTOM_PROPERTIES from './constants';\nimport type { MetadataTemplate } from '../../common/types/metadata';\nimport './TemplateDropdown.scss';\n\ntype Props = {\n activeTemplate?: ?MetadataTemplate,\n activeTemplateIcon?: React.Node,\n className?: string,\n defaultTemplateIcon?: React.Node,\n entryButton?: React.Node,\n intl: any,\n isDropdownBusy?: boolean,\n onAdd: (template: MetadataTemplate) => void,\n onDropdownToggle?: (isDropdownOpen: boolean) => void,\n templates: Array<MetadataTemplate>,\n title?: React.Node,\n usedTemplates: Array<MetadataTemplate>,\n};\n\ntype State = {\n filterText: string,\n isDropdownOpen: boolean,\n templates: Array<MetadataTemplate>,\n};\n\nconst getAvailableTemplates = (allTemplates: Array<MetadataTemplate>, usedTemplates: Array<MetadataTemplate>) =>\n allTemplates.filter(\n (template: MetadataTemplate) =>\n usedTemplates.findIndex(\n (usedTemplate: MetadataTemplate) =>\n usedTemplate.templateKey === template.templateKey && usedTemplate.scope === template.scope,\n ) === -1,\n );\n\nclass TemplateDropdown extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n isDropdownOpen: false,\n filterText: '',\n templates: getAvailableTemplates(props.templates, props.usedTemplates),\n };\n }\n\n /**\n * Updates the state\n *\n * @param {Object} prevProps - next props\n * @return {void}\n */\n componentDidUpdate({ templates: prevTemplates, usedTemplates: prevUsedTemplates }: Props) {\n const { templates, usedTemplates } = this.props;\n\n if (!isEqual(prevTemplates, templates) || !isEqual(prevUsedTemplates, usedTemplates)) {\n this.setState({\n templates: getAvailableTemplates(templates, usedTemplates),\n });\n }\n }\n\n getDropdown = () => {\n const {\n isDropdownBusy,\n onAdd,\n activeTemplate,\n defaultTemplateIcon,\n activeTemplateIcon,\n templates: allTemplates,\n title,\n usedTemplates,\n }: Props = this.props;\n const { templates }: State = this.state;\n const hasUnusedTemplates = getAvailableTemplates(allTemplates, usedTemplates).length > 0;\n const hasTemplates = allTemplates.length > 0;\n const hasResults = templates.length > 0;\n\n let indicatorOrMessage = null;\n\n if (isDropdownBusy) {\n indicatorOrMessage = (\n <LoadingIndicator className=\"metadata-instance-editor-template-message template-dropdown-loading-indicator\" />\n );\n } else if (!hasTemplates || !hasUnusedTemplates || !hasResults) {\n let message = { id: '' };\n\n if (!hasTemplates) {\n message = messages.metadataTemplatesServerHasNoTemplates;\n } else if (!hasUnusedTemplates) {\n message = messages.metadataTemplatesNoRemainingTemplates;\n } else if (!hasResults) {\n message = messages.metadataTemplatesNoResults;\n }\n\n indicatorOrMessage = (\n <i className=\"metadata-instance-editor-template-message\">\n <FormattedMessage {...message} />\n </i>\n );\n }\n\n const renderedTemplates = templates.map(template => {\n const isTemplateSelected = activeTemplate && activeTemplate.id === template.id;\n\n const buttonClassName = classNames('metadata-template-dropdown-select-template', {\n 'metadata-template-dropdown-is-selected': isTemplateSelected,\n });\n\n return (\n <DatalistItem key={template.id}>\n <PlainButton className={buttonClassName} tabIndex=\"-1\" type=\"button\">\n {isTemplateSelected ? activeTemplateIcon : defaultTemplateIcon}\n {this.getTemplateName(template)}\n </PlainButton>\n </DatalistItem>\n );\n });\n\n return (\n <>\n <SelectorDropdown\n className=\"metadata-instance-editor-template-dropdown-menu\"\n title={title}\n isAlwaysOpen\n onSelect={(index: number) => {\n onAdd(templates[index]);\n }}\n selector={this.getSelector()}\n shouldScroll\n >\n {indicatorOrMessage ? null : renderedTemplates}\n </SelectorDropdown>\n {indicatorOrMessage}\n </>\n );\n };\n\n /**\n * Returns the input field for the drop down\n *\n * @return {React.Node} - input selector\n */\n getSelector = () => {\n const { intl }: Props = this.props;\n const { filterText }: State = this.state;\n return (\n <SearchForm\n data-resin-target=\"metadata-templatesearch\"\n label=\"\"\n onChange={this.handleUserInput}\n placeholder={intl.formatMessage(messages.metadataTemplateSearchPlaceholder)}\n shouldPreventClearEventPropagation\n type=\"text\"\n useClearButton\n value={filterText}\n />\n );\n };\n\n /**\n * Returns template display name.\n * For custom metadata we have it on the client.\n *\n * @return {React.Node} - string or formatted name\n */\n getTemplateName(template: MetadataTemplate): React.Node {\n return template.templateKey === TEMPLATE_CUSTOM_PROPERTIES ? (\n <FormattedMessage className=\"template-display-name\" {...messages.customTitle} />\n ) : (\n <div className=\"template-display-name\">{template.displayName}</div>\n );\n }\n\n /**\n * Updates the filter text and filters the results\n *\n * @param {UserInput} userInput - input value returned from onChangeHandler from SearchForm.js\n * @return {void}\n */\n handleUserInput = (userInput: string) => {\n const { templates: allTemplates, usedTemplates } = this.props;\n const filterText = userInput;\n const templates = getAvailableTemplates(allTemplates, usedTemplates);\n\n this.setState({\n filterText,\n templates: templates.filter(template => {\n const label: string = ((template.templateKey === TEMPLATE_CUSTOM_PROPERTIES\n ? messages.customTitle.defaultMessage\n : template.displayName): any);\n return label.toLowerCase().includes(filterText.toLowerCase());\n }),\n });\n };\n\n onOpen = () => {\n const { onDropdownToggle, templates, usedTemplates } = this.props;\n\n if (onDropdownToggle) {\n onDropdownToggle(true);\n }\n\n this.setState({\n isDropdownOpen: true,\n filterText: '',\n templates: getAvailableTemplates(templates, usedTemplates),\n });\n };\n\n onClose = () => {\n const { onDropdownToggle } = this.props;\n\n if (onDropdownToggle) {\n onDropdownToggle(false);\n }\n\n this.setState({ isDropdownOpen: false });\n };\n\n renderEntryButton = () => {\n const { entryButton } = this.props;\n const { isDropdownOpen } = this.state;\n const buttonToggleClassName = classNames('lnk', {\n 'is-toggled': isDropdownOpen,\n });\n if (entryButton) {\n return entryButton;\n }\n return (\n <PlainButton data-resin-target=\"metadata-templateaddmenu\" className={buttonToggleClassName} type=\"button\">\n <MenuToggle>\n <FormattedMessage {...messages.metadataTemplateAdd} />\n </MenuToggle>\n </PlainButton>\n );\n };\n\n render() {\n const { className } = this.props;\n const flyoutClassName = classNames('metadata-instance-editor-template-dropdown-flyout', className);\n\n return (\n <Flyout\n className={flyoutClassName}\n closeOnClick\n closeOnClickOutside\n constrainToWindowWithPin\n onClose={this.onClose}\n onOpen={this.onOpen}\n position=\"bottom-left\"\n shouldDefaultFocus\n >\n {this.renderEntryButton()}\n <Overlay>{this.getDropdown()}</Overlay>\n </Flyout>\n );\n }\n}\n\nexport { TemplateDropdown as TemplateDropdownBase };\nexport default injectIntl(TemplateDropdown);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TemplateDropdown.js","names":["React","classNames","isEqual","FormattedMessage","injectIntl","DatalistItem","SelectorDropdown","SearchForm","PlainButton","LoadingIndicator","Flyout","Overlay","MenuToggle","messages","TEMPLATE_CUSTOM_PROPERTIES","getAvailableTemplates","allTemplates","usedTemplates","filter","template","findIndex","usedTemplate","templateKey","scope","TemplateDropdown","PureComponent","constructor","props","_defineProperty","isDropdownBusy","onAdd","activeTemplate","defaultTemplateIcon","activeTemplateIcon","templates","title","state","hasUnusedTemplates","length","hasTemplates","hasResults","indicatorOrMessage","createElement","className","message","id","metadataTemplatesServerHasNoTemplates","metadataTemplatesNoRemainingTemplates","metadataTemplatesNoResults","renderedTemplates","map","isTemplateSelected","buttonClassName","key","tabIndex","type","getTemplateName","Fragment","isAlwaysOpen","onSelect","index","selector","getSelector","shouldScroll","intl","filterText","label","onChange","handleUserInput","placeholder","formatMessage","metadataTemplateSearchPlaceholder","shouldPreventClearEventPropagation","useClearButton","value","userInput","setState","customTitle","defaultMessage","displayName","toLowerCase","includes","onDropdownToggle","isDropdownOpen","entryButton","buttonToggleClassName","metadataTemplateAdd","componentDidUpdate","prevTemplates","prevUsedTemplates","_extends","render","flyoutClassName","closeOnClick","closeOnClickOutside","constrainToWindowWithPin","onClose","onOpen","position","shouldDefaultFocus","renderEntryButton","getDropdown","TemplateDropdownBase"],"sources":["../../../src/features/metadata-instance-editor/TemplateDropdown.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport DatalistItem from '../../components/datalist-item';\nimport SelectorDropdown from '../../components/selector-dropdown';\nimport SearchForm from '../../components/search-form/SearchForm';\nimport PlainButton from '../../components/plain-button';\nimport LoadingIndicator from '../../components/loading-indicator';\nimport { Flyout, Overlay } from '../../components/flyout';\n\nimport MenuToggle from '../../components/dropdown-menu/MenuToggle';\nimport messages from './messages';\nimport { TEMPLATE_CUSTOM_PROPERTIES } from './constants';\nimport type { MetadataTemplate } from '../../common/types/metadata';\nimport './TemplateDropdown.scss';\n\ntype Props = {\n activeTemplate?: ?MetadataTemplate,\n activeTemplateIcon?: React.Node,\n className?: string,\n defaultTemplateIcon?: React.Node,\n entryButton?: React.Node,\n intl: any,\n isDropdownBusy?: boolean,\n onAdd: (template: MetadataTemplate) => void,\n onDropdownToggle?: (isDropdownOpen: boolean) => void,\n templates: Array<MetadataTemplate>,\n title?: React.Node,\n usedTemplates: Array<MetadataTemplate>,\n};\n\ntype State = {\n filterText: string,\n isDropdownOpen: boolean,\n templates: Array<MetadataTemplate>,\n};\n\nconst getAvailableTemplates = (allTemplates: Array<MetadataTemplate>, usedTemplates: Array<MetadataTemplate>) =>\n allTemplates.filter(\n (template: MetadataTemplate) =>\n usedTemplates.findIndex(\n (usedTemplate: MetadataTemplate) =>\n usedTemplate.templateKey === template.templateKey && usedTemplate.scope === template.scope,\n ) === -1,\n );\n\nclass TemplateDropdown extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n isDropdownOpen: false,\n filterText: '',\n templates: getAvailableTemplates(props.templates, props.usedTemplates),\n };\n }\n\n /**\n * Updates the state\n *\n * @param {Object} prevProps - next props\n * @return {void}\n */\n componentDidUpdate({ templates: prevTemplates, usedTemplates: prevUsedTemplates }: Props) {\n const { templates, usedTemplates } = this.props;\n\n if (!isEqual(prevTemplates, templates) || !isEqual(prevUsedTemplates, usedTemplates)) {\n this.setState({\n templates: getAvailableTemplates(templates, usedTemplates),\n });\n }\n }\n\n getDropdown = () => {\n const {\n isDropdownBusy,\n onAdd,\n activeTemplate,\n defaultTemplateIcon,\n activeTemplateIcon,\n templates: allTemplates,\n title,\n usedTemplates,\n }: Props = this.props;\n const { templates }: State = this.state;\n const hasUnusedTemplates = getAvailableTemplates(allTemplates, usedTemplates).length > 0;\n const hasTemplates = allTemplates.length > 0;\n const hasResults = templates.length > 0;\n\n let indicatorOrMessage = null;\n\n if (isDropdownBusy) {\n indicatorOrMessage = (\n <LoadingIndicator className=\"metadata-instance-editor-template-message template-dropdown-loading-indicator\" />\n );\n } else if (!hasTemplates || !hasUnusedTemplates || !hasResults) {\n let message = { id: '' };\n\n if (!hasTemplates) {\n message = messages.metadataTemplatesServerHasNoTemplates;\n } else if (!hasUnusedTemplates) {\n message = messages.metadataTemplatesNoRemainingTemplates;\n } else if (!hasResults) {\n message = messages.metadataTemplatesNoResults;\n }\n\n indicatorOrMessage = (\n <i className=\"metadata-instance-editor-template-message\">\n <FormattedMessage {...message} />\n </i>\n );\n }\n\n const renderedTemplates = templates.map(template => {\n const isTemplateSelected = activeTemplate && activeTemplate.id === template.id;\n\n const buttonClassName = classNames('metadata-template-dropdown-select-template', {\n 'metadata-template-dropdown-is-selected': isTemplateSelected,\n });\n\n return (\n <DatalistItem key={template.id}>\n <PlainButton className={buttonClassName} tabIndex=\"-1\" type=\"button\">\n {isTemplateSelected ? activeTemplateIcon : defaultTemplateIcon}\n {this.getTemplateName(template)}\n </PlainButton>\n </DatalistItem>\n );\n });\n\n return (\n <>\n <SelectorDropdown\n className=\"metadata-instance-editor-template-dropdown-menu\"\n title={title}\n isAlwaysOpen\n onSelect={(index: number) => {\n onAdd(templates[index]);\n }}\n selector={this.getSelector()}\n shouldScroll\n >\n {indicatorOrMessage ? null : renderedTemplates}\n </SelectorDropdown>\n {indicatorOrMessage}\n </>\n );\n };\n\n /**\n * Returns the input field for the drop down\n *\n * @return {React.Node} - input selector\n */\n getSelector = () => {\n const { intl }: Props = this.props;\n const { filterText }: State = this.state;\n return (\n <SearchForm\n data-resin-target=\"metadata-templatesearch\"\n label=\"\"\n onChange={this.handleUserInput}\n placeholder={intl.formatMessage(messages.metadataTemplateSearchPlaceholder)}\n shouldPreventClearEventPropagation\n type=\"text\"\n useClearButton\n value={filterText}\n />\n );\n };\n\n /**\n * Returns template display name.\n * For custom metadata we have it on the client.\n *\n * @return {React.Node} - string or formatted name\n */\n getTemplateName(template: MetadataTemplate): React.Node {\n return template.templateKey === TEMPLATE_CUSTOM_PROPERTIES ? (\n <FormattedMessage className=\"template-display-name\" {...messages.customTitle} />\n ) : (\n <div className=\"template-display-name\">{template.displayName}</div>\n );\n }\n\n /**\n * Updates the filter text and filters the results\n *\n * @param {UserInput} userInput - input value returned from onChangeHandler from SearchForm.js\n * @return {void}\n */\n handleUserInput = (userInput: string) => {\n const { templates: allTemplates, usedTemplates } = this.props;\n const filterText = userInput;\n const templates = getAvailableTemplates(allTemplates, usedTemplates);\n\n this.setState({\n filterText,\n templates: templates.filter(template => {\n const label: string = ((template.templateKey === TEMPLATE_CUSTOM_PROPERTIES\n ? messages.customTitle.defaultMessage\n : template.displayName): any);\n return label.toLowerCase().includes(filterText.toLowerCase());\n }),\n });\n };\n\n onOpen = () => {\n const { onDropdownToggle, templates, usedTemplates } = this.props;\n\n if (onDropdownToggle) {\n onDropdownToggle(true);\n }\n\n this.setState({\n isDropdownOpen: true,\n filterText: '',\n templates: getAvailableTemplates(templates, usedTemplates),\n });\n };\n\n onClose = () => {\n const { onDropdownToggle } = this.props;\n\n if (onDropdownToggle) {\n onDropdownToggle(false);\n }\n\n this.setState({ isDropdownOpen: false });\n };\n\n renderEntryButton = () => {\n const { entryButton } = this.props;\n const { isDropdownOpen } = this.state;\n const buttonToggleClassName = classNames('lnk', {\n 'is-toggled': isDropdownOpen,\n });\n if (entryButton) {\n return entryButton;\n }\n return (\n <PlainButton data-resin-target=\"metadata-templateaddmenu\" className={buttonToggleClassName} type=\"button\">\n <MenuToggle>\n <FormattedMessage {...messages.metadataTemplateAdd} />\n </MenuToggle>\n </PlainButton>\n );\n };\n\n render() {\n const { className } = this.props;\n const flyoutClassName = classNames('metadata-instance-editor-template-dropdown-flyout', className);\n\n return (\n <Flyout\n className={flyoutClassName}\n closeOnClick\n closeOnClickOutside\n constrainToWindowWithPin\n onClose={this.onClose}\n onOpen={this.onOpen}\n position=\"bottom-left\"\n shouldDefaultFocus\n >\n {this.renderEntryButton()}\n <Overlay>{this.getDropdown()}</Overlay>\n </Flyout>\n );\n }\n}\n\nexport { TemplateDropdown as TemplateDropdownBase };\nexport default injectIntl(TemplateDropdown);\n"],"mappings":"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","ignoreList":[]}
|