| import { SharedFrom } from '@/constants/chat'; | |
| import { | |
| useSetModalState, | |
| useShowDeleteConfirm, | |
| useTranslate, | |
| } from '@/hooks/common-hooks'; | |
| import { | |
| useCreateSystemToken, | |
| useFetchManualSystemTokenList, | |
| useFetchSystemTokenList, | |
| useRemoveSystemToken, | |
| } from '@/hooks/user-setting-hooks'; | |
| import { IStats } from '@/interfaces/database/chat'; | |
| import { useQueryClient } from '@tanstack/react-query'; | |
| import { message } from 'antd'; | |
| import { useCallback } from 'react'; | |
| export const useOperateApiKey = (idKey: string, dialogId?: string) => { | |
| const { removeToken } = useRemoveSystemToken(); | |
| const { createToken, loading: creatingLoading } = useCreateSystemToken(); | |
| const { data: tokenList, loading: listLoading } = useFetchSystemTokenList(); | |
| const showDeleteConfirm = useShowDeleteConfirm(); | |
| const onRemoveToken = (token: string) => { | |
| showDeleteConfirm({ | |
| onOk: () => removeToken(token), | |
| }); | |
| }; | |
| const onCreateToken = useCallback(() => { | |
| createToken({ [idKey]: dialogId }); | |
| }, [createToken, idKey, dialogId]); | |
| return { | |
| removeToken: onRemoveToken, | |
| createToken: onCreateToken, | |
| tokenList, | |
| creatingLoading, | |
| listLoading, | |
| }; | |
| }; | |
| type ChartStatsType = { | |
| [k in keyof IStats]: Array<{ xAxis: string; yAxis: number }>; | |
| }; | |
| export const useSelectChartStatsList = (): ChartStatsType => { | |
| const queryClient = useQueryClient(); | |
| const data = queryClient.getQueriesData({ queryKey: ['fetchStats'] }); | |
| const stats: IStats = (data.length > 0 ? data[0][1] : {}) as IStats; | |
| return Object.keys(stats).reduce((pre, cur) => { | |
| const item = stats[cur as keyof IStats]; | |
| if (item.length > 0) { | |
| pre[cur as keyof IStats] = item.map((x) => ({ | |
| xAxis: x[0] as string, | |
| yAxis: x[1] as number, | |
| })); | |
| } | |
| return pre; | |
| }, {} as ChartStatsType); | |
| }; | |
| export const useShowTokenEmptyError = () => { | |
| const { t } = useTranslate('chat'); | |
| const showTokenEmptyError = useCallback(() => { | |
| message.error(t('tokenError')); | |
| }, [t]); | |
| return { showTokenEmptyError }; | |
| }; | |
| export const useShowBetaEmptyError = () => { | |
| const { t } = useTranslate('chat'); | |
| const showBetaEmptyError = useCallback(() => { | |
| message.error(t('betaError')); | |
| }, [t]); | |
| return { showBetaEmptyError }; | |
| }; | |
| const getUrlWithToken = (token: string, from: string = 'chat') => { | |
| const { protocol, host } = window.location; | |
| return `${protocol}//${host}/chat/share?shared_id=${token}&from=${from}`; | |
| }; | |
| const useFetchTokenListBeforeOtherStep = () => { | |
| const { showTokenEmptyError } = useShowTokenEmptyError(); | |
| const { showBetaEmptyError } = useShowBetaEmptyError(); | |
| const { data: tokenList, fetchSystemTokenList } = | |
| useFetchManualSystemTokenList(); | |
| let token = '', | |
| beta = ''; | |
| if (Array.isArray(tokenList) && tokenList.length > 0) { | |
| token = tokenList[0].token; | |
| beta = tokenList[0].beta; | |
| } | |
| token = | |
| Array.isArray(tokenList) && tokenList.length > 0 ? tokenList[0].token : ''; | |
| const handleOperate = useCallback(async () => { | |
| const ret = await fetchSystemTokenList(); | |
| const list = ret; | |
| if (Array.isArray(list) && list.length > 0) { | |
| if (!list[0].beta) { | |
| showBetaEmptyError(); | |
| return false; | |
| } | |
| return list[0]?.token; | |
| } else { | |
| showTokenEmptyError(); | |
| return false; | |
| } | |
| }, [fetchSystemTokenList, showBetaEmptyError, showTokenEmptyError]); | |
| return { | |
| token, | |
| beta, | |
| handleOperate, | |
| }; | |
| }; | |
| export const useShowEmbedModal = () => { | |
| const { | |
| visible: embedVisible, | |
| hideModal: hideEmbedModal, | |
| showModal: showEmbedModal, | |
| } = useSetModalState(); | |
| const { handleOperate, token, beta } = useFetchTokenListBeforeOtherStep(); | |
| const handleShowEmbedModal = useCallback(async () => { | |
| const succeed = await handleOperate(); | |
| if (succeed) { | |
| showEmbedModal(); | |
| } | |
| }, [handleOperate, showEmbedModal]); | |
| return { | |
| showEmbedModal: handleShowEmbedModal, | |
| hideEmbedModal, | |
| embedVisible, | |
| embedToken: token, | |
| beta, | |
| }; | |
| }; | |
| export const usePreviewChat = (idKey: string) => { | |
| const { handleOperate } = useFetchTokenListBeforeOtherStep(); | |
| const open = useCallback( | |
| (t: string) => { | |
| window.open( | |
| getUrlWithToken( | |
| t, | |
| idKey === 'canvasId' ? SharedFrom.Agent : SharedFrom.Chat, | |
| ), | |
| '_blank', | |
| ); | |
| }, | |
| [idKey], | |
| ); | |
| const handlePreview = useCallback(async () => { | |
| const token = await handleOperate(); | |
| if (token) { | |
| open(token); | |
| } | |
| }, [handleOperate, open]); | |
| return { | |
| handlePreview, | |
| }; | |
| }; | |