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.
- package/dist/explorer.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.css +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/api/schemas/AiAgentReference.js +2 -0
- package/es/api/schemas/AiAgentReference.js.flow +15 -0
- package/es/api/schemas/AiAgentReference.js.map +1 -0
- package/es/api/schemas/AiExtractStructured.js +1 -0
- package/es/api/schemas/AiExtractStructured.js.flow +7 -1
- package/es/api/schemas/AiExtractStructured.js.map +1 -1
- package/es/elements/common/upload-dialog/UploadDialog.js +1 -0
- package/es/elements/common/upload-dialog/UploadDialog.js.flow +1 -0
- package/es/elements/common/upload-dialog/UploadDialog.js.map +1 -1
- package/es/elements/content-sidebar/hooks/useSidebarMetadataFetcher.js +19 -12
- package/es/elements/content-sidebar/hooks/useSidebarMetadataFetcher.js.map +1 -1
- package/es/elements/index.js +1 -0
- package/es/elements/index.js.flow +1 -0
- package/es/elements/index.js.map +1 -1
- package/es/elements/wrappers/ContentUploader.js +2 -0
- package/es/elements/wrappers/ContentUploader.js.flow +2 -0
- package/es/elements/wrappers/ContentUploader.js.map +1 -1
- package/es/features/metadata-instance-fields/MetadataField.js +12 -1
- package/es/features/metadata-instance-fields/MetadataField.js.flow +14 -0
- package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
- package/es/src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.d.ts +1 -1
- package/i18n/ja-JP.js +2 -2
- package/i18n/ja-JP.properties +2 -2
- package/package.json +5 -5
- package/src/api/schemas/AiAgentReference.js +15 -0
- package/src/api/schemas/AiExtractStructured.js +7 -1
- package/src/elements/common/upload-dialog/UploadDialog.js +1 -0
- package/src/elements/content-sidebar/__tests__/useSidebarMetadataFetcher.test.tsx +58 -0
- package/src/elements/content-sidebar/hooks/useSidebarMetadataFetcher.ts +11 -7
- package/src/elements/index.js +1 -0
- package/src/elements/wrappers/ContentUploader.js +2 -0
- package/src/features/metadata-instance-fields/MetadataField.js +14 -0
- package/src/features/metadata-instance-fields/__tests__/MetadataField.test.js +6 -0
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/MetadataField.test.js.snap +7 -0
- package/es/elements/content-uploader/ContentUploader.js.flow +0 -1322
- package/es/elements/content-uploader/ContentUploaderPopup.js.flow +0 -11
- package/es/elements/content-uploader/DroppableContent.js.flow +0 -82
- package/es/elements/content-uploader/Footer.js.flow +0 -63
- package/es/elements/content-uploader/IconName.js.flow +0 -45
- package/es/elements/content-uploader/ItemAction.js.flow +0 -128
- package/es/elements/content-uploader/ItemList.js.flow +0 -79
- package/es/elements/content-uploader/ItemRemove.js.flow +0 -51
- package/es/elements/content-uploader/OverallUploadsProgressBar.js.flow +0 -111
- package/es/elements/content-uploader/ProgressBar.js.flow +0 -65
- package/es/elements/content-uploader/UploadInput.js.flow +0 -50
- package/es/elements/content-uploader/UploadState.js.flow +0 -114
- package/es/elements/content-uploader/UploadStateContent.js.flow +0 -71
- package/es/elements/content-uploader/UploadsManager.js.flow +0 -111
- package/es/elements/content-uploader/UploadsManagerAction.js.flow +0 -36
- package/es/elements/content-uploader/actionCellRenderer.js.flow +0 -18
- package/es/elements/content-uploader/index.js.flow +0 -4
- package/es/elements/content-uploader/nameCellRenderer.js.flow +0 -13
- package/es/elements/content-uploader/progressCellRenderer.js.flow +0 -81
- package/es/elements/content-uploader/removeCellRenderer.js.flow +0 -16
- package/src/elements/content-uploader/ContentUploader.js.flow +0 -1322
- package/src/elements/content-uploader/ContentUploaderPopup.js.flow +0 -11
- package/src/elements/content-uploader/DroppableContent.js.flow +0 -82
- package/src/elements/content-uploader/Footer.js.flow +0 -63
- package/src/elements/content-uploader/IconName.js.flow +0 -45
- package/src/elements/content-uploader/ItemAction.js.flow +0 -128
- package/src/elements/content-uploader/ItemList.js.flow +0 -79
- package/src/elements/content-uploader/ItemRemove.js.flow +0 -51
- package/src/elements/content-uploader/OverallUploadsProgressBar.js.flow +0 -111
- package/src/elements/content-uploader/ProgressBar.js.flow +0 -65
- package/src/elements/content-uploader/UploadInput.js.flow +0 -50
- package/src/elements/content-uploader/UploadState.js.flow +0 -114
- package/src/elements/content-uploader/UploadStateContent.js.flow +0 -71
- package/src/elements/content-uploader/UploadsManager.js.flow +0 -111
- package/src/elements/content-uploader/UploadsManagerAction.js.flow +0 -36
- package/src/elements/content-uploader/actionCellRenderer.js.flow +0 -18
- package/src/elements/content-uploader/index.js.flow +0 -4
- package/src/elements/content-uploader/nameCellRenderer.js.flow +0 -13
- package/src/elements/content-uploader/progressCellRenderer.js.flow +0 -81
- package/src/elements/content-uploader/removeCellRenderer.js.flow +0 -16
|
@@ -36,6 +36,7 @@ const mockPreconditionFailedError = {
|
|
|
36
36
|
const mockFile = {
|
|
37
37
|
id: '123',
|
|
38
38
|
permissions: { [FIELD_PERMISSIONS_CAN_UPLOAD]: true },
|
|
39
|
+
type: 'file',
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
const mockTemplates = [
|
|
@@ -423,5 +424,62 @@ describe('useSidebarMetadataFetcher', () => {
|
|
|
423
424
|
}),
|
|
424
425
|
);
|
|
425
426
|
});
|
|
427
|
+
|
|
428
|
+
test('should call extractStructured with custom AI agent ID', async () => {
|
|
429
|
+
const { result } = setupHook();
|
|
430
|
+
const agentId = 'custom-agent-123';
|
|
431
|
+
|
|
432
|
+
await result.current.extractSuggestions('templateKey', 'global', agentId);
|
|
433
|
+
|
|
434
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith({
|
|
435
|
+
items: [{ id: mockFile.id, type: mockFile.type }],
|
|
436
|
+
metadata_template: { template_key: 'templateKey', scope: 'global', type: 'metadata_template' },
|
|
437
|
+
ai_agent: { type: 'ai_agent_id', id: agentId },
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
test('should not call extractStructured with custom AI agent ID', async () => {
|
|
442
|
+
const { result } = setupHook();
|
|
443
|
+
|
|
444
|
+
await result.current.extractSuggestions('templateKey', 'global');
|
|
445
|
+
|
|
446
|
+
// Assert that ai_agent is NOT present
|
|
447
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith(
|
|
448
|
+
expect.not.objectContaining({
|
|
449
|
+
ai_agent: expect.anything(),
|
|
450
|
+
}),
|
|
451
|
+
);
|
|
452
|
+
// Also verify what IS present
|
|
453
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith({
|
|
454
|
+
items: [{ id: mockFile.id, type: mockFile.type }],
|
|
455
|
+
metadata_template: { template_key: 'templateKey', scope: 'global', type: 'metadata_template' },
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
test('should handle undefined agentIDs', async () => {
|
|
460
|
+
const { result } = setupHook();
|
|
461
|
+
|
|
462
|
+
await result.current.extractSuggestions('templateKey', 'global', undefined);
|
|
463
|
+
|
|
464
|
+
// Assert that ai_agent is NOT present
|
|
465
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith(
|
|
466
|
+
expect.not.objectContaining({
|
|
467
|
+
ai_agent: expect.anything(),
|
|
468
|
+
}),
|
|
469
|
+
);
|
|
470
|
+
// Also verify what IS present
|
|
471
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith({
|
|
472
|
+
items: [{ id: mockFile.id, type: mockFile.type }],
|
|
473
|
+
metadata_template: { template_key: 'templateKey', scope: 'global', type: 'metadata_template' },
|
|
474
|
+
});
|
|
475
|
+
mockAPI.extractStructured.mockClear();
|
|
476
|
+
|
|
477
|
+
await result.current.extractSuggestions('templateKey', 'global', '');
|
|
478
|
+
expect(mockAPI.extractStructured).toHaveBeenCalledWith(
|
|
479
|
+
expect.not.objectContaining({
|
|
480
|
+
ai_agent: expect.anything(),
|
|
481
|
+
}),
|
|
482
|
+
);
|
|
483
|
+
});
|
|
426
484
|
});
|
|
427
485
|
});
|
|
@@ -29,6 +29,7 @@ import messages from '../../common/messages';
|
|
|
29
29
|
|
|
30
30
|
import { type BoxItem } from '../../../common/types/core';
|
|
31
31
|
import { type ErrorContextProps, type ExternalProps, type SuccessContextProps } from '../MetadataSidebarRedesign';
|
|
32
|
+
import { type AiExtractStructured } from '../../../api/schemas/AiExtractStructured';
|
|
32
33
|
|
|
33
34
|
export enum STATUS {
|
|
34
35
|
IDLE = 'idle',
|
|
@@ -45,7 +46,7 @@ interface DataFetcher {
|
|
|
45
46
|
| ERROR_CODE_METADATA_PRECONDITION_FAILED
|
|
46
47
|
| ERROR_CODE_UNKNOWN
|
|
47
48
|
| null;
|
|
48
|
-
extractSuggestions: (templateKey: string, scope: string) => Promise<MetadataTemplateField[]>;
|
|
49
|
+
extractSuggestions: (templateKey: string, scope: string, agentId?: string) => Promise<MetadataTemplateField[]>;
|
|
49
50
|
file: BoxItem | null;
|
|
50
51
|
handleCreateMetadataInstance: (
|
|
51
52
|
templateInstance: MetadataTemplateInstance,
|
|
@@ -214,16 +215,19 @@ function useSidebarMetadataFetcher(
|
|
|
214
215
|
|
|
215
216
|
const [, setError] = React.useState();
|
|
216
217
|
const extractSuggestions = React.useCallback(
|
|
217
|
-
async (templateKey: string, scope: string): Promise<MetadataTemplateField[]> => {
|
|
218
|
+
async (templateKey: string, scope: string, agentId?: string): Promise<MetadataTemplateField[]> => {
|
|
218
219
|
const aiAPI = api.getIntelligenceAPI();
|
|
219
220
|
setExtractErrorCode(null);
|
|
220
|
-
|
|
221
221
|
let answer = null;
|
|
222
|
+
const customAiAgent = agentId ? { ai_agent: { type: 'ai_agent_id', id: agentId } } : {};
|
|
223
|
+
const requestBody: AiExtractStructured = {
|
|
224
|
+
items: [{ id: file.id, type: file.type }],
|
|
225
|
+
metadata_template: { template_key: templateKey, scope, type: 'metadata_template' },
|
|
226
|
+
...customAiAgent,
|
|
227
|
+
};
|
|
228
|
+
|
|
222
229
|
try {
|
|
223
|
-
answer = (await aiAPI.extractStructured(
|
|
224
|
-
items: [{ id: file.id, type: file.type }],
|
|
225
|
-
metadata_template: { template_key: templateKey, scope, type: 'metadata_template' },
|
|
226
|
-
})) as Record<string, MetadataFieldValue>;
|
|
230
|
+
answer = (await aiAPI.extractStructured(requestBody)) as Record<string, MetadataFieldValue>;
|
|
227
231
|
} catch (error) {
|
|
228
232
|
// Axios makes the status code nested under the response object
|
|
229
233
|
if (error.response?.status === 408) {
|
package/src/elements/index.js
CHANGED
|
@@ -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';
|
|
@@ -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';
|
|
@@ -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}>
|
|
@@ -33,6 +33,12 @@ describe('features/metadata-instance-editor/fields/MetadataField', () => {
|
|
|
33
33
|
);
|
|
34
34
|
expect(wrapper).toMatchSnapshot();
|
|
35
35
|
});
|
|
36
|
+
test('should correctly render a taxonomy field - for the time being, in read-only mode', () => {
|
|
37
|
+
const wrapper = shallow(
|
|
38
|
+
<MetadataField canEdit dataValue="value" onChange={onChange} onRemove={onRemove} type="taxonomy" />,
|
|
39
|
+
);
|
|
40
|
+
expect(wrapper).toMatchSnapshot();
|
|
41
|
+
});
|
|
36
42
|
test('should correctly render a float field', () => {
|
|
37
43
|
const wrapper = shallow(
|
|
38
44
|
<MetadataField canEdit dataValue="value" onChange={onChange} onRemove={onRemove} type="float" />,
|
package/src/features/metadata-instance-fields/__tests__/__snapshots__/MetadataField.test.js.snap
CHANGED
|
@@ -37,6 +37,13 @@ exports[`features/metadata-instance-editor/fields/MetadataField should correctly
|
|
|
37
37
|
/>
|
|
38
38
|
`;
|
|
39
39
|
|
|
40
|
+
exports[`features/metadata-instance-editor/fields/MetadataField should correctly render a taxonomy field - for the time being, in read-only mode 1`] = `
|
|
41
|
+
<ReadOnlyMetadataField
|
|
42
|
+
dataValue="value"
|
|
43
|
+
type="taxonomy"
|
|
44
|
+
/>
|
|
45
|
+
`;
|
|
46
|
+
|
|
40
47
|
exports[`features/metadata-instance-editor/fields/MetadataField should correctly render a text field 1`] = `
|
|
41
48
|
<TextMetadataField
|
|
42
49
|
dataValue="value"
|