box-ui-elements 23.4.0-beta.35 → 23.4.0-beta.36

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 (62) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +1 -1
  3. package/dist/openwith.js +1 -1
  4. package/dist/picker.css +1 -1
  5. package/dist/picker.js +1 -1
  6. package/dist/preview.js +1 -1
  7. package/dist/sharing.js +1 -1
  8. package/dist/sidebar.js +1 -1
  9. package/dist/uploader.js +1 -1
  10. package/es/api/APIFactory.js +4 -2
  11. package/es/api/APIFactory.js.flow +4 -2
  12. package/es/api/APIFactory.js.map +1 -1
  13. package/es/elements/common/messages.js +8 -0
  14. package/es/elements/common/messages.js.flow +16 -0
  15. package/es/elements/common/messages.js.map +1 -1
  16. package/es/elements/common/sub-header/SubHeader.js +14 -1
  17. package/es/elements/common/sub-header/SubHeader.js.map +1 -1
  18. package/es/elements/common/sub-header/SubHeaderLeftV2.js +63 -0
  19. package/es/elements/common/sub-header/SubHeaderLeftV2.js.map +1 -0
  20. package/es/elements/common/sub-header/SubHeaderLeftV2.scss +3 -0
  21. package/es/elements/content-explorer/ContentExplorer.js +60 -3
  22. package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
  23. package/es/src/elements/common/sub-header/SubHeader.d.ts +5 -1
  24. package/es/src/elements/common/sub-header/SubHeaderLeftV2.d.ts +13 -0
  25. package/es/src/elements/common/sub-header/__tests__/SubHeaderLeftV2.test.d.ts +1 -0
  26. package/es/src/elements/content-explorer/ContentExplorer.d.ts +12 -0
  27. package/i18n/bn-IN.js +2 -0
  28. package/i18n/da-DK.js +2 -0
  29. package/i18n/de-DE.js +2 -0
  30. package/i18n/en-AU.js +2 -0
  31. package/i18n/en-CA.js +2 -0
  32. package/i18n/en-GB.js +2 -0
  33. package/i18n/en-US.js +2 -0
  34. package/i18n/en-US.properties +4 -0
  35. package/i18n/en-x-pseudo.js +2 -0
  36. package/i18n/es-419.js +2 -0
  37. package/i18n/es-ES.js +2 -0
  38. package/i18n/fi-FI.js +2 -0
  39. package/i18n/fr-CA.js +2 -0
  40. package/i18n/fr-FR.js +2 -0
  41. package/i18n/hi-IN.js +2 -0
  42. package/i18n/it-IT.js +2 -0
  43. package/i18n/ja-JP.js +6 -4
  44. package/i18n/ja-JP.properties +4 -4
  45. package/i18n/ko-KR.js +2 -0
  46. package/i18n/nb-NO.js +2 -0
  47. package/i18n/nl-NL.js +2 -0
  48. package/i18n/pl-PL.js +2 -0
  49. package/i18n/pt-BR.js +2 -0
  50. package/i18n/ru-RU.js +2 -0
  51. package/i18n/sv-SE.js +2 -0
  52. package/i18n/tr-TR.js +2 -0
  53. package/i18n/zh-CN.js +2 -0
  54. package/i18n/zh-TW.js +2 -0
  55. package/package.json +1 -1
  56. package/src/api/APIFactory.js +4 -2
  57. package/src/elements/common/messages.js +16 -0
  58. package/src/elements/common/sub-header/SubHeader.tsx +24 -1
  59. package/src/elements/common/sub-header/SubHeaderLeftV2.scss +3 -0
  60. package/src/elements/common/sub-header/SubHeaderLeftV2.tsx +73 -0
  61. package/src/elements/common/sub-header/__tests__/SubHeaderLeftV2.test.tsx +109 -0
  62. package/src/elements/content-explorer/ContentExplorer.tsx +57 -2
@@ -1,7 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import noop from 'lodash/noop';
3
+ import classNames from 'classnames';
3
4
  import { PageHeader } from '@box/blueprint-web';
4
5
  import SubHeaderLeft from './SubHeaderLeft';
6
+ import SubHeaderLeftV2 from './SubHeaderLeftV2';
5
7
  import SubHeaderRight from './SubHeaderRight';
6
8
  import { VIEW_MODE_LIST, VIEW_METADATA } from '../../../constants';
7
9
  import { useFeatureEnabled } from '../feature-checking';
