import { ReactElement, useContext } from 'react'; import { useTranslation } from 'react-i18next'; import { Typography } from '@material-ui/core'; import { rootContext } from '../context/Root'; import { CollectionView } from '../pages/collections/Types'; import { PartitionView } from '../pages/partitions/Types'; import { CollectionData } from '../pages/overview/collectionCard/Types'; import { LOADING_STATE } from '../consts/Milvus'; // handle release and load dialog export interface LoadAndReleaseDialogHookProps { type: 'partition' | 'collection'; } export const useLoadAndReleaseDialogHook = ( props: LoadAndReleaseDialogHookProps ) => { const { type } = props; const { setDialog } = useContext(rootContext); const { t: dialogTrans } = useTranslation('dialog'); const { t: btnTrans } = useTranslation('btn'); const { t: partitionTrans } = useTranslation('partition'); const { t: collectionTrans } = useTranslation('collection'); const name = type === 'collection' ? collectionTrans('collection') : partitionTrans('partition'); const actionsMap = { release: { title: dialogTrans('releaseTitle', { type: name }), component: ( {dialogTrans('releaseContent', { type: name })} ), confirmLabel: btnTrans('release'), }, load: { title: dialogTrans('loadTitle', { type: name }), component: ( {dialogTrans('loadContent', { type: name })} ), confirmLabel: btnTrans('load'), }, }; const handleAction = ( data: PartitionView | CollectionView | CollectionData, cb: (data: any) => Promise ) => { const actionType: 'release' | 'load' = data._status === LOADING_STATE.UNLOADED ? 'load' : 'release'; const { title, component, confirmLabel } = actionsMap[actionType]; setDialog({ open: true, type: 'notice', params: { title, component, confirmLabel, confirm: () => cb(data), }, }); }; return { handleAction, }; }; export const useInsertDialogHook = () => { const { setDialog } = useContext(rootContext); const handleInsertDialog = ( // stepper container, contains all contents component: ReactElement ) => { setDialog({ open: true, type: 'custom', params: { component, }, }); }; return { handleInsertDialog, }; };