import AccountPermissionGroups from "@dashboard/components/AccountPermissionGroups"; import { TopNav } from "@dashboard/components/AppLayout/TopNav"; import CardSpacer from "@dashboard/components/CardSpacer"; import CardTitle from "@dashboard/components/CardTitle"; import Form from "@dashboard/components/Form"; import { DetailPageLayout } from "@dashboard/components/Layouts"; import { MultiAutocompleteChoiceType } from "@dashboard/components/MultiAutocompleteSelectField"; import Savebar from "@dashboard/components/Savebar"; import { SearchPermissionGroupsQuery, StaffErrorFragment, StaffMemberDetailsFragment, UserFragment, } from "@dashboard/graphql"; import { SubmitPromise } from "@dashboard/hooks/useForm"; import useLocale from "@dashboard/hooks/useLocale"; import useNavigator from "@dashboard/hooks/useNavigator"; import useStateFromProps from "@dashboard/hooks/useStateFromProps"; import { getUserName } from "@dashboard/misc"; import UserStatus from "@dashboard/staff/components/UserStatus"; import { staffListUrl } from "@dashboard/staff/urls"; import { getMemberPermissionGroups, isMemberActive, } from "@dashboard/staff/utils"; import { FetchMoreProps, RelayToFlat, SearchPageProps } from "@dashboard/types"; import createMultiAutocompleteSelectHandler from "@dashboard/utils/handlers/multiAutocompleteSelectChangeHandler"; import { Card, CardContent, Typography } from "@material-ui/core"; import { ConfirmButtonTransitionState } from "@saleor/macaw-ui"; import React from "react"; import { useIntl } from "react-intl"; import StaffPassword from "../StaffPassword/StaffPassword"; import StaffPreferences from "../StaffPreferences"; import StaffProperties from "../StaffProperties/StaffProperties"; import { staffDetailsPageMessages as messages } from "./messages"; export interface StaffDetailsFormData { email: string; firstName: string; isActive: boolean; lastName: string; permissionGroups: string[]; } export interface StaffDetailsPageProps extends SearchPageProps { availablePermissionGroups: RelayToFlat; canEditAvatar: boolean; canEditPreferences: boolean; canEditStatus: boolean; canRemove: boolean; disabled: boolean; fetchMorePermissionGroups: FetchMoreProps; saveButtonBarState: ConfirmButtonTransitionState; staffMember: StaffMemberDetailsFragment | UserFragment; errors: StaffErrorFragment[]; onChangePassword: () => void; onDelete: () => void; onImageDelete: () => void; onSubmit: (data: StaffDetailsFormData) => SubmitPromise; onImageUpload(file: File); } const StaffDetailsPage: React.FC = ({ availablePermissionGroups, canEditAvatar, canEditPreferences, canEditStatus, canRemove, disabled, errors, fetchMorePermissionGroups, initialSearch, onChangePassword, onDelete, onImageDelete, onImageUpload, onSearchChange, onSubmit, saveButtonBarState, staffMember, }: StaffDetailsPageProps) => { const intl = useIntl(); const navigate = useNavigator(); const { locale, setLocale } = useLocale(); const isActive = isMemberActive(staffMember); const permissionGroups = getMemberPermissionGroups(staffMember); const [permissionGroupsDisplayValues, setPermissionGroupsDisplayValues] = useStateFromProps( permissionGroups.map(group => ({ disabled: !group.userCanManage, label: group.name, value: group.id, })) || [], ); const initialForm: StaffDetailsFormData = { email: staffMember?.email || "", firstName: staffMember?.firstName || "", isActive, lastName: staffMember?.lastName || "", permissionGroups: permissionGroups.map(pg => pg.id), }; return (
{({ data: formData, change, isSaveDisabled, submit, toggleValue }) => { const permissionGroupsChange = createMultiAutocompleteSelectHandler( toggleValue, setPermissionGroupsDisplayValues, permissionGroupsDisplayValues, availablePermissionGroups?.map(group => ({ label: group.name, value: group.id, })) || [], ); return ( {canEditPreferences && ( <> )} {canEditPreferences && ( )} {canEditStatus && ( <> {intl.formatMessage({ id: "P+kVxW", defaultMessage: "User is assigned to:", description: "card description", })} )} navigate(staffListUrl())} onSubmit={submit} onDelete={canRemove ? onDelete : undefined} /> ); }}
); }; StaffDetailsPage.displayName = "StaffDetailsPage"; export default StaffDetailsPage;