@@ -16,6 +18,7 @@ const SubHeader = ({
16
18
  maxGridColumnCountForWidth = 0,
17
19
  onGridViewSliderChange = noop,
18
20
  isSmall,
21
+ onClearSelectedItemIds,
19
22
  onCreate,
20
23
  onItemClick,
21
24
  onSortChange,
@@ -24,6 +27,8 @@ const SubHeader = ({
24
27
  portalElement,
25
28
  rootId,
26
29
  rootName,
30
+ selectedItemIds,
31
+ title,
27
32
  view,
28
33
  viewMode = VIEW_MODE_LIST
29
34
  }) => {
@@ -32,7 +37,9 @@ const SubHeader = ({
32
37
  return null;
33
38
  }
34
39
  return /*#__PURE__*/React.createElement(PageHeader.Root, {
35
- className: "be-sub-header",
40
+ className: classNames({
41
+ 'be-sub-header': !isMetadataViewV2Feature
42
+ }),
36
43
  "data-testid": "be-sub-header",
37
44
  variant: "inline"
38
45
  }, /*#__PURE__*/React.createElement(PageHeader.StartElements, null, view !== VIEW_METADATA && !isMetadataViewV2Feature && /*#__PURE__*/React.createElement(SubHeaderLeft, {
@@ -43,6 +50,12 @@ const SubHeader = ({
43
50
  rootId: rootId,
44
51
  rootName: rootName,
45
52
  view: view
53
+ }), isMetadataViewV2Feature && /*#__PURE__*/React.createElement(SubHeaderLeftV2, {
54
+ currentCollection: currentCollection,
55
+ onClearSelectedItemIds: onClearSelectedItemIds,
56
+ rootName: rootName,
57
+ selectedItemIds: selectedItemIds,
58
+ title: title
46
59
  })), /*#__PURE__*/React.createElement(PageHeader.EndElements, null, /*#__PURE__*/React.createElement(SubHeaderRight, {
47
60
  canCreateNewFolder: canCreateNewFolder,
48
61
  canUpload: canUpload,
@@ -1 +1 @@
1
- {"version":3,"file":"SubHeader.js","names":["React","noop","PageHeader","SubHeaderLeft","SubHeaderRight","VIEW_MODE_LIST","VIEW_METADATA","useFeatureEnabled","SubHeader","canCreateNewFolder","canUpload","currentCollection","gridColumnCount","gridMaxColumns","gridMinColumns","maxGridColumnCountForWidth","onGridViewSliderChange","isSmall","onCreate","onItemClick","onSortChange","onUpload","onViewModeChange","portalElement","rootId","rootName","view","viewMode","isMetadataViewV2Feature","createElement","Root","className","variant","StartElements","EndElements"],"sources":["../../../../src/elements/common/sub-header/SubHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport noop from 'lodash/noop';\nimport { PageHeader } from '@box/blueprint-web';\nimport SubHeaderLeft from './SubHeaderLeft';\nimport SubHeaderRight from './SubHeaderRight';\nimport type { ViewMode } from '../flowTypes';\nimport type { View, Collection } from '../../../common/types/core';\nimport { VIEW_MODE_LIST, VIEW_METADATA } from '../../../constants';\nimport { useFeatureEnabled } from '../feature-checking';\n\nimport './SubHeader.scss';\n\nexport interface SubHeaderProps {\n canCreateNewFolder: boolean;\n canUpload: boolean;\n currentCollection: Collection;\n gridColumnCount?: number;\n gridMaxColumns?: number;\n gridMinColumns?: number;\n isSmall: boolean;\n maxGridColumnCountForWidth?: number;\n onCreate: () => void;\n onGridViewSliderChange?: (newSliderValue: number) => void;\n onItemClick: (id: string | null, triggerNavigationEvent: boolean | null) => void;\n onSortChange: (sortBy: string, sortDirection: string) => void;\n onUpload: () => void;\n onViewModeChange?: (viewMode: ViewMode) => void;\n portalElement?: HTMLElement;\n rootId: string;\n rootName?: string;\n view: View;\n viewMode?: ViewMode;\n}\n\nconst SubHeader = ({\n canCreateNewFolder,\n canUpload,\n currentCollection,\n gridColumnCount = 0,\n gridMaxColumns = 0,\n gridMinColumns = 0,\n maxGridColumnCountForWidth = 0,\n onGridViewSliderChange = noop,\n isSmall,\n onCreate,\n onItemClick,\n onSortChange,\n onUpload,\n onViewModeChange,\n portalElement,\n rootId,\n rootName,\n view,\n viewMode = VIEW_MODE_LIST,\n}: SubHeaderProps) => {\n const isMetadataViewV2Feature = useFeatureEnabled('contentExplorer.metadataViewV2');\n\n if (view === VIEW_METADATA && !isMetadataViewV2Feature) {\n return null;\n }\n\n return (\n <PageHeader.Root className=\"be-sub-header\" data-testid=\"be-sub-header\" variant=\"inline\">\n <PageHeader.StartElements>\n {view !== VIEW_METADATA && !isMetadataViewV2Feature && (\n <SubHeaderLeft\n currentCollection={currentCollection}\n isSmall={isSmall}\n onItemClick={onItemClick}\n portalElement={portalElement}\n rootId={rootId}\n rootName={rootName}\n view={view}\n />\n )}\n </PageHeader.StartElements>\n <PageHeader.EndElements>\n <SubHeaderRight\n canCreateNewFolder={canCreateNewFolder}\n canUpload={canUpload}\n currentCollection={currentCollection}\n gridColumnCount={gridColumnCount}\n gridMaxColumns={gridMaxColumns}\n gridMinColumns={gridMinColumns}\n maxGridColumnCountForWidth={maxGridColumnCountForWidth}\n onCreate={onCreate}\n onGridViewSliderChange={onGridViewSliderChange}\n onSortChange={onSortChange}\n onUpload={onUpload}\n onViewModeChange={onViewModeChange}\n portalElement={portalElement}\n view={view}\n viewMode={viewMode}\n />\n </PageHeader.EndElements>\n </PageHeader.Root>\n );\n};\n\nexport default SubHeader;\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,aAAa;AAC9B,SAASC,UAAU,QAAQ,oBAAoB;AAC/C,OAAOC,aAAa,MAAM,iBAAiB;AAC3C,OAAOC,cAAc,MAAM,kBAAkB;AAG7C,SAASC,cAAc,EAAEC,aAAa,QAAQ,oBAAoB;AAClE,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,kBAAkB;AAwBzB,MAAMC,SAAS,GAAGA,CAAC;EACfC,kBAAkB;EAClBC,SAAS;EACTC,iBAAiB;EACjBC,eAAe,GAAG,CAAC;EACnBC,cAAc,GAAG,CAAC;EAClBC,cAAc,GAAG,CAAC;EAClBC,0BAA0B,GAAG,CAAC;EAC9BC,sBAAsB,GAAGf,IAAI;EAC7BgB,OAAO;EACPC,QAAQ;EACRC,WAAW;EACXC,YAAY;EACZC,QAAQ;EACRC,gBAAgB;EAChBC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,IAAI;EACJC,QAAQ,GAAGtB;AACC,CAAC,KAAK;EAClB,MAAMuB,uBAAuB,GAAGrB,iBAAiB,CAAC,gCAAgC,CAAC;EAEnF,IAAImB,IAAI,KAAKpB,aAAa,IAAI,CAACsB,uBAAuB,EAAE;IACpD,OAAO,IAAI;EACf;EAEA,oBACI5B,KAAA,CAAA6B,aAAA,CAAC3B,UAAU,CAAC4B,IAAI;IAACC,SAAS,EAAC,eAAe;IAAC,eAAY,eAAe;IAACC,OAAO,EAAC;EAAQ,gBACnFhC,KAAA,CAAA6B,aAAA,CAAC3B,UAAU,CAAC+B,aAAa,QACpBP,IAAI,KAAKpB,aAAa,IAAI,CAACsB,uBAAuB,iBAC/C5B,KAAA,CAAA6B,aAAA,CAAC1B,aAAa;IACVQ,iBAAiB,EAAEA,iBAAkB;IACrCM,OAAO,EAAEA,OAAQ;IACjBE,WAAW,EAAEA,WAAY;IACzBI,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfC,QAAQ,EAAEA,QAAS;IACnBC,IAAI,EAAEA;EAAK,CACd,CAEiB,CAAC,eAC3B1B,KAAA,CAAA6B,aAAA,CAAC3B,UAAU,CAACgC,WAAW,qBACnBlC,KAAA,CAAA6B,aAAA,CAACzB,cAAc;IACXK,kBAAkB,EAAEA,kBAAmB;IACvCC,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCC,eAAe,EAAEA,eAAgB;IACjCC,cAAc,EAAEA,cAAe;IAC/BC,cAAc,EAAEA,cAAe;IAC/BC,0BAA0B,EAAEA,0BAA2B;IACvDG,QAAQ,EAAEA,QAAS;IACnBF,sBAAsB,EAAEA,sBAAuB;IAC/CI,YAAY,EAAEA,YAAa;IAC3BC,QAAQ,EAAEA,QAAS;IACnBC,gBAAgB,EAAEA,gBAAiB;IACnCC,aAAa,EAAEA,aAAc;IAC7BG,IAAI,EAAEA,IAAK;IACXC,QAAQ,EAAEA;EAAS,CACtB,CACmB,CACX,CAAC;AAE1B,CAAC;AAED,eAAenB,SAAS","ignoreList":[]}
1
+ {"version":3,"file":"SubHeader.js","names":["React","noop","classNames","PageHeader","SubHeaderLeft","SubHeaderLeftV2","SubHeaderRight","VIEW_MODE_LIST","VIEW_METADATA","useFeatureEnabled","SubHeader","canCreateNewFolder","canUpload","currentCollection","gridColumnCount","gridMaxColumns","gridMinColumns","maxGridColumnCountForWidth","onGridViewSliderChange","isSmall","onClearSelectedItemIds","onCreate","onItemClick","onSortChange","onUpload","onViewModeChange","portalElement","rootId","rootName","selectedItemIds","title","view","viewMode","isMetadataViewV2Feature","createElement","Root","className","variant","StartElements","EndElements"],"sources":["../../../../src/elements/common/sub-header/SubHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport noop from 'lodash/noop';\nimport classNames from 'classnames';\nimport { PageHeader } from '@box/blueprint-web';\nimport type { Selection } from 'react-aria-components';\n\nimport SubHeaderLeft from './SubHeaderLeft';\nimport SubHeaderLeftV2 from './SubHeaderLeftV2';\nimport SubHeaderRight from './SubHeaderRight';\nimport type { ViewMode } from '../flowTypes';\nimport type { View, Collection } from '../../../common/types/core';\nimport { VIEW_MODE_LIST, VIEW_METADATA } from '../../../constants';\nimport { useFeatureEnabled } from '../feature-checking';\n\nimport './SubHeader.scss';\n\nexport interface SubHeaderProps {\n canCreateNewFolder: boolean;\n canUpload: boolean;\n currentCollection: Collection;\n gridColumnCount?: number;\n gridMaxColumns?: number;\n gridMinColumns?: number;\n isSmall: boolean;\n maxGridColumnCountForWidth?: number;\n onClearSelectedItemIds: () => void;\n onCreate: () => void;\n onGridViewSliderChange?: (newSliderValue: number) => void;\n onItemClick: (id: string | null, triggerNavigationEvent: boolean | null) => void;\n onSortChange: (sortBy: string, sortDirection: string) => void;\n onUpload: () => void;\n onViewModeChange?: (viewMode: ViewMode) => void;\n portalElement?: HTMLElement;\n rootId: string;\n rootName?: string;\n selectedItemIds: Selection;\n title?: string;\n view: View;\n viewMode?: ViewMode;\n}\n\nconst SubHeader = ({\n canCreateNewFolder,\n canUpload,\n currentCollection,\n gridColumnCount = 0,\n gridMaxColumns = 0,\n gridMinColumns = 0,\n maxGridColumnCountForWidth = 0,\n onGridViewSliderChange = noop,\n isSmall,\n onClearSelectedItemIds,\n onCreate,\n onItemClick,\n onSortChange,\n onUpload,\n onViewModeChange,\n portalElement,\n rootId,\n rootName,\n selectedItemIds,\n title,\n view,\n viewMode = VIEW_MODE_LIST,\n}: SubHeaderProps) => {\n const isMetadataViewV2Feature = useFeatureEnabled('contentExplorer.metadataViewV2');\n\n if (view === VIEW_METADATA && !isMetadataViewV2Feature) {\n return null;\n }\n\n return (\n <PageHeader.Root\n className={classNames({ 'be-sub-header': !isMetadataViewV2Feature })}\n data-testid=\"be-sub-header\"\n variant=\"inline\"\n >\n <PageHeader.StartElements>\n {view !== VIEW_METADATA && !isMetadataViewV2Feature && (\n <SubHeaderLeft\n currentCollection={currentCollection}\n isSmall={isSmall}\n onItemClick={onItemClick}\n portalElement={portalElement}\n rootId={rootId}\n rootName={rootName}\n view={view}\n />\n )}\n {isMetadataViewV2Feature && (\n <SubHeaderLeftV2\n currentCollection={currentCollection}\n onClearSelectedItemIds={onClearSelectedItemIds}\n rootName={rootName}\n selectedItemIds={selectedItemIds}\n title={title}\n />\n )}\n </PageHeader.StartElements>\n <PageHeader.EndElements>\n <SubHeaderRight\n canCreateNewFolder={canCreateNewFolder}\n canUpload={canUpload}\n currentCollection={currentCollection}\n gridColumnCount={gridColumnCount}\n gridMaxColumns={gridMaxColumns}\n gridMinColumns={gridMinColumns}\n maxGridColumnCountForWidth={maxGridColumnCountForWidth}\n onCreate={onCreate}\n onGridViewSliderChange={onGridViewSliderChange}\n onSortChange={onSortChange}\n onUpload={onUpload}\n onViewModeChange={onViewModeChange}\n portalElement={portalElement}\n view={view}\n viewMode={viewMode}\n />\n </PageHeader.EndElements>\n </PageHeader.Root>\n );\n};\n\nexport default SubHeader;\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,UAAU,QAAQ,oBAAoB;AAG/C,OAAOC,aAAa,MAAM,iBAAiB;AAC3C,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,OAAOC,cAAc,MAAM,kBAAkB;AAG7C,SAASC,cAAc,EAAEC,aAAa,QAAQ,oBAAoB;AAClE,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,kBAAkB;AA2BzB,MAAMC,SAAS,GAAGA,CAAC;EACfC,kBAAkB;EAClBC,SAAS;EACTC,iBAAiB;EACjBC,eAAe,GAAG,CAAC;EACnBC,cAAc,GAAG,CAAC;EAClBC,cAAc,GAAG,CAAC;EAClBC,0BAA0B,GAAG,CAAC;EAC9BC,sBAAsB,GAAGjB,IAAI;EAC7BkB,OAAO;EACPC,sBAAsB;EACtBC,QAAQ;EACRC,WAAW;EACXC,YAAY;EACZC,QAAQ;EACRC,gBAAgB;EAChBC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,eAAe;EACfC,KAAK;EACLC,IAAI;EACJC,QAAQ,GAAGzB;AACC,CAAC,KAAK;EAClB,MAAM0B,uBAAuB,GAAGxB,iBAAiB,CAAC,gCAAgC,CAAC;EAEnF,IAAIsB,IAAI,KAAKvB,aAAa,IAAI,CAACyB,uBAAuB,EAAE;IACpD,OAAO,IAAI;EACf;EAEA,oBACIjC,KAAA,CAAAkC,aAAA,CAAC/B,UAAU,CAACgC,IAAI;IACZC,SAAS,EAAElC,UAAU,CAAC;MAAE,eAAe,EAAE,CAAC+B;IAAwB,CAAC,CAAE;IACrE,eAAY,eAAe;IAC3BI,OAAO,EAAC;EAAQ,gBAEhBrC,KAAA,CAAAkC,aAAA,CAAC/B,UAAU,CAACmC,aAAa,QACpBP,IAAI,KAAKvB,aAAa,IAAI,CAACyB,uBAAuB,iBAC/CjC,KAAA,CAAAkC,aAAA,CAAC9B,aAAa;IACVS,iBAAiB,EAAEA,iBAAkB;IACrCM,OAAO,EAAEA,OAAQ;IACjBG,WAAW,EAAEA,WAAY;IACzBI,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfC,QAAQ,EAAEA,QAAS;IACnBG,IAAI,EAAEA;EAAK,CACd,CACJ,EACAE,uBAAuB,iBACpBjC,KAAA,CAAAkC,aAAA,CAAC7B,eAAe;IACZQ,iBAAiB,EAAEA,iBAAkB;IACrCO,sBAAsB,EAAEA,sBAAuB;IAC/CQ,QAAQ,EAAEA,QAAS;IACnBC,eAAe,EAAEA,eAAgB;IACjCC,KAAK,EAAEA;EAAM,CAChB,CAEiB,CAAC,eAC3B9B,KAAA,CAAAkC,aAAA,CAAC/B,UAAU,CAACoC,WAAW,qBACnBvC,KAAA,CAAAkC,aAAA,CAAC5B,cAAc;IACXK,kBAAkB,EAAEA,kBAAmB;IACvCC,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCC,eAAe,EAAEA,eAAgB;IACjCC,cAAc,EAAEA,cAAe;IAC/BC,cAAc,EAAEA,cAAe;IAC/BC,0BAA0B,EAAEA,0BAA2B;IACvDI,QAAQ,EAAEA,QAAS;IACnBH,sBAAsB,EAAEA,sBAAuB;IAC/CK,YAAY,EAAEA,YAAa;IAC3BC,QAAQ,EAAEA,QAAS;IACnBC,gBAAgB,EAAEA,gBAAiB;IACnCC,aAAa,EAAEA,aAAc;IAC7BK,IAAI,EAAEA,IAAK;IACXC,QAAQ,EAAEA;EAAS,CACtB,CACmB,CACX,CAAC;AAE1B,CAAC;AAED,eAAetB,SAAS","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ import React, { useMemo } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { XMark } from '@box/blueprint-web-assets/icons/Fill/index';
4
+ import { IconButton, PageHeader, Text } from '@box/blueprint-web';
5
+ import messages from '../messages';
6
+ import './SubHeaderLeftV2.scss';
7
+ const SubHeaderLeftV2 = props => {
8
+ const {
9
+ currentCollection,
10
+ onClearSelectedItemIds,
11
+ rootName,
12
+ selectedItemIds,
13
+ title
14
+ } = props;
15
+ const {
16
+ formatMessage
17
+ } = useIntl();
18
+
19
+ // Generate selected item text based on selected keys
20
+ const selectedItemText = useMemo(() => {
21
+ const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;
22
+ if (selectedCount === 0) {
23
+ return '';
24
+ }
25
+
26
+ // Case 1: Single selected item - show item name
27
+ if (selectedCount === 1) {
28
+ const selectedKey = selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;
29
+ const selectedItem = currentCollection.items.find(item => item.id === selectedKey);
30
+ return selectedItem?.name ?? '';
31
+ }
32
+ // Case 2: Multiple selected items - show count
33
+ if (selectedCount > 1) {
34
+ return formatMessage(messages.numFilesSelected, {
35
+ numSelected: selectedCount
36
+ });
37
+ }
38
+ return '';
39
+ }, [currentCollection.items, formatMessage, selectedItemIds]);
40
+
41
+ // Case 1 and 2: selected item text with X button
42
+ if (selectedItemText) {
43
+ return /*#__PURE__*/React.createElement(PageHeader.Root, {
44
+ className: "be-SubHeaderLeftV2--selection",
45
+ variant: "default"
46
+ }, /*#__PURE__*/React.createElement(PageHeader.Corner, null, /*#__PURE__*/React.createElement(IconButton, {
47
+ "aria-label": formatMessage(messages.clearSelection),
48
+ icon: XMark,
49
+ onClick: onClearSelectedItemIds,
50
+ variant: "small-utility"
51
+ })), /*#__PURE__*/React.createElement(PageHeader.StartElements, null, /*#__PURE__*/React.createElement(Text, {
52
+ as: "span"
53
+ }, selectedItemText)));
54
+ }
55
+
56
+ // Case 3: No selected items - show title if provided, otherwise show root name
57
+ return /*#__PURE__*/React.createElement(Text, {
58
+ as: "h1",
59
+ variant: "titleXLarge"
60
+ }, title ?? rootName);
61
+ };
62
+ export default SubHeaderLeftV2;
63
+ //# sourceMappingURL=SubHeaderLeftV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubHeaderLeftV2.js","names":["React","useMemo","useIntl","XMark","IconButton","PageHeader","Text","messages","SubHeaderLeftV2","props","currentCollection","onClearSelectedItemIds","rootName","selectedItemIds","title","formatMessage","selectedItemText","selectedCount","items","length","size","selectedKey","id","values","next","value","selectedItem","find","item","name","numFilesSelected","numSelected","createElement","Root","className","variant","Corner","clearSelection","icon","onClick","StartElements","as"],"sources":["../../../../src/elements/common/sub-header/SubHeaderLeftV2.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { XMark } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { IconButton, PageHeader, Text } from '@box/blueprint-web';\nimport type { Selection } from 'react-aria-components';\nimport type { Collection } from '../../../common/types/core';\nimport messages from '../messages';\n\nimport './SubHeaderLeftV2.scss';\n\nexport interface SubHeaderLeftV2Props {\n currentCollection: Collection;\n onClearSelectedItemIds?: () => void;\n rootName?: string;\n selectedItemIds: Selection;\n title?: string;\n}\n\nconst SubHeaderLeftV2 = (props: SubHeaderLeftV2Props) => {\n const { currentCollection, onClearSelectedItemIds, rootName, selectedItemIds, title } = props;\n const { formatMessage } = useIntl();\n\n // Generate selected item text based on selected keys\n const selectedItemText: string = useMemo(() => {\n const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;\n\n if (selectedCount === 0) {\n return '';\n }\n\n // Case 1: Single selected item - show item name\n if (selectedCount === 1) {\n const selectedKey =\n selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;\n const selectedItem = currentCollection.items.find(item => item.id === selectedKey);\n return selectedItem?.name ?? '';\n }\n // Case 2: Multiple selected items - show count\n if (selectedCount > 1) {\n return formatMessage(messages.numFilesSelected, { numSelected: selectedCount });\n }\n return '';\n }, [currentCollection.items, formatMessage, selectedItemIds]);\n\n // Case 1 and 2: selected item text with X button\n if (selectedItemText) {\n return (\n <PageHeader.Root className=\"be-SubHeaderLeftV2--selection\" variant=\"default\">\n <PageHeader.Corner>\n <IconButton\n aria-label={formatMessage(messages.clearSelection)}\n icon={XMark}\n onClick={onClearSelectedItemIds}\n variant=\"small-utility\"\n />\n </PageHeader.Corner>\n\n <PageHeader.StartElements>\n <Text as=\"span\">{selectedItemText}</Text>\n </PageHeader.StartElements>\n </PageHeader.Root>\n );\n }\n\n // Case 3: No selected items - show title if provided, otherwise show root name\n return (\n <Text as=\"h1\" variant=\"titleXLarge\">\n {title ?? rootName}\n </Text>\n );\n};\n\nexport default SubHeaderLeftV2;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,OAAO,QAAQ,YAAY;AACpC,SAASC,KAAK,QAAQ,4CAA4C;AAClE,SAASC,UAAU,EAAEC,UAAU,EAAEC,IAAI,QAAQ,oBAAoB;AAGjE,OAAOC,QAAQ,MAAM,aAAa;AAElC,OAAO,wBAAwB;AAU/B,MAAMC,eAAe,GAAIC,KAA2B,IAAK;EACrD,MAAM;IAAEC,iBAAiB;IAAEC,sBAAsB;IAAEC,QAAQ;IAAEC,eAAe;IAAEC;EAAM,CAAC,GAAGL,KAAK;EAC7F,MAAM;IAAEM;EAAc,CAAC,GAAGb,OAAO,CAAC,CAAC;;EAEnC;EACA,MAAMc,gBAAwB,GAAGf,OAAO,CAAC,MAAM;IAC3C,MAAMgB,aAAa,GAAGJ,eAAe,KAAK,KAAK,GAAGH,iBAAiB,CAACQ,KAAK,CAACC,MAAM,GAAGN,eAAe,CAACO,IAAI;IAEvG,IAAIH,aAAa,KAAK,CAAC,EAAE;MACrB,OAAO,EAAE;IACb;;IAEA;IACA,IAAIA,aAAa,KAAK,CAAC,EAAE;MACrB,MAAMI,WAAW,GACbR,eAAe,KAAK,KAAK,GAAGH,iBAAiB,CAACQ,KAAK,CAAC,CAAC,CAAC,CAACI,EAAE,GAAGT,eAAe,CAACU,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK;MACrG,MAAMC,YAAY,GAAGhB,iBAAiB,CAACQ,KAAK,CAACS,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACN,EAAE,KAAKD,WAAW,CAAC;MAClF,OAAOK,YAAY,EAAEG,IAAI,IAAI,EAAE;IACnC;IACA;IACA,IAAIZ,aAAa,GAAG,CAAC,EAAE;MACnB,OAAOF,aAAa,CAACR,QAAQ,CAACuB,gBAAgB,EAAE;QAAEC,WAAW,EAAEd;MAAc,CAAC,CAAC;IACnF;IACA,OAAO,EAAE;EACb,CAAC,EAAE,CAACP,iBAAiB,CAACQ,KAAK,EAAEH,aAAa,EAAEF,eAAe,CAAC,CAAC;;EAE7D;EACA,IAAIG,gBAAgB,EAAE;IAClB,oBACIhB,KAAA,CAAAgC,aAAA,CAAC3B,UAAU,CAAC4B,IAAI;MAACC,SAAS,EAAC,+BAA+B;MAACC,OAAO,EAAC;IAAS,gBACxEnC,KAAA,CAAAgC,aAAA,CAAC3B,UAAU,CAAC+B,MAAM,qBACdpC,KAAA,CAAAgC,aAAA,CAAC5B,UAAU;MACP,cAAYW,aAAa,CAACR,QAAQ,CAAC8B,cAAc,CAAE;MACnDC,IAAI,EAAEnC,KAAM;MACZoC,OAAO,EAAE5B,sBAAuB;MAChCwB,OAAO,EAAC;IAAe,CAC1B,CACc,CAAC,eAEpBnC,KAAA,CAAAgC,aAAA,CAAC3B,UAAU,CAACmC,aAAa,qBACrBxC,KAAA,CAAAgC,aAAA,CAAC1B,IAAI;MAACmC,EAAE,EAAC;IAAM,GAAEzB,gBAAuB,CAClB,CACb,CAAC;EAE1B;;EAEA;EACA,oBACIhB,KAAA,CAAAgC,aAAA,CAAC1B,IAAI;IAACmC,EAAE,EAAC,IAAI;IAACN,OAAO,EAAC;EAAa,GAC9BrB,KAAK,IAAIF,QACR,CAAC;AAEf,CAAC;AAED,eAAeJ,eAAe","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ .be-SubHeaderLeftV2--selection {
2
+ gap: var(--space-3);
3
+ }
@@ -1049,6 +1049,31 @@ class ContentExplorer extends Component {
1049
1049
  }
1050
1050
  return maxWidthColumns;
1051
1051
  });
1052
+ _defineProperty(this, "getMetadataViewProps", () => {
1053
+ const {
1054
+ metadataViewProps
1055
+ } = this.props;
1056
+ const {
1057
+ tableProps
1058
+ } = metadataViewProps ?? {};
1059
+ const {
1060
+ onSelectionChange
1061
+ } = tableProps ?? {};
1062
+ const {
1063
+ selectedItemIds
1064
+ } = this.state;
1065
+ return _objectSpread(_objectSpread({}, metadataViewProps), {}, {
1066
+ tableProps: _objectSpread(_objectSpread({}, tableProps), {}, {
1067
+ selectedKeys: selectedItemIds,
1068
+ onSelectionChange: ids => {
1069
+ onSelectionChange?.(ids);
1070
+ this.setState({
1071
+ selectedItemIds: ids
1072
+ });
1073
+ }
1074
+ })
1075
+ });
1076
+ });
1052
1077
  /**
1053
1078
  * Change the current view mode
1054
1079
  *
@@ -1113,6 +1138,31 @@ class ContentExplorer extends Component {
1113
1138
  }
1114
1139
  });
1115
1140
  });
1141
+ _defineProperty(this, "clearSelectedItemIds", () => {
1142
+ this.setState({
1143
+ selectedItemIds: new Set()
1144
+ });
1145
+ });
1146
+ /**
1147
+ * Fetches the folder name and stores it in state rootName if successful
1148
+ *
1149
+ * @private
1150
+ * @return {void}
1151
+ */
1152
+ _defineProperty(this, "fetchFolderName", folderId => {
1153
+ if (!folderId) {
1154
+ return;
1155
+ }
1156
+ this.api.getFolderAPI(false).getFolderFields(folderId, ({
1157
+ name
1158
+ }) => {
1159
+ this.setState({
1160
+ rootName: name
1161
+ });
1162
+ }, this.errorCallback, {
1163
+ fields: [FIELD_NAME]
1164
+ });
1165
+ });
1116
1166
  const {
1117
1167
  apiHost,
1118
1168
  initialPage,
@@ -1159,6 +1209,7 @@ class ContentExplorer extends Component {
1159
1209
  markers: [],
1160
1210
  metadataTemplate: {},
1161
1211
  rootName: '',
1212
+ selectedItemIds: new Set(),
1162
1213
  searchQuery: '',
1163
1214
  sortBy: _sortBy,
1164
1215
  sortDirection: _sortDirection,
@@ -1197,7 +1248,8 @@ class ContentExplorer extends Component {
1197
1248
  componentDidMount() {
1198
1249
  const {
1199
1250
  currentFolderId,
1200
- defaultView
1251
+ defaultView,
1252
+ metadataQuery
1201
1253
  } = this.props;
1202
1254
  this.rootElement = document.getElementById(this.id);
1203
1255
  this.appElement = this.rootElement.firstElementChild;
@@ -1207,6 +1259,7 @@ class ContentExplorer extends Component {
1207
1259
  break;
1208
1260
  case DEFAULT_VIEW_METADATA:
1209
1261
  this.showMetadataQueryResults();
1262
+ this.fetchFolderName(metadataQuery?.ancestor_folder_id);
1210
1263
  break;
1211
1264
  default:
1212
1265
  this.fetchFolder(currentFolderId);
@@ -1496,7 +1549,6 @@ class ContentExplorer extends Component {
1496
1549
  measureRef,
1497
1550
  messages,
1498
1551
  fieldsToShow,
1499
- metadataViewProps,
1500
1552
  onDownload,
1501
1553
  onPreview,
1502
1554
  onUpload,
@@ -1509,6 +1561,7 @@ class ContentExplorer extends Component {
1509
1561
  staticPath,
1510
1562
  previewLibraryVersion,
1511
1563
  theme,
1564
+ title,
1512
1565
  token,
1513
1566
  uploadHost
1514
1567
  } = this.props;
@@ -1549,6 +1602,7 @@ class ContentExplorer extends Component {
1549
1602
  const maxGridColumnCount = this.getMaxNumberOfGridViewColumnsForWidth();
1550
1603
  const hasNextMarker = !!markers[currentPageNumber + 1];
1551
1604
  const hasPreviousMarker = currentPageNumber === 1 || !!markers[currentPageNumber - 1];
1605
+ const metadataViewProps = this.getMetadataViewProps();
1552
1606
 
1553
1607
  /* eslint-disable jsx-a11y/no-static-element-interactions */
1554
1608
  /* eslint-disable jsx-a11y/no-noninteractive-tabindex */
@@ -1587,12 +1641,15 @@ class ContentExplorer extends Component {
1587
1641
  gridMinColumns: GRID_VIEW_MIN_COLUMNS,
1588
1642
  maxGridColumnCountForWidth: maxGridColumnCount,
1589
1643
  onUpload: this.upload,
1644
+ onClearSelectedItemIds: this.clearSelectedItemIds,
1590
1645
  onCreate: this.createFolder,
1591
1646
  onGridViewSliderChange: this.onGridViewSliderChange,
1592
1647
  onItemClick: this.fetchFolder,
1593
1648
  onSortChange: this.sort,
1594
1649
  onViewModeChange: this.changeViewMode,
1595
- portalElement: this.rootElement
1650
+ portalElement: this.rootElement,
1651
+ selectedItemIds: this.state.selectedItemIds,
1652
+ title: title
1596
1653
  }), /*#__PURE__*/React.createElement(Content, {
1597
1654
  canDelete: canDelete,
1598
1655
  canDownload: canDownload,