import React from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'next-i18next'; import { useSelectFile } from '@/web/common/file/hooks/useSelectFile'; import { useRequest } from '@fastgpt/web/hooks/useRequest'; import MyModal from '@fastgpt/web/components/common/MyModal'; import { Box, Button, Flex, HStack, Input, ModalBody, ModalFooter, useDisclosure } from '@chakra-ui/react'; import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; import Avatar from '@fastgpt/web/components/common/Avatar'; import { postCreateTeam, putUpdateTeam } from '@/web/support/user/team/api'; import { CreateTeamProps } from '@fastgpt/global/support/user/team/controller.d'; import { DEFAULT_TEAM_AVATAR } from '@fastgpt/global/common/system/constants'; import Icon from '@fastgpt/web/components/common/Icon'; import dynamic from 'next/dynamic'; const UpdateContact = dynamic(() => import('@/components/support/user/inform/UpdateContactModal')); export type EditTeamFormDataType = CreateTeamProps & { id?: string; notificationAccount?: string; }; export const defaultForm = { name: '', avatar: DEFAULT_TEAM_AVATAR }; function EditModal({ defaultData = defaultForm, onClose, onSuccess }: { defaultData?: EditTeamFormDataType; onClose: () => void; onSuccess: () => void; }) { const { t } = useTranslation(); const { register, setValue, handleSubmit, watch } = useForm({ defaultValues: defaultData }); const avatar = watch('avatar'); const notificationAccount = watch('notificationAccount'); const { File, onOpen: onOpenSelectFile, onSelectImage } = useSelectFile({ fileType: '.jpg,.png,.svg', multiple: false }); const { mutate: onclickCreate, isLoading: creating } = useRequest({ mutationFn: async (data: CreateTeamProps) => { return postCreateTeam(data); }, onSuccess() { onSuccess(); onClose(); }, successToast: t('common:create_success'), errorToast: t('common:create_failed') }); const { mutate: onclickUpdate, isLoading: updating } = useRequest({ mutationFn: async (data: EditTeamFormDataType) => { if (!data.id) return Promise.resolve(''); return putUpdateTeam({ name: data.name, avatar: data.avatar }); }, onSuccess() { onSuccess(); onClose(); }, successToast: t('common:update_success'), errorToast: t('common:update_failed') }); const { isOpen: isOpenContact, onClose: onCloseContact, onOpen: onOpenContact } = useDisclosure(); return ( {t('account_team:set_name_avatar')} {t('account_team:notification_recieve')} {(() => { return notificationAccount ? ( {notificationAccount} ) : ( {t('account_team:please_bind_contact')} ); })()} {!!defaultData.id ? ( <> ) : ( )} onSelectImage(e, { maxH: 300, maxW: 300, callback: (e) => setValue('avatar', e) }) } /> {isOpenContact && ( { setValue('notificationAccount', val); }} mode="notification_account" /> )} ); } export default React.memo(EditModal);