- 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}/ss-agent/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,
- };
- };
|