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.
Files changed (92) hide show
  1. package/dist/explorer.js +1 -1
  2. package/dist/preview.js +1 -1
  3. package/dist/sharing.js +1 -1
  4. package/dist/sharing.js.LICENSE.txt +10 -0
  5. package/dist/sidebar.js +1 -1
  6. package/es/common/types/metadata.js.flow +1 -0
  7. package/es/common/types/metadata.js.map +1 -1
  8. package/es/components/notification/Notification.js +17 -8
  9. package/es/components/notification/Notification.js.flow +15 -8
  10. package/es/components/notification/Notification.js.map +1 -1
  11. package/es/features/metadata-instance-editor/CascadePolicy.js +6 -2
  12. package/es/features/metadata-instance-editor/CascadePolicy.js.flow +19 -12
  13. package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
  14. package/es/features/metadata-instance-editor/Instance.js +31 -9
  15. package/es/features/metadata-instance-editor/Instance.js.flow +41 -9
  16. package/es/features/metadata-instance-editor/Instance.js.map +1 -1
  17. package/es/features/metadata-instance-editor/Instances.js +2 -0
  18. package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
  19. package/es/features/metadata-instance-editor/Instances.js.map +1 -1
  20. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
  21. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
  22. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
  23. package/es/features/metadata-instance-editor/TemplateDropdown.js +1 -1
  24. package/es/features/metadata-instance-editor/TemplateDropdown.js.flow +1 -1
  25. package/es/features/metadata-instance-editor/TemplateDropdown.js.map +1 -1
  26. package/es/features/metadata-instance-editor/TemplatedInstance.js +2 -0
  27. package/es/features/metadata-instance-editor/TemplatedInstance.js.flow +11 -1
  28. package/es/features/metadata-instance-editor/TemplatedInstance.js.map +1 -1
  29. package/es/features/metadata-instance-editor/constants.js +2 -1
  30. package/es/features/metadata-instance-editor/constants.js.flow +3 -1
  31. package/es/features/metadata-instance-editor/constants.js.map +1 -1
  32. package/es/features/metadata-instance-fields/DateMetadataField.js +30 -25
  33. package/es/features/metadata-instance-fields/DateMetadataField.js.flow +31 -27
  34. package/es/features/metadata-instance-fields/DateMetadataField.js.map +1 -1
  35. package/es/features/metadata-instance-fields/EnumMetadataField.js +8 -5
  36. package/es/features/metadata-instance-fields/EnumMetadataField.js.flow +8 -6
  37. package/es/features/metadata-instance-fields/EnumMetadataField.js.map +1 -1
  38. package/es/features/metadata-instance-fields/FloatMetadataField.js +2 -0
  39. package/es/features/metadata-instance-fields/FloatMetadataField.js.flow +3 -0
  40. package/es/features/metadata-instance-fields/FloatMetadataField.js.map +1 -1
  41. package/es/features/metadata-instance-fields/IntegerMetadataField.js +2 -0
  42. package/es/features/metadata-instance-fields/IntegerMetadataField.js.flow +3 -0
  43. package/es/features/metadata-instance-fields/IntegerMetadataField.js.map +1 -1
  44. package/es/features/metadata-instance-fields/MetadataField.js +7 -0
  45. package/es/features/metadata-instance-fields/MetadataField.js.flow +8 -0
  46. package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
  47. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js +2 -0
  48. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.flow +3 -0
  49. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.map +1 -1
  50. package/es/features/metadata-instance-fields/TextMetadataField.js +8 -5
  51. package/es/features/metadata-instance-fields/TextMetadataField.js.flow +8 -6
  52. package/es/features/metadata-instance-fields/TextMetadataField.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/common/types/metadata.js +1 -0
  55. package/src/components/notification/Notification.js +15 -8
  56. package/src/components/notification/__tests__/Notification.test.js +21 -1
  57. package/src/features/metadata-instance-editor/CascadePolicy.js +19 -12
  58. package/src/features/metadata-instance-editor/Instance.js +41 -9
  59. package/src/features/metadata-instance-editor/Instances.js +3 -0
  60. package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
  61. package/src/features/metadata-instance-editor/TemplateDropdown.js +1 -1
  62. package/src/features/metadata-instance-editor/TemplatedInstance.js +11 -1
  63. package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +92 -1
  64. package/src/features/metadata-instance-editor/__tests__/Instance.test.js +207 -2
  65. package/src/features/metadata-instance-editor/__tests__/Instances.test.js +92 -3
  66. package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +105 -0
  67. package/src/features/metadata-instance-editor/__tests__/TemplatedInstance.test.js +83 -1
  68. package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +1 -0
  69. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +16 -5
  70. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +4 -2
  71. package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
  72. package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap +2 -2
  73. package/src/features/metadata-instance-editor/constants.js +3 -1
  74. package/src/features/metadata-instance-fields/DateMetadataField.js +31 -27
  75. package/src/features/metadata-instance-fields/EnumMetadataField.js +8 -6
  76. package/src/features/metadata-instance-fields/FloatMetadataField.js +3 -0
  77. package/src/features/metadata-instance-fields/IntegerMetadataField.js +3 -0
  78. package/src/features/metadata-instance-fields/MetadataField.js +8 -0
  79. package/src/features/metadata-instance-fields/MultiSelectMetadataField.js +3 -0
  80. package/src/features/metadata-instance-fields/TextMetadataField.js +8 -6
  81. package/src/features/metadata-instance-fields/__tests__/DateMetadataField.test.js +59 -8
  82. package/src/features/metadata-instance-fields/__tests__/EnumMetadataField.test.js +63 -18
  83. package/src/features/metadata-instance-fields/__tests__/FloatMetadataField.test.js +68 -4
  84. package/src/features/metadata-instance-fields/__tests__/IntegerMetadataField.test.js +90 -4
  85. package/src/features/metadata-instance-fields/__tests__/MultiSelectMetadataField.test.js +95 -7
  86. package/src/features/metadata-instance-fields/__tests__/TextMetadataField.test.js +107 -14
  87. package/src/features/metadata-instance-fields/__tests__/__snapshots__/DateMetadataField.test.js.snap +0 -18
  88. package/src/features/metadata-instance-fields/__tests__/__snapshots__/EnumMetadataField.test.js.snap +0 -84
  89. package/src/features/metadata-instance-fields/__tests__/__snapshots__/FloatMetadataField.test.js.snap +0 -8
  90. package/src/features/metadata-instance-fields/__tests__/__snapshots__/IntegerMetadataField.test.js.snap +0 -8
  91. package/src/features/metadata-instance-fields/__tests__/__snapshots__/MultiSelectMetadataField.test.js.snap +0 -58
  92. 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 { data: currentData, errors, isCascadingEnabled, isCascadingOverwritten }: State = this.state;
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
- shouldShowCascadeOptions: false,
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.isCascadingEnabled(props);
351
+ const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);
343
352
 
