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.
- package/dist/explorer.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.css +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/api/APIFactory.js +4 -2
- package/es/api/APIFactory.js.flow +4 -2
- package/es/api/APIFactory.js.map +1 -1
- package/es/elements/common/messages.js +8 -0
- package/es/elements/common/messages.js.flow +16 -0
- package/es/elements/common/messages.js.map +1 -1
- package/es/elements/common/sub-header/SubHeader.js +14 -1
- package/es/elements/common/sub-header/SubHeader.js.map +1 -1
- package/es/elements/common/sub-header/SubHeaderLeftV2.js +63 -0
- package/es/elements/common/sub-header/SubHeaderLeftV2.js.map +1 -0
- package/es/elements/common/sub-header/SubHeaderLeftV2.scss +3 -0
- package/es/elements/content-explorer/ContentExplorer.js +60 -3
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/src/elements/common/sub-header/SubHeader.d.ts +5 -1
- package/es/src/elements/common/sub-header/SubHeaderLeftV2.d.ts +13 -0
- package/es/src/elements/common/sub-header/__tests__/SubHeaderLeftV2.test.d.ts +1 -0
- package/es/src/elements/content-explorer/ContentExplorer.d.ts +12 -0
- package/i18n/bn-IN.js +2 -0
- package/i18n/da-DK.js +2 -0
- package/i18n/de-DE.js +2 -0
- package/i18n/en-AU.js +2 -0
- package/i18n/en-CA.js +2 -0
- package/i18n/en-GB.js +2 -0
- package/i18n/en-US.js +2 -0
- package/i18n/en-US.properties +4 -0
- package/i18n/en-x-pseudo.js +2 -0
- package/i18n/es-419.js +2 -0
- package/i18n/es-ES.js +2 -0
- package/i18n/fi-FI.js +2 -0
- package/i18n/fr-CA.js +2 -0
- package/i18n/fr-FR.js +2 -0
- package/i18n/hi-IN.js +2 -0
- package/i18n/it-IT.js +2 -0
- package/i18n/ja-JP.js +6 -4
- package/i18n/ja-JP.properties +4 -4
- package/i18n/ko-KR.js +2 -0
- package/i18n/nb-NO.js +2 -0
- package/i18n/nl-NL.js +2 -0
- package/i18n/pl-PL.js +2 -0
- package/i18n/pt-BR.js +2 -0
- package/i18n/ru-RU.js +2 -0
- package/i18n/sv-SE.js +2 -0
- package/i18n/tr-TR.js +2 -0
- package/i18n/zh-CN.js +2 -0
- package/i18n/zh-TW.js +2 -0
- package/package.json +1 -1
- package/src/api/APIFactory.js +4 -2
- package/src/elements/common/messages.js +16 -0
- package/src/elements/common/sub-header/SubHeader.tsx +24 -1
- package/src/elements/common/sub-header/SubHeaderLeftV2.scss +3 -0
- package/src/elements/common/sub-header/SubHeaderLeftV2.tsx +73 -0
- package/src/elements/common/sub-header/__tests__/SubHeaderLeftV2.test.tsx +109 -0
- 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:
|
|
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
|
|
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":[]}
|
|
@@ -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,
|