import React, { FC, useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import dateFnsFormat from 'date-fns/format'; import { TFunctionResult } from 'i18next'; import { IUserGroupHasId } from '~/interfaces/user'; import { CustomWindow } from '~/interfaces/global'; import Xss from '~/services/xss'; type Props = { userGroup: IUserGroupHasId, selectableParentUserGroups?: IUserGroupHasId[], submitButtonLabel: TFunctionResult; onSubmit?: (targetGroup: IUserGroupHasId, userGroupData: Partial) => Promise | void }; const UserGroupForm: FC = (props: Props) => { const xss: Xss = (window as CustomWindow).xss; const { t } = useTranslation(); const { userGroup, selectableParentUserGroups, submitButtonLabel, onSubmit, } = props; /* * State */ const [currentName, setName] = useState(userGroup != null ? userGroup.name : ''); const [currentDescription, setDescription] = useState(userGroup != null ? userGroup.description : ''); const [selectedParent, setSelectedParent] = useState(userGroup?.parent as IUserGroupHasId); /* * Function */ const onChangeNameHandler = useCallback((e) => { setName(e.target.value); }, []); const onChangeDescriptionHandler = useCallback((e) => { setDescription(e.target.value); }, []); const onChangeParerentButtonHandler = useCallback((userGroup: IUserGroupHasId) => { if (userGroup._id !== selectedParent?._id) { setSelectedParent(userGroup); } }, [selectedParent, setSelectedParent]); return (
{ e.preventDefault(); onSubmit?.(props.userGroup, { name: currentName, description: currentDescription, parent: selectedParent, }); }} >

{t('admin:user_group_management.basic_info')}

{ userGroup?.createdAt != null && (

{t('Created')}

{dateFnsFormat(new Date(userGroup.createdAt), 'yyyy-MM-dd')}

) }