| import { SharedFrom } from '@/constants/chat'; |
| import { |
| useCreateNextToken, |
| useFetchTokenList, |
| useRemoveNextToken, |
| } from '@/hooks/chat-hooks'; |
| import { |
| useSetModalState, |
| useShowDeleteConfirm, |
| useTranslate, |
| } from '@/hooks/common-hooks'; |
| import { IStats } from '@/interfaces/database/chat'; |
| import { useQueryClient } from '@tanstack/react-query'; |
| import { message } from 'antd'; |
| import { useCallback } from 'react'; |
|
|
| export const useOperateApiKey = (dialogId: string, idKey: string) => { |
| const { removeToken } = useRemoveNextToken(); |
| const { createToken, loading: creatingLoading } = useCreateNextToken(); |
| const { data: tokenList, loading: listLoading } = useFetchTokenList({ |
| [idKey]: dialogId, |
| }); |
|
|
| const showDeleteConfirm = useShowDeleteConfirm(); |
|
|
| const onRemoveToken = (token: string, tenantId: string) => { |
| showDeleteConfirm({ |
| onOk: () => removeToken({ dialogId, tokens: [token], tenantId }), |
| }); |
| }; |
|
|
| 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[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 }; |
| }; |
|
|
| const getUrlWithToken = (token: string, from: string = 'chat') => { |
| const { protocol, host } = window.location; |
| return `${protocol}//${host}/chat/share?shared_id=${token}&from=${from}`; |
| }; |
|
|
| const useFetchTokenListBeforeOtherStep = (dialogId: string, idKey: string) => { |
| const { showTokenEmptyError } = useShowTokenEmptyError(); |
|
|
| const { data: tokenList, refetch } = useFetchTokenList({ [idKey]: dialogId }); |
|
|
| const token = |
| Array.isArray(tokenList) && tokenList.length > 0 ? tokenList[0].token : ''; |
|
|
| const handleOperate = useCallback(async () => { |
| const ret = await refetch(); |
| const list = ret.data; |
| if (Array.isArray(list) && list.length > 0) { |
| return list[0]?.token; |
| } else { |
| showTokenEmptyError(); |
| return false; |
| } |
| }, [showTokenEmptyError, refetch]); |
|
|
| return { |
| token, |
| handleOperate, |
| }; |
| }; |
|
|
| export const useShowEmbedModal = (dialogId: string, idKey: string) => { |
| const { |
| visible: embedVisible, |
| hideModal: hideEmbedModal, |
| showModal: showEmbedModal, |
| } = useSetModalState(); |
|
|
| const { handleOperate, token } = useFetchTokenListBeforeOtherStep( |
| dialogId, |
| idKey, |
| ); |
|
|
| const handleShowEmbedModal = useCallback(async () => { |
| const succeed = await handleOperate(); |
| if (succeed) { |
| showEmbedModal(); |
| } |
| }, [handleOperate, showEmbedModal]); |
|
|
| return { |
| showEmbedModal: handleShowEmbedModal, |
| hideEmbedModal, |
| embedVisible, |
| embedToken: token, |
| }; |
| }; |
|
|
| export const usePreviewChat = (dialogId: string, idKey: string) => { |
| const { handleOperate } = useFetchTokenListBeforeOtherStep(dialogId, idKey); |
|
|
| 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, |
| }; |
| }; |
|
|