import { useNavigation, useParams } from 'react-router'; import { useAppVersionStore } from '../store'; import { useShallow } from 'zustand/react/shallow'; import { useCallback, useEffect, useMemo, useState } from 'react'; import CloudUploadOutlined from '@ant-design/icons/CloudUploadOutlined'; import DeleteOutlined from '@ant-design/icons/DeleteOutlined'; import FileOutlined from '@ant-design/icons/FileOutlined'; import LeftOutlined from '@ant-design/icons/LeftOutlined'; import LinkOutlined from '@ant-design/icons/LinkOutlined'; import PlusOutlined from '@ant-design/icons/PlusOutlined'; import { Tooltip } from '@mui/material'; import { isObjectNull } from '@/utils/is-null'; import { FileUpload } from '../modules/FileUpload'; import clsx from 'clsx'; import { message } from '@/modules/message'; import { useNewNavigate } from '@/modules'; import { Button } from '@mui/material'; import { Dialog, DialogContent, DialogTitle, ButtonGroup } from '@mui/material'; import { useTranslation } from 'react-i18next'; import { IconButton } from '@kevisual/components/button/index.tsx'; import { useForm, Controller } from 'react-hook-form'; import { TextField } from '@mui/material'; import { pick } from 'lodash-es'; import { useAppDeleteModalStore, AppDeleteModal } from '../modules/AppDeleteModal'; import { toast } from 'react-toastify'; import { AIEditorLink } from './AIEditorLink'; const FormModal = () => { const { t } = useTranslation(); const { control, handleSubmit, reset } = useForm(); const containerStore = useAppVersionStore( useShallow((state) => { return { showEdit: state.showEdit, setShowEdit: state.setShowEdit, formData: state.formData, updateData: state.updateData, }; }), ); useEffect(() => { const open = containerStore.showEdit; if (open) { const isNull = isObjectNull(containerStore.formData); if (isNull) { reset({}); } else { reset(containerStore.formData); } } }, [containerStore.showEdit]); const onFinish = async (values: any) => { const pickValues = pick(values, ['id', 'key', 'version']); containerStore.updateData(pickValues); }; const onClose = () => { containerStore.setShowEdit(false); reset(); }; const isEdit = containerStore.formData.id; return ( ); }; export const AppVersionList = () => { const params = useParams(); const appKey = params.appKey; const versionStore = useAppVersionStore( useShallow((state) => { return { list: state.list, getList: state.getList, key: state.key, setKey: state.setKey, setShowEdit: state.setShowEdit, formData: state.formData, setFormData: state.setFormData, deleteData: state.deleteData, publishVersion: state.publishVersion, app: state.app, }; }), ); const appDeleteModalStore = useAppDeleteModalStore( useShallow((state) => { return { onClickDelete: state.onClickDelete, }; }), ); const navigate = useNewNavigate(); const [isUpload, setIsUpload] = useState(false); useEffect(() => { // fetch app version list if (appKey) { versionStore.setKey(appKey); versionStore.getList(); } }, [appKey]); const appVersion = useMemo(() => { return versionStore.app?.version || ''; }, [versionStore.app?.version]); return (