mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-20 02:34:52 +00:00

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77) This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be. * perf: workflow ux * system config * Newflow (#89) * docs: Add doc for Xinference (#1266) Signed-off-by: Carson Yang <yangchuansheng33@gmail.com> * Revert "lafAccount add pat & re request when token invalid (#76)" (#77) This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be. * perf: workflow ux * system config * Revert "lafAccount add pat & re request when token invalid (#76)" (#77) This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be. * Revert "lafAccount add pat & re request when token invalid (#76)" (#77) This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be. * Revert "lafAccount add pat & re request when token invalid (#76)" (#77) This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be. * rename code * move code * update flow * input type selector * perf: workflow runtime * feat: node adapt newflow * feat: adapt plugin * feat: 360 connection * check workflow * perf: flow 性能 * change plugin input type (#81) * change plugin input type * plugin label mode * perf: nodecard * debug * perf: debug ui * connection ui * change workflow ui (#82) * feat: workflow debug * adapt openAPI for new workflow (#83) * adapt openAPI for new workflow * i18n * perf: plugin debug * plugin input ui * delete * perf: global variable select * fix rebase * perf: workflow performance * feat: input render type icon * input icon * adapt flow (#84) * adapt newflow * temp * temp * fix * feat: app schedule trigger * feat: app schedule trigger * perf: schedule ui * feat: ioslatevm run js code * perf: workflow varialbe table ui * feat: adapt simple mode * feat: adapt input params * output * feat: adapt tamplate * fix: ts * add if-else module (#86) * perf: worker * if else node * perf: tiktoken worker * fix: ts * perf: tiktoken * fix if-else node (#87) * fix if-else node * type * fix * perf: audio render * perf: Parallel worker * log * perf: if else node * adapt plugin * prompt * perf: reference ui * reference ui * handle ux * template ui and plugin tool * adapt v1 workflow * adapt v1 workflow completions * perf: time variables * feat: workflow keyboard shortcuts * adapt v1 workflow * update workflow example doc (#88) * fix: simple mode select tool --------- Signed-off-by: Carson Yang <yangchuansheng33@gmail.com> Co-authored-by: Carson Yang <yangchuansheng33@gmail.com> Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com> * doc * perf: extract node * extra node field * update plugin version * doc * variable * change doc & fix prompt editor (#90) * fold workflow code * value type label --------- Signed-off-by: Carson Yang <yangchuansheng33@gmail.com> Co-authored-by: Carson Yang <yangchuansheng33@gmail.com> Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
128 lines
3.6 KiB
TypeScript
128 lines
3.6 KiB
TypeScript
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
import { useDisclosure, Button, ModalBody, ModalFooter } from '@chakra-ui/react';
|
|
import { useTranslation } from 'next-i18next';
|
|
import MyModal from '../components/common/MyModal';
|
|
|
|
export const useConfirm = (props?: {
|
|
title?: string;
|
|
iconSrc?: string | '';
|
|
content?: string;
|
|
showCancel?: boolean;
|
|
type?: 'common' | 'delete';
|
|
hideFooter?: boolean;
|
|
}) => {
|
|
const { t } = useTranslation();
|
|
|
|
const map = useMemo(() => {
|
|
const map = {
|
|
common: {
|
|
title: t('common.confirm.Common Tip'),
|
|
bg: undefined,
|
|
iconSrc: 'common/confirm/commonTip'
|
|
},
|
|
delete: {
|
|
title: t('common.Delete Warning'),
|
|
bg: 'red.600',
|
|
iconSrc: 'common/confirm/deleteTip'
|
|
}
|
|
};
|
|
if (props?.type && map[props.type]) return map[props.type];
|
|
return map.common;
|
|
}, [props?.type, t]);
|
|
|
|
const {
|
|
title = map?.title || t('Warning'),
|
|
iconSrc = map?.iconSrc,
|
|
content,
|
|
showCancel = true,
|
|
hideFooter = false
|
|
} = props || {};
|
|
const [customContent, setCustomContent] = useState<string | React.ReactNode>(content);
|
|
|
|
const { isOpen, onOpen, onClose } = useDisclosure();
|
|
|
|
const confirmCb = useRef<any>();
|
|
const cancelCb = useRef<any>();
|
|
|
|
return {
|
|
openConfirm: useCallback(
|
|
(confirm?: any, cancel?: any, customContent?: string | React.ReactNode) => {
|
|
confirmCb.current = confirm;
|
|
cancelCb.current = cancel;
|
|
|
|
customContent && setCustomContent(customContent);
|
|
|
|
return onOpen;
|
|
},
|
|
[onOpen]
|
|
),
|
|
onClose,
|
|
ConfirmModal: useCallback(
|
|
({
|
|
closeText = t('common.Close'),
|
|
confirmText = t('common.Confirm'),
|
|
isLoading,
|
|
bg,
|
|
countDown = 0
|
|
}: {
|
|
closeText?: string;
|
|
confirmText?: string;
|
|
isLoading?: boolean;
|
|
bg?: string;
|
|
countDown?: number;
|
|
}) => {
|
|
const timer = useRef<any>();
|
|
const [countDownAmount, setCountDownAmount] = useState(countDown);
|
|
|
|
useEffect(() => {
|
|
timer.current = setInterval(() => {
|
|
setCountDownAmount((val) => {
|
|
if (val <= 0) {
|
|
clearInterval(timer.current);
|
|
}
|
|
return val - 1;
|
|
});
|
|
}, 1000);
|
|
}, []);
|
|
|
|
return (
|
|
<MyModal isOpen={isOpen} iconSrc={iconSrc} title={title} maxW={['90vw', '500px']}>
|
|
<ModalBody pt={5} whiteSpace={'pre-wrap'}>
|
|
{customContent}
|
|
</ModalBody>
|
|
{!hideFooter && (
|
|
<ModalFooter>
|
|
{showCancel && (
|
|
<Button
|
|
variant={'whiteBase'}
|
|
onClick={() => {
|
|
onClose();
|
|
typeof cancelCb.current === 'function' && cancelCb.current();
|
|
}}
|
|
>
|
|
{closeText}
|
|
</Button>
|
|
)}
|
|
|
|
<Button
|
|
bg={bg ? bg : map.bg}
|
|
isDisabled={countDownAmount > 0}
|
|
ml={4}
|
|
isLoading={isLoading}
|
|
onClick={() => {
|
|
onClose();
|
|
typeof confirmCb.current === 'function' && confirmCb.current();
|
|
}}
|
|
>
|
|
{countDownAmount > 0 ? `${countDownAmount}s` : confirmText}
|
|
</Button>
|
|
</ModalFooter>
|
|
)}
|
|
</MyModal>
|
|
);
|
|
},
|
|
[customContent, hideFooter, iconSrc, isOpen, map.bg, onClose, showCancel, t, title]
|
|
)
|
|
};
|
|
};
|