Skip to content

Commit 3256ef6

Browse files
authored
refactor: decommission menu visibilities evaluation in the navbar (#3889)
* refactor: remove menu visibility evaluations * refactor: further changes and generated types * chore: changeset
1 parent c537849 commit 3256ef6

File tree

28 files changed

+226
-262
lines changed

28 files changed

+226
-262
lines changed

.changeset/tall-colts-strive.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@commercetools-frontend/application-shell-connectors': minor
3+
'@commercetools-frontend/application-shell': minor
4+
'@commercetools-frontend/permissions': minor
5+
---
6+
7+
Decommission menu visibilities evaluation in the navbar

packages/application-shell-connectors/src/components/application-context/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type {
33
TApplicationContext as ApplicationContext,
44
} from './application-context';
55
import type {
6-
TMenuVisibilities as NormalizedMenuVisibilities,
76
TPermissions as NormalizedPermissions,
87
TActionRights as NormalizedActionRights,
98
TDataFences as NormalizedDataFences,
@@ -14,7 +13,6 @@ export type TProviderProps<AdditionalEnvironmentProperties extends {}> =
1413
export type TApplicationContext<AdditionalEnvironmentProperties extends {}> =
1514
ApplicationContext<AdditionalEnvironmentProperties>;
1615

17-
export type TNormalizedMenuVisibilities = NormalizedMenuVisibilities;
1816
export type TNormalizedPermissions = NormalizedPermissions;
1917
export type TNormalizedActionRights = NormalizedActionRights;
2018
export type TNormalizedDataFences = NormalizedDataFences;
@@ -29,6 +27,5 @@ export {
2927
export {
3028
normalizeAllAppliedActionRights,
3129
normalizeAllAppliedDataFences,
32-
normalizeAllAppliedMenuVisibilities,
3330
normalizeAllAppliedPermissions,
3431
} from './normalizers';

packages/application-shell-connectors/src/components/application-context/normalizers.spec.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import type {
22
TAppliedPermission,
33
TAppliedActionRight,
4-
TAppliedMenuVisibilities,
54
TStoreDataFence,
65
} from '../../types/generated/mc';
76

87
import {
98
normalizeAllAppliedActionRights,
10-
normalizeAllAppliedMenuVisibilities,
119
normalizeAllAppliedPermissions,
1210
normalizeAllAppliedDataFences,
1311
} from './normalizers';
@@ -43,23 +41,6 @@ describe('normalizeAllAppliedActionRights', () => {
4341
);
4442
});
4543
});
46-
describe('normalizeAllAppliedMenuVisibilities', () => {
47-
const allAppliedMenuVisibilities: TAppliedMenuVisibilities[] = [
48-
{
49-
name: 'hideDashboard',
50-
value: true,
51-
},
52-
];
53-
it('should normalize menu visibilities', () => {
54-
expect(
55-
normalizeAllAppliedMenuVisibilities(allAppliedMenuVisibilities)
56-
).toEqual(
57-
expect.objectContaining({
58-
hideDashboard: true,
59-
})
60-
);
61-
});
62-
});
6344
describe('normalizeAllAppliedDataFences', () => {
6445
describe('with store types', () => {
6546
const allAppliedDataFences: TStoreDataFence[] = [

packages/application-shell-connectors/src/components/application-context/normalizers.ts

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
import type {
22
TAppliedPermission,
33
TAppliedActionRight,
4-
TAppliedMenuVisibilities,
54
TStoreDataFence,
65
} from '../../types/generated/mc';
76

8-
// Menu visibilities
9-
export type TMenuVisibilities = {
10-
[key: string]: boolean;
11-
};
12-
137
// Permissions
148
export type TPermissions = {
159
[key: string]: boolean;
@@ -77,24 +71,6 @@ export const normalizeAllAppliedPermissions = (
7771
);
7872
};
7973

80-
export const normalizeAllAppliedMenuVisibilities = (
81-
allAppliedMenuVisibilities?: TAppliedMenuVisibilities[]
82-
): TMenuVisibilities | null => {
83-
if (!allAppliedMenuVisibilities || allAppliedMenuVisibilities.length === 0) {
84-
return null;
85-
}
86-
return allAppliedMenuVisibilities.reduce<TMenuVisibilities>(
87-
(transformedAllApplied, allApplied) => {
88-
if (!allApplied) return transformedAllApplied;
89-
return {
90-
...transformedAllApplied,
91-
[allApplied.name]: allApplied.value,
92-
};
93-
},
94-
{}
95-
);
96-
};
97-
9874
export const normalizeAllAppliedActionRights = (
9975
allAppliedActionRights?: TAppliedActionRight[]
10076
): TActionRights | null => {

packages/application-shell-connectors/src/export-types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type {
22
TProviderProps as ProviderProps,
33
TApplicationContext as ApplicationContext,
4-
TNormalizedMenuVisibilities as NormalizedMenuVisibilities,
54
TNormalizedPermissions as NormalizedPermissions,
65
TNormalizedActionRights as NormalizedActionRights,
76
TNormalizedDataFences as NormalizedDataFences,
@@ -26,7 +25,6 @@ export type TProviderProps<AdditionalEnvironmentProperties extends {}> =
2625
export type TApplicationContext<AdditionalEnvironmentProperties extends {}> =
2726
ApplicationContext<AdditionalEnvironmentProperties>;
2827

29-
export type TNormalizedMenuVisibilities = NormalizedMenuVisibilities;
3028
export type TNormalizedPermissions = NormalizedPermissions;
3129
export type TNormalizedActionRights = NormalizedActionRights;
3230
export type TNormalizedDataFences = NormalizedDataFences;

packages/application-shell-connectors/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export {
99
useApplicationContext,
1010
normalizeAllAppliedActionRights,
1111
normalizeAllAppliedDataFences,
12-
normalizeAllAppliedMenuVisibilities,
1312
normalizeAllAppliedPermissions,
1413
} from './components/application-context';
1514

packages/application-shell-connectors/src/types/generated/mc.ts

Lines changed: 12 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/application-shell/src/components/application-shell/application-shell.spec.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,7 +1391,7 @@ describe('navbar menu links interactions', () => {
13911391
});
13921392
});
13931393
});
1394-
describe('when navbar menu items are hidden', () => {
1394+
describe('when navbar menu items with menuVisibility are configured', () => {
13951395
beforeEach(() => {
13961396
mockServer.resetHandlers();
13971397
mockServer.use(
@@ -1412,7 +1412,7 @@ describe('when navbar menu items are hidden', () => {
14121412
})
14131413
);
14141414
});
1415-
it('should not render hidden main menu items', async () => {
1415+
it('should render menu items even if menuVisibility data exists (menuVisibilities are no longer evaluated)', async () => {
14161416
const menuLinks = createTestNavBarMenuLinksConfig({
14171417
menuVisibility: 'hideFoo',
14181418
submenuLinks: [],
@@ -1429,19 +1429,13 @@ describe('when navbar menu items are hidden', () => {
14291429
}
14301430
);
14311431
await waitForLeftNavigationToBeLoaded();
1432-
// Get the nav container, to narrow down the search area
14331432
const container = await findByLeftNavigation();
1434-
const navbarRendered = within(container);
14351433

14361434
const applicationLocale = 'en';
14371435
const mainMenuLabel = menuLinks.labelAllLocales.find(
14381436
(localized) => localized.locale === applicationLocale
14391437
);
1440-
await waitFor(() => {
1441-
expect(
1442-
navbarRendered.queryByText(mainMenuLabel.value)
1443-
).not.toBeInTheDocument();
1444-
});
1438+
await within(container).findByText(mainMenuLabel.value);
14451439
});
14461440
});
14471441

packages/application-shell/src/components/fetch-project/fetch-project.mc.graphql

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ query FetchProject($projectKey: String) {
4444
name
4545
value
4646
}
47-
allAppliedMenuVisibilities {
48-
name
49-
value
50-
}
5147
allAppliedDataFences {
5248
... on StoreDataFence {
5349
type

packages/application-shell/src/components/navbar/menu-items.tsx

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import classnames from 'classnames';
1616
import { useIntl } from 'react-intl';
1717
import { NavLink } from 'react-router-dom';
1818
import type {
19-
TNormalizedMenuVisibilities,
2019
TNormalizedPermissions,
2120
TNormalizedActionRights,
2221
TNormalizedDataFences,
@@ -342,22 +341,9 @@ const MenuItemLink = ({ exactMatch = false, ...props }: MenuItemLinkProps) => {
342341
};
343342
MenuItemLink.displayName = 'MenuItemLink';
344343

345-
const isEveryMenuVisibilitySetToHidden = (
346-
menuVisibilities?: TNormalizedMenuVisibilities | null,
347-
namesOfMenuVisibilities?: string[]
348-
) =>
349-
Array.isArray(namesOfMenuVisibilities) &&
350-
namesOfMenuVisibilities.length > 0 &&
351-
namesOfMenuVisibilities.every(
352-
(nameOfMenuVisibility) =>
353-
menuVisibilities && menuVisibilities[nameOfMenuVisibility] === true
354-
);
355-
356344
type RestrictedMenuItemProps = {
357345
featureToggle?: string;
358-
namesOfMenuVisibilities?: string[];
359346
projectPermissions: TProjectPermissions;
360-
menuVisibilities: TNormalizedMenuVisibilities | null;
361347
keyOfMenuItem: string;
362348
permissions: string[];
363349
actionRights?: TActionRight[];
@@ -378,16 +364,7 @@ const RestrictedMenuItem = ({
378364
permissions = [],
379365
...props
380366
}: RestrictedMenuItemProps) => {
381-
// NOTE: Custom application are activated/deactivated while their
382-
// visibility is not controlled via a visibiility overwrite.
383367
const flagVariation = useFlagVariation(props.featureToggle);
384-
if (
385-
isEveryMenuVisibilitySetToHidden(
386-
props.menuVisibilities,
387-
props.namesOfMenuVisibilities
388-
)
389-
)
390-
return null;
391368

392369
const permissionsWrapper =
393370
(Array.isArray(permissions) && permissions.length > 0) ||

0 commit comments

Comments
 (0)