saleor-dashboard/src/auth/components/SectionRoute.tsx
Dominik Żegleń 5b85d6c086
Use graphql-codegen (#1874)
* Use generated hooks in apps

* Remove unused files

* Use proper types in apps

* Use generated hooks in attributes

* Use generated hooks in auth module

* Use generated hooks in categories

* Use generated hooks in channels

* Use generated types in collections

* Remove legacy types from background tasks

* Use generated hooks in customers

* Use generated hooks in discounts

* Use generated hook in file upload

* Use generated types in gift cards

* Use generated types in home

* Use generated hooks in navigation

* Use generated hooks in orders

* Use generated hooks in pages

* Use generated hooks in page types

* Use generated hooks in permission groups

* Use generated hooks in plugins

* Use generated hooks in products

* Use fragment to mark product variants

* Improve code a bit

* Use generated hooks in page types

* Use generated types in searches

* Use generated hooks in shipping

* Use generated hooks in site settings

* Use generated hooks in staff members

* Use generated hooks in taxes

* Place all gql generated files in one directory

* Use generated hooks in translations

* Use global types from new generated module

* Use generated hooks in warehouses

* Use generated hooks in webhooks

* Use generated fragment types

* Unclutter types

* Remove hoc components

* Split hooks and types

* Fetch introspection file

* Delete obsolete schema file

* Fix rebase artifacts

* Fix autoreplace

* Fix auth provider tests

* Fix urls

* Remove leftover types

* Fix rebase artifacts
2022-03-09 09:56:55 +01:00

40 lines
1 KiB
TypeScript

import { PermissionEnum } from "@saleor/graphql";
import React from "react";
import { Route, RouteProps } from "react-router-dom";
import { useUser } from "..";
import NotFound from "../../NotFound";
import { hasAllPermissions, hasAnyPermissions } from "../misc";
type MatchPermissionType = "all" | "any";
interface SectionRouteProps extends RouteProps {
permissions?: PermissionEnum[];
matchPermission?: MatchPermissionType;
}
const matchAll = (match: MatchPermissionType) => match === "all";
export const SectionRoute: React.FC<SectionRouteProps> = ({
permissions,
matchPermission = "all",
...props
}) => {
const { user } = useUser();
const hasSectionPermissions = () => {
if (!permissions) {
return true;
}
if (matchAll(matchPermission)) {
return hasAllPermissions(permissions, user);
}
return hasAnyPermissions(permissions, user);
};
return hasSectionPermissions() ? <Route {...props} /> : <NotFound />;
};
SectionRoute.displayName = "Route";
export default SectionRoute;