import AccountPermissions from "@dashboard/components/AccountPermissions"; import { TopNav } from "@dashboard/components/AppLayout/TopNav"; import Form from "@dashboard/components/Form"; import FormSpacer from "@dashboard/components/FormSpacer"; import { DetailPageLayout } from "@dashboard/components/Layouts"; import Savebar from "@dashboard/components/Savebar"; import { PermissionEnum, PermissionGroupDetailsFragment, PermissionGroupErrorFragment, UserPermissionFragment, } from "@dashboard/graphql"; import { SubmitPromise } from "@dashboard/hooks/useForm"; import useNavigator from "@dashboard/hooks/useNavigator"; import { MembersListUrlSortField, permissionGroupListUrl, } from "@dashboard/permissionGroups/urls"; import { extractPermissionCodes, isGroupFullAccess, } from "@dashboard/permissionGroups/utils"; import { ListActions, SortPage } from "@dashboard/types"; import { getFormErrors } from "@dashboard/utils/errors"; import getPermissionGroupErrorMessage from "@dashboard/utils/errors/permissionGroups"; import { ConfirmButtonTransitionState } from "@saleor/macaw-ui"; import React from "react"; import { useIntl } from "react-intl"; import PermissionGroupInfo from "../PermissionGroupInfo"; import PermissionGroupMemberList from "../PermissionGroupMemberList"; export interface PermissionGroupDetailsPageFormData { name: string; hasFullAccess: boolean; isActive: boolean; permissions: PermissionEnum[]; users: PermissionGroupDetailsFragment["users"]; } export interface PermissionData extends Omit { lastSource?: boolean; disabled?: boolean; } export interface PermissionGroupDetailsPageProps extends ListActions, SortPage { disabled: boolean; errors: PermissionGroupErrorFragment[]; members: PermissionGroupDetailsFragment["users"]; permissionGroup: PermissionGroupDetailsFragment; permissions: PermissionData[]; permissionsExceeded: boolean; saveButtonBarState: ConfirmButtonTransitionState; onAssign: () => void; onUnassign: (ids: string[]) => void; onSubmit: (data: PermissionGroupDetailsPageFormData) => SubmitPromise; } const PermissionGroupDetailsPage: React.FC = ({ disabled, errors, members, onSubmit, permissionGroup, permissions, permissionsExceeded, saveButtonBarState, ...listProps }) => { const intl = useIntl(); const navigate = useNavigator(); const initialForm: PermissionGroupDetailsPageFormData = { hasFullAccess: isGroupFullAccess(permissionGroup, permissions), isActive: false, name: permissionGroup?.name || "", permissions: extractPermissionCodes(permissionGroup), users: members, }; const formErrors = getFormErrors(["addPermissions"], errors); const permissionsError = getPermissionGroupErrorMessage( formErrors.addPermissions, intl, ); return (
{({ data, change, submit }) => (
navigate(permissionGroupListUrl())} onSubmit={submit} state={saveButtonBarState} disabled={disabled} />
)}
); }; PermissionGroupDetailsPage.displayName = "PermissionGroupDetailsPage"; export default PermissionGroupDetailsPage;