box-ui-elements 23.3.1-beta.1 → 23.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sharing.js.LICENSE.txt +10 -0
- 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/components/notification/Notification.js +17 -8
- package/es/components/notification/Notification.js.flow +15 -8
- package/es/components/notification/Notification.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/package.json +1 -1
- package/src/common/types/metadata.js +1 -0
- package/src/components/notification/Notification.js +15 -8
- package/src/components/notification/__tests__/Notification.test.js +21 -1
- 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,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;
|
|
@@ -11,6 +11,7 @@ type Props = {
|
|
|
11
11
|
description?: string,
|
|
12
12
|
displayName: string,
|
|
13
13
|
error?: React.Node,
|
|
14
|
+
isDisabled?: boolean,
|
|
14
15
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
15
16
|
onRemove: (key: string) => void,
|
|
16
17
|
type: string,
|
|
@@ -22,6 +23,7 @@ const FloatMetadataField = ({
|
|
|
22
23
|
displayName,
|
|
23
24
|
description,
|
|
24
25
|
error,
|
|
26
|
+
isDisabled,
|
|
25
27
|
onChange,
|
|
26
28
|
onRemove,
|
|
27
29
|
type,
|
|
@@ -32,6 +34,7 @@ const FloatMetadataField = ({
|
|
|
32
34
|
description={description}
|
|
33
35
|
displayName={displayName}
|
|
34
36
|
error={error}
|
|
37
|
+
isDisabled={isDisabled}
|
|
35
38
|
onChange={(key: string, value: MetadataFieldValue) => {
|
|
36
39
|
if (isValidValue(type, value)) {
|
|
37
40
|
onChange(key, value);
|
|
@@ -11,6 +11,7 @@ type Props = {
|
|
|
11
11
|
description?: string,
|
|
12
12
|
displayName: string,
|
|
13
13
|
error?: React.Node,
|
|
14
|
+
isDisabled?: boolean,
|
|
14
15
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
15
16
|
onRemove: (key: string) => void,
|
|
16
17
|
type: string,
|
|
@@ -22,6 +23,7 @@ const IntegerMetadataField = ({
|
|
|
22
23
|
displayName,
|
|
23
24
|
description,
|
|
24
25
|
error,
|
|
26
|
+
isDisabled,
|
|
25
27
|
onChange,
|
|
26
28
|
onRemove,
|
|
27
29
|
type,
|
|
@@ -32,6 +34,7 @@ const IntegerMetadataField = ({
|
|
|
32
34
|
description={description}
|
|
33
35
|
displayName={displayName}
|
|
34
36
|
error={error}
|
|
37
|
+
isDisabled={isDisabled}
|
|
35
38
|
onChange={(key: string, value: MetadataFieldValue) => {
|
|
36
39
|
if (isValidValue(type, value)) {
|
|
37
40
|
onChange(key, value);
|
|
@@ -31,6 +31,7 @@ type Props = {
|
|
|
31
31
|
description?: string,
|
|
32
32
|
displayName: string,
|
|
33
33
|
error?: React.Node,
|
|
34
|
+
isDisabled?: boolean,
|
|
34
35
|
isHidden?: boolean,
|
|
35
36
|
onChange?: (key: string, value: MetadataFieldValue) => void,
|
|
36
37
|
onRemove?: (key: string) => void,
|
|
@@ -45,6 +46,7 @@ const MetadataField = ({
|
|
|
45
46
|
displayName,
|
|
46
47
|
description,
|
|
47
48
|
error,
|
|
49
|
+
isDisabled,
|
|
48
50
|
isHidden,
|
|
49
51
|
canEdit,
|
|
50
52
|
onChange,
|
|
@@ -79,6 +81,7 @@ const MetadataField = ({
|
|
|
79
81
|
dataValue={dataValue}
|
|
80
82
|
description={description}
|
|
81
83
|
displayName={displayName}
|
|
84
|
+
isDisabled={isDisabled}
|
|
82
85
|
onChange={onChange}
|
|
83
86
|
onRemove={onRemove}
|
|
84
87
|
/>
|
|
@@ -92,6 +95,7 @@ const MetadataField = ({
|
|
|
92
95
|
description={description}
|
|
93
96
|
displayName={displayName}
|
|
94
97
|
error={error}
|
|
98
|
+
isDisabled={isDisabled}
|
|
95
99
|
onChange={onChange}
|
|
96
100
|
onRemove={onRemove}
|
|
97
101
|
type={type}
|
|
@@ -106,6 +110,7 @@ const MetadataField = ({
|
|
|
106
110
|
description={description}
|
|
107
111
|
displayName={displayName}
|
|
108
112
|
error={error}
|
|
113
|
+
isDisabled={isDisabled}
|
|
109
114
|
onChange={onChange}
|
|
110
115
|
onRemove={onRemove}
|
|
111
116
|
type={type}
|
|
@@ -120,6 +125,7 @@ const MetadataField = ({
|
|
|
120
125
|
dataValue={dataValue}
|
|
121
126
|
description={description}
|
|
122
127
|
displayName={displayName}
|
|
128
|
+
isDisabled={isDisabled}
|
|
123
129
|
onChange={onChange}
|
|
124
130
|
onRemove={onRemove}
|
|
125
131
|
options={options}
|
|
@@ -134,6 +140,7 @@ const MetadataField = ({
|
|
|
134
140
|
dataValue={dataValue}
|
|
135
141
|
description={description}
|
|
136
142
|
displayName={displayName}
|
|
143
|
+
isDisabled={isDisabled}
|
|
137
144
|
onChange={onChange}
|
|
138
145
|
onRemove={onRemove}
|
|
139
146
|
options={options}
|
|
@@ -147,6 +154,7 @@ const MetadataField = ({
|
|
|
147
154
|
dataValue={dataValue}
|
|
148
155
|
description={description}
|
|
149
156
|
displayName={displayName}
|
|
157
|
+
isDisabled={isDisabled}
|
|
150
158
|
onChange={onChange}
|
|
151
159
|
onRemove={onRemove}
|
|
152
160
|
/>
|
|
@@ -18,6 +18,7 @@ type Props = {
|
|
|
18
18
|
dataValue?: MetadataFieldValue,
|
|
19
19
|
description?: string,
|
|
20
20
|
displayName: string,
|
|
21
|
+
isDisabled?: boolean,
|
|
21
22
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
22
23
|
onRemove: (key: string) => void,
|
|
23
24
|
options?: Array<MetadataTemplateFieldOption>,
|
|
@@ -29,6 +30,7 @@ const MultiSelectMetadataField = ({
|
|
|
29
30
|
dataValue,
|
|
30
31
|
displayName,
|
|
31
32
|
description,
|
|
33
|
+
isDisabled,
|
|
32
34
|
onChange,
|
|
33
35
|
onRemove,
|
|
34
36
|
options = [],
|
|
@@ -41,6 +43,7 @@ const MultiSelectMetadataField = ({
|
|
|
41
43
|
{!!description && <i className="bdl-MultiSelectMetadataField-desc">{description}</i>}
|
|
42
44
|
<MultiSelect
|
|
43
45
|
blurExceptionClassNames={blurExceptionClassNames}
|
|
46
|
+
isDisabled={isDisabled}
|
|
44
47
|
isEscapedWithReference
|
|
45
48
|
isScrollable
|
|
46
49
|
onChange={(selectedOptions: Array<SelectOptionProp>) => {
|
|
@@ -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 TextInput from '../../components/text-input';
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ type Props = {
|
|
|
14
14
|
description?: string,
|
|
15
15
|
displayName: string,
|
|
16
16
|
error?: React.Node,
|
|
17
|
-
|
|
17
|
+
isDisabled?: boolean,
|
|
18
18
|
onChange: (key: string, value: MetadataFieldValue) => void,
|
|
19
19
|
onRemove: (key: string) => void,
|
|
20
20
|
type?: string,
|
|
@@ -26,11 +26,13 @@ const TextMetadataField = ({
|
|
|
26
26
|
displayName,
|
|
27
27
|
description,
|
|
28
28
|
error,
|
|
29
|
-
|
|
29
|
+
isDisabled,
|
|
30
30
|
onChange,
|
|
31
31
|
onRemove,
|
|
32
32
|
type = 'text',
|
|
33
33
|
}: Props) => {
|
|
34
|
+
const { formatMessage } = useIntl();
|
|
35
|
+
|
|
34
36
|
let value = '';
|
|
35
37
|
|
|
36
38
|
if (typeof dataValue === 'number') {
|
|
@@ -45,6 +47,7 @@ const TextMetadataField = ({
|
|
|
45
47
|
description={description}
|
|
46
48
|
error={error}
|
|
47
49
|
hideOptionalLabel
|
|
50
|
+
disabled={isDisabled}
|
|
48
51
|
label={displayName}
|
|
49
52
|
name={dataKey}
|
|
50
53
|
onChange={(event: SyntheticKeyboardEvent<HTMLInputElement>) => {
|
|
@@ -55,12 +58,11 @@ const TextMetadataField = ({
|
|
|
55
58
|
onRemove(dataKey);
|
|
56
59
|
}
|
|
57
60
|
}}
|
|
58
|
-
placeholder={
|
|
61
|
+
placeholder={formatMessage(messages.metadataFieldSetValue)}
|
|
59
62
|
type={type}
|
|
60
63
|
value={value}
|
|
61
64
|
/>
|
|
62
65
|
);
|
|
63
66
|
};
|
|
64
67
|
|
|
65
|
-
export
|
|
66
|
-
export default injectIntl(TextMetadataField);
|
|
68
|
+
export default TextMetadataField;
|
|
@@ -1,14 +1,65 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { render, screen } from '../../../test-utils/testing-library';
|
|
2
3
|
|
|
3
|
-
import
|
|
4
|
+
import DateMetadataField from '../DateMetadataField';
|
|
4
5
|
|
|
5
|
-
describe('
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
describe('DateMetadataField', () => {
|
|
7
|
+
const getDateFieldBaseProps = (props = {}) => ({
|
|
8
|
+
dataKey: 'testKeyDate',
|
|
9
|
+
displayName: 'Test Date Field',
|
|
10
|
+
onChange: jest.fn(),
|
|
11
|
+
onRemove: jest.fn(),
|
|
12
|
+
dataValue: '2023-01-15T00:00:00.000Z',
|
|
13
|
+
canEdit: true,
|
|
14
|
+
...props,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('should correctly render a date field with its value', () => {
|
|
18
|
+
const testDate = '2024-07-26T00:00:00.000Z';
|
|
19
|
+
render(
|
|
20
|
+
<DateMetadataField
|
|
21
|
+
{...getDateFieldBaseProps({
|
|
22
|
+
dataValue: testDate,
|
|
23
|
+
displayName: 'My Test Date',
|
|
24
|
+
})}
|
|
25
|
+
/>,
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const dateInput = screen.getByRole('textbox', { name: 'My Test Date' });
|
|
29
|
+
expect(dateInput).toBeInTheDocument();
|
|
30
|
+
expect(dateInput).toHaveValue('July 26, 2024');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('should display description when provided', () => {
|
|
34
|
+
const descriptionText = 'This is a date field description.';
|
|
35
|
+
render(
|
|
36
|
+
<DateMetadataField
|
|
37
|
+
{...getDateFieldBaseProps({
|
|
38
|
+
displayName: 'My Date With Desc',
|
|
39
|
+
description: descriptionText,
|
|
40
|
+
})}
|
|
41
|
+
/>,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const dateInput = screen.getByRole('textbox', { name: 'My Date With Desc This is a date field description.' });
|
|
45
|
+
expect(dateInput).toBeInTheDocument();
|
|
46
|
+
expect(screen.getByText(descriptionText)).toBeInTheDocument();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('should render as disabled when isDisabled is true', () => {
|
|
50
|
+
render(<DateMetadataField {...getDateFieldBaseProps({ isDisabled: true })} />);
|
|
51
|
+
expect(screen.getByRole('textbox', { name: 'Test Date Field' })).toBeDisabled();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('should render as enabled when isDisabled is false', () => {
|
|
55
|
+
render(<DateMetadataField {...getDateFieldBaseProps({ isDisabled: false })} />);
|
|
56
|
+
expect(screen.getByRole('textbox', { name: 'Test Date Field' })).not.toBeDisabled();
|
|
57
|
+
});
|
|
9
58
|
|
|
10
|
-
test('should
|
|
11
|
-
const
|
|
12
|
-
|
|
59
|
+
test('should render as enabled when isDisabled is not provided', () => {
|
|
60
|
+
const props = getDateFieldBaseProps();
|
|
61
|
+
delete props.isDisabled;
|
|
62
|
+
render(<DateMetadataField {...props} />);
|
|
63
|
+
expect(screen.getByRole('textbox', { name: 'Test Date Field' })).not.toBeDisabled();
|
|
13
64
|
});
|
|
14
65
|
});
|