Skip to content

Commit 1ca5029

Browse files
fix(metadata-view): Hide keyword and location filters (#4260)
1 parent ac48f93 commit 1ca5029

File tree

6 files changed

+57
-22
lines changed

6 files changed

+57
-22
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
"@box/languages": "^1.0.0",
137137
"@box/metadata-editor": "^0.122.12",
138138
"@box/metadata-filter": "^1.19.2",
139-
"@box/metadata-view": "^0.48.1",
139+
"@box/metadata-view": "^0.48.6",
140140
"@box/react-virtualized": "^9.22.3-rc-box.10",
141141
"@box/types": "^0.2.1",
142142
"@cfaester/enzyme-adapter-react-18": "^0.8.0",
@@ -303,7 +303,7 @@
303303
"@box/item-icon": "^0.17.15",
304304
"@box/metadata-editor": "^0.122.12",
305305
"@box/metadata-filter": "^1.19.2",
306-
"@box/metadata-view": "^0.48.1",
306+
"@box/metadata-view": "^0.48.6",
307307
"@box/react-virtualized": "^9.22.3-rc-box.10",
308308
"@box/types": "^0.2.1",
309309
"@hapi/address": "^2.1.4",

src/elements/common/sub-header/__tests__/SubHeaderRight.test.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ describe('elements/common/sub-header/SubHeaderRight', () => {
118118
);
119119

120120
test('should call onClick when a bulk item action is clicked', async () => {
121-
const mockOnClick = jest.fn();
122121
const user = userEvent();
122+
const mockOnClick = jest.fn();
123+
123124
const features = {
124125
contentExplorer: {
125126
metadataViewV2: true, // enable the feature flag

src/elements/content-explorer/MetadataViewContainer.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from '@box/metadata-filter';
1010
import {
1111
MetadataView,
12+
PredefinedFilterName,
1213
type FilterValues,
1314
type MetadataViewProps,
1415
type MetadataFieldType,
@@ -18,6 +19,7 @@ import { type Key } from '@react-types/shared';
1819
import cloneDeep from 'lodash/cloneDeep';
1920

2021
import { SortDescriptor } from 'react-aria-components';
22+
2123
import { FIELD_ITEM_NAME } from '../../constants';
2224
import type { Collection } from '../../common/types/core';
2325
import type { MetadataTemplate, MetadataTemplateField } from '../../common/types/metadata';
@@ -207,6 +209,11 @@ const MetadataViewContainer = ({
207209
initialFilterValues,
208210
onFilterSubmit: handleFilterSubmit,
209211
filterGroups,
212+
213+
predefinedFilterOptions: {
214+
[PredefinedFilterName.KeywordSearchFilterGroup]: { isDisabled: true },
215+
[PredefinedFilterName.LocationFilterGroup]: { isDisabled: true },
216+
},
210217
};
211218
}, [actionBarProps, initialFilterValues, handleFilterSubmit, filterGroups]);
212219

src/elements/content-explorer/__tests__/ContentExplorer.test.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -519,20 +519,20 @@ describe('elements/content-explorer/ContentExplorer', () => {
519519
},
520520
});
521521

522-
const industryHeader = await screen.findByRole('columnheader', { name: 'Industry' });
523-
expect(industryHeader).toBeInTheDocument();
522+
const lastContactedAtHeader = await screen.findByRole('columnheader', { name: 'Last Contacted At' });
523+
expect(lastContactedAtHeader).toBeInTheDocument();
524524

525525
const firstRow = await screen.findByRole('row', { name: /Child 2/i });
526526
expect(firstRow).toBeInTheDocument();
527527

528-
await userEvent.click(industryHeader);
528+
await userEvent.click(lastContactedAtHeader);
529529

530530
// Internal callback gets trimmed version for API calls
531-
expect(mockOnSortChangeInternal).toHaveBeenCalledWith('industry', 'ASC');
531+
expect(mockOnSortChangeInternal).toHaveBeenCalledWith('last_contacted_at', 'ASC');
532532

533533
// User callback gets full column ID with direction
534534
expect(mockOnSortChangeExternal).toHaveBeenCalledWith({
535-
column: 'metadata.enterprise_0.templateName.industry',
535+
column: 'metadata.enterprise_0.templateName.last_contacted_at',
536536
direction: 'ascending',
537537
});
538538
});

src/elements/content-explorer/__tests__/MetadataViewContainer.test.tsx

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import MetadataViewContainer, {
99
type ExternalFilterValues,
1010
} from '../MetadataViewContainer';
1111

12+
Object.defineProperty(Element.prototype, 'scrollTo', {
13+
value: jest.fn(),
14+
writable: true,
15+
});
16+
1217
describe('elements/content-explorer/MetadataViewContainer', () => {
1318
const mockItems = [
1419
{
@@ -105,7 +110,10 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
105110
return render(<MetadataViewContainer {...defaultProps} {...props} />);
106111
};
107112

113+
let user;
114+
108115
beforeEach(() => {
116+
user = userEvent();
109117
jest.clearAllMocks();
110118
});
111119

@@ -144,11 +152,11 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
144152
onMetadataFilter: jest.fn(),
145153
});
146154

147-
await userEvent().click(screen.getByRole('button', { name: /Contact Role/ }));
148-
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Developer' }));
155+
await user.click(screen.getByRole('button', { name: /Contact Role/ }));
156+
await user.click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Developer' }));
149157
// Re-open the chip to select a second value (menu closes after submit)
150-
await userEvent().click(screen.getByRole('button', { name: /Contact Role/ }));
151-
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Marketing' }));
158+
await user.click(screen.getByRole('button', { name: /Contact Role/ }));
159+
await user.click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Marketing' }));
152160

153161
await waitFor(() => expect(onFilterSubmit).toHaveBeenCalledTimes(2));
154162
const firstCall = onFilterSubmit.mock.calls[0][0];
@@ -183,8 +191,8 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
183191
onMetadataFilter,
184192
});
185193

186-
await userEvent().click(screen.getByRole('button', { name: /Status/ }));
187-
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
194+
await user.click(screen.getByRole('button', { name: /Status/ }));
195+
await user.click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
188196

189197
await waitFor(() => {
190198
expect(onMetadataFilter).toHaveBeenCalledTimes(1);
@@ -221,8 +229,8 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
221229
onMetadataFilter,
222230
});
223231

224-
await userEvent().click(screen.getByRole('button', { name: /Status/ }));
225-
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
232+
await user.click(screen.getByRole('button', { name: /Status/ }));
233+
await user.click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
226234

227235
await waitFor(() => {
228236
expect(onMetadataFilter).toHaveBeenCalledTimes(1);
@@ -382,8 +390,8 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
382390
});
383391

384392
// Test enum filter
385-
await userEvent().click(screen.getByRole('button', { name: /Status/ }));
386-
await userEvent().click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
393+
await user.click(screen.getByRole('button', { name: /Status/ }));
394+
await user.click(within(screen.getByRole('menu')).getByRole('menuitemcheckbox', { name: 'Active' }));
387395

388396
await waitFor(() => {
389397
expect(onMetadataFilter).toHaveBeenCalledTimes(1);
@@ -519,4 +527,23 @@ describe('elements/content-explorer/MetadataViewContainer', () => {
519527
expect(result['category-filter'].fieldType).toBe('multiSelect');
520528
});
521529
});
530+
531+
describe('predefined filter options', () => {
532+
test('should only show metadata template filters in sidepanel', async () => {
533+
renderComponent();
534+
535+
expect(screen.getByRole('button', { name: 'All Filters' })).toBeInTheDocument();
536+
537+
await user.click(screen.getByRole('button', { name: 'All Filters' }));
538+
expect(screen.getByRole('dialog')).toBeInTheDocument();
539+
540+
expect(within(screen.getByRole('dialog')).getByRole('button', { name: 'File Type' })).toBeInTheDocument();
541+
542+
// Should NOT show predefined filters that are disabled
543+
expect(within(screen.getByRole('dialog')).queryByPlaceholderText('Enter keywords')).not.toBeInTheDocument();
544+
expect(
545+
within(screen.getByRole('dialog')).queryByRole('button', { name: /location/i }),
546+
).not.toBeInTheDocument();
547+
});
548+
});
522549
});

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,10 +1517,10 @@
15171517
resolved "https://registry.yarnpkg.com/@box/metadata-filter/-/metadata-filter-1.19.3.tgz#87364bea4cbb1417866e65639f3b1e137a6d9b6a"
15181518
integrity sha512-5cSY8yLW7S1zsiqBHAuKkHjcyHFBuBUBHGTnYigV0eKyLH4Dm9ozjon23P3Z9HXVB5IMHwTM3I9TRDFAZuP7vw==
15191519

1520-
"@box/metadata-view@^0.48.1":
1521-
version "0.48.1"
1522-
resolved "https://registry.yarnpkg.com/@box/metadata-view/-/metadata-view-0.48.1.tgz#58cab5153cf343726aa9718debccdca88e8fb10f"
1523-
integrity sha512-+OeSLT5AEqgSDz1p61mV/VVPb/qGAmlC/+GOyqSZ/aSu2D8owUUS0BO/rPVIF1DA56NrPoeGfQA8GgxdKzNisA==
1520+
"@box/metadata-view@^0.48.6":
1521+
version "0.48.6"
1522+
resolved "https://registry.yarnpkg.com/@box/metadata-view/-/metadata-view-0.48.6.tgz#c1c5735280f368a15e418c1128c8b0d63b5f5ecb"
1523+
integrity sha512-HbUEffdbJawUwkBWxoZoC3AbhG2Agzis3ehcXBDJSeDIypRN+UZSWqHnG1fNJ7f3ngK8JAu/s+FMl/i0nCZAnA==
15241524

15251525
"@box/react-virtualized@^9.22.3-rc-box.10":
15261526
version "9.22.3-rc-box.10"

0 commit comments

Comments
 (0)