close
Skip to content

Commit 3d8eaf8

Browse files
feat(content-explorer): clickable status message for include subfolders (#3266)
* feat(content-explorer): clickable status message for include subfolders * feat(content-explorer): clickable status message for include subfolders * feat(content-explorer): clickable status message for include subfolders * feat(content-explorer): clickable status message for include subfolders * feat(content-explorer): clickable status message for include subfolders * feat(content-explorer): clickable status message for include subfolders --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent fc95d4d commit 3d8eaf8

7 files changed

Lines changed: 83 additions & 7 deletions

File tree

‎src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class ContentExplorerModalContainer extends Component {
5454
* @param {number} selectedItemIndex
5555
*/
5656
onSelectItem: PropTypes.func,
57+
/** Called when the number of items selected text is clicked */
58+
onViewSelectedClick: PropTypes.func,
5759
/** Folder is in the process of being created. */
5860
isCreatingFolder: PropTypes.bool,
5961
/** Whether the user can see select all checkbox */

‎src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type Props = {
3131
onSelectItem?: (item: Object, index: number) => void,
3232
onSelectedClick?: () => void,
3333
onSelectedItemsUpdate?: Function,
34+
onViewSelectedClick?: Function,
3435
title?: string,
3536
};
3637

‎src/features/content-explorer/content-explorer/ContentExplorer.js‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class ContentExplorer extends Component {
8686
onChooseItems: PropTypes.func,
8787
/** Called when selected button is clicked */
8888
onSelectedClick: PropTypes.func,
89+
/** Called when the number of items selected text is clicked */
90+
onViewSelectedClick: PropTypes.func,
8991
/**
9092
* Called when a destination folder has been selected for moving an item to
9193
*
@@ -451,6 +453,7 @@ class ContentExplorer extends Component {
451453
onCancelButtonClick,
452454
onCreateNewFolderButtonClick,
453455
onSelectedClick,
456+
onViewSelectedClick,
454457
showCreateNewFolderButton,
455458
isChooseButtonLoading,
456459
isCopyButtonLoading,
@@ -598,8 +601,10 @@ class ContentExplorer extends Component {
598601
onCancelClick={onCancelButtonClick}
599602
onChooseClick={onChooseItems}
600603
onCopyClick={onCopyItem}
604+
onFoldersPathUpdated={this.handleFoldersPathUpdated}
601605
onSelectedClick={onSelectedClick}
602606
onMoveClick={onMoveItem}
607+
onViewSelectedClick={onViewSelectedClick}
603608
selectedItems={selectedItems}
604609
isNoSelectionAllowed={isNoSelectionAllowed}
605610
/>

‎src/features/content-explorer/content-explorer/ContentExplorer.scss‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,15 @@
147147
margin-top: 5px;
148148
}
149149

150+
.status-message-link {
151+
position: absolute;
152+
left: 0;
153+
margin-top: 5px;
154+
color: $bdl-box-blue;
155+
font-size: $bdl-fontSize--dejaBlue;
156+
line-height: $bdl-line-height;
157+
}
158+
150159
.content-explorer-copy-button {
151160
margin-right: 0;
152161
}

‎src/features/content-explorer/content-explorer/ContentExplorerActionButtons.js‎

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import React from 'react';
33
import { FormattedMessage } from 'react-intl';
44

55
import Button from '../../../components/button';
6+
import PlainButton from '../../../components/plain-button';
67
import PrimaryButton from '../../../components/primary-button';
78

89
import { ContentExplorerModePropType, FolderPropType, ItemsMapPropType } from '../prop-types';
@@ -37,8 +38,10 @@ const ContentExplorerActionButtons = ({
3738
onCancelClick,
3839
onChooseClick,
3940
onCopyClick,
41+
onFoldersPathUpdated,
4042
onMoveClick,
4143
onSelectedClick,
44+
onViewSelectedClick,
4245
selectedItems,
4346
isNoSelectionAllowed,
4447
}) => {
@@ -74,6 +77,34 @@ const ContentExplorerActionButtons = ({
7477
}
7578
};
7679

80+
const getStatusElement = statusMessage => {
81+
let statusElement = <span className="status-message">{statusMessage}</span>;
82+
83+
if (onViewSelectedClick) {
84+
statusElement = (
85+
<PlainButton
86+
className="status-message-link"
87+
onClick={() => {
88+
const foldersPath = onViewSelectedClick();
89+
if (foldersPath) {
90+
onFoldersPathUpdated(foldersPath);
91+
}
92+
}}
93+
type="button"
94+
>
95+
{statusMessage}
96+
</PlainButton>
97+
);
98+
} else if (onSelectedClick) {
99+
statusElement = (
100+
<Button className="status-message" onClick={onSelectedClick} type="button">
101+
{statusMessage}
102+
</Button>
103+
);
104+
}
105+
return statusElement;
106+
};
107+
77108
const renderStatus = () => {
78109
const numSelected = getChosenItemsFromSelectedItems(selectedItems).length;
79110

@@ -87,13 +118,7 @@ const ContentExplorerActionButtons = ({
87118
);
88119
}
89120

90-
const statusElement = onSelectedClick ? (
91-
<Button className="status-message" onClick={onSelectedClick}>
92-
{statusMessage}
93-
</Button>
94-
) : (
95-
<span className="status-message">{statusMessage}</span>
96-
);
121+
const statusElement = getStatusElement(statusMessage);
97122

98123
return contentExplorerMode === ContentExplorerModes.MULTI_SELECT && statusElement;
99124
};
@@ -173,8 +198,10 @@ ContentExplorerActionButtons.propTypes = {
173198
onCancelClick: PropTypes.func,
174199
onChooseClick: PropTypes.func,
175200
onCopyClick: PropTypes.func,
201+
onFoldersPathUpdated: PropTypes.func,
176202
onMoveClick: PropTypes.func,
177203
onSelectedClick: PropTypes.func,
204+
onViewSelectedClick: PropTypes.func,
178205
selectedItems: ItemsMapPropType.isRequired,
179206
isNoSelectionAllowed: PropTypes.bool,
180207
};

‎src/features/content-explorer/content-explorer/__tests__/ContentExplorerActionButtons.test.js‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,37 @@ describe('features/content-explorer/content-explorer/ContentExplorerActionButton
370370
expect(statusMessageId).toBe('boxui.contentExplorer.numFoldersSelected');
371371
});
372372

373+
test('should show status element as PlainButton for multi select when onViewSelectedClick is provided', () => {
374+
const wrapper = renderComponent({
375+
contentExplorerMode: ContentExplorerModes.MULTI_SELECT,
376+
selectedItems,
377+
onViewSelectedClick: jest.fn(),
378+
});
379+
expect(wrapper.find('PlainButton').prop('className')).toBe('status-message-link');
380+
});
381+
382+
test('should show status element as Button when onSelectedClick is provided but onViewSelectedClick is not', () => {
383+
const wrapper = renderComponent({
384+
contentExplorerMode: ContentExplorerModes.MULTI_SELECT,
385+
onSelectedClick: jest.fn(),
386+
selectedItems,
387+
});
388+
expect(
389+
wrapper
390+
.find('Button')
391+
.at(0)
392+
.prop('className'),
393+
).toBe('status-message');
394+
});
395+
396+
test('should show status element as span when onSelectedClick is not provided nor is onViewSelectedClick', () => {
397+
const wrapper = renderComponent({
398+
contentExplorerMode: ContentExplorerModes.MULTI_SELECT,
399+
selectedItems,
400+
});
401+
expect(wrapper.find('span').prop('className')).toBe('status-message');
402+
});
403+
373404
[
374405
{
375406
contentExplorerMode: ContentExplorerModes.SELECT_FILE,

‎src/features/content-explorer/content-explorer/__tests__/__snapshots__/ContentExplorer.test.js.snap‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ exports[`features/content-explorer/content-explorer/ContentExplorer render() cus
5454
}
5555
isNoSelectionAllowed={false}
5656
isResponsive={false}
57+
onFoldersPathUpdated={[Function]}
5758
selectedItems={Object {}}
5859
/>
5960
</div>

0 commit comments

Comments
 (0)