344
353
  return {
345
354
  data: cloneDeep(props.data),
346
355
  errors: {},
347
- isAIFolderExtractionEnabled: false,
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 = isCascadingOverwritten || isCascadingEnabled !== this.isCascadingEnabled(this.props);
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
- isCascadingEnabled(props: Props) {
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":"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","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;AAmBjC,MAAMC,SAAS,GAAGA,CAAC;EACfC,wBAAwB,GAAG,KAAK;EAChCC,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,oBACIT,KAAA,CAAAkB,aAAA,CAACjB,QAAQ;IACLkB,OAAO,EAAEP,QAAQ,CAACO,OAAQ;IAC1BhB,wBAAwB,EAAEA,wBAAyB;IACnDiB,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,eAAeZ,SAAS","ignoreList":[]}
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;AAwBtC,MAAMC,sBAAsB,GAAGA,CAAC;EAC5BC,uBAAuB;EACvBC,MAAM;EACNC,wBAAwB,GAAG,KAAK;EAChCC,2BAA2B,GAAG,KAAK;EACnCC,cAAc;EACdC,OAAO,GAAG,EAAE;EACZC,cAAc;EACdC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,mBAAmB;EACnBC,SAAS;EACTC;AACG,CAAC,kBACJnB,KAAA,CAAAoB,aAAA,CAACf,6BAA6B,CAACgB,QAAQ;EAACC,KAAK,EAAE;IAAEf;EAAwB;AAAE,gBACvEP,KAAA,CAAAoB,aAAA;EAAKG,SAAS,EAAC;AAA0B,gBACrCvB,KAAA,CAAAoB,aAAA,CAAClB,MAAM;EACHM,MAAM,EAAEA,MAAO;EACfI,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,gBACjBxB,KAAA,CAAAoB,aAAA,CAAChB,YAAY;EAACI,MAAM,EAAEA;AAAO,CAAE,CAAC,gBAEhCR,KAAA,CAAAoB,aAAA,CAACnB,aAAa,qBACVD,KAAA,CAAAoB,aAAA,CAACjB,SAAS;EACNM,wBAAwB,EAAEA,wBAAyB;EACnDG,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,eAAeX,sBAAsB","ignoreList":[]}
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":[]}