Fix sidebar items not showing up with partial permissions (#1949)
* Skip navigator's customerSearch query on dashboard load * Fetch extensions list only with MANAGE_APPS permission * Show sidebar sections with partial permissions * Trigger deployment * Change skipping query from always to when query is empty
This commit is contained in:
parent
cf7a51ab8e
commit
e186b2f8c3
3 changed files with 14 additions and 6 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import { useUserPermissions } from "@saleor/auth/hooks/useUserPermissions";
|
||||||
import {
|
import {
|
||||||
AppExtensionMountEnum,
|
AppExtensionMountEnum,
|
||||||
ExtensionListQuery,
|
ExtensionListQuery,
|
||||||
|
@ -64,6 +65,10 @@ export const useExtensions = <T extends AppExtensionMountEnum>(
|
||||||
mountList: T[]
|
mountList: T[]
|
||||||
): Record<T, Extension[]> => {
|
): Record<T, Extension[]> => {
|
||||||
const { openApp } = useExternalApp();
|
const { openApp } = useExternalApp();
|
||||||
|
const permissions = useUserPermissions();
|
||||||
|
const extensionsPermissions = permissions?.find(
|
||||||
|
perm => perm.code === PermissionEnum.MANAGE_APPS
|
||||||
|
);
|
||||||
|
|
||||||
const { data } = useExtensionListQuery({
|
const { data } = useExtensionListQuery({
|
||||||
fetchPolicy: "cache-first",
|
fetchPolicy: "cache-first",
|
||||||
|
@ -71,7 +76,8 @@ export const useExtensions = <T extends AppExtensionMountEnum>(
|
||||||
filter: {
|
filter: {
|
||||||
mount: mountList
|
mount: mountList
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
skip: !extensionsPermissions
|
||||||
});
|
});
|
||||||
|
|
||||||
const extensions = filterAndMapToTarget(
|
const extensions = filterAndMapToTarget(
|
||||||
|
|
|
@ -248,7 +248,10 @@ function useMenuStructure(
|
||||||
const userPermissions = (user?.userPermissions || []).map(
|
const userPermissions = (user?.userPermissions || []).map(
|
||||||
permission => permission.code
|
permission => permission.code
|
||||||
);
|
);
|
||||||
return (menuItem.permissions || []).every(permission =>
|
if (!menuItem?.permissions) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return menuItem.permissions.some(permission =>
|
||||||
userPermissions.includes(permission)
|
userPermissions.includes(permission)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -259,12 +262,10 @@ function useMenuStructure(
|
||||||
return [
|
return [
|
||||||
menuItems.reduce(
|
menuItems.reduce(
|
||||||
(resultItems: FilterableMenuItem[], menuItem: FilterableMenuItem) => {
|
(resultItems: FilterableMenuItem[], menuItem: FilterableMenuItem) => {
|
||||||
const { children } = menuItem;
|
|
||||||
|
|
||||||
if (!isMenuItemPermitted(menuItem)) {
|
if (!isMenuItemPermitted(menuItem)) {
|
||||||
return resultItems;
|
return resultItems;
|
||||||
}
|
}
|
||||||
|
const { children } = menuItem;
|
||||||
const filteredChildren = children
|
const filteredChildren = children
|
||||||
? getFilteredMenuItems(children)
|
? getFilteredMenuItems(children)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
|
@ -36,7 +36,8 @@ function useQuickSearch(
|
||||||
variables: {
|
variables: {
|
||||||
...DEFAULT_INITIAL_SEARCH_DATA,
|
...DEFAULT_INITIAL_SEARCH_DATA,
|
||||||
first: 5
|
first: 5
|
||||||
}
|
},
|
||||||
|
skip: !query
|
||||||
});
|
});
|
||||||
const [{ data: catalog }, searchCatalog] = useSearchCatalog(5);
|
const [{ data: catalog }, searchCatalog] = useSearchCatalog(5);
|
||||||
const [createOrder] = useOrderDraftCreateMutation({
|
const [createOrder] = useOrderDraftCreateMutation({
|
||||||
|
|
Loading…
Reference in a new issue