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.
Files changed (41) 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.js +1 -1
  5. package/dist/sidebar.js +1 -1
  6. package/es/elements/common/sub-header/SubHeader.js +3 -0
  7. package/es/elements/common/sub-header/SubHeader.js.map +1 -1
  8. package/es/elements/common/sub-header/SubHeaderLeftV2.js +3 -23
  9. package/es/elements/common/sub-header/SubHeaderLeftV2.js.map +1 -1
  10. package/es/elements/common/sub-header/SubHeaderRight.js +6 -2
  11. package/es/elements/common/sub-header/SubHeaderRight.js.map +1 -1
  12. package/es/elements/content-explorer/ContentExplorer.js +44 -5
  13. package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
  14. package/es/elements/content-explorer/ContentExplorer.scss +12 -0
  15. package/es/elements/content-explorer/MetadataSidePanel.js +92 -0
  16. package/es/elements/content-explorer/MetadataSidePanel.js.map +1 -0
  17. package/es/elements/content-explorer/MetadataSidePanel.scss +12 -0
  18. package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +30 -0
  19. package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
  20. package/es/elements/content-explorer/utils.js +67 -0
  21. package/es/elements/content-explorer/utils.js.map +1 -0
  22. package/es/src/elements/common/sub-header/SubHeader.d.ts +2 -1
  23. package/es/src/elements/common/sub-header/SubHeaderLeftV2.d.ts +1 -1
  24. package/es/src/elements/common/sub-header/SubHeaderRight.d.ts +4 -1
  25. package/es/src/elements/content-explorer/ContentExplorer.d.ts +15 -0
  26. package/es/src/elements/content-explorer/MetadataSidePanel.d.ts +13 -0
  27. package/es/src/elements/content-explorer/__tests__/MetadataSidePanel.test.d.ts +1 -0
  28. package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +1 -0
  29. package/es/src/elements/content-explorer/utils.d.ts +22 -0
  30. package/package.json +1 -1
  31. package/src/elements/common/sub-header/SubHeader.tsx +4 -0
  32. package/src/elements/common/sub-header/SubHeaderLeftV2.tsx +3 -22
  33. package/src/elements/common/sub-header/SubHeaderRight.tsx +8 -2
  34. package/src/elements/content-explorer/ContentExplorer.scss +12 -0
  35. package/src/elements/content-explorer/ContentExplorer.tsx +120 -71
  36. package/src/elements/content-explorer/MetadataSidePanel.scss +12 -0
  37. package/src/elements/content-explorer/MetadataSidePanel.tsx +126 -0
  38. package/src/elements/content-explorer/__tests__/ContentExplorer.test.tsx +80 -16
  39. package/src/elements/content-explorer/__tests__/MetadataSidePanel.test.tsx +127 -0
  40. package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +26 -0
  41. 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
+ }