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,
};
};