box-ui-elements 23.4.0-beta.12 → 23.4.0-beta.14

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 (82) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +1 -1
  3. package/dist/picker.js +1 -1
  4. package/dist/preview.css +1 -1
  5. package/dist/preview.js +1 -1
  6. package/dist/sidebar.css +1 -1
  7. package/dist/sidebar.js +1 -1
  8. package/dist/uploader.js +1 -1
  9. package/es/api/schemas/AiAgentReference.js +2 -0
  10. package/es/api/schemas/AiAgentReference.js.flow +15 -0
  11. package/es/api/schemas/AiAgentReference.js.map +1 -0
  12. package/es/api/schemas/AiExtractStructured.js +1 -0
  13. package/es/api/schemas/AiExtractStructured.js.flow +7 -1
  14. package/es/api/schemas/AiExtractStructured.js.map +1 -1
  15. package/es/elements/common/upload-dialog/UploadDialog.js +1 -0
  16. package/es/elements/common/upload-dialog/UploadDialog.js.flow +1 -0
  17. package/es/elements/common/upload-dialog/UploadDialog.js.map +1 -1
  18. package/es/elements/content-sidebar/hooks/useSidebarMetadataFetcher.js +19 -12
  19. package/es/elements/content-sidebar/hooks/useSidebarMetadataFetcher.js.map +1 -1
  20. package/es/elements/index.js +1 -0
  21. package/es/elements/index.js.flow +1 -0
  22. package/es/elements/index.js.map +1 -1
  23. package/es/elements/wrappers/ContentUploader.js +2 -0
  24. package/es/elements/wrappers/ContentUploader.js.flow +2 -0
  25. package/es/elements/wrappers/ContentUploader.js.map +1 -1
  26. package/es/features/metadata-instance-fields/MetadataField.js +12 -1
  27. package/es/features/metadata-instance-fields/MetadataField.js.flow +14 -0
  28. package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
  29. package/es/src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.d.ts +1 -1
  30. package/i18n/ja-JP.js +2 -2
  31. package/i18n/ja-JP.properties +2 -2
  32. package/package.json +5 -5
  33. package/src/api/schemas/AiAgentReference.js +15 -0
  34. package/src/api/schemas/AiExtractStructured.js +7 -1
  35. package/src/elements/common/upload-dialog/UploadDialog.js +1 -0
  36. package/src/elements/content-sidebar/__tests__/useSidebarMetadataFetcher.test.tsx +58 -0
  37. package/src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.ts +11 -7
  38. package/src/elements/index.js +1 -0
  39. package/src/elements/wrappers/ContentUploader.js +2 -0
  40. package/src/features/metadata-instance-fields/MetadataField.js +14 -0
  41. package/src/features/metadata-instance-fields/__tests__/MetadataField.test.js +6 -0
  42. package/src/features/metadata-instance-fields/__tests__/__snapshots__/MetadataField.test.js.snap +7 -0
  43. package/es/elements/content-uploader/ContentUploader.js.flow +0 -1322
  44. package/es/elements/content-uploader/ContentUploaderPopup.js.flow +0 -11
  45. package/es/elements/content-uploader/DroppableContent.js.flow +0 -82
  46. package/es/elements/content-uploader/Footer.js.flow +0 -63
  47. package/es/elements/content-uploader/IconName.js.flow +0 -45
  48. package/es/elements/content-uploader/ItemAction.js.flow +0 -128
  49. package/es/elements/content-uploader/ItemList.js.flow +0 -79
  50. package/es/elements/content-uploader/ItemRemove.js.flow +0 -51
  51. package/es/elements/content-uploader/OverallUploadsProgressBar.js.flow +0 -111
  52. package/es/elements/content-uploader/ProgressBar.js.flow +0 -65
  53. package/es/elements/content-uploader/UploadInput.js.flow +0 -50
  54. package/es/elements/content-uploader/UploadState.js.flow +0 -114
  55. package/es/elements/content-uploader/UploadStateContent.js.flow +0 -71
  56. package/es/elements/content-uploader/UploadsManager.js.flow +0 -111
  57. package/es/elements/content-uploader/UploadsManagerAction.js.flow +0 -36
  58. package/es/elements/content-uploader/actionCellRenderer.js.flow +0 -18
  59. package/es/elements/content-uploader/index.js.flow +0 -4
  60. package/es/elements/content-uploader/nameCellRenderer.js.flow +0 -13
  61. package/es/elements/content-uploader/progressCellRenderer.js.flow +0 -81
  62. package/es/elements/content-uploader/removeCellRenderer.js.flow +0 -16
  63. package/src/elements/content-uploader/ContentUploader.js.flow +0 -1322
  64. package/src/elements/content-uploader/ContentUploaderPopup.js.flow +0 -11
  65. package/src/elements/content-uploader/DroppableContent.js.flow +0 -82
  66. package/src/elements/content-uploader/Footer.js.flow +0 -63
  67. package/src/elements/content-uploader/IconName.js.flow +0 -45
  68. package/src/elements/content-uploader/ItemAction.js.flow +0 -128
  69. package/src/elements/content-uploader/ItemList.js.flow +0 -79
  70. package/src/elements/content-uploader/ItemRemove.js.flow +0 -51
  71. package/src/elements/content-uploader/OverallUploadsProgressBar.js.flow +0 -111
  72. package/src/elements/content-uploader/ProgressBar.js.flow +0 -65
  73. package/src/elements/content-uploader/UploadInput.js.flow +0 -50
  74. package/src/elements/content-uploader/UploadState.js.flow +0 -114
  75. package/src/elements/content-uploader/UploadStateContent.js.flow +0 -71
  76. package/src/elements/content-uploader/UploadsManager.js.flow +0 -111
  77. package/src/elements/content-uploader/UploadsManagerAction.js.flow +0 -36
  78. package/src/elements/content-uploader/actionCellRenderer.js.flow +0 -18
  79. package/src/elements/content-uploader/index.js.flow +0 -4
  80. package/src/elements/content-uploader/nameCellRenderer.js.flow +0 -13
  81. package/src/elements/content-uploader/progressCellRenderer.js.flow +0 -81
  82. package/src/elements/content-uploader/removeCellRenderer.js.flow +0 -16
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=AiAgentReference.js.map
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @flow
3
+ * @author Box
4
+ */
5
+
6
+ export type AiAgentTypeField = 'ai_agent_id';
7
+
8
+ export interface AiAgentReference {
9
+ /**
10
+ * AI Agent Reference to pass custom AI Agent ID to requests.
11
+ * See https://developer.box.com/reference/resources/ai-agent-reference/
12
+ */
13
+ +type: AiAgentTypeField;
14
+ +id: string;
15
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiAgentReference.js","names":[],"sources":["../../../src/api/schemas/AiAgentReference.js"],"sourcesContent":["/**\n * @flow\n * @author Box\n */\n\nexport type AiAgentTypeField = 'ai_agent_id';\n\nexport interface AiAgentReference {\n /**\n * AI Agent Reference to pass custom AI Agent ID to requests.\n * See https://developer.box.com/reference/resources/ai-agent-reference/\n */\n +type: AiAgentTypeField;\n +id: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -4,5 +4,6 @@
4
4
  */
5
5
 
6
6
  import { AiAgentExtractStructured } from './AiAgentExtractStructured';
7
+ import { AiAgentReference } from './AiAgentReference';
7
8
  import { AiItemBase } from './AiItemBase';
8
9
  //# sourceMappingURL=AiExtractStructured.js.map
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { AiAgentExtractStructured } from './AiAgentExtractStructured';
7
+ import { AiAgentReference } from './AiAgentReference';
7
8
  import { AiItemBase } from './AiItemBase';
8
9
 
9
10
  export type AiExtractStructuredMetadataTemplateTypeField = 'metadata_template';
@@ -80,5 +81,10 @@ export interface AiExtractStructured {
80
81
  * The JSON blob that contains overrides for the agent config.
81
82
  */
82
83
  +agent_config?: string;
83
- +ai_agent?: AiAgentExtractStructured;
84
+ /**
85
+ * * AI agent definition to use for extraction.
86
+ * – `AiAgentExtractStructured`: customise Basic-Text / Long-Text agents
87
+ * – `AiAgentReference` : reference a custom AI-Agent by ID
88
+ */
89
+ +ai_agent?: AiAgentExtractStructured | AiAgentReference;
84
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AiExtractStructured.js","names":["AiAgentExtractStructured","AiItemBase"],"sources":["../../../src/api/schemas/AiExtractStructured.js"],"sourcesContent":["/**\n * @flow\n * @author Box\n */\n\nimport { AiAgentExtractStructured } from './AiAgentExtractStructured';\nimport { AiItemBase } from './AiItemBase';\n\nexport type AiExtractStructuredMetadataTemplateTypeField = 'metadata_template';\n\nexport interface AiExtractStructuredMetadataTemplateField {\n /**\n * The name of the metadata template.\n */\n +template_key?: string;\n /**\n * Value is always `metadata_template`.\n */\n +type?: AiExtractStructuredMetadataTemplateTypeField;\n /**\n * The scope of the metadata template can either be global or\n enterprise_*. The global scope is used for templates that are\n available to any Box enterprise. The enterprise_* scope represents\n templates that have been created within a specific enterprise,\n where * will be the ID of that enterprise.\n */\n +scope?: string;\n}\n\nexport interface AiExtractStructuredFieldsOptionsField {\n /**\n * A unique identifier for the field.\n */\n +key: string;\n}\n\nexport interface AiExtractStructuredFieldsField {\n /**\n * A unique identifier for the field.\n */\n +key: string;\n /**\n * A description of the field.\n */\n +description?: string;\n /**\n * The display name of the field.\n */\n +display_name?: string;\n /**\n * Context about the key that may include how to find and how to format it.\n */\n +prompt?: string;\n /**\n * The type of the field. Can include but is not limited to string, float, date, enum, and multiSelect.\n */\n +type?: string;\n /**\n * A list of options for this field. This is most often used in combination with the enum and multiSelect field types.\n */\n +options?: $ReadOnlyArray<AiExtractStructuredFieldsOptionsField>;\n}\n\nexport interface AiExtractStructured {\n /**\n * The items to be processed by the LLM, often files.\n */\n +items: $ReadOnlyArray<AiItemBase>;\n /**\n * The metadata template containing the fields to extract. Cannot be used\n in combination with `fields`.\n */\n +metadata_template?: AiExtractStructuredMetadataTemplateField;\n /**\n * The fields to be extracted from the items. Cannot be used in combination\n with `metadata_template`.\n */\n +fields?: $ReadOnlyArray<AiExtractStructuredFieldsField>;\n /**\n * The JSON blob that contains overrides for the agent config.\n */\n +agent_config?: string;\n +ai_agent?: AiAgentExtractStructured;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,SAASA,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,UAAU,QAAQ,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"AiExtractStructured.js","names":["AiAgentExtractStructured","AiAgentReference","AiItemBase"],"sources":["../../../src/api/schemas/AiExtractStructured.js"],"sourcesContent":["/**\n * @flow\n * @author Box\n */\n\nimport { AiAgentExtractStructured } from './AiAgentExtractStructured';\nimport { AiAgentReference } from './AiAgentReference';\nimport { AiItemBase } from './AiItemBase';\n\nexport type AiExtractStructuredMetadataTemplateTypeField = 'metadata_template';\n\nexport interface AiExtractStructuredMetadataTemplateField {\n /**\n * The name of the metadata template.\n */\n +template_key?: string;\n /**\n * Value is always `metadata_template`.\n */\n +type?: AiExtractStructuredMetadataTemplateTypeField;\n /**\n * The scope of the metadata template can either be global or\n enterprise_*. The global scope is used for templates that are\n available to any Box enterprise. The enterprise_* scope represents\n templates that have been created within a specific enterprise,\n where * will be the ID of that enterprise.\n */\n +scope?: string;\n}\n\nexport interface AiExtractStructuredFieldsOptionsField {\n /**\n * A unique identifier for the field.\n */\n +key: string;\n}\n\nexport interface AiExtractStructuredFieldsField {\n /**\n * A unique identifier for the field.\n */\n +key: string;\n /**\n * A description of the field.\n */\n +description?: string;\n /**\n * The display name of the field.\n */\n +display_name?: string;\n /**\n * Context about the key that may include how to find and how to format it.\n */\n +prompt?: string;\n /**\n * The type of the field. Can include but is not limited to string, float, date, enum, and multiSelect.\n */\n +type?: string;\n /**\n * A list of options for this field. This is most often used in combination with the enum and multiSelect field types.\n */\n +options?: $ReadOnlyArray<AiExtractStructuredFieldsOptionsField>;\n}\n\nexport interface AiExtractStructured {\n /**\n * The items to be processed by the LLM, often files.\n */\n +items: $ReadOnlyArray<AiItemBase>;\n /**\n * The metadata template containing the fields to extract. Cannot be used\n in combination with `fields`.\n */\n +metadata_template?: AiExtractStructuredMetadataTemplateField;\n /**\n * The fields to be extracted from the items. Cannot be used in combination\n with `metadata_template`.\n */\n +fields?: $ReadOnlyArray<AiExtractStructuredFieldsField>;\n /**\n * The JSON blob that contains overrides for the agent config.\n */\n +agent_config?: string;\n /**\n * * AI agent definition to use for extraction.\n * – `AiAgentExtractStructured`: customise Basic-Text / Long-Text agents\n * – `AiAgentReference` : reference a custom AI-Agent by ID\n */\n +ai_agent?: AiAgentExtractStructured | AiAgentReference;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,SAASA,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,UAAU,QAAQ,cAAc","ignoreList":[]}
@@ -8,6 +8,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
8
8
  import * as React from 'react';
9
9
  import Modal from 'react-modal';
10
10
  import { injectIntl } from 'react-intl';
11
+ // $FlowFixMe
11
12
  import ContentUploader from '../../content-uploader';
12
13
  import messages from '../messages';
13
14
  import { CLASS_MODAL_CONTENT_FULL_BLEED, CLASS_MODAL_OVERLAY, CLASS_MODAL } from '../../../constants';
@@ -8,6 +8,7 @@ import * as React from 'react';
8
8
  import Modal from 'react-modal';
9
9
  import { injectIntl } from 'react-intl';
10
10
  import type { IntlShape } from 'react-intl';
11
+ // $FlowFixMe
11
12
  import ContentUploader from '../../content-uploader';
12
13
  import messages from '../messages';
13
14
  import { CLASS_MODAL_CONTENT_FULL_BLEED, CLASS_MODAL_OVERLAY, CLASS_MODAL } from '../../../constants';
@@ -1 +1 @@
1
- {"version":3,"file":"UploadDialog.js","names":["React","Modal","injectIntl","ContentUploader","messages","CLASS_MODAL_CONTENT_FULL_BLEED","CLASS_MODAL_OVERLAY","CLASS_MODAL","UploadDialog","isOpen","currentFolderId","token","sharedLink","sharedLinkPassword","apiHost","uploadHost","onClose","parentElement","appElement","onUpload","contentUploaderProps","requestInterceptor","responseInterceptor","intl","createElement","className","contentLabel","formatMessage","upload","onRequestClose","overlayClassName","parentSelector","portalClassName","_extends","onComplete","rootFolderId"],"sources":["../../../../src/elements/common/upload-dialog/UploadDialog.js"],"sourcesContent":["/**\n * @flow\n * @file Content Explorer Delete Confirmation Dialog\n * @author Box\n */\n\nimport * as React from 'react';\nimport Modal from 'react-modal';\nimport { injectIntl } from 'react-intl';\nimport type { IntlShape } from 'react-intl';\nimport ContentUploader from '../../content-uploader';\nimport messages from '../messages';\nimport { CLASS_MODAL_CONTENT_FULL_BLEED, CLASS_MODAL_OVERLAY, CLASS_MODAL } from '../../../constants';\nimport type { Token } from '../../../common/types/core';\n\ntype Props = {\n apiHost: string,\n appElement: HTMLElement,\n contentUploaderProps: ContentUploaderProps,\n currentFolderId: ?string,\n intl: IntlShape,\n isOpen: boolean,\n onClose: Function,\n onUpload?: Function,\n parentElement: HTMLElement,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n sharedLink?: string,\n sharedLinkPassword?: string,\n token: Token,\n uploadHost: string,\n};\n\nconst UploadDialog = ({\n isOpen,\n currentFolderId,\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n onClose,\n parentElement,\n appElement,\n onUpload,\n contentUploaderProps,\n requestInterceptor,\n responseInterceptor,\n intl,\n}: Props) => (\n <Modal\n appElement={appElement}\n className={CLASS_MODAL_CONTENT_FULL_BLEED}\n contentLabel={intl.formatMessage(messages.upload)}\n isOpen={isOpen}\n onRequestClose={onClose}\n overlayClassName={CLASS_MODAL_OVERLAY}\n parentSelector={() => parentElement}\n portalClassName={`${CLASS_MODAL} be-modal-upload`}\n >\n <ContentUploader\n {...contentUploaderProps}\n apiHost={apiHost}\n onClose={onClose}\n onComplete={onUpload}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n rootFolderId={currentFolderId}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n token={token}\n uploadHost={uploadHost}\n />\n </Modal>\n);\n\nexport default injectIntl(UploadDialog);\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,KAAK,MAAM,aAAa;AAC/B,SAASC,UAAU,QAAQ,YAAY;AAEvC,OAAOC,eAAe,MAAM,wBAAwB;AACpD,OAAOC,QAAQ,MAAM,aAAa;AAClC,SAASC,8BAA8B,EAAEC,mBAAmB,EAAEC,WAAW,QAAQ,oBAAoB;AAqBrG,MAAMC,YAAY,GAAGA,CAAC;EAClBC,MAAM;EACNC,eAAe;EACfC,KAAK;EACLC,UAAU;EACVC,kBAAkB;EAClBC,OAAO;EACPC,UAAU;EACVC,OAAO;EACPC,aAAa;EACbC,UAAU;EACVC,QAAQ;EACRC,oBAAoB;EACpBC,kBAAkB;EAClBC,mBAAmB;EACnBC;AACG,CAAC,kBACJvB,KAAA,CAAAwB,aAAA,CAACvB,KAAK;EACFiB,UAAU,EAAEA,UAAW;EACvBO,SAAS,EAAEpB,8BAA+B;EAC1CqB,YAAY,EAAEH,IAAI,CAACI,aAAa,CAACvB,QAAQ,CAACwB,MAAM,CAAE;EAClDnB,MAAM,EAAEA,MAAO;EACfoB,cAAc,EAAEb,OAAQ;EACxBc,gBAAgB,EAAExB,mBAAoB;EACtCyB,cAAc,EAAEA,CAAA,KAAMd,aAAc;EACpCe,eAAe,EAAE,GAAGzB,WAAW;AAAmB,gBAElDP,KAAA,CAAAwB,aAAA,CAACrB,eAAe,EAAA8B,QAAA,KACRb,oBAAoB;EACxBN,OAAO,EAAEA,OAAQ;EACjBE,OAAO,EAAEA,OAAQ;EACjBkB,UAAU,EAAEf,QAAS;EACrBE,kBAAkB,EAAEA,kBAAmB;EACvCC,mBAAmB,EAAEA,mBAAoB;EACzCa,YAAY,EAAEzB,eAAgB;EAC9BE,UAAU,EAAEA,UAAW;EACvBC,kBAAkB,EAAEA,kBAAmB;EACvCF,KAAK,EAAEA,KAAM;EACbI,UAAU,EAAEA;AAAW,EAC1B,CACE,CACV;AAED,eAAeb,UAAU,CAACM,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"UploadDialog.js","names":["React","Modal","injectIntl","ContentUploader","messages","CLASS_MODAL_CONTENT_FULL_BLEED","CLASS_MODAL_OVERLAY","CLASS_MODAL","UploadDialog","isOpen","currentFolderId","token","sharedLink","sharedLinkPassword","apiHost","uploadHost","onClose","parentElement","appElement","onUpload","contentUploaderProps","requestInterceptor","responseInterceptor","intl","createElement","className","contentLabel","formatMessage","upload","onRequestClose","overlayClassName","parentSelector","portalClassName","_extends","onComplete","rootFolderId"],"sources":["../../../../src/elements/common/upload-dialog/UploadDialog.js"],"sourcesContent":["/**\n * @flow\n * @file Content Explorer Delete Confirmation Dialog\n * @author Box\n */\n\nimport * as React from 'react';\nimport Modal from 'react-modal';\nimport { injectIntl } from 'react-intl';\nimport type { IntlShape } from 'react-intl';\n// $FlowFixMe\nimport ContentUploader from '../../content-uploader';\nimport messages from '../messages';\nimport { CLASS_MODAL_CONTENT_FULL_BLEED, CLASS_MODAL_OVERLAY, CLASS_MODAL } from '../../../constants';\nimport type { Token } from '../../../common/types/core';\n\ntype Props = {\n apiHost: string,\n appElement: HTMLElement,\n contentUploaderProps: ContentUploaderProps,\n currentFolderId: ?string,\n intl: IntlShape,\n isOpen: boolean,\n onClose: Function,\n onUpload?: Function,\n parentElement: HTMLElement,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n sharedLink?: string,\n sharedLinkPassword?: string,\n token: Token,\n uploadHost: string,\n};\n\nconst UploadDialog = ({\n isOpen,\n currentFolderId,\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n onClose,\n parentElement,\n appElement,\n onUpload,\n contentUploaderProps,\n requestInterceptor,\n responseInterceptor,\n intl,\n}: Props) => (\n <Modal\n appElement={appElement}\n className={CLASS_MODAL_CONTENT_FULL_BLEED}\n contentLabel={intl.formatMessage(messages.upload)}\n isOpen={isOpen}\n onRequestClose={onClose}\n overlayClassName={CLASS_MODAL_OVERLAY}\n parentSelector={() => parentElement}\n portalClassName={`${CLASS_MODAL} be-modal-upload`}\n >\n <ContentUploader\n {...contentUploaderProps}\n apiHost={apiHost}\n onClose={onClose}\n onComplete={onUpload}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n rootFolderId={currentFolderId}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n token={token}\n uploadHost={uploadHost}\n />\n </Modal>\n);\n\nexport default injectIntl(UploadDialog);\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,KAAK,MAAM,aAAa;AAC/B,SAASC,UAAU,QAAQ,YAAY;AAEvC;AACA,OAAOC,eAAe,MAAM,wBAAwB;AACpD,OAAOC,QAAQ,MAAM,aAAa;AAClC,SAASC,8BAA8B,EAAEC,mBAAmB,EAAEC,WAAW,QAAQ,oBAAoB;AAqBrG,MAAMC,YAAY,GAAGA,CAAC;EAClBC,MAAM;EACNC,eAAe;EACfC,KAAK;EACLC,UAAU;EACVC,kBAAkB;EAClBC,OAAO;EACPC,UAAU;EACVC,OAAO;EACPC,aAAa;EACbC,UAAU;EACVC,QAAQ;EACRC,oBAAoB;EACpBC,kBAAkB;EAClBC,mBAAmB;EACnBC;AACG,CAAC,kBACJvB,KAAA,CAAAwB,aAAA,CAACvB,KAAK;EACFiB,UAAU,EAAEA,UAAW;EACvBO,SAAS,EAAEpB,8BAA+B;EAC1CqB,YAAY,EAAEH,IAAI,CAACI,aAAa,CAACvB,QAAQ,CAACwB,MAAM,CAAE;EAClDnB,MAAM,EAAEA,MAAO;EACfoB,cAAc,EAAEb,OAAQ;EACxBc,gBAAgB,EAAExB,mBAAoB;EACtCyB,cAAc,EAAEA,CAAA,KAAMd,aAAc;EACpCe,eAAe,EAAE,GAAGzB,WAAW;AAAmB,gBAElDP,KAAA,CAAAwB,aAAA,CAACrB,eAAe,EAAA8B,QAAA,KACRb,oBAAoB;EACxBN,OAAO,EAAEA,OAAQ;EACjBE,OAAO,EAAEA,OAAQ;EACjBkB,UAAU,EAAEf,QAAS;EACrBE,kBAAkB,EAAEA,kBAAmB;EACvCC,mBAAmB,EAAEA,mBAAoB;EACzCa,YAAY,EAAEzB,eAAgB;EAC9BE,UAAU,EAAEA,UAAW;EACvBC,kBAAkB,EAAEA,kBAAmB;EACvCF,KAAK,EAAEA,KAAM;EACbI,UAAU,EAAEA;AAAW,EAC1B,CACE,CACV;AAED,eAAeb,UAAU,CAACM,YAAY,CAAC","ignoreList":[]}
@@ -96,22 +96,29 @@ function useSidebarMetadataFetcher(api, fileId, onError, onSuccess, isFeatureEna
96
96
  });
97
97
  }, [api, file, onApiError, onSuccess]);
98
98
  const [, setError] = React.useState();
99
- const extractSuggestions = React.useCallback(async (templateKey, scope) => {
99
+ const extractSuggestions = React.useCallback(async (templateKey, scope, agentId) => {
100
100
  const aiAPI = api.getIntelligenceAPI();
101
101
  setExtractErrorCode(null);
102
102
  let answer = null;
103
+ const customAiAgent = agentId ? {
104
+ ai_agent: {
105
+ type: 'ai_agent_id',
106
+ id: agentId
107
+ }
108
+ } : {};
109
+ const requestBody = _objectSpread({
110
+ items: [{
111
+ id: file.id,
112
+ type: file.type
113
+ }],
114
+ metadata_template: {
115
+ template_key: templateKey,
116
+ scope,
117
+ type: 'metadata_template'
118
+ }
119
+ }, customAiAgent);
103
120
  try {
104
- answer = await aiAPI.extractStructured({
105
- items: [{
106
- id: file.id,
107
- type: file.type
108
- }],
109
- metadata_template: {
110
- template_key: templateKey,
111
- scope,
112
- type: 'metadata_template'
113
- }
114
- });
121
+ answer = await aiAPI.extractStructured(requestBody);
115
122
  } catch (error) {
116
123
  // Axios makes the status code nested under the response object
117
124
  if (error.response?.status === 408) {
@@ -1 +1 @@
1
- {"version":3,"file":"useSidebarMetadataFetcher.js","names":["React","getProp","isEmpty","isUserCorrectableError","ERROR_CODE_EMPTY_METADATA_SUGGESTIONS","ERROR_CODE_FETCH_METADATA_SUGGESTIONS","ERROR_CODE_METADATA_AUTOFILL_TIMEOUT","ERROR_CODE_UNKNOWN","ERROR_CODE_METADATA_PRECONDITION_FAILED","FIELD_IS_EXTERNALLY_OWNED","FIELD_PERMISSIONS_CAN_UPLOAD","FIELD_PERMISSIONS","SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE","SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE","messages","STATUS","useSidebarMetadataFetcher","api","fileId","onError","onSuccess","isFeatureEnabled","status","setStatus","useState","IDLE","file","setFile","templates","setTemplates","errorMessage","setErrorMessage","templateInstances","setTemplateInstances","extractErrorCode","setExtractErrorCode","onApiError","useCallback","error","code","message","errorStatus","isValidError","ERROR","isErrorDisplayed","fetchMetadataSuccessCallback","fetchedTemplates","fetchedTemplateInstances","SUCCESS","fetchMetadataErrorCallback","e","sidebarMetadataFetchingErrorContent","fetchMetadata","fetchedFile","getMetadataAPI","getMetadata","refreshCache","fetchFileSuccessCallback","currentFile","currentFileCanUpload","newFileCanUpload","shouldFetchMetadata","fetchFileErrorCallback","undefined","sidebarMetadataEditingErrorContent","handleDeleteMetadataInstance","metadataInstance","LOADING","deleteMetadata","handleCreateMetadataInstance","templateInstance","successCallback","createMetadataRedesign","handleUpdateMetadataInstance","JSONPatch","updateMetadataRedesign","setError","extractSuggestions","templateKey","scope","aiAPI","getIntelligenceAPI","answer","extractStructured","items","id","type","metadata_template","template_key","response","showNotification","Error","find","template","fields","map","field","value","key","_objectSpread","aiSuggestion","useEffect","getFileAPI","getFile","clearExtractError"],"sources":["../../../../src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.ts"],"sourcesContent":["import * as React from 'react';\nimport getProp from 'lodash/get';\nimport { type MessageDescriptor } from 'react-intl';\nimport {\n type JSONPatchOperations,\n type MetadataTemplate,\n type MetadataTemplateInstance,\n type MetadataTemplateField,\n type MetadataFieldValue,\n} from '@box/metadata-editor';\nimport isEmpty from 'lodash/isEmpty';\nimport API from '../../../api';\nimport { type ElementsXhrError } from '../../../common/types/api';\nimport { isUserCorrectableError } from '../../../utils/error';\nimport {\n ERROR_CODE_EMPTY_METADATA_SUGGESTIONS,\n ERROR_CODE_FETCH_METADATA_SUGGESTIONS,\n ERROR_CODE_METADATA_AUTOFILL_TIMEOUT,\n ERROR_CODE_UNKNOWN,\n ERROR_CODE_METADATA_PRECONDITION_FAILED,\n FIELD_IS_EXTERNALLY_OWNED,\n FIELD_PERMISSIONS_CAN_UPLOAD,\n FIELD_PERMISSIONS,\n SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE,\n SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE,\n} from '../../../constants';\n\nimport messages from '../../common/messages';\n\nimport { type BoxItem } from '../../../common/types/core';\nimport { type ErrorContextProps, type ExternalProps, type SuccessContextProps } from '../MetadataSidebarRedesign';\n\nexport enum STATUS {\n IDLE = 'idle',\n LOADING = 'loading',\n ERROR = 'error',\n SUCCESS = 'success',\n}\n\ninterface DataFetcher {\n clearExtractError: () => void;\n errorMessage: MessageDescriptor | null;\n extractErrorCode:\n | ERROR_CODE_METADATA_AUTOFILL_TIMEOUT\n | ERROR_CODE_METADATA_PRECONDITION_FAILED\n | ERROR_CODE_UNKNOWN\n | null;\n extractSuggestions: (templateKey: string, scope: string) => Promise<MetadataTemplateField[]>;\n file: BoxItem | null;\n handleCreateMetadataInstance: (\n templateInstance: MetadataTemplateInstance,\n successCallback: () => void,\n ) => Promise<void>;\n handleDeleteMetadataInstance: (metadataInstance: MetadataTemplateInstance) => Promise<void>;\n handleUpdateMetadataInstance: (\n metadataTemplateInstance: MetadataTemplateInstance,\n JSONPatch: Array<Object>,\n successCallback: () => void,\n ) => Promise<void>;\n status: STATUS;\n templateInstances: Array<MetadataTemplateInstance>;\n templates: Array<MetadataTemplate>;\n}\n\nfunction useSidebarMetadataFetcher(\n api: API,\n fileId: string,\n onError: ErrorContextProps['onError'],\n onSuccess: SuccessContextProps['onSuccess'],\n isFeatureEnabled: ExternalProps['isFeatureEnabled'],\n): DataFetcher {\n const [status, setStatus] = React.useState<STATUS>(STATUS.IDLE);\n const [file, setFile] = React.useState<BoxItem>(null);\n const [templates, setTemplates] = React.useState(null);\n const [errorMessage, setErrorMessage] = React.useState<MessageDescriptor | null>(null);\n const [templateInstances, setTemplateInstances] = React.useState<Array<MetadataTemplateInstance>>([]);\n const [extractErrorCode, setExtractErrorCode] = React.useState<string | null>(null);\n\n const onApiError = React.useCallback(\n (error: ElementsXhrError, code: string, message: MessageDescriptor) => {\n const { status: errorStatus } = error;\n const isValidError = isUserCorrectableError(errorStatus);\n setStatus(STATUS.ERROR);\n setErrorMessage(message);\n onError(error, code, {\n error,\n isErrorDisplayed: isValidError,\n });\n },\n [onError],\n );\n\n const fetchMetadataSuccessCallback = React.useCallback(\n ({\n templates: fetchedTemplates,\n templateInstances: fetchedTemplateInstances,\n }: {\n templates: Array<MetadataTemplate>;\n templateInstances: Array<MetadataTemplateInstance>;\n }) => {\n setErrorMessage(null);\n setStatus(STATUS.SUCCESS);\n setTemplateInstances(fetchedTemplateInstances);\n setTemplates(fetchedTemplates);\n },\n [],\n );\n\n const fetchMetadataErrorCallback = React.useCallback(\n (e: ElementsXhrError, code: string) => {\n setTemplates(null);\n setTemplateInstances(null);\n onApiError(e, code, messages.sidebarMetadataFetchingErrorContent);\n },\n [onApiError],\n );\n\n const fetchMetadata = React.useCallback(\n (fetchedFile: BoxItem) => {\n api.getMetadataAPI(false).getMetadata(\n fetchedFile,\n fetchMetadataSuccessCallback,\n fetchMetadataErrorCallback,\n isFeatureEnabled,\n { refreshCache: true },\n true,\n );\n },\n [api, fetchMetadataErrorCallback, fetchMetadataSuccessCallback, isFeatureEnabled],\n );\n\n const fetchFileSuccessCallback = React.useCallback(\n (fetchedFile: BoxItem) => {\n const { currentFile } = file ?? {};\n const currentFileCanUpload = getProp(currentFile, FIELD_PERMISSIONS_CAN_UPLOAD, false);\n const newFileCanUpload = getProp(fetchedFile, FIELD_PERMISSIONS_CAN_UPLOAD, false);\n const shouldFetchMetadata = !currentFile || currentFileCanUpload !== newFileCanUpload;\n setFile(fetchedFile);\n if (shouldFetchMetadata && fetchedFile) {\n fetchMetadata(fetchedFile);\n } else {\n setStatus(STATUS.SUCCESS);\n }\n },\n [fetchMetadata, file],\n );\n\n const fetchFileErrorCallback = React.useCallback(\n (e: ElementsXhrError, code: string) => {\n setFile(undefined);\n onApiError(e, code, messages.sidebarMetadataEditingErrorContent);\n },\n [onApiError],\n );\n\n const handleDeleteMetadataInstance = React.useCallback(\n async (metadataInstance: MetadataTemplateInstance): Promise<void> => {\n if (!file || !metadataInstance) {\n return;\n }\n setStatus(STATUS.LOADING);\n await api.getMetadataAPI(false).deleteMetadata(\n file,\n metadataInstance,\n () => {\n setStatus(STATUS.SUCCESS);\n onSuccess(SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE, true);\n },\n (error: ElementsXhrError, code: string) => {\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent);\n },\n true,\n );\n },\n [api, onApiError, onSuccess, file],\n );\n\n const handleCreateMetadataInstance = React.useCallback(\n async (templateInstance: MetadataTemplateInstance, successCallback: () => void): Promise<void> => {\n await api\n .getMetadataAPI(false)\n .createMetadataRedesign(\n file,\n templateInstance,\n successCallback,\n (error: ElementsXhrError, code: string) =>\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent),\n );\n },\n [api, file, onApiError],\n );\n\n const handleUpdateMetadataInstance = React.useCallback(\n async (\n metadataInstance: MetadataTemplateInstance,\n JSONPatch: JSONPatchOperations,\n successCallback: () => void,\n ) => {\n await api.getMetadataAPI(false).updateMetadataRedesign(\n file,\n metadataInstance,\n JSONPatch,\n () => {\n successCallback();\n onSuccess(SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE, true);\n },\n (error: ElementsXhrError, code: string) => {\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent);\n },\n );\n },\n [api, file, onApiError, onSuccess],\n );\n\n const [, setError] = React.useState();\n const extractSuggestions = React.useCallback(\n async (templateKey: string, scope: string): Promise<MetadataTemplateField[]> => {\n const aiAPI = api.getIntelligenceAPI();\n setExtractErrorCode(null);\n\n let answer = null;\n try {\n answer = (await aiAPI.extractStructured({\n items: [{ id: file.id, type: file.type }],\n metadata_template: { template_key: templateKey, scope, type: 'metadata_template' },\n })) as Record<string, MetadataFieldValue>;\n } catch (error) {\n // Axios makes the status code nested under the response object\n if (error.response?.status === 408) {\n onError(error, ERROR_CODE_METADATA_AUTOFILL_TIMEOUT);\n setExtractErrorCode(ERROR_CODE_METADATA_AUTOFILL_TIMEOUT);\n } else if (error.response?.status === 412) {\n onError(error, ERROR_CODE_METADATA_PRECONDITION_FAILED);\n setExtractErrorCode(ERROR_CODE_METADATA_PRECONDITION_FAILED);\n } else if (error.response?.status === 500) {\n onError(error, ERROR_CODE_UNKNOWN);\n setExtractErrorCode(ERROR_CODE_UNKNOWN);\n } else if (isUserCorrectableError(error.response?.status)) {\n onError(error, ERROR_CODE_FETCH_METADATA_SUGGESTIONS, { showNotification: true });\n } else {\n onError(error, ERROR_CODE_UNKNOWN, { showNotification: true });\n // react way of throwing errors from async callbacks - https://github.com/facebook/react/issues/14981#issuecomment-468460187\n setError(() => {\n throw error;\n });\n }\n return [];\n }\n\n if (isEmpty(answer)) {\n const error = new Error('No suggestions found.');\n onError(error, ERROR_CODE_EMPTY_METADATA_SUGGESTIONS, { showNotification: true });\n return [];\n }\n\n const templateInstance = templates.find(template => template.templateKey === templateKey && template.scope);\n const fields = templateInstance?.fields || [];\n\n return fields.map(field => {\n const value = answer[field.key];\n // TODO: @box/metadadata-editor does not support AI suggestions, enable once supported\n if (!value || field.type === 'taxonomy') {\n return field;\n }\n return {\n ...field,\n aiSuggestion: value,\n };\n });\n },\n [api, file, onError, templates],\n );\n\n React.useEffect(() => {\n if (status === STATUS.IDLE) {\n setStatus(STATUS.LOADING);\n api.getFileAPI().getFile(fileId, fetchFileSuccessCallback, fetchFileErrorCallback, {\n fields: [FIELD_IS_EXTERNALLY_OWNED, FIELD_PERMISSIONS],\n refreshCache: true,\n });\n }\n }, [api, fetchFileErrorCallback, fetchFileSuccessCallback, fileId, status]);\n\n return {\n clearExtractError: () => setExtractErrorCode(null),\n extractSuggestions,\n handleCreateMetadataInstance,\n handleDeleteMetadataInstance,\n handleUpdateMetadataInstance,\n extractErrorCode,\n errorMessage,\n file,\n status,\n templateInstances,\n templates,\n };\n}\n\nexport default useSidebarMetadataFetcher;\n"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,OAAO,MAAM,YAAY;AAShC,OAAOC,OAAO,MAAM,gBAAgB;AAGpC,SAASC,sBAAsB,QAAQ,sBAAsB;AAC7D,SACIC,qCAAqC,EACrCC,qCAAqC,EACrCC,oCAAoC,EACpCC,kBAAkB,EAClBC,uCAAuC,EACvCC,yBAAyB,EACzBC,4BAA4B,EAC5BC,iBAAiB,EACjBC,8CAA8C,EAC9CC,8CAA8C,QAC3C,oBAAoB;AAE3B,OAAOC,QAAQ,MAAM,uBAAuB;AAK5C,WAAYC,MAAM,0BAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAAA,OAANA,MAAM;AAAA;AAgClB,SAASC,yBAAyBA,CAC9BC,GAAQ,EACRC,MAAc,EACdC,OAAqC,EACrCC,SAA2C,EAC3CC,gBAAmD,EACxC;EACX,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGvB,KAAK,CAACwB,QAAQ,CAAST,MAAM,CAACU,IAAI,CAAC;EAC/D,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG3B,KAAK,CAACwB,QAAQ,CAAU,IAAI,CAAC;EACrD,MAAM,CAACI,SAAS,EAAEC,YAAY,CAAC,GAAG7B,KAAK,CAACwB,QAAQ,CAAC,IAAI,CAAC;EACtD,MAAM,CAACM,YAAY,EAAEC,eAAe,CAAC,GAAG/B,KAAK,CAACwB,QAAQ,CAA2B,IAAI,CAAC;EACtF,MAAM,CAACQ,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGjC,KAAK,CAACwB,QAAQ,CAAkC,EAAE,CAAC;EACrG,MAAM,CAACU,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGnC,KAAK,CAACwB,QAAQ,CAAgB,IAAI,CAAC;EAEnF,MAAMY,UAAU,GAAGpC,KAAK,CAACqC,WAAW,CAChC,CAACC,KAAuB,EAAEC,IAAY,EAAEC,OAA0B,KAAK;IACnE,MAAM;MAAElB,MAAM,EAAEmB;IAAY,CAAC,GAAGH,KAAK;IACrC,MAAMI,YAAY,GAAGvC,sBAAsB,CAACsC,WAAW,CAAC;IACxDlB,SAAS,CAACR,MAAM,CAAC4B,KAAK,CAAC;IACvBZ,eAAe,CAACS,OAAO,CAAC;IACxBrB,OAAO,CAACmB,KAAK,EAAEC,IAAI,EAAE;MACjBD,KAAK;MACLM,gBAAgB,EAAEF;IACtB,CAAC,CAAC;EACN,CAAC,EACD,CAACvB,OAAO,CACZ,CAAC;EAED,MAAM0B,4BAA4B,GAAG7C,KAAK,CAACqC,WAAW,CAClD,CAAC;IACGT,SAAS,EAAEkB,gBAAgB;IAC3Bd,iBAAiB,EAAEe;EAIvB,CAAC,KAAK;IACFhB,eAAe,CAAC,IAAI,CAAC;IACrBR,SAAS,CAACR,MAAM,CAACiC,OAAO,CAAC;IACzBf,oBAAoB,CAACc,wBAAwB,CAAC;IAC9ClB,YAAY,CAACiB,gBAAgB,CAAC;EAClC,CAAC,EACD,EACJ,CAAC;EAED,MAAMG,0BAA0B,GAAGjD,KAAK,CAACqC,WAAW,CAChD,CAACa,CAAmB,EAAEX,IAAY,KAAK;IACnCV,YAAY,CAAC,IAAI,CAAC;IAClBI,oBAAoB,CAAC,IAAI,CAAC;IAC1BG,UAAU,CAACc,CAAC,EAAEX,IAAI,EAAEzB,QAAQ,CAACqC,mCAAmC,CAAC;EACrE,CAAC,EACD,CAACf,UAAU,CACf,CAAC;EAED,MAAMgB,aAAa,GAAGpD,KAAK,CAACqC,WAAW,CAClCgB,WAAoB,IAAK;IACtBpC,GAAG,CAACqC,cAAc,CAAC,KAAK,CAAC,CAACC,WAAW,CACjCF,WAAW,EACXR,4BAA4B,EAC5BI,0BAA0B,EAC1B5B,gBAAgB,EAChB;MAAEmC,YAAY,EAAE;IAAK,CAAC,EACtB,IACJ,CAAC;EACL,CAAC,EACD,CAACvC,GAAG,EAAEgC,0BAA0B,EAAEJ,4BAA4B,EAAExB,gBAAgB,CACpF,CAAC;EAED,MAAMoC,wBAAwB,GAAGzD,KAAK,CAACqC,WAAW,CAC7CgB,WAAoB,IAAK;IACtB,MAAM;MAAEK;IAAY,CAAC,GAAGhC,IAAI,IAAI,CAAC,CAAC;IAClC,MAAMiC,oBAAoB,GAAG1D,OAAO,CAACyD,WAAW,EAAEhD,4BAA4B,EAAE,KAAK,CAAC;IACtF,MAAMkD,gBAAgB,GAAG3D,OAAO,CAACoD,WAAW,EAAE3C,4BAA4B,EAAE,KAAK,CAAC;IAClF,MAAMmD,mBAAmB,GAAG,CAACH,WAAW,IAAIC,oBAAoB,KAAKC,gBAAgB;IACrFjC,OAAO,CAAC0B,WAAW,CAAC;IACpB,IAAIQ,mBAAmB,IAAIR,WAAW,EAAE;MACpCD,aAAa,CAACC,WAAW,CAAC;IAC9B,CAAC,MAAM;MACH9B,SAAS,CAACR,MAAM,CAACiC,OAAO,CAAC;IAC7B;EACJ,CAAC,EACD,CAACI,aAAa,EAAE1B,IAAI,CACxB,CAAC;EAED,MAAMoC,sBAAsB,GAAG9D,KAAK,CAACqC,WAAW,CAC5C,CAACa,CAAmB,EAAEX,IAAY,KAAK;IACnCZ,OAAO,CAACoC,SAAS,CAAC;IAClB3B,UAAU,CAACc,CAAC,EAAEX,IAAI,EAAEzB,QAAQ,CAACkD,kCAAkC,CAAC;EACpE,CAAC,EACD,CAAC5B,UAAU,CACf,CAAC;EAED,MAAM6B,4BAA4B,GAAGjE,KAAK,CAACqC,WAAW,CAClD,MAAO6B,gBAA0C,IAAoB;IACjE,IAAI,CAACxC,IAAI,IAAI,CAACwC,gBAAgB,EAAE;MAC5B;IACJ;IACA3C,SAAS,CAACR,MAAM,CAACoD,OAAO,CAAC;IACzB,MAAMlD,GAAG,CAACqC,cAAc,CAAC,KAAK,CAAC,CAACc,cAAc,CAC1C1C,IAAI,EACJwC,gBAAgB,EAChB,MAAM;MACF3C,SAAS,CAACR,MAAM,CAACiC,OAAO,CAAC;MACzB5B,SAAS,CAACP,8CAA8C,EAAE,IAAI,CAAC;IACnE,CAAC,EACD,CAACyB,KAAuB,EAAEC,IAAY,KAAK;MACvCH,UAAU,CAACE,KAAK,EAAEC,IAAI,EAAEzB,QAAQ,CAACkD,kCAAkC,CAAC;IACxE,CAAC,EACD,IACJ,CAAC;EACL,CAAC,EACD,CAAC/C,GAAG,EAAEmB,UAAU,EAAEhB,SAAS,EAAEM,IAAI,CACrC,CAAC;EAED,MAAM2C,4BAA4B,GAAGrE,KAAK,CAACqC,WAAW,CAClD,OAAOiC,gBAA0C,EAAEC,eAA2B,KAAoB;IAC9F,MAAMtD,GAAG,CACJqC,cAAc,CAAC,KAAK,CAAC,CACrBkB,sBAAsB,CACnB9C,IAAI,EACJ4C,gBAAgB,EAChBC,eAAe,EACf,CAACjC,KAAuB,EAAEC,IAAY,KAClCH,UAAU,CAACE,KAAK,EAAEC,IAAI,EAAEzB,QAAQ,CAACkD,kCAAkC,CAC3E,CAAC;EACT,CAAC,EACD,CAAC/C,GAAG,EAAES,IAAI,EAAEU,UAAU,CAC1B,CAAC;EAED,MAAMqC,4BAA4B,GAAGzE,KAAK,CAACqC,WAAW,CAClD,OACI6B,gBAA0C,EAC1CQ,SAA8B,EAC9BH,eAA2B,KAC1B;IACD,MAAMtD,GAAG,CAACqC,cAAc,CAAC,KAAK,CAAC,CAACqB,sBAAsB,CAClDjD,IAAI,EACJwC,gBAAgB,EAChBQ,SAAS,EACT,MAAM;MACFH,eAAe,CAAC,CAAC;MACjBnD,SAAS,CAACR,8CAA8C,EAAE,IAAI,CAAC;IACnE,CAAC,EACD,CAAC0B,KAAuB,EAAEC,IAAY,KAAK;MACvCH,UAAU,CAACE,KAAK,EAAEC,IAAI,EAAEzB,QAAQ,CAACkD,kCAAkC,CAAC;IACxE,CACJ,CAAC;EACL,CAAC,EACD,CAAC/C,GAAG,EAAES,IAAI,EAAEU,UAAU,EAAEhB,SAAS,CACrC,CAAC;EAED,MAAM,GAAGwD,QAAQ,CAAC,GAAG5E,KAAK,CAACwB,QAAQ,CAAC,CAAC;EACrC,MAAMqD,kBAAkB,GAAG7E,KAAK,CAACqC,WAAW,CACxC,OAAOyC,WAAmB,EAAEC,KAAa,KAAuC;IAC5E,MAAMC,KAAK,GAAG/D,GAAG,CAACgE,kBAAkB,CAAC,CAAC;IACtC9C,mBAAmB,CAAC,IAAI,CAAC;IAEzB,IAAI+C,MAAM,GAAG,IAAI;IACjB,IAAI;MACAA,MAAM,GAAI,MAAMF,KAAK,CAACG,iBAAiB,CAAC;QACpCC,KAAK,EAAE,CAAC;UAAEC,EAAE,EAAE3D,IAAI,CAAC2D,EAAE;UAAEC,IAAI,EAAE5D,IAAI,CAAC4D;QAAK,CAAC,CAAC;QACzCC,iBAAiB,EAAE;UAAEC,YAAY,EAAEV,WAAW;UAAEC,KAAK;UAAEO,IAAI,EAAE;QAAoB;MACrF,CAAC,CAAwC;IAC7C,CAAC,CAAC,OAAOhD,KAAK,EAAE;MACZ;MACA,IAAIA,KAAK,CAACmD,QAAQ,EAAEnE,MAAM,KAAK,GAAG,EAAE;QAChCH,OAAO,CAACmB,KAAK,EAAEhC,oCAAoC,CAAC;QACpD6B,mBAAmB,CAAC7B,oCAAoC,CAAC;MAC7D,CAAC,MAAM,IAAIgC,KAAK,CAACmD,QAAQ,EAAEnE,MAAM,KAAK,GAAG,EAAE;QACvCH,OAAO,CAACmB,KAAK,EAAE9B,uCAAuC,CAAC;QACvD2B,mBAAmB,CAAC3B,uCAAuC,CAAC;MAChE,CAAC,MAAM,IAAI8B,KAAK,CAACmD,QAAQ,EAAEnE,MAAM,KAAK,GAAG,EAAE;QACvCH,OAAO,CAACmB,KAAK,EAAE/B,kBAAkB,CAAC;QAClC4B,mBAAmB,CAAC5B,kBAAkB,CAAC;MAC3C,CAAC,MAAM,IAAIJ,sBAAsB,CAACmC,KAAK,CAACmD,QAAQ,EAAEnE,MAAM,CAAC,EAAE;QACvDH,OAAO,CAACmB,KAAK,EAAEjC,qCAAqC,EAAE;UAAEqF,gBAAgB,EAAE;QAAK,CAAC,CAAC;MACrF,CAAC,MAAM;QACHvE,OAAO,CAACmB,KAAK,EAAE/B,kBAAkB,EAAE;UAAEmF,gBAAgB,EAAE;QAAK,CAAC,CAAC;QAC9D;QACAd,QAAQ,CAAC,MAAM;UACX,MAAMtC,KAAK;QACf,CAAC,CAAC;MACN;MACA,OAAO,EAAE;IACb;IAEA,IAAIpC,OAAO,CAACgF,MAAM,CAAC,EAAE;MACjB,MAAM5C,KAAK,GAAG,IAAIqD,KAAK,CAAC,uBAAuB,CAAC;MAChDxE,OAAO,CAACmB,KAAK,EAAElC,qCAAqC,EAAE;QAAEsF,gBAAgB,EAAE;MAAK,CAAC,CAAC;MACjF,OAAO,EAAE;IACb;IAEA,MAAMpB,gBAAgB,GAAG1C,SAAS,CAACgE,IAAI,CAACC,QAAQ,IAAIA,QAAQ,CAACf,WAAW,KAAKA,WAAW,IAAIe,QAAQ,CAACd,KAAK,CAAC;IAC3G,MAAMe,MAAM,GAAGxB,gBAAgB,EAAEwB,MAAM,IAAI,EAAE;IAE7C,OAAOA,MAAM,CAACC,GAAG,CAACC,KAAK,IAAI;MACvB,MAAMC,KAAK,GAAGf,MAAM,CAACc,KAAK,CAACE,GAAG,CAAC;MAC/B;MACA,IAAI,CAACD,KAAK,IAAID,KAAK,CAACV,IAAI,KAAK,UAAU,EAAE;QACrC,OAAOU,KAAK;MAChB;MACA,OAAAG,aAAA,CAAAA,aAAA,KACOH,KAAK;QACRI,YAAY,EAAEH;MAAK;IAE3B,CAAC,CAAC;EACN,CAAC,EACD,CAAChF,GAAG,EAAES,IAAI,EAAEP,OAAO,EAAES,SAAS,CAClC,CAAC;EAED5B,KAAK,CAACqG,SAAS,CAAC,MAAM;IAClB,IAAI/E,MAAM,KAAKP,MAAM,CAACU,IAAI,EAAE;MACxBF,SAAS,CAACR,MAAM,CAACoD,OAAO,CAAC;MACzBlD,GAAG,CAACqF,UAAU,CAAC,CAAC,CAACC,OAAO,CAACrF,MAAM,EAAEuC,wBAAwB,EAAEK,sBAAsB,EAAE;QAC/EgC,MAAM,EAAE,CAACrF,yBAAyB,EAAEE,iBAAiB,CAAC;QACtD6C,YAAY,EAAE;MAClB,CAAC,CAAC;IACN;EACJ,CAAC,EAAE,CAACvC,GAAG,EAAE6C,sBAAsB,EAAEL,wBAAwB,EAAEvC,MAAM,EAAEI,MAAM,CAAC,CAAC;EAE3E,OAAO;IACHkF,iBAAiB,EAAEA,CAAA,KAAMrE,mBAAmB,CAAC,IAAI,CAAC;IAClD0C,kBAAkB;IAClBR,4BAA4B;IAC5BJ,4BAA4B;IAC5BQ,4BAA4B;IAC5BvC,gBAAgB;IAChBJ,YAAY;IACZJ,IAAI;IACJJ,MAAM;IACNU,iBAAiB;IACjBJ;EACJ,CAAC;AACL;AAEA,eAAeZ,yBAAyB","ignoreList":[]}
1
+ {"version":3,"file":"useSidebarMetadataFetcher.js","names":["React","getProp","isEmpty","isUserCorrectableError","ERROR_CODE_EMPTY_METADATA_SUGGESTIONS","ERROR_CODE_FETCH_METADATA_SUGGESTIONS","ERROR_CODE_METADATA_AUTOFILL_TIMEOUT","ERROR_CODE_UNKNOWN","ERROR_CODE_METADATA_PRECONDITION_FAILED","FIELD_IS_EXTERNALLY_OWNED","FIELD_PERMISSIONS_CAN_UPLOAD","FIELD_PERMISSIONS","SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE","SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE","messages","STATUS","useSidebarMetadataFetcher","api","fileId","onError","onSuccess","isFeatureEnabled","status","setStatus","useState","IDLE","file","setFile","templates","setTemplates","errorMessage","setErrorMessage","templateInstances","setTemplateInstances","extractErrorCode","setExtractErrorCode","onApiError","useCallback","error","code","message","errorStatus","isValidError","ERROR","isErrorDisplayed","fetchMetadataSuccessCallback","fetchedTemplates","fetchedTemplateInstances","SUCCESS","fetchMetadataErrorCallback","e","sidebarMetadataFetchingErrorContent","fetchMetadata","fetchedFile","getMetadataAPI","getMetadata","refreshCache","fetchFileSuccessCallback","currentFile","currentFileCanUpload","newFileCanUpload","shouldFetchMetadata","fetchFileErrorCallback","undefined","sidebarMetadataEditingErrorContent","handleDeleteMetadataInstance","metadataInstance","LOADING","deleteMetadata","handleCreateMetadataInstance","templateInstance","successCallback","createMetadataRedesign","handleUpdateMetadataInstance","JSONPatch","updateMetadataRedesign","setError","extractSuggestions","templateKey","scope","agentId","aiAPI","getIntelligenceAPI","answer","customAiAgent","ai_agent","type","id","requestBody","_objectSpread","items","metadata_template","template_key","extractStructured","response","showNotification","Error","find","template","fields","map","field","value","key","aiSuggestion","useEffect","getFileAPI","getFile","clearExtractError"],"sources":["../../../../src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.ts"],"sourcesContent":["import * as React from 'react';\nimport getProp from 'lodash/get';\nimport { type MessageDescriptor } from 'react-intl';\nimport {\n type JSONPatchOperations,\n type MetadataTemplate,\n type MetadataTemplateInstance,\n type MetadataTemplateField,\n type MetadataFieldValue,\n} from '@box/metadata-editor';\nimport isEmpty from 'lodash/isEmpty';\nimport API from '../../../api';\nimport { type ElementsXhrError } from '../../../common/types/api';\nimport { isUserCorrectableError } from '../../../utils/error';\nimport {\n ERROR_CODE_EMPTY_METADATA_SUGGESTIONS,\n ERROR_CODE_FETCH_METADATA_SUGGESTIONS,\n ERROR_CODE_METADATA_AUTOFILL_TIMEOUT,\n ERROR_CODE_UNKNOWN,\n ERROR_CODE_METADATA_PRECONDITION_FAILED,\n FIELD_IS_EXTERNALLY_OWNED,\n FIELD_PERMISSIONS_CAN_UPLOAD,\n FIELD_PERMISSIONS,\n SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE,\n SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE,\n} from '../../../constants';\n\nimport messages from '../../common/messages';\n\nimport { type BoxItem } from '../../../common/types/core';\nimport { type ErrorContextProps, type ExternalProps, type SuccessContextProps } from '../MetadataSidebarRedesign';\nimport { type AiExtractStructured } from '../../../api/schemas/AiExtractStructured';\n\nexport enum STATUS {\n IDLE = 'idle',\n LOADING = 'loading',\n ERROR = 'error',\n SUCCESS = 'success',\n}\n\ninterface DataFetcher {\n clearExtractError: () => void;\n errorMessage: MessageDescriptor | null;\n extractErrorCode:\n | ERROR_CODE_METADATA_AUTOFILL_TIMEOUT\n | ERROR_CODE_METADATA_PRECONDITION_FAILED\n | ERROR_CODE_UNKNOWN\n | null;\n extractSuggestions: (templateKey: string, scope: string, agentId?: string) => Promise<MetadataTemplateField[]>;\n file: BoxItem | null;\n handleCreateMetadataInstance: (\n templateInstance: MetadataTemplateInstance,\n successCallback: () => void,\n ) => Promise<void>;\n handleDeleteMetadataInstance: (metadataInstance: MetadataTemplateInstance) => Promise<void>;\n handleUpdateMetadataInstance: (\n metadataTemplateInstance: MetadataTemplateInstance,\n JSONPatch: Array<Object>,\n successCallback: () => void,\n ) => Promise<void>;\n status: STATUS;\n templateInstances: Array<MetadataTemplateInstance>;\n templates: Array<MetadataTemplate>;\n}\n\nfunction useSidebarMetadataFetcher(\n api: API,\n fileId: string,\n onError: ErrorContextProps['onError'],\n onSuccess: SuccessContextProps['onSuccess'],\n isFeatureEnabled: ExternalProps['isFeatureEnabled'],\n): DataFetcher {\n const [status, setStatus] = React.useState<STATUS>(STATUS.IDLE);\n const [file, setFile] = React.useState<BoxItem>(null);\n const [templates, setTemplates] = React.useState(null);\n const [errorMessage, setErrorMessage] = React.useState<MessageDescriptor | null>(null);\n const [templateInstances, setTemplateInstances] = React.useState<Array<MetadataTemplateInstance>>([]);\n const [extractErrorCode, setExtractErrorCode] = React.useState<string | null>(null);\n\n const onApiError = React.useCallback(\n (error: ElementsXhrError, code: string, message: MessageDescriptor) => {\n const { status: errorStatus } = error;\n const isValidError = isUserCorrectableError(errorStatus);\n setStatus(STATUS.ERROR);\n setErrorMessage(message);\n onError(error, code, {\n error,\n isErrorDisplayed: isValidError,\n });\n },\n [onError],\n );\n\n const fetchMetadataSuccessCallback = React.useCallback(\n ({\n templates: fetchedTemplates,\n templateInstances: fetchedTemplateInstances,\n }: {\n templates: Array<MetadataTemplate>;\n templateInstances: Array<MetadataTemplateInstance>;\n }) => {\n setErrorMessage(null);\n setStatus(STATUS.SUCCESS);\n setTemplateInstances(fetchedTemplateInstances);\n setTemplates(fetchedTemplates);\n },\n [],\n );\n\n const fetchMetadataErrorCallback = React.useCallback(\n (e: ElementsXhrError, code: string) => {\n setTemplates(null);\n setTemplateInstances(null);\n onApiError(e, code, messages.sidebarMetadataFetchingErrorContent);\n },\n [onApiError],\n );\n\n const fetchMetadata = React.useCallback(\n (fetchedFile: BoxItem) => {\n api.getMetadataAPI(false).getMetadata(\n fetchedFile,\n fetchMetadataSuccessCallback,\n fetchMetadataErrorCallback,\n isFeatureEnabled,\n { refreshCache: true },\n true,\n );\n },\n [api, fetchMetadataErrorCallback, fetchMetadataSuccessCallback, isFeatureEnabled],\n );\n\n const fetchFileSuccessCallback = React.useCallback(\n (fetchedFile: BoxItem) => {\n const { currentFile } = file ?? {};\n const currentFileCanUpload = getProp(currentFile, FIELD_PERMISSIONS_CAN_UPLOAD, false);\n const newFileCanUpload = getProp(fetchedFile, FIELD_PERMISSIONS_CAN_UPLOAD, false);\n const shouldFetchMetadata = !currentFile || currentFileCanUpload !== newFileCanUpload;\n setFile(fetchedFile);\n if (shouldFetchMetadata && fetchedFile) {\n fetchMetadata(fetchedFile);\n } else {\n setStatus(STATUS.SUCCESS);\n }\n },\n [fetchMetadata, file],\n );\n\n const fetchFileErrorCallback = React.useCallback(\n (e: ElementsXhrError, code: string) => {\n setFile(undefined);\n onApiError(e, code, messages.sidebarMetadataEditingErrorContent);\n },\n [onApiError],\n );\n\n const handleDeleteMetadataInstance = React.useCallback(\n async (metadataInstance: MetadataTemplateInstance): Promise<void> => {\n if (!file || !metadataInstance) {\n return;\n }\n setStatus(STATUS.LOADING);\n await api.getMetadataAPI(false).deleteMetadata(\n file,\n metadataInstance,\n () => {\n setStatus(STATUS.SUCCESS);\n onSuccess(SUCCESS_CODE_DELETE_METADATA_TEMPLATE_INSTANCE, true);\n },\n (error: ElementsXhrError, code: string) => {\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent);\n },\n true,\n );\n },\n [api, onApiError, onSuccess, file],\n );\n\n const handleCreateMetadataInstance = React.useCallback(\n async (templateInstance: MetadataTemplateInstance, successCallback: () => void): Promise<void> => {\n await api\n .getMetadataAPI(false)\n .createMetadataRedesign(\n file,\n templateInstance,\n successCallback,\n (error: ElementsXhrError, code: string) =>\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent),\n );\n },\n [api, file, onApiError],\n );\n\n const handleUpdateMetadataInstance = React.useCallback(\n async (\n metadataInstance: MetadataTemplateInstance,\n JSONPatch: JSONPatchOperations,\n successCallback: () => void,\n ) => {\n await api.getMetadataAPI(false).updateMetadataRedesign(\n file,\n metadataInstance,\n JSONPatch,\n () => {\n successCallback();\n onSuccess(SUCCESS_CODE_UPDATE_METADATA_TEMPLATE_INSTANCE, true);\n },\n (error: ElementsXhrError, code: string) => {\n onApiError(error, code, messages.sidebarMetadataEditingErrorContent);\n },\n );\n },\n [api, file, onApiError, onSuccess],\n );\n\n const [, setError] = React.useState();\n const extractSuggestions = React.useCallback(\n async (templateKey: string, scope: string, agentId?: string): Promise<MetadataTemplateField[]> => {\n const aiAPI = api.getIntelligenceAPI();\n setExtractErrorCode(null);\n let answer = null;\n const customAiAgent = agentId ? { ai_agent: { type: 'ai_agent_id', id: agentId } } : {};\n const requestBody: AiExtractStructured = {\n items: [{ id: file.id, type: file.type }],\n metadata_template: { template_key: templateKey, scope, type: 'metadata_template' },\n ...customAiAgent,\n };\n\n try {\n answer = (await aiAPI.extractStructured(requestBody)) as Record<string, MetadataFieldValue>;\n } catch (error) {\n // Axios makes the status code nested under the response object\n if (error.response?.status === 408) {\n onError(error, ERROR_CODE_METADATA_AUTOFILL_TIMEOUT);\n setExtractErrorCode(ERROR_CODE_METADATA_AUTOFILL_TIMEOUT);\n } else if (error.response?.status === 412) {\n onError(error, ERROR_CODE_METADATA_PRECONDITION_FAILED);\n setExtractErrorCode(ERROR_CODE_METADATA_PRECONDITION_FAILED);\n } else if (error.response?.status === 500) {\n onError(error, ERROR_CODE_UNKNOWN);\n setExtractErrorCode(ERROR_CODE_UNKNOWN);\n } else if (isUserCorrectableError(error.response?.status)) {\n onError(error, ERROR_CODE_FETCH_METADATA_SUGGESTIONS, { showNotification: true });\n } else {\n onError(error, ERROR_CODE_UNKNOWN, { showNotification: true });\n // react way of throwing errors from async callbacks - https://github.com/facebook/react/issues/14981#issuecomment-468460187\n setError(() => {\n throw error;\n });\n }\n return [];\n }\n\n if (isEmpty(answer)) {\n const error = new Error('No suggestions found.');\n onError(error, ERROR_CODE_EMPTY_METADATA_SUGGESTIONS, { showNotification: true });\n return [];\n }\n\n const templateInstance = templates.find(template => template.templateKey === templateKey && template.scope);\n const fields = templateInstance?.fields || [];\n\n return fields.map(field => {\n const value = answer[field.key];\n // TODO: @box/metadadata-editor does not support AI suggestions, enable once supported\n if (!value || field.type === 'taxonomy') {\n return field;\n }\n return {\n ...field,\n aiSuggestion: value,\n };\n });\n },\n [api, file, onError, templates],\n );\n\n React.useEffect(() => {\n if (status === STATUS.IDLE) {\n setStatus(STATUS.LOADING);\n api.getFileAPI().getFile(fileId, fetchFileSuccessCallback, fetchFileErrorCallback, {\n fields: [FIELD_IS_EXTERNALLY_OWNED, FIELD_PERMISSIONS],\n refreshCache: true,\n });\n }\n }, [api, fetchFileErrorCallback, fetchFileSuccessCallback, fileId, status]);\n\n return {\n clearExtractError: () => setExtractErrorCode(null),\n extractSuggestions,\n handleCreateMetadataInstance,\n handleDeleteMetadataInstance,\n handleUpdateMetadataInstance,\n extractErrorCode,\n errorMessage,\n file,\n status,\n templateInstances,\n templates,\n };\n}\n\nexport default useSidebarMetadataFetcher;\n"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
  export { default as ContentExplorer } from './content-explorer';
3
3
  export { default as ContentPreview } from './content-preview';
4
4
  export { default as ContentPicker, ContentPickerPopup } from './content-picker';
5
+ // $FlowFixMe
5
6
  export { default as ContentUploader, ContentUploaderPopup } from './content-uploader';
6
7
  export { default as ContentOpenWith } from './content-open-with';
7
8
  export { default as ContentSidebar } from './content-sidebar';
@@ -3,6 +3,7 @@
3
3
  export { default as ContentExplorer } from './content-explorer';
4
4
  export { default as ContentPreview } from './content-preview';
5
5
  export { default as ContentPicker, ContentPickerPopup } from './content-picker';
6
+ // $FlowFixMe
6
7
  export { default as ContentUploader, ContentUploaderPopup } from './content-uploader';
7
8
  export { default as ContentOpenWith } from './content-open-with';
8
9
  export { default as ContentSidebar } from './content-sidebar';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","ContentExplorer","ContentPreview","ContentPicker","ContentPickerPopup","ContentUploader","ContentUploaderPopup","ContentOpenWith","ContentSidebar","ContentSharing"],"sources":["../../src/elements/index.js"],"sourcesContent":["// @flow\n// $FlowFixMe\nexport { default as ContentExplorer } from './content-explorer';\nexport { default as ContentPreview } from './content-preview';\nexport { default as ContentPicker, ContentPickerPopup } from './content-picker';\nexport { default as ContentUploader, ContentUploaderPopup } from './content-uploader';\nexport { default as ContentOpenWith } from './content-open-with';\nexport { default as ContentSidebar } from './content-sidebar';\nexport { default as ContentSharing } from './content-sharing';\n"],"mappings":"AACA;AACA,SAASA,OAAO,IAAIC,eAAe,QAAQ,oBAAoB;AAC/D,SAASD,OAAO,IAAIE,cAAc,QAAQ,mBAAmB;AAC7D,SAASF,OAAO,IAAIG,aAAa,EAAEC,kBAAkB,QAAQ,kBAAkB;AAC/E,SAASJ,OAAO,IAAIK,eAAe,EAAEC,oBAAoB,QAAQ,oBAAoB;AACrF,SAASN,OAAO,IAAIO,eAAe,QAAQ,qBAAqB;AAChE,SAASP,OAAO,IAAIQ,cAAc,QAAQ,mBAAmB;AAC7D,SAASR,OAAO,IAAIS,cAAc,QAAQ,mBAAmB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","ContentExplorer","ContentPreview","ContentPicker","ContentPickerPopup","ContentUploader","ContentUploaderPopup","ContentOpenWith","ContentSidebar","ContentSharing"],"sources":["../../src/elements/index.js"],"sourcesContent":["// @flow\n// $FlowFixMe\nexport { default as ContentExplorer } from './content-explorer';\nexport { default as ContentPreview } from './content-preview';\nexport { default as ContentPicker, ContentPickerPopup } from './content-picker';\n// $FlowFixMe\nexport { default as ContentUploader, ContentUploaderPopup } from './content-uploader';\nexport { default as ContentOpenWith } from './content-open-with';\nexport { default as ContentSidebar } from './content-sidebar';\nexport { default as ContentSharing } from './content-sharing';\n"],"mappings":"AACA;AACA,SAASA,OAAO,IAAIC,eAAe,QAAQ,oBAAoB;AAC/D,SAASD,OAAO,IAAIE,cAAc,QAAQ,mBAAmB;AAC7D,SAASF,OAAO,IAAIG,aAAa,EAAEC,kBAAkB,QAAQ,kBAAkB;AAC/E;AACA,SAASJ,OAAO,IAAIK,eAAe,EAAEC,oBAAoB,QAAQ,oBAAoB;AACrF,SAASN,OAAO,IAAIO,eAAe,QAAQ,qBAAqB;AAChE,SAASP,OAAO,IAAIQ,cAAc,QAAQ,mBAAmB;AAC7D,SAASR,OAAO,IAAIS,cAAc,QAAQ,mBAAmB","ignoreList":[]}
@@ -16,7 +16,9 @@ import * as React from 'react';
16
16
  // eslint-disable-next-line react/no-deprecated
17
17
  import { render } from 'react-dom';
18
18
  import ES6Wrapper from './ES6Wrapper';
19
+ // $FlowFixMe
19
20
  import ContentUploaderPopup from '../content-uploader/ContentUploaderPopup';
21
+ // $FlowFixMe
20
22
  import WrappedContentUploaderComponent from '../content-uploader/ContentUploader';
21
23
  class ContentUploader extends ES6Wrapper {
22
24
  constructor(...args) {
@@ -9,7 +9,9 @@ import * as React from 'react';
9
9
  // eslint-disable-next-line react/no-deprecated
10
10
  import { render } from 'react-dom';
11
11
  import ES6Wrapper from './ES6Wrapper';
12
+ // $FlowFixMe
12
13
  import ContentUploaderPopup from '../content-uploader/ContentUploaderPopup';
14
+ // $FlowFixMe
13
15
  import WrappedContentUploaderComponent from '../content-uploader/ContentUploader';
14
16
  import type { UploadFileWithAPIOptions } from '../../common/types/upload';
15
17
  import type { BoxItem } from '../../common/types/core';
@@ -1 +1 @@
1
- {"version":3,"file":"ContentUploader.js","names":["React","render","ES6Wrapper","ContentUploaderPopup","WrappedContentUploaderComponent","ContentUploader","constructor","args","_defineProperty","emit","data","_this$options","options","modal","rest","_objectWithoutProperties","_excluded","UploaderComponent","createElement","_extends","language","messages","componentRef","setComponent","rootFolderId","id","token","onClose","onComplete","onError","onBeforeUpload","onUpload","container","global","Box"],"sources":["../../../src/elements/wrappers/ContentUploader.js"],"sourcesContent":["/**\n * @flow\n * @file Base class for the Content Uploader ES6 wrapper\n * @author Box\n */\n\nimport * as React from 'react';\n// TODO switch to createRoot when upgrading to React 18\n// eslint-disable-next-line react/no-deprecated\nimport { render } from 'react-dom';\nimport ES6Wrapper from './ES6Wrapper';\nimport ContentUploaderPopup from '../content-uploader/ContentUploaderPopup';\nimport WrappedContentUploaderComponent from '../content-uploader/ContentUploader';\nimport type { UploadFileWithAPIOptions } from '../../common/types/upload';\nimport type { BoxItem } from '../../common/types/core';\nimport type { ModalOptions } from '../common/flowTypes';\n\nclass ContentUploader extends ES6Wrapper {\n /**\n * Callback on closing uploader. Emits 'close' event.\n *\n * @return {void}\n */\n onClose = (): void => {\n this.emit('close');\n };\n\n /**\n * Callback when all files finish uploading. Emits 'complete' event with Box File objects of uploaded items as data.\n *\n * @param {Array} data - Completed upload items\n * @return {void}\n */\n onComplete = (data: BoxItem[]): void => {\n this.emit('complete', data);\n };\n\n /**\n * Callback on a single upload error. Emits 'uploaderror' event with information about the failed upload.\n *\n * @param {Object} data - File and error info about failed upload\n * @return {void}\n */\n onError = (data: any): void => {\n this.emit('error', data);\n };\n\n /**\n * Callback on a single pre-uploaded file. Emits 'beforeupload' event with the Box File object pre-upload.\n *\n * @param {Object} data - Upload item\n * @return {void}\n */\n onBeforeUpload = (data: UploadFileWithAPIOptions | File): void => {\n this.emit('beforeupload', data);\n };\n\n /**\n * Callback on a single successful upload. Emits 'uploadsuccess' event with Box File object of uploaded item.\n *\n * @param {BoxItem} data - Successfully uploaded item\n * @return {void}\n */\n onUpload = (data: BoxItem): void => {\n this.emit('upload', data);\n };\n\n /** @inheritdoc */\n render() {\n const { modal, ...rest }: { modal?: ModalOptions } = this.options;\n const UploaderComponent = modal ? ContentUploaderPopup : WrappedContentUploaderComponent;\n\n render(\n <UploaderComponent\n language={this.language}\n messages={this.messages}\n componentRef={this.setComponent}\n rootFolderId={this.id}\n token={this.token}\n onClose={this.onClose}\n onComplete={this.onComplete}\n onError={this.onError}\n onBeforeUpload={this.onBeforeUpload}\n onUpload={this.onUpload}\n modal={((modal: any): ModalOptions)}\n {...rest}\n />,\n this.container,\n );\n }\n}\n\nglobal.Box = global.Box || {};\nglobal.Box.ContentUploader = ContentUploader;\nexport default ContentUploader;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B;AACA;AACA,SAASC,MAAM,QAAQ,WAAW;AAClC,OAAOC,UAAU,MAAM,cAAc;AACrC,OAAOC,oBAAoB,MAAM,0CAA0C;AAC3E,OAAOC,+BAA+B,MAAM,qCAAqC;AAKjF,MAAMC,eAAe,SAASH,UAAU,CAAC;EAAAI,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IACrC;AACJ;AACA;AACA;AACA;IAJIC,eAAA,kBAKU,MAAY;MAClB,IAAI,CAACC,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALID,eAAA,qBAMcE,IAAe,IAAW;MACpC,IAAI,CAACD,IAAI,CAAC,UAAU,EAAEC,IAAI,CAAC;IAC/B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,kBAMWE,IAAS,IAAW;MAC3B,IAAI,CAACD,IAAI,CAAC,OAAO,EAAEC,IAAI,CAAC;IAC5B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,yBAMkBE,IAAqC,IAAW;MAC9D,IAAI,CAACD,IAAI,CAAC,cAAc,EAAEC,IAAI,CAAC;IACnC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,mBAMYE,IAAa,IAAW;MAChC,IAAI,CAACD,IAAI,CAAC,QAAQ,EAAEC,IAAI,CAAC;IAC7B,CAAC;EAAA;EAED;EACAT,MAAMA,CAAA,EAAG;IACL,MAAAU,aAAA,GAAqD,IAAI,CAACC,OAAO;MAA3D;QAAEC;MAAyC,CAAC,GAAAF,aAAA;MAAhCG,IAAI,GAAAC,wBAAA,CAAAJ,aAAA,EAAAK,SAAA;IACtB,MAAMC,iBAAiB,GAAGJ,KAAK,GAAGV,oBAAoB,GAAGC,+BAA+B;IAExFH,MAAM,eACFD,KAAA,CAAAkB,aAAA,CAACD,iBAAiB,EAAAE,QAAA;MACdC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBC,YAAY,EAAE,IAAI,CAACC,YAAa;MAChCC,YAAY,EAAE,IAAI,CAACC,EAAG;MACtBC,KAAK,EAAE,IAAI,CAACA,KAAM;MAClBC,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBC,UAAU,EAAE,IAAI,CAACA,UAAW;MAC5BC,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBC,cAAc,EAAE,IAAI,CAACA,cAAe;MACpCC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBlB,KAAK,EAAIA;IAA2B,GAChCC,IAAI,CACX,CAAC,EACF,IAAI,CAACkB,SACT,CAAC;EACL;AACJ;AAEAC,MAAM,CAACC,GAAG,GAAGD,MAAM,CAACC,GAAG,IAAI,CAAC,CAAC;AAC7BD,MAAM,CAACC,GAAG,CAAC7B,eAAe,GAAGA,eAAe;AAC5C,eAAeA,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"ContentUploader.js","names":["React","render","ES6Wrapper","ContentUploaderPopup","WrappedContentUploaderComponent","ContentUploader","constructor","args","_defineProperty","emit","data","_this$options","options","modal","rest","_objectWithoutProperties","_excluded","UploaderComponent","createElement","_extends","language","messages","componentRef","setComponent","rootFolderId","id","token","onClose","onComplete","onError","onBeforeUpload","onUpload","container","global","Box"],"sources":["../../../src/elements/wrappers/ContentUploader.js"],"sourcesContent":["/**\n * @flow\n * @file Base class for the Content Uploader ES6 wrapper\n * @author Box\n */\n\nimport * as React from 'react';\n// TODO switch to createRoot when upgrading to React 18\n// eslint-disable-next-line react/no-deprecated\nimport { render } from 'react-dom';\nimport ES6Wrapper from './ES6Wrapper';\n// $FlowFixMe\nimport ContentUploaderPopup from '../content-uploader/ContentUploaderPopup';\n// $FlowFixMe\nimport WrappedContentUploaderComponent from '../content-uploader/ContentUploader';\nimport type { UploadFileWithAPIOptions } from '../../common/types/upload';\nimport type { BoxItem } from '../../common/types/core';\nimport type { ModalOptions } from '../common/flowTypes';\n\nclass ContentUploader extends ES6Wrapper {\n /**\n * Callback on closing uploader. Emits 'close' event.\n *\n * @return {void}\n */\n onClose = (): void => {\n this.emit('close');\n };\n\n /**\n * Callback when all files finish uploading. Emits 'complete' event with Box File objects of uploaded items as data.\n *\n * @param {Array} data - Completed upload items\n * @return {void}\n */\n onComplete = (data: BoxItem[]): void => {\n this.emit('complete', data);\n };\n\n /**\n * Callback on a single upload error. Emits 'uploaderror' event with information about the failed upload.\n *\n * @param {Object} data - File and error info about failed upload\n * @return {void}\n */\n onError = (data: any): void => {\n this.emit('error', data);\n };\n\n /**\n * Callback on a single pre-uploaded file. Emits 'beforeupload' event with the Box File object pre-upload.\n *\n * @param {Object} data - Upload item\n * @return {void}\n */\n onBeforeUpload = (data: UploadFileWithAPIOptions | File): void => {\n this.emit('beforeupload', data);\n };\n\n /**\n * Callback on a single successful upload. Emits 'uploadsuccess' event with Box File object of uploaded item.\n *\n * @param {BoxItem} data - Successfully uploaded item\n * @return {void}\n */\n onUpload = (data: BoxItem): void => {\n this.emit('upload', data);\n };\n\n /** @inheritdoc */\n render() {\n const { modal, ...rest }: { modal?: ModalOptions } = this.options;\n const UploaderComponent = modal ? ContentUploaderPopup : WrappedContentUploaderComponent;\n\n render(\n <UploaderComponent\n language={this.language}\n messages={this.messages}\n componentRef={this.setComponent}\n rootFolderId={this.id}\n token={this.token}\n onClose={this.onClose}\n onComplete={this.onComplete}\n onError={this.onError}\n onBeforeUpload={this.onBeforeUpload}\n onUpload={this.onUpload}\n modal={((modal: any): ModalOptions)}\n {...rest}\n />,\n this.container,\n );\n }\n}\n\nglobal.Box = global.Box || {};\nglobal.Box.ContentUploader = ContentUploader;\nexport default ContentUploader;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B;AACA;AACA,SAASC,MAAM,QAAQ,WAAW;AAClC,OAAOC,UAAU,MAAM,cAAc;AACrC;AACA,OAAOC,oBAAoB,MAAM,0CAA0C;AAC3E;AACA,OAAOC,+BAA+B,MAAM,qCAAqC;AAKjF,MAAMC,eAAe,SAASH,UAAU,CAAC;EAAAI,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IACrC;AACJ;AACA;AACA;AACA;IAJIC,eAAA,kBAKU,MAAY;MAClB,IAAI,CAACC,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALID,eAAA,qBAMcE,IAAe,IAAW;MACpC,IAAI,CAACD,IAAI,CAAC,UAAU,EAAEC,IAAI,CAAC;IAC/B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,kBAMWE,IAAS,IAAW;MAC3B,IAAI,CAACD,IAAI,CAAC,OAAO,EAAEC,IAAI,CAAC;IAC5B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,yBAMkBE,IAAqC,IAAW;MAC9D,IAAI,CAACD,IAAI,CAAC,cAAc,EAAEC,IAAI,CAAC;IACnC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIF,eAAA,mBAMYE,IAAa,IAAW;MAChC,IAAI,CAACD,IAAI,CAAC,QAAQ,EAAEC,IAAI,CAAC;IAC7B,CAAC;EAAA;EAED;EACAT,MAAMA,CAAA,EAAG;IACL,MAAAU,aAAA,GAAqD,IAAI,CAACC,OAAO;MAA3D;QAAEC;MAAyC,CAAC,GAAAF,aAAA;MAAhCG,IAAI,GAAAC,wBAAA,CAAAJ,aAAA,EAAAK,SAAA;IACtB,MAAMC,iBAAiB,GAAGJ,KAAK,GAAGV,oBAAoB,GAAGC,+BAA+B;IAExFH,MAAM,eACFD,KAAA,CAAAkB,aAAA,CAACD,iBAAiB,EAAAE,QAAA;MACdC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBC,YAAY,EAAE,IAAI,CAACC,YAAa;MAChCC,YAAY,EAAE,IAAI,CAACC,EAAG;MACtBC,KAAK,EAAE,IAAI,CAACA,KAAM;MAClBC,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBC,UAAU,EAAE,IAAI,CAACA,UAAW;MAC5BC,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBC,cAAc,EAAE,IAAI,CAACA,cAAe;MACpCC,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBlB,KAAK,EAAIA;IAA2B,GAChCC,IAAI,CACX,CAAC,EACF,IAAI,CAACkB,SACT,CAAC;EACL;AACJ;AAEAC,MAAM,CAACC,GAAG,GAAGD,MAAM,CAACC,GAAG,IAAI,CAAC,CAAC;AAC7BD,MAAM,CAACC,GAAG,CAAC7B,eAAe,GAAGA,eAAe;AAC5C,eAAeA,eAAe","ignoreList":[]}
@@ -9,7 +9,7 @@ import IntegerMetadataField from './IntegerMetadataField';
9
9
  import MultiSelectMetadataField from './MultiSelectMetadataField';
10
10
  import ReadOnlyMetadataField from './ReadOnlyMetadataField';
11
11
  import messages from './messages';
12
- import { FIELD_TYPE_ENUM, FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER, FIELD_TYPE_STRING, FIELD_TYPE_DATE, FIELD_TYPE_MULTISELECT } from './constants';
12
+ import { FIELD_TYPE_ENUM, FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER, FIELD_TYPE_STRING, FIELD_TYPE_DATE, FIELD_TYPE_MULTISELECT, FIELD_TYPE_TAXONOMY } from './constants';
13
13
  const MetadataField = ({
14
14
  blurExceptionClassNames,
15
15
  dataKey,
@@ -108,6 +108,17 @@ const MetadataField = ({
108
108
  onChange: onChange,
109
109
  onRemove: onRemove
110
110
  });
111
+
112
+ // The taxonomy field is a valid field type which,
113
+ // although not yet supported here, should not trigger an error message.
114
+ // For this reason, we are currently setting it to read-only.
115
+ case FIELD_TYPE_TAXONOMY:
116
+ return /*#__PURE__*/React.createElement(ReadOnlyMetadataField, {
117
+ dataValue: dataValue,
118
+ description: description,
119
+ displayName: displayName,
120
+ type: type
121
+ });
111
122
  default:
112
123
  return /*#__PURE__*/React.createElement(InlineError, {
113
124
  title: type
@@ -21,6 +21,7 @@ import {
21
21
  FIELD_TYPE_STRING,
22
22
  FIELD_TYPE_DATE,
23
23
  FIELD_TYPE_MULTISELECT,
24
+ FIELD_TYPE_TAXONOMY,
24
25
  } from './constants';
25
26
 
26
27
  type Props = {
@@ -160,6 +161,19 @@ const MetadataField = ({
160
161
  />
161
162
  );
162
163
 
164
+ // The taxonomy field is a valid field type which,
165
+ // although not yet supported here, should not trigger an error message.
166
+ // For this reason, we are currently setting it to read-only.
167
+ case FIELD_TYPE_TAXONOMY:
168
+ return (
169
+ <ReadOnlyMetadataField
170
+ dataValue={dataValue}
171
+ description={description}
172
+ displayName={displayName}
173
+ type={type}
174
+ />
175
+ );
176
+
163
177
  default:
164
178
  return (
165
179
  <InlineError title={type}>
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataField.js","names":["React","FormattedMessage","InlineError","TextMetadataField","EnumMetadataField","DateMetadataField","FloatMetadataField","IntegerMetadataField","MultiSelectMetadataField","ReadOnlyMetadataField","messages","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","FIELD_TYPE_STRING","FIELD_TYPE_DATE","FIELD_TYPE_MULTISELECT","MetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","error","isDisabled","isHidden","canEdit","onChange","onRemove","options","type","createElement","Error","title","invalidMetadataFieldType"],"sources":["../../../src/features/metadata-instance-fields/MetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport InlineError from '../../components/inline-error/InlineError';\n\nimport TextMetadataField from './TextMetadataField';\nimport EnumMetadataField from './EnumMetadataField';\nimport DateMetadataField from './DateMetadataField';\nimport FloatMetadataField from './FloatMetadataField';\nimport IntegerMetadataField from './IntegerMetadataField';\nimport MultiSelectMetadataField from './MultiSelectMetadataField';\nimport ReadOnlyMetadataField from './ReadOnlyMetadataField';\nimport messages from './messages';\nimport type { MetadataFieldValue, MetadataTemplateFieldOption, MetadataFieldType } from '../../common/types/metadata';\n\nimport {\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_INTEGER,\n FIELD_TYPE_STRING,\n FIELD_TYPE_DATE,\n FIELD_TYPE_MULTISELECT,\n} from './constants';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canEdit: boolean,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n error?: React.Node,\n isDisabled?: boolean,\n isHidden?: boolean,\n onChange?: (key: string, value: MetadataFieldValue) => void,\n onRemove?: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n type: MetadataFieldType,\n};\n\nconst MetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n error,\n isDisabled,\n isHidden,\n canEdit,\n onChange,\n onRemove,\n options,\n type,\n}: Props) => {\n if (isHidden) {\n return null;\n }\n\n if (!canEdit) {\n return (\n <ReadOnlyMetadataField\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n type={type}\n />\n );\n }\n\n if (!onChange || !onRemove) {\n throw new Error('Need to have onChange and onRemove');\n }\n\n switch (type) {\n case FIELD_TYPE_STRING:\n return (\n <TextMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n case FIELD_TYPE_FLOAT:\n return (\n <FloatMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_INTEGER:\n return (\n <IntegerMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_ENUM:\n return (\n <EnumMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_MULTISELECT:\n return (\n <MultiSelectMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_DATE:\n return (\n <DateMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n default:\n return (\n <InlineError title={type}>\n <FormattedMessage {...messages.invalidMetadataFieldType} />\n </InlineError>\n );\n }\n};\n\nexport default MetadataField;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetadataField.js","names":["React","FormattedMessage","InlineError","TextMetadataField","EnumMetadataField","DateMetadataField","FloatMetadataField","IntegerMetadataField","MultiSelectMetadataField","ReadOnlyMetadataField","messages","FIELD_TYPE_ENUM","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","FIELD_TYPE_STRING","FIELD_TYPE_DATE","FIELD_TYPE_MULTISELECT","FIELD_TYPE_TAXONOMY","MetadataField","blurExceptionClassNames","dataKey","dataValue","displayName","description","error","isDisabled","isHidden","canEdit","onChange","onRemove","options","type","createElement","Error","title","invalidMetadataFieldType"],"sources":["../../../src/features/metadata-instance-fields/MetadataField.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport InlineError from '../../components/inline-error/InlineError';\n\nimport TextMetadataField from './TextMetadataField';\nimport EnumMetadataField from './EnumMetadataField';\nimport DateMetadataField from './DateMetadataField';\nimport FloatMetadataField from './FloatMetadataField';\nimport IntegerMetadataField from './IntegerMetadataField';\nimport MultiSelectMetadataField from './MultiSelectMetadataField';\nimport ReadOnlyMetadataField from './ReadOnlyMetadataField';\nimport messages from './messages';\nimport type { MetadataFieldValue, MetadataTemplateFieldOption, MetadataFieldType } from '../../common/types/metadata';\n\nimport {\n FIELD_TYPE_ENUM,\n FIELD_TYPE_FLOAT,\n FIELD_TYPE_INTEGER,\n FIELD_TYPE_STRING,\n FIELD_TYPE_DATE,\n FIELD_TYPE_MULTISELECT,\n FIELD_TYPE_TAXONOMY,\n} from './constants';\n\ntype Props = {\n blurExceptionClassNames?: Array<string>,\n canEdit: boolean,\n dataKey: string,\n dataValue?: MetadataFieldValue,\n description?: string,\n displayName: string,\n error?: React.Node,\n isDisabled?: boolean,\n isHidden?: boolean,\n onChange?: (key: string, value: MetadataFieldValue) => void,\n onRemove?: (key: string) => void,\n options?: Array<MetadataTemplateFieldOption>,\n type: MetadataFieldType,\n};\n\nconst MetadataField = ({\n blurExceptionClassNames,\n dataKey,\n dataValue,\n displayName,\n description,\n error,\n isDisabled,\n isHidden,\n canEdit,\n onChange,\n onRemove,\n options,\n type,\n}: Props) => {\n if (isHidden) {\n return null;\n }\n\n if (!canEdit) {\n return (\n <ReadOnlyMetadataField\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n type={type}\n />\n );\n }\n\n if (!onChange || !onRemove) {\n throw new Error('Need to have onChange and onRemove');\n }\n\n switch (type) {\n case FIELD_TYPE_STRING:\n return (\n <TextMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n case FIELD_TYPE_FLOAT:\n return (\n <FloatMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_INTEGER:\n return (\n <IntegerMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n error={error}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n type={type}\n />\n );\n\n case FIELD_TYPE_ENUM:\n return (\n <EnumMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_MULTISELECT:\n return (\n <MultiSelectMetadataField\n blurExceptionClassNames={blurExceptionClassNames}\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n options={options}\n />\n );\n\n case FIELD_TYPE_DATE:\n return (\n <DateMetadataField\n dataKey={dataKey}\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n isDisabled={isDisabled}\n onChange={onChange}\n onRemove={onRemove}\n />\n );\n\n // The taxonomy field is a valid field type which,\n // although not yet supported here, should not trigger an error message.\n // For this reason, we are currently setting it to read-only.\n case FIELD_TYPE_TAXONOMY:\n return (\n <ReadOnlyMetadataField\n dataValue={dataValue}\n description={description}\n displayName={displayName}\n type={type}\n />\n );\n\n default:\n return (\n <InlineError title={type}>\n <FormattedMessage {...messages.invalidMetadataFieldType} />\n </InlineError>\n );\n }\n};\n\nexport default MetadataField;\n"],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@ interface DataFetcher {
14
14
  clearExtractError: () => void;
15
15
  errorMessage: MessageDescriptor | null;
16
16
  extractErrorCode: ERROR_CODE_METADATA_AUTOFILL_TIMEOUT | ERROR_CODE_METADATA_PRECONDITION_FAILED | ERROR_CODE_UNKNOWN | null;
17
- extractSuggestions: (templateKey: string, scope: string) => Promise<MetadataTemplateField[]>;
17
+ extractSuggestions: (templateKey: string, scope: string, agentId?: string) => Promise<MetadataTemplateField[]>;
18
18
  file: BoxItem | null;
19
19
  handleCreateMetadataInstance: (templateInstance: MetadataTemplateInstance, successCallback: () => void) => Promise<void>;
20
20
  handleDeleteMetadataInstance: (metadataInstance: MetadataTemplateInstance) => Promise<void>;
package/i18n/ja-JP.js CHANGED
@@ -906,8 +906,8 @@ export default {
906
906
  "boxui.shareMenu.shortcutOnly": "ショートカットのみ",
907
907
  "boxui.shareMenu.viewAndDownload": "表示とダウンロード",
908
908
  "boxui.shareMenu.viewOnly": "表示のみ",
909
- "boxui.timeInput.emptyTimeError": "必須フィールドです。HH:MM A形式で時間を入力してください。",
910
- "boxui.timeInput.invalidTimeError": "時間の形式が無効です。HH:MM A形式で時間を入力してください。",
909
+ "boxui.timeInput.emptyTimeError": "必須フィールドです。HH:MM AM/PM形式で時間を入力してください。",
910
+ "boxui.timeInput.invalidTimeError": "時間の形式が無効です。HH:MM AM/PM形式で時間を入力してください。",
911
911
  "boxui.unifiedShare.collabAccess": "コラボレータのアクセス権限",
912
912
  "boxui.unifiedShare.collaboration.groupCollabText": "グループ",
913
913
  "boxui.unifiedShare.collaboration.userCollabText": "ユーザー",
@@ -1813,9 +1813,9 @@ boxui.shareMenu.viewAndDownload = 表示とダウンロード
1813
1813
  # Description of permissions granted to users who have access to the shared link
1814
1814
  boxui.shareMenu.viewOnly = 表示のみ
1815
1815
  # Error message for empty time formats. "HH:MM A" should be localized.
1816
- boxui.timeInput.emptyTimeError = 必須フィールドです。HH:MM A形式で時間を入力してください。
1816
+ boxui.timeInput.emptyTimeError = 必須フィールドです。HH:MM AM/PM形式で時間を入力してください。
1817
1817
  # Error message for invalid time formats. "HH:MM A" should be localized.
1818
- boxui.timeInput.invalidTimeError = 時間の形式が無効です。HH:MM A形式で時間を入力してください。
1818
+ boxui.timeInput.invalidTimeError = 時間の形式が無効です。HH:MM AM/PM形式で時間を入力してください。
1819
1819
  # Used in a dialog box that urges the user to upgrade. This is substituted into the middle of the sentence in the string with id boxui.unifiedShare.levelOfCollabAccess
1820
1820
  boxui.unifiedShare.collabAccess = コラボレータのアクセス権限
1821
1821
  # Text to display for a group of users who have accepted an invitation to collaborate
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "box-ui-elements",
3
- "version": "23.4.0-beta.12",
3
+ "version": "23.4.0-beta.14",
4
4
  "description": "Box UI Elements",
5
5
  "author": "Box (https://www.box.com/)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -124,7 +124,7 @@
124
124
  "@babel/template": "^7.24.7",
125
125
  "@babel/types": "^7.24.7",
126
126
  "@box/blueprint-web": "^12.7.1",
127
- "@box/blueprint-web-assets": "^4.48.4",
127
+ "@box/blueprint-web-assets": "^4.53.0",
128
128
  "@box/box-ai-agent-selector": "^0.41.10",
129
129
  "@box/box-ai-content-answers": "^0.124.1",
130
130
  "@box/cldr-data": "^34.2.0",
@@ -132,7 +132,7 @@
132
132
  "@box/frontend": "^11.0.1",
133
133
  "@box/item-icon": "^0.9.83",
134
134
  "@box/languages": "^1.0.0",
135
- "@box/metadata-editor": "^0.110.1",
135
+ "@box/metadata-editor": "^0.112.0",
136
136
  "@box/react-virtualized": "9.22.3-rc-box.9",
137
137
  "@cfaester/enzyme-adapter-react-18": "^0.8.0",
138
138
  "@chromatic-com/storybook": "^1.6.1",
@@ -296,13 +296,13 @@
296
296
  },
297
297
  "peerDependencies": {
298
298
  "@box/blueprint-web": "^12.7.1",
299
- "@box/blueprint-web-assets": "^4.48.4",
299
+ "@box/blueprint-web-assets": "^4.53.0",
300
300
  "@box/box-ai-agent-selector": "^0.41.10",
301
301
  "@box/box-ai-content-answers": "^0.124.1",
302
302
  "@box/cldr-data": ">=34.2.0",
303
303
  "@box/combobox-with-api": "^0.34.9",
304
304
  "@box/item-icon": "^0.9.83",
305
- "@box/metadata-editor": "^0.110.1",
305
+ "@box/metadata-editor": "^0.112.0",
306
306
  "@box/react-virtualized": "9.22.3-rc-box.9",
307
307
  "@hapi/address": "^2.1.4",
308
308
  "axios": "^0.30.0",
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @flow
3
+ * @author Box
4
+ */
5
+
6
+ export type AiAgentTypeField = 'ai_agent_id';
7
+
8
+ export interface AiAgentReference {
9
+ /**
10
+ * AI Agent Reference to pass custom AI Agent ID to requests.
11
+ * See https://developer.box.com/reference/resources/ai-agent-reference/
12
+ */
13
+ +type: AiAgentTypeField;
14
+ +id: string;
15
+ }
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { AiAgentExtractStructured } from './AiAgentExtractStructured';
7
+ import { AiAgentReference } from './AiAgentReference';
7
8
  import { AiItemBase } from './AiItemBase';
8
9
 
9
10
  export type AiExtractStructuredMetadataTemplateTypeField = 'metadata_template';
@@ -80,5 +81,10 @@ export interface AiExtractStructured {
80
81
  * The JSON blob that contains overrides for the agent config.
81
82
  */
82
83
  +agent_config?: string;
83
- +ai_agent?: AiAgentExtractStructured;
84
+ /**
85
+ * * AI agent definition to use for extraction.
86
+ * – `AiAgentExtractStructured`: customise Basic-Text / Long-Text agents
87
+ * – `AiAgentReference` : reference a custom AI-Agent by ID
88
+ */
89
+ +ai_agent?: AiAgentExtractStructured | AiAgentReference;
84
90
  }
@@ -8,6 +8,7 @@ import * as React from 'react';
8
8
  import Modal from 'react-modal';
9
9
  import { injectIntl } from 'react-intl';
10
10
  import type { IntlShape } from 'react-intl';
11
+ // $FlowFixMe
11
12
  import ContentUploader from '../../content-uploader';
12
13
  import messages from '../messages';
13
14
  import { CLASS_MODAL_CONTENT_FULL_BLEED, CLASS_MODAL_OVERLAY, CLASS_MODAL } from '../../../constants';