box-ui-elements 23.4.0-beta.1 → 23.4.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/explorer.js +1 -1
  2. package/dist/preview.js +1 -1
  3. package/dist/sidebar.js +1 -1
  4. package/es/common/types/metadata.js.flow +1 -0
  5. package/es/common/types/metadata.js.map +1 -1
  6. package/es/features/metadata-instance-editor/CascadePolicy.js +6 -2
  7. package/es/features/metadata-instance-editor/CascadePolicy.js.flow +19 -12
  8. package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
  9. package/es/features/metadata-instance-editor/Instance.js +31 -9
  10. package/es/features/metadata-instance-editor/Instance.js.flow +41 -9
  11. package/es/features/metadata-instance-editor/Instance.js.map +1 -1
  12. package/es/features/metadata-instance-editor/Instances.js +2 -0
  13. package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
  14. package/es/features/metadata-instance-editor/Instances.js.map +1 -1
  15. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
  16. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
  17. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
  18. package/es/features/metadata-instance-editor/TemplateDropdown.js +1 -1
  19. package/es/features/metadata-instance-editor/TemplateDropdown.js.flow +1 -1
  20. package/es/features/metadata-instance-editor/TemplateDropdown.js.map +1 -1
  21. package/es/features/metadata-instance-editor/TemplatedInstance.js +2 -0
  22. package/es/features/metadata-instance-editor/TemplatedInstance.js.flow +11 -1
  23. package/es/features/metadata-instance-editor/TemplatedInstance.js.map +1 -1
  24. package/es/features/metadata-instance-editor/constants.js +2 -1
  25. package/es/features/metadata-instance-editor/constants.js.flow +3 -1
  26. package/es/features/metadata-instance-editor/constants.js.map +1 -1
  27. package/es/features/metadata-instance-fields/DateMetadataField.js +30 -25
  28. package/es/features/metadata-instance-fields/DateMetadataField.js.flow +31 -27
  29. package/es/features/metadata-instance-fields/DateMetadataField.js.map +1 -1
  30. package/es/features/metadata-instance-fields/EnumMetadataField.js +8 -5
  31. package/es/features/metadata-instance-fields/EnumMetadataField.js.flow +8 -6
  32. package/es/features/metadata-instance-fields/EnumMetadataField.js.map +1 -1
  33. package/es/features/metadata-instance-fields/FloatMetadataField.js +2 -0
  34. package/es/features/metadata-instance-fields/FloatMetadataField.js.flow +3 -0
  35. package/es/features/metadata-instance-fields/FloatMetadataField.js.map +1 -1
  36. package/es/features/metadata-instance-fields/IntegerMetadataField.js +2 -0
  37. package/es/features/metadata-instance-fields/IntegerMetadataField.js.flow +3 -0
  38. package/es/features/metadata-instance-fields/IntegerMetadataField.js.map +1 -1
  39. package/es/features/metadata-instance-fields/MetadataField.js +7 -0
  40. package/es/features/metadata-instance-fields/MetadataField.js.flow +8 -0
  41. package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
  42. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js +2 -0
  43. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.flow +3 -0
  44. package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.map +1 -1
  45. package/es/features/metadata-instance-fields/TextMetadataField.js +8 -5
  46. package/es/features/metadata-instance-fields/TextMetadataField.js.flow +8 -6
  47. package/es/features/metadata-instance-fields/TextMetadataField.js.map +1 -1
  48. package/i18n/bn-IN.js +4 -4
  49. package/i18n/bn-IN.properties +4 -4
  50. package/i18n/da-DK.js +4 -4
  51. package/i18n/da-DK.properties +4 -4
  52. package/i18n/de-DE.js +4 -4
  53. package/i18n/de-DE.properties +4 -4
  54. package/i18n/es-419.js +3 -3
  55. package/i18n/es-419.properties +3 -3
  56. package/i18n/es-ES.js +3 -3
  57. package/i18n/es-ES.properties +3 -3
  58. package/i18n/fi-FI.js +3 -3
  59. package/i18n/fi-FI.properties +3 -3
  60. package/i18n/fr-CA.js +4 -4
  61. package/i18n/fr-CA.properties +4 -4
  62. package/i18n/fr-FR.js +4 -4
  63. package/i18n/fr-FR.properties +4 -4
  64. package/i18n/hi-IN.js +4 -4
  65. package/i18n/hi-IN.properties +4 -4
  66. package/i18n/it-IT.js +4 -4
  67. package/i18n/it-IT.properties +4 -4
  68. package/i18n/ko-KR.js +4 -4
  69. package/i18n/ko-KR.properties +4 -4
  70. package/i18n/nb-NO.js +4 -4
  71. package/i18n/nb-NO.properties +4 -4
  72. package/i18n/nl-NL.js +4 -4
  73. package/i18n/nl-NL.properties +4 -4
  74. package/i18n/pl-PL.js +4 -4
  75. package/i18n/pl-PL.properties +4 -4
  76. package/i18n/pt-BR.js +4 -4
  77. package/i18n/pt-BR.properties +4 -4
  78. package/i18n/ru-RU.js +4 -4
  79. package/i18n/ru-RU.properties +4 -4
  80. package/i18n/sv-SE.js +4 -4
  81. package/i18n/sv-SE.properties +4 -4
  82. package/i18n/tr-TR.js +4 -4
  83. package/i18n/tr-TR.properties +4 -4
  84. package/i18n/zh-CN.js +4 -4
  85. package/i18n/zh-CN.properties +4 -4
  86. package/i18n/zh-TW.js +4 -4
  87. package/i18n/zh-TW.properties +4 -4
  88. package/package.json +1 -1
  89. package/src/common/types/metadata.js +1 -0
  90. package/src/features/metadata-instance-editor/CascadePolicy.js +19 -12
  91. package/src/features/metadata-instance-editor/Instance.js +41 -9
  92. package/src/features/metadata-instance-editor/Instances.js +3 -0
  93. package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
  94. package/src/features/metadata-instance-editor/TemplateDropdown.js +1 -1
  95. package/src/features/metadata-instance-editor/TemplatedInstance.js +11 -1
  96. package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +92 -1
  97. package/src/features/metadata-instance-editor/__tests__/Instance.test.js +207 -2
  98. package/src/features/metadata-instance-editor/__tests__/Instances.test.js +92 -3
  99. package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +105 -0
  100. package/src/features/metadata-instance-editor/__tests__/TemplatedInstance.test.js +83 -1
  101. package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +1 -0
  102. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +16 -5
  103. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +4 -2
  104. package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
  105. package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap +2 -2
  106. package/src/features/metadata-instance-editor/constants.js +3 -1
  107. package/src/features/metadata-instance-fields/DateMetadataField.js +31 -27
  108. package/src/features/metadata-instance-fields/EnumMetadataField.js +8 -6
  109. package/src/features/metadata-instance-fields/FloatMetadataField.js +3 -0
  110. package/src/features/metadata-instance-fields/IntegerMetadataField.js +3 -0
  111. package/src/features/metadata-instance-fields/MetadataField.js +8 -0
  112. package/src/features/metadata-instance-fields/MultiSelectMetadataField.js +3 -0
  113. package/src/features/metadata-instance-fields/TextMetadataField.js +8 -6
  114. package/src/features/metadata-instance-fields/__tests__/DateMetadataField.test.js +59 -8
  115. package/src/features/metadata-instance-fields/__tests__/EnumMetadataField.test.js +63 -18
  116. package/src/features/metadata-instance-fields/__tests__/FloatMetadataField.test.js +68 -4
  117. package/src/features/metadata-instance-fields/__tests__/IntegerMetadataField.test.js +90 -4
  118. package/src/features/metadata-instance-fields/__tests__/MultiSelectMetadataField.test.js +95 -7
  119. package/src/features/metadata-instance-fields/__tests__/TextMetadataField.test.js +107 -14
  120. package/src/features/metadata-instance-fields/__tests__/__snapshots__/DateMetadataField.test.js.snap +0 -18
  121. package/src/features/metadata-instance-fields/__tests__/__snapshots__/EnumMetadataField.test.js.snap +0 -84
  122. package/src/features/metadata-instance-fields/__tests__/__snapshots__/FloatMetadataField.test.js.snap +0 -8
  123. package/src/features/metadata-instance-fields/__tests__/__snapshots__/IntegerMetadataField.test.js.snap +0 -8
  124. package/src/features/metadata-instance-fields/__tests__/__snapshots__/MultiSelectMetadataField.test.js.snap +0 -58
  125. package/src/features/metadata-instance-fields/__tests__/__snapshots__/TextMetadataField.test.js.snap +0 -31
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","TEMPLATE_CUSTOM_PROPERTIES","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","currentData","errors","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","shouldShowCascadeOptions","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","isAIFolderExtractionEnabled","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","isOpen","animationDuration","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport TEMPLATE_CUSTOM_PROPERTIES from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const { data: currentData, errors, isCascadingEnabled, isCascadingOverwritten }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n shouldShowCascadeOptions: false,\n });\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabled(props);\n\n return {\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: false,\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged = isCascadingOverwritten || isCascadingEnabled !== this.isCascadingEnabled(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabled(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isOpen","animationDuration","isExistingAIExtractionCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES } from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingAIExtractionCascadePolicy =\n this.isCascadingEnabledThroughProps(this.props) && this.isAIFolderExtractionEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={\n canUseAIFolderExtractionAgentSelector\n }\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingAIExtractionCascadePolicy={isExistingAIExtractionCascadePolicy}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":";;;;;;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,EAAEC,gBAAgB,QAAQ,YAAY;AACzD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,gBAAgB;AACpC,OAAOC,SAAS,MAAM,kBAAkB;AACxC,OAAOC,IAAI,MAAM,aAAa;AAE9B,OAAOC,WAAW,MAAM,0CAA0C;AAClE,OAAOC,IAAI,MAAM,0CAA0C;AAC3D,OAAOC,uBAAuB,MAAM,4DAA4D;AAChG,OAAOC,WAAW,MAAM,2CAA2C;AACnE,OAAOC,OAAO,MAAM,0BAA0B;AAC9C,OAAOC,mBAAmB,MAAM,yCAAyC;AACzE,OAAOC,eAAe,MAAM,qCAAqC;AACjE,OAAOC,QAAQ,MAAM,8BAA8B;AACnD,SAASC,gBAAgB,QAAQ,wBAAwB;AACzD,SAASC,cAAc,QAAQ,iBAAiB;AAEhD,OAAOC,aAAa,MAAM,iBAAiB;AAC3C,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,cAAc,MAAM,kBAAkB;AAC7C,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,QAAQ,MAAM,YAAY;AACjC,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,uCAAuC;AAC5F,SAASC,8BAA8B,EAAEC,0BAA0B,QAAQ,aAAa;AACxF,SACIC,oBAAoB,EACpBC,iBAAiB,EACjBC,qBAAqB,EACrBC,kBAAkB,QACf,wBAAwB;AAC/B,SAASC,YAAY,QAAQ,mDAAmD;AAChF,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,gBAAgB,QAAQ,wBAAwB;AAUzD,OAAO,iBAAiB;AAqCxB,MAAMC,uBAAuB,GAAGA,CAACC,MAAqC,GAAG,EAAE,KACvEA,MAAM,CAACC,MAAM,CAAC,CAACC,IAAI,EAAE;EAAEC,GAAG;EAAEC;AAAK,CAAC,KAAK;EACnCF,IAAI,CAACC,GAAG,CAAC,GAAGC,IAAI;EAChB,OAAOF,IAAI;AACf,CAAC,EAAE,CAAC,CAAC,CAAC;AAEV,MAAMG,QAAQ,GAAGA,CAACC,IAAY,EAAEH,GAAW,EAAEC,IAAY,KAAK;EAC1D,MAAMG,KAAK,GAAGD,IAAI,CAACH,GAAG,CAAC;EAEvB,QAAQC,IAAI;IACR,KAAKhB,gBAAgB;MACjB,OAAOoB,UAAU,CAACD,KAAK,CAAC;IAE5B,KAAKlB,kBAAkB;MACnB,OAAOoB,QAAQ,CAACF,KAAK,EAAE,EAAE,CAAC;IAE9B;MACI,OAAOA,KAAK;EACpB;AACJ,CAAC;AAED,MAAMG,QAAQ,SAAS7C,KAAK,CAAC8C,aAAa,CAAe;EAMrDC,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAuChB;AACJ;AACA;AACA;AACA;IAJIC,eAAA,mBAKW,MAAY;MACnB,MAAM;QAAEC,EAAE;QAAEC;MAAsB,CAAC,GAAG,IAAI,CAACH,KAAK;MAChD,IAAI,CAACI,QAAQ,CAAC,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACL,KAAK,CAAC,CAAC;;MAExC;MACA,IAAIG,cAAc,EAAE;QAChBA,cAAc,CAACD,EAAE,EAAE,KAAK,CAAC;MAC7B;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJID,eAAA,0BAKkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC;QAAEE,mBAAmB,EAAE;MAAK,CAAC,CAAC;IAChD,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIL,eAAA,0BAKkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC;QAAEE,mBAAmB,EAAE;MAAM,CAAC,CAAC;IACjD,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIL,eAAA,mBAKW,MAAY;MACnB,IAAI,CAAC,IAAI,CAACM,SAAS,CAAC,CAAC,EAAE;QACnB;MACJ;MAEA,MAAM;QAAEL,EAAE;QAAEM;MAAgB,CAAC,GAAG,IAAI,CAACR,KAAK;MAC1C,IAAIQ,QAAQ,EAAE;QACVA,QAAQ,CAACN,EAAE,CAAC;QACZ,IAAI,CAACE,QAAQ,CAAC;UAAEK,MAAM,EAAE;QAAK,CAAC,CAAC;MACnC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIR,eAAA,iBAKS,MAAY;MACjB,MAAM;QACFS,aAAa;QACbjB,IAAI,EAAEkB,YAAY;QAClBT,EAAE;QACFU,OAAO;QACPC,2BAA2B;QAC3BC;MACG,CAAC,GAAG,IAAI,CAACd,KAAK;MACrB,MAAM;QACFP,IAAI,EAAEsB,WAAW;QACjBC,MAAM;QACNC,2BAA2B;QAC3BC,kBAAkB;QAClBC;MACG,CAAC,GAAG,IAAI,CAACC,KAAK;MAErB,IAAI,CAAC,IAAI,CAACb,SAAS,CAAC,CAAC,IAAI,CAACK,OAAO,IAAI,CAACE,MAAM,IAAIO,MAAM,CAACC,IAAI,CAACN,MAAM,CAAC,CAACO,MAAM,EAAE;QACxE;MACJ;MAEA,IAAI,CAACnB,QAAQ,CAAC;QACVK,MAAM,EAAE,IAAI;QACZF,SAAS,EAAE,KAAK;QAChB;QACAU,2BAA2B,EAAEC,kBAAkB,GAAGD,2BAA2B,GAAG;MACpF,CAAC,CAAC;MACFH,MAAM,CACFZ,EAAE,EACF,IAAI,CAACsB,eAAe,CAACT,WAAW,EAAEJ,YAAY,CAAC,EAC/CE,2BAA2B,GACrB;QACIY,OAAO,EAAEf,aAAa,GAAGA,aAAa,CAACe,OAAO,GAAG,KAAK;QACtDvB,EAAE,EAAEQ,aAAa,GAAGA,aAAa,CAACR,EAAE,GAAGwB,SAAS;QAChDC,SAAS,EAAET,kBAAkB;QAC7BU,SAAS,EAAET,sBAAsB;QACjCF;MACJ,CAAC,GACDS,SAAS,EACfrE,SAAS,CAAC0D,WAAW,CACzB,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPId,eAAA,wBAQgB,CAACX,GAAW,EAAEI,KAAyB,EAAEH,IAAY,KAAW;MAC5E,MAAM;QAAEE,IAAI;QAAEuB;MAAc,CAAC,GAAG,IAAI,CAACI,KAAK;;MAE1C;MACA,IAAI,CAAC,IAAI,CAACb,SAAS,CAAC,CAAC,IAAInD,OAAO,CAACqC,IAAI,CAACH,GAAG,CAAC,EAAEI,KAAK,CAAC,EAAE;QAChD;MACJ;MAEA,MAAMmC,OAAO,GAAG9C,YAAY,CAACQ,IAAI,EAAEG,KAAK,CAAC;MACzC,MAAMoC,WAAW,GAAAC,aAAA,KAAQf,MAAM,CAAE;MACjC,MAAMgB,SAAS,GAAG3E,SAAS,CAACoC,IAAI,CAAC;MACjCuC,SAAS,CAAC1C,GAAG,CAAC,GAAGI,KAAK;MAEtB,IAAImC,OAAO,EAAE;QACT,OAAOC,WAAW,CAACxC,GAAG,CAAC;MAC3B,CAAC,MAAM;QACHwC,WAAW,CAACxC,GAAG,CAAC,gBAAGtC,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAKoB,QAAQ,CAAC4D,YAAe,CAAC;MACtE;MAEA,IAAI,CAAC9B,QAAQ,CAAC;QAAEX,IAAI,EAAEuC,SAAS;QAAEhB,MAAM,EAAEc;MAAY,CAAC,EAAE,MAAM;QAC1D,IAAI,CAACK,QAAQ,CAAC5C,IAAI,CAAC;MACvB,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIU,eAAA,wBAMiBX,GAAW,IAAW;MACnC,IAAI,CAAC,IAAI,CAACiB,SAAS,CAAC,CAAC,EAAE;QACnB;MACJ;MAEA,MAAM;QAAEd,IAAI;QAAEuB;MAAc,CAAC,GAAG,IAAI,CAACI,KAAK;MAC1C,MAAMY,SAAS,GAAG3E,SAAS,CAACoC,IAAI,CAAC;MACjC,MAAMqC,WAAW,GAAAC,aAAA,KAAQf,MAAM,CAAE;MACjC,OAAOgB,SAAS,CAAC1C,GAAG,CAAC;MACrB,OAAOwC,WAAW,CAACxC,GAAG,CAAC;MACvB,IAAI,CAACc,QAAQ,CAAC;QAAEX,IAAI,EAAEuC,SAAS;QAAEhB,MAAM,EAAEc;MAAY,CAAC,EAAE,IAAI,CAACK,QAAQ,CAAC;IAC1E,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIlC,eAAA,0BAMmBP,KAAc,IAAK;MAClC,MAAM;QAAEmB;MAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;MACzD,IAAI,CAACa,2BAA2B,EAAE;QAC9B;MACJ;MAEA,IAAI,CAACT,QAAQ,CACT;QACIc,kBAAkB,EAAExB,KAAK;QACzB0C,wBAAwB,EAAE1C;MAC9B,CAAC,EACD,IAAI,CAACyC,QACT,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIlC,eAAA,8BAOuBP,KAAc,IAAW;MAC5C,MAAM;QAAEmB;MAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;MACzD,IAAI,CAACa,2BAA2B,EAAE;QAC9B;MACJ;MAEA,IAAI,CAACT,QAAQ,CACT;QACIe,sBAAsB,EAAEzB;MAC5B,CAAC,EACD,IAAI,CAACyC,QACT,CAAC;IACL,CAAC;IAAAlC,eAAA,qCAE6BP,KAAc,IAAK;MAC7C,IAAI,CAACU,QAAQ,CAAC;QAAEa,2BAA2B,EAAEvB;MAAM,CAAC,EAAE,IAAI,CAACyC,QAAQ,CAAC;IACxE,CAAC;IAiDD;AACJ;AACA;IAFIlC,eAAA,8BAGsB,CAACoC,MAAe,EAAEC,QAAgB,KAAK;MACzD,IAAIC,OAAO;MACX,MAAMC,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;MAExE,IAAI8D,YAAY,EAAE;QACdD,OAAO,GAAGF,MAAM,GAAG,yCAAyC,GAAG,2CAA2C;MAC9G,CAAC,MAAM;QACHE,OAAO,GAAGF,MAAM,GAAG,mCAAmC,GAAG,qCAAqC;MAClG;MAEA,oBACIrF,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAAwF,QAAA,KACTpE,QAAQ,CAACiE,OAAO,CAAC;QACrBI,MAAM,EAAE;UACJC,YAAY,EAAEN,QAAQ,CAACO;QAC3B;MAAE,EACL,CAAC;IAEV,CAAC;IAWD;AACJ;AACA;AACA;AACA;AACA;IALI5C,eAAA,mBAMYV,IAAa,IAAW;MAChC,MAAM;QAAEW,EAAE;QAAEW,2BAA2B;QAAEV;MAAsB,CAAC,GAAG,IAAI,CAACH,KAAK;MAC7E,MAAM;QAAEP,IAAI;QAAEyB,kBAAkB;QAAEC,sBAAsB;QAAEF;MAA4B,CAAC,GAAG,IAAI,CAACG,KAAK;MACpG,MAAM0B,cAAc,GAAG,CAAC1F,OAAO,CAACqC,IAAI,EAAE,IAAI,CAACO,KAAK,CAACP,IAAI,CAAC;MACtD,IAAIsD,mBAAmB,GAAG,KAAK;MAE/B,IAAIlC,2BAA2B,EAAE;QAC7B;QACAkC,mBAAmB,GACf5B,sBAAsB,IACtBD,kBAAkB,KAAK,IAAI,CAAC8B,8BAA8B,CAAC,IAAI,CAAChD,KAAK,CAAC,IACtEiB,2BAA2B,KAAK,IAAI,CAACgC,uCAAuC,CAAC,IAAI,CAACjD,KAAK,CAAC;MAChG;;MAEA;MACA,IAAIG,cAAc,EAAE;QAChBA,cAAc,CAACD,EAAE,EAAE4C,cAAc,IAAIC,mBAAmB,EAAExD,IAAI,CAAC;MACnE;IACJ,CAAC;IAAAU,eAAA,sCAIGjD,KAAK,CAACkG,SAAS,CAAC,CAAC;IA6BrB;AACJ;AACA;AACA;AACA;AACA;IALIjD,eAAA,0BAMkB,MAAY;MAC1B,IAAI,CAACG,QAAQ,CAAC+C,SAAS,KAAK;QACxB5C,SAAS,EAAE,CAAC4C,SAAS,CAAC5C;MAC1B,CAAC,CAAC,CAAC;IACP,CAAC;IAAAN,eAAA,2BA6FkB,MAAM;MACrB,MAAM;QAAEmD,IAAI;QAAExC;MAAe,CAAC,GAAG,IAAI,CAACZ,KAAK;MAC3C,MAAM;QAAES;MAAc,CAAC,GAAG,IAAI,CAACW,KAAK;MACpC,MAAMK,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC,CAAC;MAC9B,MAAMlB,SAAS,GAAG,IAAI,CAACA,SAAS,CAAC,CAAC;MAClC,MAAM8C,aAAa,GAAGlG,UAAU,CAAC,wCAAwC,EAAE;QACvE,8CAA8C,EAAEoD;MACpD,CAAC,CAAC;MAEF,IAAIkB,OAAO,IAAI,CAACb,OAAO,IAAI,CAACH,MAAM,EAAE;QAChC,MAAM6C,qBAAqB,GAAGF,IAAI,CAACG,aAAa,CAACjF,QAAQ,CAACkF,mBAAmB,CAAC;QAC9E,oBACIxG,KAAA,CAAAiF,aAAA,CAACtE,OAAO;UAAC8F,QAAQ,EAAC,UAAU;UAACC,IAAI,EAAEJ;QAAsB,gBACrDtG,KAAA,CAAAiF,aAAA,CAACvE,WAAW;UACR,cAAY4F,qBAAsB;UAClC,gBAAc/C,SAAU;UACxBoD,SAAS,EAAEN,aAAc;UACzB,qBAAkB,uBAAuB;UACzCO,OAAO,EAAE,IAAI,CAACC,eAAgB;UAC9BtE,IAAI,EAAC;QAAQ,gBAEbvC,KAAA,CAAAiF,aAAA,CAACnE,QAAQ,MAAE,CACF,CACR,CAAC;MAElB;MACA,OAAO,IAAI;IACf,CAAC;IAnfG,IAAI,CAACsD,KAAK,GAAG,IAAI,CAACf,QAAQ,CAACL,KAAK,CAAC;IACjC,IAAI,CAAC8D,iBAAiB,GAAG5E,uBAAuB,CAACc,KAAK,CAACsC,QAAQ,CAACnD,MAAM,CAAC;EAC3E;EAEA4E,kBAAkBA,CAAC;IAAEC,QAAQ,EAAEC,YAAY;IAAErD,OAAO,EAAEsD;EAAmB,CAAC,EAAEf,SAAgB,EAAQ;IAChG,MAAMgB,cAAc,GAAG,IAAI,CAACC,cAAc,CAACC,OAAO;IAClD,MAAM;MAAEL,QAAQ;MAAEpD;IAAe,CAAC,GAAG,IAAI,CAACZ,KAAK;IAC/C,MAAM;MAAEO;IAAiB,CAAC,GAAG4C,SAAS;IAEtC,IAAIgB,cAAc,IAAI,IAAI,CAAC/C,KAAK,CAACd,mBAAmB,EAAE;MAClDtC,cAAc,CAACmG,cAAc,EAAE;QAC3BG,KAAK,EAAE,OAAO;QACdC,QAAQ,EAAE;MACd,CAAC,CAAC;IACN;IAEA,IAAIP,QAAQ,IAAIA,QAAQ,KAAKC,YAAY,EAAE;MACvC;MACA;MACA;MACA;MACA,IAAI,CAAC7D,QAAQ,CAAC;QAAEK,MAAM,EAAE,KAAK;QAAEF,SAAS,EAAE;MAAK,CAAC,CAAC;IACrD,CAAC,MAAM,IAAI2D,WAAW,IAAI,CAACtD,OAAO,EAAE;MAChC;MACA;MACA;MACA;MACA;MACA,IAAIL,SAAS,EAAE;QACX;QACA,IAAI,CAACH,QAAQ,CAAC;UAAEK,MAAM,EAAE;QAAM,CAAC,CAAC;MACpC,CAAC,MAAM;QACH;QACA,IAAI,CAACL,QAAQ,CAAC;UAAEK,MAAM,EAAE,KAAK;UAAEU,sBAAsB,EAAE;QAAM,CAAC,CAAC;MACnE;IACJ;EACJ;EAqMA;AACJ;AACA;AACA;AACA;EACId,QAAQA,CAACL,KAAY,EAAS;IAC1B,MAAMkB,kBAAkB,GAAG,IAAI,CAAC8B,8BAA8B,CAAChD,KAAK,CAAC;IAErE,OAAO;MACHP,IAAI,EAAEpC,SAAS,CAAC2C,KAAK,CAACP,IAAI,CAAC;MAC3BuB,MAAM,EAAE,CAAC,CAAC;MACVC,2BAA2B,EAAE,IAAI,CAACgC,uCAAuC,CAACjD,KAAK,CAAC;MAChFS,MAAM,EAAE,KAAK;MACbS,kBAAkB;MAClBC,sBAAsB,EAAE,KAAK;MAC7BZ,SAAS,EAAE,KAAK;MAChBD,mBAAmB,EAAE,KAAK;MAC1B8B,wBAAwB,EAAElB;IAC9B,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;EACIsD,QAAQA,CAAA,EAAe;IACnB,MAAM;MAAE9D,aAAa,GAAG,CAAC,CAAC;MAAEsD,QAAQ;MAAEnD,2BAA2B;MAAEyB;IAAgB,CAAC,GAAG,IAAI,CAACtC,KAAK;IACjG,MAAMwC,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;IAExE,MAAMa,IAAI,GAAGsB,2BAA2B,IAAIH,aAAa,CAACR,EAAE,GAAG,SAAS,GAAG,SAAS;IAEpF,oBACIlD,KAAA,CAAAiF,aAAA;MAAM0B,SAAS,EAAC;IAAyC,gBACrD3G,KAAA,CAAAiF,aAAA,CAACrE,mBAAmB;MAAC2B,IAAI,EAAEA;IAAK,CAAE,CAAC,eACnCvC,KAAA,CAAAiF,aAAA;MACI0B,SAAS,EAAExG,UAAU,CAAC,8CAA8C,EAAE;QAClE,6CAA6C,EAAE6G;MACnD,CAAC;IAAE,GAEFxB,YAAY,gBAAGxF,KAAA,CAAAiF,aAAA,CAAC/E,gBAAgB,EAAKoB,QAAQ,CAACmG,WAAc,CAAC,GAAGnC,QAAQ,CAACO,WACxE,CAAC,EACNmB,QAAQ,iBAAIhH,KAAA,CAAAiF,aAAA,CAACpE,eAAe;MAAC6G,KAAK,EAAE3G;IAAiB,CAAE,CACtD,CAAC;EAEf;EAyBA;AACJ;AACA;EACI4G,sBAAsBA,CAAA,EAAe;IACjC,MAAM;MAAErC,QAAQ;MAAEzB;IAAmC,CAAC,GAAG,IAAI,CAACb,KAAK;IACnE,MAAMqC,MAAM,GAAG,CAACxB,2BAA2B;IAC3C,OAAO,IAAI,CAAC+D,mBAAmB,CAACvC,MAAM,EAAEC,QAAQ,CAAC;EACrD;EAkCA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIU,8BAA8BA,CAAChD,KAAY,EAAE;IACzC,IAAIA,KAAK,CAACU,aAAa,EAAE;MACrB,OAAO,CAAC,CAACV,KAAK,CAACU,aAAa,CAACR,EAAE;IACnC;IACA,OAAO,KAAK;EAChB;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI+C,uCAAuCA,CAAC;IAAEvC;EAAqB,CAAC,EAAE;IAC9D,OAAOA,aAAa,EAAEmE,iBAAiB,KAAKpG,8BAA8B;EAC9E;EAcA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI+C,eAAeA,CAACT,WAAmB,EAAEJ,YAAoB,EAAuB;IAC5E,MAAMmE,GAAG,GAAG,EAAE;IACd,MAAMrF,IAAI,GAAGpC,SAAS,CAAC0D,WAAW,CAAC,CAAC,CAAC;;IAErC;IACA;IACAM,MAAM,CAACC,IAAI,CAACX,YAAY,CAAC,CAACoE,OAAO,CAACzF,GAAG,IAAI;MACrC,MAAMC,IAAI,GAAG,IAAI,CAACuE,iBAAiB,CAACxE,GAAG,CAAC;MACxC,MAAM0F,aAAa,GAAGxF,QAAQ,CAACmB,YAAY,EAAErB,GAAG,EAAEC,IAAI,CAAC;MACvD,MAAM0F,IAAI,GAAG,IAAI3F,GAAG,EAAE;MAEtB,IAAI+B,MAAM,CAAC6D,SAAS,CAACC,cAAc,CAACC,IAAI,CAAC3F,IAAI,EAAEH,GAAG,CAAC,EAAE;QACjD,MAAMI,KAAK,GAAGF,QAAQ,CAACC,IAAI,EAAEH,GAAG,EAAEC,IAAI,CAAC;;QAEvC;QACA,IAAI,CAACnC,OAAO,CAACsC,KAAK,EAAEsF,aAAa,CAAC,EAAE;UAChC;UACAF,GAAG,CAACO,IAAI,CAAC;YACLC,EAAE,EAAExG,kBAAkB;YACtBmG,IAAI;YACJvF,KAAK,EAAEsF;UACX,CAAC,CAAC;UACFF,GAAG,CAACO,IAAI,CAAC;YACLC,EAAE,EAAEzG,qBAAqB;YACzBoG,IAAI;YACJvF;UACJ,CAAC,CAAC;QACN;MACJ,CAAC,MAAM;QACH;QACA;QACAoF,GAAG,CAACO,IAAI,CAAC;UACLC,EAAE,EAAExG,kBAAkB;UACtBmG,IAAI;UACJvF,KAAK,EAAEsF;QACX,CAAC,CAAC;QACFF,GAAG,CAACO,IAAI,CAAC;UAAEC,EAAE,EAAE3G,oBAAoB;UAAEsG;QAAK,CAAC,CAAC;MAChD;MACA,OAAOxF,IAAI,CAACH,GAAG,CAAC;IACpB,CAAC,CAAC;;IAEF;IACA+B,MAAM,CAACC,IAAI,CAAC7B,IAAI,CAAC,CAACsF,OAAO,CAACzF,GAAG,IAAI;MAC7B,MAAMC,IAAI,GAAG,IAAI,CAACuE,iBAAiB,CAACxE,GAAG,CAAC;MACxC,MAAMI,KAAK,GAAGF,QAAQ,CAACC,IAAI,EAAEH,GAAG,EAAEC,IAAI,CAAC;MAEvCuF,GAAG,CAACO,IAAI,CAAC;QACLC,EAAE,EAAE1G,iBAAiB;QACrBqG,IAAI,EAAE,IAAI3F,GAAG,EAAE;QACfI;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,OAAOoF,GAAG;EACd;;EAEA;AACJ;AACA;AACA;AACA;EACIrD,OAAOA,CAAA,EAAY;IACf,MAAM;MAAEA,OAAO;MAAEtB,cAAc;MAAEK,QAAQ;MAAEM;IAAc,CAAC,GAAG,IAAI,CAACd,KAAK;IACvE,OACIyB,OAAO,IACP,OAAOjB,QAAQ,KAAK,UAAU,IAC9B,OAAOM,MAAM,KAAK,UAAU,IAC5B,OAAOX,cAAc,KAAK,UAAU;EAE5C;;EAEA;AACJ;AACA;AACA;AACA;EACII,SAASA,CAAA,EAAY;IACjB,MAAM;MAAEA;IAAiB,CAAC,GAAG,IAAI,CAACa,KAAK;IACvC,OAAO,IAAI,CAACK,OAAO,CAAC,CAAC,IAAIlB,SAAS;EACtC;EA+BAgF,MAAMA,CAAA,EAAG;IACL,MAAM;MACFC,wBAAwB,GAAG,KAAK;MAChCC,qCAAqC,GAAG,KAAK;MAC7C/E,aAAa,GAAG,CAAC,CAAC;MAClBE,OAAO;MACPC,2BAA2B;MAC3B6E,MAAM;MACNpD;IACG,CAAC,GAAG,IAAI,CAACtC,KAAK;IACrB,MAAM;MAAEb,MAAM,GAAG;IAAG,CAAC,GAAGmD,QAAQ;IAChC,MAAM;MACF7C,IAAI;MACJuB,MAAM;MACNP,MAAM;MACNQ,2BAA2B;MAC3BC,kBAAkB;MAClBZ,mBAAmB;MACnB8B,wBAAwB;MACxBjB;IACG,CAAC,GAAG,IAAI,CAACC,KAAK;IACrB,MAAMoB,YAAY,GAAGF,QAAQ,CAACG,WAAW,KAAK/D,0BAA0B;IACxE,MAAM6B,SAAS,GAAG,IAAI,CAACA,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC+B,QAAQ,IAAItD,QAAQ,CAACsD,QAAQ,CAAC,EAAE;MACjC,OAAO,IAAI;IACf;;IAEA;IACA,MAAMqD,iBAAiB,GAAG,CAACxG,MAAM,CAACoC,MAAM,GAAG,CAAC,IAAI,EAAE;IAElD,MAAMqE,mCAAmC,GACrC,IAAI,CAAC5C,8BAA8B,CAAC,IAAI,CAAChD,KAAK,CAAC,IAAI,IAAI,CAACiD,uCAAuC,CAAC,IAAI,CAACjD,KAAK,CAAC;IAE/G,oBACIhD,KAAA,CAAAiF,aAAA;MAAK4D,GAAG,EAAE,IAAI,CAACzB;IAAe,gBAC1BpH,KAAA,CAAAiF,aAAA,CAAC1E,WAAW;MACRoI,iBAAiB,EAAEA,iBAAkB;MACrCG,WAAW,EAAE;QACT,CAAC7G,gBAAgB,GAAG;MACxB,CAAE;MACF8G,eAAe;MACfC,iBAAiB,EAAE,IAAI,CAACC,gBAAgB,CAAC,CAAE;MAC3CC,UAAU;MACVR,MAAM,EAAEA,MAAO;MACfS,KAAK,EAAE,IAAI,CAAC3B,QAAQ,CAAC;IAAE,GAEtBlE,mBAAmB,iBAChBtD,KAAA,CAAAiF,aAAA,CAACxE,uBAAuB;MAAC2I,SAAS,EAAE3F;IAAO,gBACvCzD,KAAA,CAAAiF,aAAA,CAAC7D,6BAA6B;MAC1BiI,mBAAmB,EAAE,IAAI,CAAC1B,sBAAsB,CAAC,CAAE;MACnD2B,QAAQ,EAAE,IAAI,CAACC,eAAgB;MAC/BC,SAAS,EAAE,IAAI,CAAChG;IAAS,CAC5B,CACoB,CAC5B,EACA,CAACF,mBAAmB,iBACjBtD,KAAA,CAAAiF,aAAA,CAACxE,uBAAuB;MAAC2I,SAAS,EAAE3F;IAAO,gBACvCzD,KAAA,CAAAiF,aAAA,CAACzE,IAAI;MAACiJ,aAAa,EAAE7F,OAAO,GAAG,IAAI,CAACE,MAAM,GAAGxD;IAAK,gBAC9CN,KAAA,CAAAiF,aAAA;MAAK0B,SAAS,EAAC;IAAmC,GAC7C9C,2BAA2B,iBACxB7D,KAAA,CAAAiF,aAAA,CAAChE,aAAa;MACVwD,OAAO,EAAElB,SAAS,IAAI,CAAC,CAACG,aAAa,CAACe,OAAQ;MAC9C+D,wBAAwB,EAAEA,wBAAyB;MACnDC,qCAAqC,EACjCA,qCACH;MACDxE,2BAA2B,EAAEA,2BAA4B;MACzDC,kBAAkB,EAAEA,kBAAmB;MACvCC,sBAAsB,EAAEA,sBAAuB;MAC/CuF,gBAAgB,EAAElE,YAAa;MAC/BoD,mCAAmC,EAAEA,mCAAoC;MACzEe,0BAA0B,EAAE,IAAI,CAACA,0BAA2B;MAC5DC,mBAAmB,EAAE,IAAI,CAACA,mBAAoB;MAC9CC,eAAe,EAAE,IAAI,CAACA,eAAgB;MACtCzE,wBAAwB,EAAEA;IAAyB,CACtD,CACJ,EACAI,YAAY,gBACTxF,KAAA,CAAAiF,aAAA,CAAC9D,cAAc;MACXsD,OAAO,EAAElB,SAAU;MACnBd,IAAI,EAAEA,IAAK;MACXqH,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,aAAa,EAAE,IAAI,CAACA;IAAc,CACrC,CAAC,gBAEF/J,KAAA,CAAAiF,aAAA,CAAC/D,iBAAiB;MACduD,OAAO,EAAElB,SAAU;MACnBd,IAAI,EAAEA,IAAK;MACXuB,MAAM,EAAEA,MAAO;MACfgG,UAAU,EAAE/F,2BAA4B;MACxC6F,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCzE,QAAQ,EAAEA;IAAS,CACtB,CAEJ,CAAC,EACL/B,SAAS,iBACNvD,KAAA,CAAAiF,aAAA,CAAC5D,MAAM;MACHiI,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxB9F,QAAQ,EAAE,IAAI,CAACyG,eAAgB;MAC/BC,QAAQ,EAAEtG;IAAQ,CACrB,CAEH,CACe,CAEpB,CACZ,CAAC;EAEd;AACJ;AAACX,eAAA,CA5mBKJ,QAAQ,kBACY;EAClBJ,IAAI,EAAE,CAAC,CAAC;EACRmB,OAAO,EAAE;AACb,CAAC;AA0mBL,SAASf,QAAQ,IAAIsH,YAAY;AACjC,eAAelK,UAAU,CAAC4C,QAAQ,CAAC","ignoreList":[]}
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import Instance from './Instance';
3
3
  const Instances = ({
4
4
  canUseAIFolderExtraction = false,
5
+ canUseAIFolderExtractionAgentSelector = false,
5
6
  isCascadingPolicyApplicable = false,
6
7
  editors = [],
7
8
  onModification,
@@ -21,6 +22,7 @@ const Instances = ({
21
22
  return /*#__PURE__*/React.createElement(Instance, {
22
23
  canEdit: instance.canEdit,
23
24
  canUseAIFolderExtraction: canUseAIFolderExtraction,
25
+ canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
24
26
  cascadePolicy: instance.cascadePolicy,
25
27
  data: instance.data,
26
28
  hasError: hasError,
@@ -7,6 +7,7 @@ import type { JSONPatchOperations } from '../../common/types/api';
7
7
 
8
8
  type Props = {
9
9
  canUseAIFolderExtraction?: boolean,
10
+ canUseAIFolderExtractionAgentSelector?: boolean,
10
11
  editors?: Array<MetadataEditor>,
11
12
  isCascadingPolicyApplicable?: boolean,
12
13
  onModification?: (id: string, isDirty: boolean) => void,
@@ -22,6 +23,7 @@ type Props = {
22
23
 
23
24
  const Instances = ({
24
25
  canUseAIFolderExtraction = false,
26
+ canUseAIFolderExtractionAgentSelector = false,
25
27
  isCascadingPolicyApplicable = false,
26
28
  editors = [],
27
29
  onModification,
@@ -37,6 +39,7 @@ const Instances = ({
37
39
  <Instance
38
40
  canEdit={instance.canEdit}
39
41
  canUseAIFolderExtraction={canUseAIFolderExtraction}
42
+ canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
40
43
  cascadePolicy={instance.cascadePolicy}
41
44
  data={instance.data}
42
45
  hasError={hasError}
@@ -1 +1 @@
1
- {"version":3,"file":"Instances.js","names":["React","Instance","Instances","canUseAIFolderExtraction","isCascadingPolicyApplicable","editors","onModification","onRemove","onSave","selectedTemplateKey","map","isDirty","instance","hasError","template","templateKey","isOpen","length","createElement","canEdit","cascadePolicy","data","id","key"],"sources":["../../../src/features/metadata-instance-editor/Instances.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport Instance from './Instance';\nimport type { MetadataEditor, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\n\ntype Props = {\n canUseAIFolderExtraction?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n};\n\nconst Instances = ({\n canUseAIFolderExtraction = false,\n isCascadingPolicyApplicable = false,\n editors = [],\n onModification,\n onRemove,\n onSave,\n selectedTemplateKey,\n}: Props) =>\n editors.map<React.Element<typeof Instance>>(\n ({ isDirty = false, instance, hasError = false, template }: MetadataEditor) => {\n const { templateKey } = template;\n const isOpen = editors.length === 1 || templateKey === selectedTemplateKey;\n return (\n <Instance\n canEdit={instance.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n cascadePolicy={instance.cascadePolicy}\n data={instance.data}\n hasError={hasError}\n id={instance.id}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n isDirty={isDirty}\n isOpen={isOpen}\n key={`${instance.id}-${templateKey}`}\n onModification={onModification}\n onSave={onSave}\n onRemove={onRemove}\n template={template}\n />\n );\n },\n );\n\nexport default Instances;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,QAAQ,MAAM,YAAY;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":[]}
@@ -9,6 +9,7 @@ const TemplatedInstance = ({
9
9
  canEdit,
10
10
  data = {},
11
11
  errors,
12
+ isDisabled,
12
13
  onFieldChange,
13
14
  onFieldRemove,
14
15
  template
@@ -32,6 +33,7 @@ const TemplatedInstance = ({
32
33
  description: field.description,
33
34
  displayName: field.displayName,
34
35
  error: errors[field.key],
36
+ isDisabled: isDisabled,
35
37
  isHidden: isHidden(field) // Checking both isHidden and hidden attributes due to differences in V2 and V3 APIs
36
38
  ,
37
39
  onChange: (key, value) => {
@@ -13,12 +13,21 @@ type Props = {
13
13
  canEdit: boolean,
14
14
  data: MetadataFields,
15
15
  errors: { [string]: React.Node },
16
+ isDisabled?: boolean,
16
17
  onFieldChange?: (key: string, value: MetadataFieldValue, type: string) => void,
17
18
  onFieldRemove?: (key: string) => void,
18
19
  template: MetadataTemplate,
19
20
  };
20
21
 
21
- const TemplatedInstance = ({ canEdit, data = {}, errors, onFieldChange, onFieldRemove, template }: Props) => {
22
+ const TemplatedInstance = ({
23
+ canEdit,
24
+ data = {},
25
+ errors,
26
+ isDisabled,
27
+ onFieldChange,
28
+ onFieldRemove,
29
+ template,
30
+ }: Props) => {
22
31
  const { fields = [] } = template;
23
32
  const hasFields = fields.length > 0;
24
33
  const hasVisibleFields = hasFields && fields.some(field => !isHidden(field));
@@ -39,6 +48,7 @@ const TemplatedInstance = ({ canEdit, data = {}, errors, onFieldChange, onFieldR
39
48
  description={field.description}
40
49
  displayName={field.displayName}
41
50
  error={errors[field.key]}
51
+ isDisabled={isDisabled}
42
52
  isHidden={isHidden(field)} // Checking both isHidden and hidden attributes due to differences in V2 and V3 APIs
43
53
  onChange={(key: string, value: MetadataFieldValue) => {
44
54
  if (canEdit && onFieldChange) {
@@ -1 +1 @@
1
- {"version":3,"file":"TemplatedInstance.js","names":["React","FormattedMessage","MetadataField","messages","isHidden","MetadataInstanceEditorContext","TemplatedInstance","canEdit","data","errors","onFieldChange","onFieldRemove","template","fields","hasFields","length","hasVisibleFields","some","field","showNoFieldsMessage","showHiddenFieldsMessage","blurExceptionClassNames","useContext","createElement","Fragment","map","key","id","dataKey","dataValue","description","displayName","error","onChange","value","type","onRemove","options","className","allAttributesAreHidden","noAttributesForTemplate"],"sources":["../../../src/features/metadata-instance-editor/TemplatedInstance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport MetadataField from '../metadata-instance-fields/MetadataField';\nimport messages from './messages';\nimport { isHidden } from './metadataUtil';\nimport type { MetadataFields, MetadataTemplate, MetadataFieldValue } from '../../common/types/metadata';\nimport MetadataInstanceEditorContext from './MetadataInstanceEditorContext';\nimport './TemplatedInstance.scss';\n\ntype Props = {\n canEdit: boolean,\n data: MetadataFields,\n errors: { [string]: React.Node },\n onFieldChange?: (key: string, value: MetadataFieldValue, type: string) => void,\n onFieldRemove?: (key: string) => void,\n template: MetadataTemplate,\n};\n\nconst TemplatedInstance = ({ canEdit, data = {}, errors, onFieldChange, onFieldRemove, template }: Props) => {\n const { fields = [] } = template;\n const hasFields = fields.length > 0;\n const hasVisibleFields = hasFields && fields.some(field => !isHidden(field));\n const showNoFieldsMessage = !hasFields;\n const showHiddenFieldsMessage = hasFields && !hasVisibleFields;\n const { blurExceptionClassNames } = React.useContext(MetadataInstanceEditorContext);\n\n return (\n <>\n {hasVisibleFields &&\n fields.map(field => (\n <MetadataField\n key={field.id}\n blurExceptionClassNames={blurExceptionClassNames}\n canEdit={canEdit}\n dataKey={field.key}\n dataValue={data[field.key]}\n description={field.description}\n displayName={field.displayName}\n error={errors[field.key]}\n isHidden={isHidden(field)} // Checking both isHidden and hidden attributes due to differences in V2 and V3 APIs\n onChange={(key: string, value: MetadataFieldValue) => {\n if (canEdit && onFieldChange) {\n onFieldChange(key, value, field.type);\n }\n }}\n onRemove={(key: string) => {\n if (canEdit && onFieldRemove) {\n onFieldRemove(key);\n }\n }}\n options={field.options}\n type={field.type}\n />\n ))}\n {showHiddenFieldsMessage && (\n <div className=\"attributes-hidden-message\">\n <FormattedMessage {...messages.allAttributesAreHidden} />\n </div>\n )}\n {showNoFieldsMessage && (\n <div className=\"no-attributes-message\">\n <FormattedMessage {...messages.noAttributesForTemplate} />\n </div>\n )}\n </>\n );\n};\n\nexport default TemplatedInstance;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,OAAOC,aAAa,MAAM,2CAA2C;AACrE,OAAOC,QAAQ,MAAM,YAAY;AACjC,SAASC,QAAQ,QAAQ,gBAAgB;AAEzC,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAO,0BAA0B;AAWjC,MAAMC,iBAAiB,GAAGA,CAAC;EAAEC,OAAO;EAAEC,IAAI,GAAG,CAAC,CAAC;EAAEC,MAAM;EAAEC,aAAa;EAAEC,aAAa;EAAEC;AAAgB,CAAC,KAAK;EACzG,MAAM;IAAEC,MAAM,GAAG;EAAG,CAAC,GAAGD,QAAQ;EAChC,MAAME,SAAS,GAAGD,MAAM,CAACE,MAAM,GAAG,CAAC;EACnC,MAAMC,gBAAgB,GAAGF,SAAS,IAAID,MAAM,CAACI,IAAI,CAACC,KAAK,IAAI,CAACd,QAAQ,CAACc,KAAK,CAAC,CAAC;EAC5E,MAAMC,mBAAmB,GAAG,CAACL,SAAS;EACtC,MAAMM,uBAAuB,GAAGN,SAAS,IAAI,CAACE,gBAAgB;EAC9D,MAAM;IAAEK;EAAwB,CAAC,GAAGrB,KAAK,CAACsB,UAAU,CAACjB,6BAA6B,CAAC;EAEnF,oBACIL,KAAA,CAAAuB,aAAA,CAAAvB,KAAA,CAAAwB,QAAA,QACKR,gBAAgB,IACbH,MAAM,CAACY,GAAG,CAACP,KAAK,iBACZlB,KAAA,CAAAuB,aAAA,CAACrB,aAAa;IACVwB,GAAG,EAAER,KAAK,CAACS,EAAG;IACdN,uBAAuB,EAAEA,uBAAwB;IACjDd,OAAO,EAAEA,OAAQ;IACjBqB,OAAO,EAAEV,KAAK,CAACQ,GAAI;IACnBG,SAAS,EAAErB,IAAI,CAACU,KAAK,CAACQ,GAAG,CAAE;IAC3BI,WAAW,EAAEZ,KAAK,CAACY,WAAY;IAC/BC,WAAW,EAAEb,KAAK,CAACa,WAAY;IAC/BC,KAAK,EAAEvB,MAAM,CAACS,KAAK,CAACQ,GAAG,CAAE;IACzBtB,QAAQ,EAAEA,QAAQ,CAACc,KAAK,CAAE,CAAC;IAAA;IAC3Be,QAAQ,EAAEA,CAACP,GAAW,EAAEQ,KAAyB,KAAK;MAClD,IAAI3B,OAAO,IAAIG,aAAa,EAAE;QAC1BA,aAAa,CAACgB,GAAG,EAAEQ,KAAK,EAAEhB,KAAK,CAACiB,IAAI,CAAC;MACzC;IACJ,CAAE;IACFC,QAAQ,EAAGV,GAAW,IAAK;MACvB,IAAInB,OAAO,IAAII,aAAa,EAAE;QAC1BA,aAAa,CAACe,GAAG,CAAC;MACtB;IACJ,CAAE;IACFW,OAAO,EAAEnB,KAAK,CAACmB,OAAQ;IACvBF,IAAI,EAAEjB,KAAK,CAACiB;EAAK,CACpB,CACJ,CAAC,EACLf,uBAAuB,iBACpBpB,KAAA,CAAAuB,aAAA;IAAKe,SAAS,EAAC;EAA2B,gBACtCtC,KAAA,CAAAuB,aAAA,CAACtB,gBAAgB,EAAKE,QAAQ,CAACoC,sBAAyB,CACvD,CACR,EACApB,mBAAmB,iBAChBnB,KAAA,CAAAuB,aAAA;IAAKe,SAAS,EAAC;EAAuB,gBAClCtC,KAAA,CAAAuB,aAAA,CAACtB,gBAAgB,EAAKE,QAAQ,CAACqC,uBAA0B,CACxD,CAEX,CAAC;AAEX,CAAC;AAED,eAAelC,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"TemplatedInstance.js","names":["React","FormattedMessage","MetadataField","messages","isHidden","MetadataInstanceEditorContext","TemplatedInstance","canEdit","data","errors","isDisabled","onFieldChange","onFieldRemove","template","fields","hasFields","length","hasVisibleFields","some","field","showNoFieldsMessage","showHiddenFieldsMessage","blurExceptionClassNames","useContext","createElement","Fragment","map","key","id","dataKey","dataValue","description","displayName","error","onChange","value","type","onRemove","options","className","allAttributesAreHidden","noAttributesForTemplate"],"sources":["../../../src/features/metadata-instance-editor/TemplatedInstance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport MetadataField from '../metadata-instance-fields/MetadataField';\nimport messages from './messages';\nimport { isHidden } from './metadataUtil';\nimport type { MetadataFields, MetadataTemplate, MetadataFieldValue } from '../../common/types/metadata';\nimport MetadataInstanceEditorContext from './MetadataInstanceEditorContext';\nimport './TemplatedInstance.scss';\n\ntype Props = {\n canEdit: boolean,\n data: MetadataFields,\n errors: { [string]: React.Node },\n isDisabled?: boolean,\n onFieldChange?: (key: string, value: MetadataFieldValue, type: string) => void,\n onFieldRemove?: (key: string) => void,\n template: MetadataTemplate,\n};\n\nconst TemplatedInstance = ({\n canEdit,\n data = {},\n errors,\n isDisabled,\n onFieldChange,\n onFieldRemove,\n template,\n}: Props) => {\n const { fields = [] } = template;\n const hasFields = fields.length > 0;\n const hasVisibleFields = hasFields && fields.some(field => !isHidden(field));\n const showNoFieldsMessage = !hasFields;\n const showHiddenFieldsMessage = hasFields && !hasVisibleFields;\n const { blurExceptionClassNames } = React.useContext(MetadataInstanceEditorContext);\n\n return (\n <>\n {hasVisibleFields &&\n fields.map(field => (\n <MetadataField\n key={field.id}\n blurExceptionClassNames={blurExceptionClassNames}\n canEdit={canEdit}\n dataKey={field.key}\n dataValue={data[field.key]}\n description={field.description}\n displayName={field.displayName}\n error={errors[field.key]}\n isDisabled={isDisabled}\n isHidden={isHidden(field)} // Checking both isHidden and hidden attributes due to differences in V2 and V3 APIs\n onChange={(key: string, value: MetadataFieldValue) => {\n if (canEdit && onFieldChange) {\n onFieldChange(key, value, field.type);\n }\n }}\n onRemove={(key: string) => {\n if (canEdit && onFieldRemove) {\n onFieldRemove(key);\n }\n }}\n options={field.options}\n type={field.type}\n />\n ))}\n {showHiddenFieldsMessage && (\n <div className=\"attributes-hidden-message\">\n <FormattedMessage {...messages.allAttributesAreHidden} />\n </div>\n )}\n {showNoFieldsMessage && (\n <div className=\"no-attributes-message\">\n <FormattedMessage {...messages.noAttributesForTemplate} />\n </div>\n )}\n </>\n );\n};\n\nexport default TemplatedInstance;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,OAAOC,aAAa,MAAM,2CAA2C;AACrE,OAAOC,QAAQ,MAAM,YAAY;AACjC,SAASC,QAAQ,QAAQ,gBAAgB;AAEzC,OAAOC,6BAA6B,MAAM,iCAAiC;AAC3E,OAAO,0BAA0B;AAYjC,MAAMC,iBAAiB,GAAGA,CAAC;EACvBC,OAAO;EACPC,IAAI,GAAG,CAAC,CAAC;EACTC,MAAM;EACNC,UAAU;EACVC,aAAa;EACbC,aAAa;EACbC;AACG,CAAC,KAAK;EACT,MAAM;IAAEC,MAAM,GAAG;EAAG,CAAC,GAAGD,QAAQ;EAChC,MAAME,SAAS,GAAGD,MAAM,CAACE,MAAM,GAAG,CAAC;EACnC,MAAMC,gBAAgB,GAAGF,SAAS,IAAID,MAAM,CAACI,IAAI,CAACC,KAAK,IAAI,CAACf,QAAQ,CAACe,KAAK,CAAC,CAAC;EAC5E,MAAMC,mBAAmB,GAAG,CAACL,SAAS;EACtC,MAAMM,uBAAuB,GAAGN,SAAS,IAAI,CAACE,gBAAgB;EAC9D,MAAM;IAAEK;EAAwB,CAAC,GAAGtB,KAAK,CAACuB,UAAU,CAAClB,6BAA6B,CAAC;EAEnF,oBACIL,KAAA,CAAAwB,aAAA,CAAAxB,KAAA,CAAAyB,QAAA,QACKR,gBAAgB,IACbH,MAAM,CAACY,GAAG,CAACP,KAAK,iBACZnB,KAAA,CAAAwB,aAAA,CAACtB,aAAa;IACVyB,GAAG,EAAER,KAAK,CAACS,EAAG;IACdN,uBAAuB,EAAEA,uBAAwB;IACjDf,OAAO,EAAEA,OAAQ;IACjBsB,OAAO,EAAEV,KAAK,CAACQ,GAAI;IACnBG,SAAS,EAAEtB,IAAI,CAACW,KAAK,CAACQ,GAAG,CAAE;IAC3BI,WAAW,EAAEZ,KAAK,CAACY,WAAY;IAC/BC,WAAW,EAAEb,KAAK,CAACa,WAAY;IAC/BC,KAAK,EAAExB,MAAM,CAACU,KAAK,CAACQ,GAAG,CAAE;IACzBjB,UAAU,EAAEA,UAAW;IACvBN,QAAQ,EAAEA,QAAQ,CAACe,KAAK,CAAE,CAAC;IAAA;IAC3Be,QAAQ,EAAEA,CAACP,GAAW,EAAEQ,KAAyB,KAAK;MAClD,IAAI5B,OAAO,IAAII,aAAa,EAAE;QAC1BA,aAAa,CAACgB,GAAG,EAAEQ,KAAK,EAAEhB,KAAK,CAACiB,IAAI,CAAC;MACzC;IACJ,CAAE;IACFC,QAAQ,EAAGV,GAAW,IAAK;MACvB,IAAIpB,OAAO,IAAIK,aAAa,EAAE;QAC1BA,aAAa,CAACe,GAAG,CAAC;MACtB;IACJ,CAAE;IACFW,OAAO,EAAEnB,KAAK,CAACmB,OAAQ;IACvBF,IAAI,EAAEjB,KAAK,CAACiB;EAAK,CACpB,CACJ,CAAC,EACLf,uBAAuB,iBACpBrB,KAAA,CAAAwB,aAAA;IAAKe,SAAS,EAAC;EAA2B,gBACtCvC,KAAA,CAAAwB,aAAA,CAACvB,gBAAgB,EAAKE,QAAQ,CAACqC,sBAAyB,CACvD,CACR,EACApB,mBAAmB,iBAChBpB,KAAA,CAAAwB,aAAA;IAAKe,SAAS,EAAC;EAAuB,gBAClCvC,KAAA,CAAAwB,aAAA,CAACvB,gBAAgB,EAAKE,QAAQ,CAACsC,uBAA0B,CACxD,CAEX,CAAC;AAEX,CAAC;AAED,eAAenC,iBAAiB","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ const CASCADE_POLICY_TYPE_AI_EXTRACT = 'ai_extract';
1
2
  const TEMPLATE_CUSTOM_PROPERTIES = 'properties';
2
- export default TEMPLATE_CUSTOM_PROPERTIES;
3
+ export { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES };
3
4
  //# sourceMappingURL=constants.js.map
@@ -1,4 +1,6 @@
1
1
  // @flow
2
2
 
3
+ const CASCADE_POLICY_TYPE_AI_EXTRACT = 'ai_extract';
3
4
  const TEMPLATE_CUSTOM_PROPERTIES: 'properties' = 'properties';
4
- export default TEMPLATE_CUSTOM_PROPERTIES;
5
+
6
+ export { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES };
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["TEMPLATE_CUSTOM_PROPERTIES"],"sources":["../../../src/features/metadata-instance-editor/constants.js"],"sourcesContent":["// @flow\n\nconst TEMPLATE_CUSTOM_PROPERTIES: 'properties' = 'properties';\nexport default TEMPLATE_CUSTOM_PROPERTIES;\n"],"mappings":"AAEA,MAAMA,0BAAwC,GAAG,YAAY;AAC7D,eAAeA,0BAA0B","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES"],"sources":["../../../src/features/metadata-instance-editor/constants.js"],"sourcesContent":["// @flow\n\nconst CASCADE_POLICY_TYPE_AI_EXTRACT = 'ai_extract';\nconst TEMPLATE_CUSTOM_PROPERTIES: 'properties' = 'properties';\n\nexport { CASCADE_POLICY_TYPE_AI_EXTRACT, TEMPLATE_CUSTOM_PROPERTIES };\n"],"mappings":"AAEA,MAAMA,8BAA8B,GAAG,YAAY;AACnD,MAAMC,0BAAwC,GAAG,YAAY;AAE7D,SAASD,8BAA8B,EAAEC,0BAA0B","ignoreList":[]}