box-ui-elements 23.4.0-beta.1 → 23.4.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/common/types/metadata.js.flow +1 -0
- package/es/common/types/metadata.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +6 -2
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +19 -12
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +31 -9
- package/es/features/metadata-instance-editor/Instance.js.flow +41 -9
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/features/metadata-instance-editor/Instances.js +2 -0
- package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
- package/es/features/metadata-instance-editor/Instances.js.map +1 -1
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.flow +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js +2 -0
- package/es/features/metadata-instance-editor/TemplatedInstance.js.flow +11 -1
- package/es/features/metadata-instance-editor/TemplatedInstance.js.map +1 -1
- package/es/features/metadata-instance-editor/constants.js +2 -1
- package/es/features/metadata-instance-editor/constants.js.flow +3 -1
- package/es/features/metadata-instance-editor/constants.js.map +1 -1
- package/es/features/metadata-instance-fields/DateMetadataField.js +30 -25
- package/es/features/metadata-instance-fields/DateMetadataField.js.flow +31 -27
- package/es/features/metadata-instance-fields/DateMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/EnumMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/EnumMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/EnumMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/FloatMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/FloatMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/IntegerMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/IntegerMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MetadataField.js +7 -0
- package/es/features/metadata-instance-fields/MetadataField.js.flow +8 -0
- package/es/features/metadata-instance-fields/MetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js +2 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.flow +3 -0
- package/es/features/metadata-instance-fields/MultiSelectMetadataField.js.map +1 -1
- package/es/features/metadata-instance-fields/TextMetadataField.js +8 -5
- package/es/features/metadata-instance-fields/TextMetadataField.js.flow +8 -6
- package/es/features/metadata-instance-fields/TextMetadataField.js.map +1 -1
- package/i18n/bn-IN.js +4 -4
- package/i18n/bn-IN.properties +4 -4
- package/i18n/da-DK.js +4 -4
- package/i18n/da-DK.properties +4 -4
- package/i18n/de-DE.js +4 -4
- package/i18n/de-DE.properties +4 -4
- package/i18n/es-419.js +3 -3
- package/i18n/es-419.properties +3 -3
- package/i18n/es-ES.js +3 -3
- package/i18n/es-ES.properties +3 -3
- package/i18n/fi-FI.js +3 -3
- package/i18n/fi-FI.properties +3 -3
- package/i18n/fr-CA.js +4 -4
- package/i18n/fr-CA.properties +4 -4
- package/i18n/fr-FR.js +4 -4
- package/i18n/fr-FR.properties +4 -4
- package/i18n/hi-IN.js +4 -4
- package/i18n/hi-IN.properties +4 -4
- package/i18n/it-IT.js +4 -4
- package/i18n/it-IT.properties +4 -4
- package/i18n/ko-KR.js +4 -4
- package/i18n/ko-KR.properties +4 -4
- package/i18n/nb-NO.js +4 -4
- package/i18n/nb-NO.properties +4 -4
- package/i18n/nl-NL.js +4 -4
- package/i18n/nl-NL.properties +4 -4
- package/i18n/pl-PL.js +4 -4
- package/i18n/pl-PL.properties +4 -4
- package/i18n/pt-BR.js +4 -4
- package/i18n/pt-BR.properties +4 -4
- package/i18n/ru-RU.js +4 -4
- package/i18n/ru-RU.properties +4 -4
- package/i18n/sv-SE.js +4 -4
- package/i18n/sv-SE.properties +4 -4
- package/i18n/tr-TR.js +4 -4
- package/i18n/tr-TR.properties +4 -4
- package/i18n/zh-CN.js +4 -4
- package/i18n/zh-CN.properties +4 -4
- package/i18n/zh-TW.js +4 -4
- package/i18n/zh-TW.properties +4 -4
- package/package.json +1 -1
- package/src/common/types/metadata.js +1 -0
- package/src/features/metadata-instance-editor/CascadePolicy.js +19 -12
- package/src/features/metadata-instance-editor/Instance.js +41 -9
- package/src/features/metadata-instance-editor/Instances.js +3 -0
- package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
- package/src/features/metadata-instance-editor/TemplateDropdown.js +1 -1
- package/src/features/metadata-instance-editor/TemplatedInstance.js +11 -1
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +92 -1
- package/src/features/metadata-instance-editor/__tests__/Instance.test.js +207 -2
- package/src/features/metadata-instance-editor/__tests__/Instances.test.js +92 -3
- package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +105 -0
- package/src/features/metadata-instance-editor/__tests__/TemplatedInstance.test.js +83 -1
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +16 -5
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +4 -2
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap +2 -2
- package/src/features/metadata-instance-editor/constants.js +3 -1
- package/src/features/metadata-instance-fields/DateMetadataField.js +31 -27
- package/src/features/metadata-instance-fields/EnumMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/FloatMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/IntegerMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/MetadataField.js +8 -0
- package/src/features/metadata-instance-fields/MultiSelectMetadataField.js +3 -0
- package/src/features/metadata-instance-fields/TextMetadataField.js +8 -6
- package/src/features/metadata-instance-fields/__tests__/DateMetadataField.test.js +59 -8
- package/src/features/metadata-instance-fields/__tests__/EnumMetadataField.test.js +63 -18
- package/src/features/metadata-instance-fields/__tests__/FloatMetadataField.test.js +68 -4
- package/src/features/metadata-instance-fields/__tests__/IntegerMetadataField.test.js +90 -4
- package/src/features/metadata-instance-fields/__tests__/MultiSelectMetadataField.test.js +95 -7
- package/src/features/metadata-instance-fields/__tests__/TextMetadataField.test.js +107 -14
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/DateMetadataField.test.js.snap +0 -18
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/EnumMetadataField.test.js.snap +0 -84
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/FloatMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/IntegerMetadataField.test.js.snap +0 -8
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/MultiSelectMetadataField.test.js.snap +0 -58
- package/src/features/metadata-instance-fields/__tests__/__snapshots__/TextMetadataField.test.js.snap +0 -31
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import userEvent from '@testing-library/user-event';
|
|
3
|
+
import { render, screen } from '../../../test-utils/testing-library';
|
|
2
4
|
|
|
3
5
|
import Instances from '../Instances';
|
|
4
6
|
|
|
@@ -182,6 +184,50 @@ const editor2 = {
|
|
|
182
184
|
// State of editors from server
|
|
183
185
|
const editorsOnServer = [editor1, editor2];
|
|
184
186
|
|
|
187
|
+
const testInstanceFields = [
|
|
188
|
+
{
|
|
189
|
+
id: 'field1',
|
|
190
|
+
type: 'string',
|
|
191
|
+
key: 'stringfield',
|
|
192
|
+
displayName: 'String Field',
|
|
193
|
+
description: 'example of a string field',
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
const getInstancesBaseProps = (props = {}) => ({
|
|
198
|
+
editors: [
|
|
199
|
+
{
|
|
200
|
+
instance: {
|
|
201
|
+
id: 'test-instance-1',
|
|
202
|
+
canEdit: true,
|
|
203
|
+
data: { stringfield: 'value1' },
|
|
204
|
+
isDirty: false,
|
|
205
|
+
hasError: false,
|
|
206
|
+
isCascadingPolicyApplicable: true,
|
|
207
|
+
cascadePolicy: {
|
|
208
|
+
id: 'policy-1',
|
|
209
|
+
canEdit: true,
|
|
210
|
+
isEnabled: true,
|
|
211
|
+
scope: 'enterprise_123',
|
|
212
|
+
cascadePolicyType: 'regular',
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
template: {
|
|
216
|
+
id: 'template-1',
|
|
217
|
+
displayName: 'Test Template Editor',
|
|
218
|
+
fields: testInstanceFields,
|
|
219
|
+
templateKey: 'editorTemplateKey',
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
onSave: jest.fn(),
|
|
224
|
+
onModification: jest.fn(),
|
|
225
|
+
onRemove: jest.fn(),
|
|
226
|
+
canUseAIFolderExtraction: true,
|
|
227
|
+
isCascadingPolicyApplicable: true,
|
|
228
|
+
...props,
|
|
229
|
+
});
|
|
230
|
+
|
|
185
231
|
describe('features/metadata-editor-editor/Instances', () => {
|
|
186
232
|
test('should correctly render editors', () => {
|
|
187
233
|
const wrapper = shallow(<Instances editors={editorsOnServer} />);
|
|
@@ -190,18 +236,61 @@ describe('features/metadata-editor-editor/Instances', () => {
|
|
|
190
236
|
|
|
191
237
|
test('should correctly render instances with editors and a selected template', () => {
|
|
192
238
|
const wrapper = shallow(<Instances editors={editorsOnServer} selectedTemplateKey="template1" />);
|
|
193
|
-
const selectedTemplate = wrapper.find('Instance').at(0);
|
|
239
|
+
const selectedTemplate = wrapper.find('injectIntl(Instance)').at(0);
|
|
194
240
|
expect(selectedTemplate.prop('isOpen')).toBe(true);
|
|
195
241
|
expect(selectedTemplate.prop('id')).toBe('editor1');
|
|
196
242
|
});
|
|
197
243
|
|
|
198
244
|
test('should correctly render instances with a selected template and multiple editors', () => {
|
|
199
245
|
const wrapper = shallow(<Instances editors={editorsOnServer} selectedTemplateKey="template2" />);
|
|
200
|
-
const selectedTemplate = wrapper.find('Instance').at(1);
|
|
246
|
+
const selectedTemplate = wrapper.find('injectIntl(Instance)').at(1);
|
|
201
247
|
expect(selectedTemplate.prop('isOpen')).toBe(true);
|
|
202
248
|
expect(selectedTemplate.prop('id')).toBe('editor2');
|
|
203
|
-
const unselectedTemplate = wrapper.find('Instance').at(0);
|
|
249
|
+
const unselectedTemplate = wrapper.find('injectIntl(Instance)').at(0);
|
|
204
250
|
expect(unselectedTemplate.prop('isOpen')).toBe(false);
|
|
205
251
|
expect(unselectedTemplate.prop('id')).toBe('editor1');
|
|
206
252
|
});
|
|
207
253
|
});
|
|
254
|
+
|
|
255
|
+
describe('Instances component - canUseAIFolderExtractionAgentSelector prop', () => {
|
|
256
|
+
test('should pass canUseAIFolderExtractionAgentSelector to child Instance components, showing agent selector', async () => {
|
|
257
|
+
render(
|
|
258
|
+
<Instances
|
|
259
|
+
{...getInstancesBaseProps({
|
|
260
|
+
canUseAIFolderExtractionAgentSelector: true,
|
|
261
|
+
})}
|
|
262
|
+
/>,
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
const editButton = screen.getByRole('button', { name: 'Edit Metadata' });
|
|
266
|
+
await userEvent.click(editButton);
|
|
267
|
+
|
|
268
|
+
expect(screen.getByRole('button', { name: 'Agent Basic' })).toBeInTheDocument();
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
test('should not show agent selector in child Instance if canUseAIFolderExtractionAgentSelector is false', async () => {
|
|
272
|
+
render(
|
|
273
|
+
<Instances
|
|
274
|
+
{...getInstancesBaseProps({
|
|
275
|
+
canUseAIFolderExtractionAgentSelector: false,
|
|
276
|
+
})}
|
|
277
|
+
/>,
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
const editButton = screen.getByRole('button', { name: 'Edit Metadata' });
|
|
281
|
+
await userEvent.click(editButton);
|
|
282
|
+
|
|
283
|
+
expect(screen.queryByRole('button', { name: 'Agent Basic' })).not.toBeInTheDocument();
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
test('should not show agent selector in child Instance if canUseAIFolderExtractionAgentSelector is undefined', async () => {
|
|
287
|
+
const props = getInstancesBaseProps();
|
|
288
|
+
delete props.canUseAIFolderExtractionAgentSelector;
|
|
289
|
+
render(<Instances {...props} />);
|
|
290
|
+
|
|
291
|
+
const editButton = screen.getByRole('button', { name: 'Edit Metadata' });
|
|
292
|
+
await userEvent.click(editButton);
|
|
293
|
+
|
|
294
|
+
expect(screen.queryByRole('button', { name: 'Agent Basic' })).not.toBeInTheDocument();
|
|
295
|
+
});
|
|
296
|
+
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import userEvent from '@testing-library/user-event';
|
|
3
|
+
import { render, screen } from '../../../test-utils/testing-library';
|
|
2
4
|
|
|
3
5
|
import MetadataInstanceEditor from '../MetadataInstanceEditor';
|
|
4
6
|
import Instances from '../Instances';
|
|
@@ -443,6 +445,66 @@ const templatesOnServer = [template1, template2, template3, template4, template5
|
|
|
443
445
|
// State of editors from server
|
|
444
446
|
const editorsOnServer = [editor1, editor2, editor3, editor4, editor5];
|
|
445
447
|
|
|
448
|
+
const testGrandchildInstanceFields = [
|
|
449
|
+
{
|
|
450
|
+
id: 'field1',
|
|
451
|
+
type: 'string',
|
|
452
|
+
key: 'stringfield',
|
|
453
|
+
displayName: 'String Field',
|
|
454
|
+
description: 'example of a string field',
|
|
455
|
+
},
|
|
456
|
+
];
|
|
457
|
+
|
|
458
|
+
const getMetadataEditorBaseProps = (props = {}) => ({
|
|
459
|
+
editors: [
|
|
460
|
+
{
|
|
461
|
+
instance: {
|
|
462
|
+
id: 'test-instance-editor-child-1',
|
|
463
|
+
canEdit: true,
|
|
464
|
+
data: { stringfield: 'valueForEditor' },
|
|
465
|
+
isDirty: false,
|
|
466
|
+
hasError: false,
|
|
467
|
+
isCascadingPolicyApplicable: true,
|
|
468
|
+
cascadePolicy: {
|
|
469
|
+
id: 'policy-for-editor-1',
|
|
470
|
+
canEdit: true,
|
|
471
|
+
isEnabled: true,
|
|
472
|
+
scope: 'enterprise_123',
|
|
473
|
+
cascadePolicyType: 'regular',
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
template: {
|
|
477
|
+
id: 'template-for-editor-1',
|
|
478
|
+
displayName: 'Test Template In Editor',
|
|
479
|
+
fields: testGrandchildInstanceFields,
|
|
480
|
+
templateKey: 'editorChildTemplateKey',
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
],
|
|
484
|
+
templates: [
|
|
485
|
+
{
|
|
486
|
+
id: 'template-for-editor-1',
|
|
487
|
+
templateKey: 'editorChildTemplateKey',
|
|
488
|
+
displayName: 'Test Template In Editor',
|
|
489
|
+
fields: testGrandchildInstanceFields,
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: 'template-for-editor-2',
|
|
493
|
+
templateKey: 'anotherEditorTemplateKey',
|
|
494
|
+
displayName: 'Another Test Template',
|
|
495
|
+
fields: [],
|
|
496
|
+
},
|
|
497
|
+
],
|
|
498
|
+
onSave: jest.fn(),
|
|
499
|
+
onModification: jest.fn(),
|
|
500
|
+
onRemove: jest.fn(),
|
|
501
|
+
onAdd: jest.fn(),
|
|
502
|
+
canAdd: true,
|
|
503
|
+
canUseAIFolderExtraction: true,
|
|
504
|
+
isCascadingPolicyApplicable: true,
|
|
505
|
+
...props,
|
|
506
|
+
});
|
|
507
|
+
|
|
446
508
|
describe('features/metadata-editor-editor/MetadataInstanceEditor', () => {
|
|
447
509
|
test('should correctly render editors', () => {
|
|
448
510
|
const wrapper = shallow(<MetadataInstanceEditor editors={editorsOnServer} templates={templatesOnServer} />);
|
|
@@ -471,3 +533,46 @@ describe('features/metadata-editor-editor/MetadataInstanceEditor', () => {
|
|
|
471
533
|
expect(instances.prop('selectedTemplateKey')).toBe(selectedTemplateKey);
|
|
472
534
|
});
|
|
473
535
|
});
|
|
536
|
+
|
|
537
|
+
describe('MetadataInstanceEditor - canUseAIFolderExtractionAgentSelector prop', () => {
|
|
538
|
+
test('should propagate canUseAIFolderExtractionAgentSelector, showing agent selector', async () => {
|
|
539
|
+
render(
|
|
540
|
+
<MetadataInstanceEditor
|
|
541
|
+
{...getMetadataEditorBaseProps({
|
|
542
|
+
canUseAIFolderExtractionAgentSelector: true,
|
|
543
|
+
})}
|
|
544
|
+
/>,
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
const editButton = await screen.findByRole('button', { name: 'Edit Metadata' }, { timeout: 3000 });
|
|
548
|
+
await userEvent.click(editButton);
|
|
549
|
+
|
|
550
|
+
expect(screen.getByRole('button', { name: 'Agent Basic' })).toBeInTheDocument();
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
test('should not show agent selector if canUseAIFolderExtractionAgentSelector is false', async () => {
|
|
554
|
+
render(
|
|
555
|
+
<MetadataInstanceEditor
|
|
556
|
+
{...getMetadataEditorBaseProps({
|
|
557
|
+
canUseAIFolderExtractionAgentSelector: false,
|
|
558
|
+
})}
|
|
559
|
+
/>,
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
const editButton = await screen.findByRole('button', { name: 'Edit Metadata' });
|
|
563
|
+
await userEvent.click(editButton);
|
|
564
|
+
|
|
565
|
+
expect(screen.queryByRole('button', { name: 'Agent Basic' })).not.toBeInTheDocument();
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
test('should not show agent selector if canUseAIFolderExtractionAgentSelector is undefined', async () => {
|
|
569
|
+
const props = getMetadataEditorBaseProps();
|
|
570
|
+
delete props.canUseAIFolderExtractionAgentSelector;
|
|
571
|
+
render(<MetadataInstanceEditor {...props} />);
|
|
572
|
+
|
|
573
|
+
const editButton = await screen.findByRole('button', { name: 'Edit Metadata' });
|
|
574
|
+
await userEvent.click(editButton);
|
|
575
|
+
|
|
576
|
+
expect(screen.queryByRole('button', { name: 'Agent Basic' })).not.toBeInTheDocument();
|
|
577
|
+
});
|
|
578
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
2
|
+
import { render, screen } from '../../../test-utils/testing-library';
|
|
3
3
|
import TemplatedInstance from '../TemplatedInstance';
|
|
4
4
|
|
|
5
5
|
const data = {
|
|
@@ -118,6 +118,56 @@ const allFieldsHidden = [
|
|
|
118
118
|
|
|
119
119
|
const noFieldsForTemplate = [];
|
|
120
120
|
|
|
121
|
+
const testTemplateFields = [
|
|
122
|
+
{
|
|
123
|
+
id: 'field1',
|
|
124
|
+
type: 'string',
|
|
125
|
+
key: 'stringfield',
|
|
126
|
+
displayName: 'Test String Field',
|
|
127
|
+
description: 'A string field for testing.',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: 'field2',
|
|
131
|
+
type: 'float',
|
|
132
|
+
key: 'floatfield',
|
|
133
|
+
displayName: 'Test Float Field',
|
|
134
|
+
description: 'A float field for testing.',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'field3',
|
|
138
|
+
type: 'enum',
|
|
139
|
+
key: 'enumfield',
|
|
140
|
+
displayName: 'Test Enum Field',
|
|
141
|
+
description: 'An enum field for testing.',
|
|
142
|
+
options: [
|
|
143
|
+
{ key: 'yes', displayName: 'Yes' },
|
|
144
|
+
{ key: 'no', displayName: 'No' },
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
];
|
|
148
|
+
|
|
149
|
+
const testTemplateData = {
|
|
150
|
+
stringfield: 'test string',
|
|
151
|
+
floatfield: 12.34,
|
|
152
|
+
enumfield: 'yes',
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const getTemplatedInstanceBaseProps = (props = {}) => ({
|
|
156
|
+
template: {
|
|
157
|
+
id: 'template-id-1',
|
|
158
|
+
displayName: 'Test Template Name',
|
|
159
|
+
fields: testTemplateFields,
|
|
160
|
+
templateKey: 'testTemplateKeyForTemplated',
|
|
161
|
+
},
|
|
162
|
+
data: testTemplateData,
|
|
163
|
+
errors: {},
|
|
164
|
+
onFieldChange: jest.fn(),
|
|
165
|
+
onFieldRemove: jest.fn(),
|
|
166
|
+
canEdit: true,
|
|
167
|
+
isDisabled: false,
|
|
168
|
+
...props,
|
|
169
|
+
});
|
|
170
|
+
|
|
121
171
|
describe('features/metadata-instance-editor/fields/TemplatedInstance', () => {
|
|
122
172
|
test('should correctly render fields that are visible', () => {
|
|
123
173
|
const wrapper = shallow(
|
|
@@ -161,3 +211,35 @@ describe('features/metadata-instance-editor/fields/TemplatedInstance', () => {
|
|
|
161
211
|
expect(wrapper).toMatchSnapshot();
|
|
162
212
|
});
|
|
163
213
|
});
|
|
214
|
+
|
|
215
|
+
describe('TemplatedInstance isDisabled prop', () => {
|
|
216
|
+
test('should render all fields as disabled when isDisabled is true', () => {
|
|
217
|
+
render(<TemplatedInstance {...getTemplatedInstanceBaseProps({ isDisabled: true })} />);
|
|
218
|
+
|
|
219
|
+
expect(screen.getByRole('textbox', { name: 'Test String Field A string field for testing.' })).toBeDisabled();
|
|
220
|
+
expect(screen.getByRole('textbox', { name: 'Test Float Field A float field for testing.' })).toBeDisabled();
|
|
221
|
+
expect(screen.getByRole('listbox', { name: 'Test Enum Field An enum field for testing.' })).toBeDisabled();
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
test('should render all fields as enabled when isDisabled is false', () => {
|
|
225
|
+
render(<TemplatedInstance {...getTemplatedInstanceBaseProps({ isDisabled: false })} />);
|
|
226
|
+
|
|
227
|
+
expect(
|
|
228
|
+
screen.getByRole('textbox', { name: 'Test String Field A string field for testing.' }),
|
|
229
|
+
).not.toBeDisabled();
|
|
230
|
+
expect(screen.getByRole('textbox', { name: 'Test Float Field A float field for testing.' })).not.toBeDisabled();
|
|
231
|
+
expect(screen.getByRole('listbox', { name: 'Test Enum Field An enum field for testing.' })).not.toBeDisabled();
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
test('should render all fields as enabled when isDisabled is not provided (defaults to false)', () => {
|
|
235
|
+
const props = getTemplatedInstanceBaseProps();
|
|
236
|
+
delete props.isDisabled;
|
|
237
|
+
render(<TemplatedInstance {...props} />);
|
|
238
|
+
|
|
239
|
+
expect(
|
|
240
|
+
screen.getByRole('textbox', { name: 'Test String Field A string field for testing.' }),
|
|
241
|
+
).not.toBeDisabled();
|
|
242
|
+
expect(screen.getByRole('textbox', { name: 'Test Float Field A float field for testing.' })).not.toBeDisabled();
|
|
243
|
+
expect(screen.getByRole('listbox', { name: 'Test Enum Field An enum field for testing.' })).not.toBeDisabled();
|
|
244
|
+
});
|
|
245
|
+
});
|
|
@@ -69,6 +69,7 @@ exports[`features/metadata-instance-editor/fields/Instance collapsible isOpen pr
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
errors={{}}
|
|
72
|
+
isDisabled={false}
|
|
72
73
|
onFieldChange={[Function]}
|
|
73
74
|
onFieldRemove={[Function]}
|
|
74
75
|
template={
|
|
@@ -93,7 +94,7 @@ exports[`features/metadata-instance-editor/fields/Instance collapsible isOpen pr
|
|
|
93
94
|
`;
|
|
94
95
|
|
|
95
96
|
exports[`features/metadata-instance-editor/fields/Instance message id should be fileMetadataRemoveCustomTemplateConfirm 1`] = `
|
|
96
|
-
<
|
|
97
|
+
<Memo(MemoizedFormattedMessage)
|
|
97
98
|
defaultMessage="Are you sure you want to delete this custom metadata and all of its values from this file?"
|
|
98
99
|
id="boxui.metadataInstanceEditor.fileMetadataRemoveCustomTemplateConfirm"
|
|
99
100
|
values={
|
|
@@ -105,7 +106,7 @@ exports[`features/metadata-instance-editor/fields/Instance message id should be
|
|
|
105
106
|
`;
|
|
106
107
|
|
|
107
108
|
exports[`features/metadata-instance-editor/fields/Instance message id should be fileMetadataRemoveTemplateConfirm 1`] = `
|
|
108
|
-
<
|
|
109
|
+
<Memo(MemoizedFormattedMessage)
|
|
109
110
|
defaultMessage="Are you sure you want to delete "{metadataName}" and all of its values from this file?"
|
|
110
111
|
id="boxui.metadataInstanceEditor.fileMetadataRemoveTemplateConfirm"
|
|
111
112
|
values={
|
|
@@ -117,7 +118,7 @@ exports[`features/metadata-instance-editor/fields/Instance message id should be
|
|
|
117
118
|
`;
|
|
118
119
|
|
|
119
120
|
exports[`features/metadata-instance-editor/fields/Instance message id should be folderMetadataRemoveCustomTemplateConfirm 1`] = `
|
|
120
|
-
<
|
|
121
|
+
<Memo(MemoizedFormattedMessage)
|
|
121
122
|
defaultMessage="Are you sure you want to delete this custom metadata and all of its values? Any metadata template values already applied to files in this folder will not be deleted."
|
|
122
123
|
id="boxui.metadataInstanceEditor.folderMetadataRemoveCustomTemplateConfirm"
|
|
123
124
|
values={
|
|
@@ -129,7 +130,7 @@ exports[`features/metadata-instance-editor/fields/Instance message id should be
|
|
|
129
130
|
`;
|
|
130
131
|
|
|
131
132
|
exports[`features/metadata-instance-editor/fields/Instance message id should be folderMetadataRemoveTemplateConfirm 1`] = `
|
|
132
|
-
<
|
|
133
|
+
<Memo(MemoizedFormattedMessage)
|
|
133
134
|
defaultMessage="Are you sure you want to delete "{metadataName}" and all of its values? Any metadata template values already applied to files in this folder will not be deleted."
|
|
134
135
|
id="boxui.metadataInstanceEditor.folderMetadataRemoveTemplateConfirm"
|
|
135
136
|
values={
|
|
@@ -164,7 +165,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
164
165
|
<span
|
|
165
166
|
className="metadata-instance-editor-instance-title-text"
|
|
166
167
|
>
|
|
167
|
-
<
|
|
168
|
+
<Memo(MemoizedFormattedMessage)
|
|
168
169
|
defaultMessage="Custom Metadata"
|
|
169
170
|
id="boxui.metadataInstanceEditor.customTitle"
|
|
170
171
|
/>
|
|
@@ -255,6 +256,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
255
256
|
}
|
|
256
257
|
}
|
|
257
258
|
errors={{}}
|
|
259
|
+
isDisabled={false}
|
|
258
260
|
onFieldChange={[Function]}
|
|
259
261
|
onFieldRemove={[Function]}
|
|
260
262
|
template={
|
|
@@ -414,10 +416,12 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
414
416
|
>
|
|
415
417
|
<CascadePolicy
|
|
416
418
|
canUseAIFolderExtraction={false}
|
|
419
|
+
canUseAIFolderExtractionAgentSelector={false}
|
|
417
420
|
isAIFolderExtractionEnabled={false}
|
|
418
421
|
isCascadingEnabled={true}
|
|
419
422
|
isCascadingOverwritten={false}
|
|
420
423
|
isCustomMetadata={false}
|
|
424
|
+
isExistingAIExtractionCascadePolicy={false}
|
|
421
425
|
onAIFolderExtractionToggle={[Function]}
|
|
422
426
|
onCascadeModeChange={[Function]}
|
|
423
427
|
onCascadeToggle={[Function]}
|
|
@@ -437,6 +441,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
437
441
|
}
|
|
438
442
|
}
|
|
439
443
|
errors={{}}
|
|
444
|
+
isDisabled={false}
|
|
440
445
|
onFieldChange={[Function]}
|
|
441
446
|
onFieldRemove={[Function]}
|
|
442
447
|
template={
|
|
@@ -609,6 +614,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
609
614
|
}
|
|
610
615
|
}
|
|
611
616
|
errors={{}}
|
|
617
|
+
isDisabled={false}
|
|
612
618
|
onFieldChange={[Function]}
|
|
613
619
|
onFieldRemove={[Function]}
|
|
614
620
|
template={
|
|
@@ -799,6 +805,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
799
805
|
}
|
|
800
806
|
}
|
|
801
807
|
errors={{}}
|
|
808
|
+
isDisabled={false}
|
|
802
809
|
onFieldChange={[Function]}
|
|
803
810
|
onFieldRemove={[Function]}
|
|
804
811
|
template={
|
|
@@ -994,6 +1001,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
994
1001
|
}
|
|
995
1002
|
}
|
|
996
1003
|
errors={{}}
|
|
1004
|
+
isDisabled={false}
|
|
997
1005
|
onFieldChange={[Function]}
|
|
998
1006
|
onFieldRemove={[Function]}
|
|
999
1007
|
template={
|
|
@@ -1098,6 +1106,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
1098
1106
|
}
|
|
1099
1107
|
}
|
|
1100
1108
|
errors={{}}
|
|
1109
|
+
isDisabled={false}
|
|
1101
1110
|
onFieldChange={[Function]}
|
|
1102
1111
|
onFieldRemove={[Function]}
|
|
1103
1112
|
template={
|
|
@@ -1169,6 +1178,7 @@ exports[`features/metadata-instance-editor/fields/Instance should correctly rend
|
|
|
1169
1178
|
}
|
|
1170
1179
|
}
|
|
1171
1180
|
errors={{}}
|
|
1181
|
+
isDisabled={false}
|
|
1172
1182
|
onFieldChange={[Function]}
|
|
1173
1183
|
onFieldRemove={[Function]}
|
|
1174
1184
|
template={
|
|
@@ -1346,6 +1356,7 @@ exports[`features/metadata-instance-editor/fields/Instance should not render foo
|
|
|
1346
1356
|
}
|
|
1347
1357
|
}
|
|
1348
1358
|
errors={{}}
|
|
1359
|
+
isDisabled={false}
|
|
1349
1360
|
onFieldChange={[Function]}
|
|
1350
1361
|
onFieldRemove={[Function]}
|
|
1351
1362
|
template={
|
package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`features/metadata-editor-editor/Instances should correctly render editors 1`] = `
|
|
4
4
|
[
|
|
5
|
-
<Instance
|
|
5
|
+
<injectIntl(Instance)
|
|
6
6
|
canEdit={true}
|
|
7
7
|
canUseAIFolderExtraction={false}
|
|
8
|
+
canUseAIFolderExtractionAgentSelector={false}
|
|
8
9
|
data={
|
|
9
10
|
{
|
|
10
11
|
"datefield": "2018-06-20T00:00:00.000Z",
|
|
@@ -107,9 +108,10 @@ exports[`features/metadata-editor-editor/Instances should correctly render edito
|
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
110
|
/>,
|
|
110
|
-
<Instance
|
|
111
|
+
<injectIntl(Instance)
|
|
111
112
|
canEdit={false}
|
|
112
113
|
canUseAIFolderExtraction={false}
|
|
114
|
+
canUseAIFolderExtractionAgentSelector={false}
|
|
113
115
|
data={
|
|
114
116
|
{
|
|
115
117
|
"datefield": "2018-06-20T00:00:00.000Z",
|
package/src/features/metadata-instance-editor/__tests__/__snapshots__/TemplatedInstance.test.js.snap
CHANGED
|
@@ -5,7 +5,7 @@ exports[`features/metadata-instance-editor/fields/TemplatedInstance should corre
|
|
|
5
5
|
<div
|
|
6
6
|
className="attributes-hidden-message"
|
|
7
7
|
>
|
|
8
|
-
<
|
|
8
|
+
<MemoizedFormattedMessage
|
|
9
9
|
defaultMessage="All attributes in this template have been hidden."
|
|
10
10
|
id="boxui.metadataInstanceEditor.allAttributesAreHidden"
|
|
11
11
|
/>
|
|
@@ -165,7 +165,7 @@ exports[`features/metadata-instance-editor/fields/TemplatedInstance should corre
|
|
|
165
165
|
<div
|
|
166
166
|
className="no-attributes-message"
|
|
167
167
|
>
|
|
168
|
-
<
|
|
168
|
+
<MemoizedFormattedMessage
|
|
169
169
|
defaultMessage="There are no attributes in this template."
|
|
170
170
|
id="boxui.metadataInstanceEditor.noAttributesForTemplate"
|
|
171
171
|
/>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
4
|
|
|
5
5
|
import DatePicker from '../../components/date-picker';
|
|
6
6
|
import { convertISOStringToUTCDate } from '../../utils/datetime';
|
|
@@ -13,34 +13,38 @@ type Props = {
|
|
|
13
13
|
dataValue?: MetadataFieldValue,
|
|
14
14
|
description?: string,
|
|
15
15
|
displayName: string,
|
|
16
|
-
|
|
16
|
+
isDisabled?: boolean,
|
|
17
17
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
18
18
|
onRemove: (key: string) => void,
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
const DateMetadataField = ({ dataKey, dataValue, displayName, description,
|
|
22
|
-
|
|
23
|
-
className="bdl-DateMetadataField"
|
|
24
|
-
dateFormat="utcISOString"
|
|
25
|
-
description={description}
|
|
26
|
-
displayFormat={{
|
|
27
|
-
day: 'numeric',
|
|
28
|
-
month: 'long',
|
|
29
|
-
year: 'numeric',
|
|
30
|
-
}}
|
|
31
|
-
hideOptionalLabel
|
|
32
|
-
label={displayName}
|
|
33
|
-
onChange={(date: Date, isoDate: string) => {
|
|
34
|
-
if (isoDate) {
|
|
35
|
-
onChange(dataKey, isoDate);
|
|
36
|
-
} else {
|
|
37
|
-
onRemove(dataKey);
|
|
38
|
-
}
|
|
39
|
-
}}
|
|
40
|
-
placeholder={intl.formatMessage(messages.metadataFieldSetDate)}
|
|
41
|
-
value={typeof dataValue === 'string' ? convertISOStringToUTCDate(dataValue) : undefined}
|
|
42
|
-
/>
|
|
43
|
-
);
|
|
21
|
+
const DateMetadataField = ({ dataKey, dataValue, displayName, description, isDisabled, onChange, onRemove }: Props) => {
|
|
22
|
+
const { formatMessage } = useIntl();
|
|
44
23
|
|
|
45
|
-
|
|
46
|
-
|
|
24
|
+
return (
|
|
25
|
+
<DatePicker
|
|
26
|
+
className="bdl-DateMetadataField"
|
|
27
|
+
dateFormat="utcISOString"
|
|
28
|
+
description={description}
|
|
29
|
+
displayFormat={{
|
|
30
|
+
day: 'numeric',
|
|
31
|
+
month: 'long',
|
|
32
|
+
year: 'numeric',
|
|
33
|
+
}}
|
|
34
|
+
hideOptionalLabel
|
|
35
|
+
isDisabled={isDisabled}
|
|
36
|
+
label={displayName}
|
|
37
|
+
onChange={(date: Date, isoDate: string) => {
|
|
38
|
+
if (isoDate) {
|
|
39
|
+
onChange(dataKey, isoDate);
|
|
40
|
+
} else {
|
|
41
|
+
onRemove(dataKey);
|
|
42
|
+
}
|
|
43
|
+
}}
|
|
44
|
+
placeholder={formatMessage(messages.metadataFieldSetDate)}
|
|
45
|
+
value={typeof dataValue === 'string' ? convertISOStringToUTCDate(dataValue) : undefined}
|
|
46
|
+
/>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default DateMetadataField;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
4
|
|
|
5
5
|
import Label from '../../components/label/Label';
|
|
6
6
|
import SingleSelectField from '../../components/select-field/SingleSelectField';
|
|
@@ -20,7 +20,7 @@ type Props = {
|
|
|
20
20
|
dataValue?: MetadataFieldValue,
|
|
21
21
|
description?: string,
|
|
22
22
|
displayName: string,
|
|
23
|
-
|
|
23
|
+
isDisabled?: boolean,
|
|
24
24
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
25
25
|
onRemove: (key: string) => void,
|
|
26
26
|
options?: Array<MetadataTemplateFieldOption>,
|
|
@@ -32,7 +32,7 @@ const EnumMetadataField = ({
|
|
|
32
32
|
dataValue,
|
|
33
33
|
displayName,
|
|
34
34
|
description,
|
|
35
|
-
|
|
35
|
+
isDisabled,
|
|
36
36
|
onChange,
|
|
37
37
|
onRemove,
|
|
38
38
|
options = [],
|
|
@@ -43,7 +43,9 @@ const EnumMetadataField = ({
|
|
|
43
43
|
isSelectable: true,
|
|
44
44
|
}));
|
|
45
45
|
|
|
46
|
-
const
|
|
46
|
+
const { formatMessage } = useIntl();
|
|
47
|
+
|
|
48
|
+
const defaultValue = formatMessage(messages.metadataFieldSelectValue);
|
|
47
49
|
|
|
48
50
|
selectOptions.unshift({
|
|
49
51
|
displayText: defaultValue,
|
|
@@ -58,6 +60,7 @@ const EnumMetadataField = ({
|
|
|
58
60
|
<SingleSelectField
|
|
59
61
|
blurExceptionClassNames={blurExceptionClassNames}
|
|
60
62
|
isEscapedWithReference
|
|
63
|
+
isDisabled={isDisabled}
|
|
61
64
|
isScrollable
|
|
62
65
|
onChange={(option: Option) => {
|
|
63
66
|
if (option.isSelectable) {
|
|
@@ -77,5 +80,4 @@ const EnumMetadataField = ({
|
|
|
77
80
|
);
|
|
78
81
|
};
|
|
79
82
|
|
|
80
|
-
export
|
|
81
|
-
export default injectIntl(EnumMetadataField);
|
|
83
|
+
export default EnumMetadataField;
|