box-ui-elements 23.5.0-beta.3 → 23.5.0-beta.4
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.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/elements/common/sub-header/SubHeader.js +3 -0
- package/es/elements/common/sub-header/SubHeader.js.map +1 -1
- package/es/elements/common/sub-header/SubHeaderLeftV2.js +3 -23
- package/es/elements/common/sub-header/SubHeaderLeftV2.js.map +1 -1
- package/es/elements/common/sub-header/SubHeaderRight.js +6 -2
- package/es/elements/common/sub-header/SubHeaderRight.js.map +1 -1
- package/es/elements/content-explorer/ContentExplorer.js +44 -5
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/elements/content-explorer/ContentExplorer.scss +12 -0
- package/es/elements/content-explorer/MetadataSidePanel.js +92 -0
- package/es/elements/content-explorer/MetadataSidePanel.js.map +1 -0
- package/es/elements/content-explorer/MetadataSidePanel.scss +12 -0
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +30 -0
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/elements/content-explorer/utils.js +67 -0
- package/es/elements/content-explorer/utils.js.map +1 -0
- package/es/src/elements/common/sub-header/SubHeader.d.ts +2 -1
- package/es/src/elements/common/sub-header/SubHeaderLeftV2.d.ts +1 -1
- package/es/src/elements/common/sub-header/SubHeaderRight.d.ts +4 -1
- package/es/src/elements/content-explorer/ContentExplorer.d.ts +15 -0
- package/es/src/elements/content-explorer/MetadataSidePanel.d.ts +13 -0
- package/es/src/elements/content-explorer/__tests__/MetadataSidePanel.test.d.ts +1 -0
- package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +1 -0
- package/es/src/elements/content-explorer/utils.d.ts +22 -0
- package/package.json +1 -1
- package/src/elements/common/sub-header/SubHeader.tsx +4 -0
- package/src/elements/common/sub-header/SubHeaderLeftV2.tsx +3 -22
- package/src/elements/common/sub-header/SubHeaderRight.tsx +8 -2
- package/src/elements/content-explorer/ContentExplorer.scss +12 -0
- package/src/elements/content-explorer/ContentExplorer.tsx +120 -71
- package/src/elements/content-explorer/MetadataSidePanel.scss +12 -0
- package/src/elements/content-explorer/MetadataSidePanel.tsx +126 -0
- package/src/elements/content-explorer/__tests__/ContentExplorer.test.tsx +80 -16
- package/src/elements/content-explorer/__tests__/MetadataSidePanel.test.tsx +127 -0
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +26 -0
- package/src/elements/content-explorer/utils.ts +58 -0
|
@@ -164,6 +164,32 @@ export const metadataViewV2WithInitialFilterValues: Story = {
|
|
|
164
164
|
},
|
|
165
165
|
};
|
|
166
166
|
|
|
167
|
+
export const sidePanelOpenWithSingleItemSelected: Story = {
|
|
168
|
+
args: {
|
|
169
|
+
...metadataViewV2ElementProps,
|
|
170
|
+
metadataViewProps: {
|
|
171
|
+
columns,
|
|
172
|
+
tableProps: {
|
|
173
|
+
isSelectAllEnabled: true,
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
play: async ({ canvas }) => {
|
|
179
|
+
await waitFor(() => {
|
|
180
|
+
expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Select the first row by clicking its checkbox
|
|
184
|
+
const firstRow = canvas.getByRole('row', { name: /Child 2/i });
|
|
185
|
+
const checkbox = within(firstRow).getByRole('checkbox');
|
|
186
|
+
await userEvent.click(checkbox);
|
|
187
|
+
|
|
188
|
+
const metadataButton = canvas.getByRole('button', { name: 'Metadata' });
|
|
189
|
+
await userEvent.click(metadataButton);
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
|
|
167
193
|
const meta: Meta<typeof ContentExplorer> = {
|
|
168
194
|
title: 'Elements/ContentExplorer/tests/MetadataView/visual',
|
|
169
195
|
component: ContentExplorer,
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
3
|
+
|
|
4
|
+
import type { MetadataTemplate } from '@box/metadata-editor';
|
|
5
|
+
import type { Selection } from 'react-aria-components';
|
|
6
|
+
import type { BoxItem, Collection } from '../../common/types/core';
|
|
7
|
+
|
|
8
|
+
import messages from '../common/messages';
|
|
9
|
+
|
|
10
|
+
// Get selected item text
|
|
11
|
+
export function useSelectedItemText(currentCollection: Collection, selectedItemIds: Selection): string {
|
|
12
|
+
const { formatMessage } = useIntl();
|
|
13
|
+
|
|
14
|
+
return useMemo(() => {
|
|
15
|
+
const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;
|
|
16
|
+
if (selectedCount === 0) return '';
|
|
17
|
+
|
|
18
|
+
// Case 1: Single selected item - show item name
|
|
19
|
+
if (selectedCount === 1) {
|
|
20
|
+
const selectedKey =
|
|
21
|
+
selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;
|
|
22
|
+
const selectedItem = currentCollection.items.find(item => item.id === selectedKey);
|
|
23
|
+
return selectedItem?.name ?? '';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Case 2: Multiple selected items - show count
|
|
27
|
+
return formatMessage(messages.numFilesSelected, { numSelected: selectedCount });
|
|
28
|
+
}, [currentCollection.items, formatMessage, selectedItemIds]);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Get template instance based on metadata template and selected items
|
|
32
|
+
export function getTemplateInstance(metadataTemplate: MetadataTemplate, selectedItems: BoxItem[]) {
|
|
33
|
+
const { displayName, fields, hidden, id, scope, templateKey, type } = metadataTemplate;
|
|
34
|
+
|
|
35
|
+
const selectedItemsFields = fields.map(
|
|
36
|
+
({ displayName: fieldDisplayName, hidden: fieldHidden, id: fieldId, key, options, type: fieldType }) => ({
|
|
37
|
+
displayName: fieldDisplayName,
|
|
38
|
+
hidden: fieldHidden,
|
|
39
|
+
id: fieldId,
|
|
40
|
+
key,
|
|
41
|
+
options,
|
|
42
|
+
type: fieldType,
|
|
43
|
+
// TODO: Add support for multiple selected items
|
|
44
|
+
value: selectedItems[0].metadata[scope][templateKey][key],
|
|
45
|
+
}),
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
canEdit: true,
|
|
50
|
+
displayName,
|
|
51
|
+
hidden,
|
|
52
|
+
id,
|
|
53
|
+
fields: selectedItemsFields,
|
|
54
|
+
scope,
|
|
55
|
+
templateKey,
|
|
56
|
+
type,
|
|
57
|
+
};
|
|
58
|
+
}
|