import type { FC } from 'react'; import React, { useCallback, useEffect, useState } from 'react'; import type { IUserGroupHasId } from '@growi/core'; import { format as dateFnsFormat } from 'date-fns/format'; import { useTranslation } from 'next-i18next'; type Props = { userGroup: IUserGroupHasId; parentUserGroup?: IUserGroupHasId; selectableParentUserGroups?: IUserGroupHasId[]; submitButtonLabel: string; onSubmit: ( targetGroup: IUserGroupHasId, userGroupData: Partial, ) => Promise; isExternalGroup?: boolean; }; export const UserGroupForm: FC = (props: Props) => { const { t } = useTranslation('admin'); const { userGroup, parentUserGroup, selectableParentUserGroups, submitButtonLabel, onSubmit, isExternalGroup = false, } = props; /* * State */ const [currentName, setName] = useState(userGroup.name); const [currentDescription, setDescription] = useState( userGroup.description, ); const [selectedParent, setSelectedParent] = useState< IUserGroupHasId | undefined >(); /* * Function */ const onChangeNameHandler = useCallback((e) => { setName(e.target.value); }, []); const onChangeDescriptionHandler = useCallback((e) => { setDescription(e.target.value); }, []); const onChangeParentButtonHandler = useCallback( (userGroup: IUserGroupHasId) => { if (userGroup._id !== selectedParent?._id) { setSelectedParent(userGroup); } }, [selectedParent], ); useEffect(() => { setSelectedParent(parentUserGroup); }, [parentUserGroup]); const isSelectableParentUserGroups = selectableParentUserGroups != null && selectableParentUserGroups.length > 0; const isChildUserGroup = parentUserGroup !== undefined; const messageAtReleaseParentGroup = isChildUserGroup ? t('user_group_management.release_parent_group') : t('user_group_management.select_parent_group'); return (
{ e.preventDefault(); onSubmit(props.userGroup, { name: currentName, description: currentDescription, parent: selectedParent, }); }} >

{t('user_group_management.basic_info')}

{isExternalGroup && (
{t('external_user_group.only_description_edit_allowed')}
)} {userGroup?.createdAt != null && (

{t('Created')}

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

)}