- import { LanguageTranslationMap } from '@/constants/common';
 - import { ResponseGetType } from '@/interfaces/database/base';
 - import { IToken } from '@/interfaces/database/chat';
 - import { ITenantInfo } from '@/interfaces/database/knowledge';
 - import {
 -   ISystemStatus,
 -   ITenant,
 -   ITenantUser,
 -   IUserInfo,
 - } from '@/interfaces/database/user-setting';
 - import userService, {
 -   addTenantUser,
 -   agreeTenant,
 -   deleteTenantUser,
 -   listTenant,
 -   listTenantUser,
 - } from '@/services/user-service';
 - import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
 - import { Modal, message } from 'antd';
 - import DOMPurify from 'dompurify';
 - import { isEmpty } from 'lodash';
 - import { useCallback, useMemo, useState } from 'react';
 - import { useTranslation } from 'react-i18next';
 - import { history } from 'umi';
 - 
 - export const useFetchUserInfo = (): ResponseGetType<IUserInfo> => {
 -   const { i18n } = useTranslation();
 - 
 -   const { data, isFetching: loading } = useQuery({
 -     queryKey: ['userInfo'],
 -     initialData: {},
 -     gcTime: 0,
 -     queryFn: async () => {
 -       const { data } = await userService.user_info();
 -       if (data.code === 0) {
 -         i18n.changeLanguage(
 -           LanguageTranslationMap[
 -             data.data.language as keyof typeof LanguageTranslationMap
 -           ],
 -         );
 -       }
 -       return data?.data ?? {};
 -     },
 -   });
 - 
 -   return { data, loading };
 - };
 - 
 - export const useFetchTenantInfo = (): ResponseGetType<ITenantInfo> => {
 -   const { t } = useTranslation();
 -   const { data, isFetching: loading } = useQuery({
 -     queryKey: ['tenantInfo'],
 -     initialData: {},
 -     gcTime: 0,
 -     queryFn: async () => {
 -       const { data: res } = await userService.get_tenant_info();
 -       if (res.code === 0) {
 -         // llm_id is chat_id
 -         // asr_id is speech2txt
 -         const { data } = res;
 -         if (isEmpty(data.embd_id) || isEmpty(data.llm_id)) {
 -           Modal.warning({
 -             title: t('common.warn'),
 -             content: (
 -               <div
 -                 dangerouslySetInnerHTML={{
 -                   __html: DOMPurify.sanitize(t('setting.modelProvidersWarn')),
 -                 }}
 -               ></div>
 -             ),
 -             onOk() {
 -               history.push('/user-setting/model');
 -             },
 -           });
 -         }
 -         data.chat_id = data.llm_id;
 -         data.speech2text_id = data.asr_id;
 - 
 -         return data;
 -       }
 - 
 -       return res;
 -     },
 -   });
 - 
 -   return { data, loading };
 - };
 - 
 - export const useSelectParserList = (): Array<{
 -   value: string;
 -   label: string;
 - }> => {
 -   const { data: tenantInfo } = useFetchTenantInfo();
 - 
 -   const parserList = useMemo(() => {
 -     const parserArray: Array<string> = tenantInfo?.parser_ids?.split(',') ?? [];
 -     return parserArray.map((x) => {
 -       const arr = x.split(':');
 -       return { value: arr[0], label: arr[1] };
 -     });
 -   }, [tenantInfo]);
 - 
 -   return parserList;
 - };
 - 
 - export const useSaveSetting = () => {
 -   const queryClient = useQueryClient();
 -   const { t } = useTranslation();
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['saveSetting'],
 -     mutationFn: async (
 -       userInfo: { new_password: string } | Partial<IUserInfo>,
 -     ) => {
 -       const { data } = await userService.setting(userInfo);
 -       if (data.code === 0) {
 -         message.success(t('message.modified'));
 -         queryClient.invalidateQueries({ queryKey: ['userInfo'] });
 -       }
 -       return data?.code;
 -     },
 -   });
 - 
 -   return { data, loading, saveSetting: mutateAsync };
 - };
 - 
 - export const useFetchSystemVersion = () => {
 -   const [version, setVersion] = useState('');
 -   const [loading, setLoading] = useState(false);
 - 
 -   const fetchSystemVersion = useCallback(async () => {
 -     try {
 -       setLoading(true);
 -       const { data } = await userService.getSystemVersion();
 -       if (data.code === 0) {
 -         setVersion(data.data);
 -         setLoading(false);
 -       }
 -     } catch (error) {
 -       setLoading(false);
 -     }
 -   }, []);
 - 
 -   return { fetchSystemVersion, version, loading };
 - };
 - 
 - export const useFetchSystemStatus = () => {
 -   const [systemStatus, setSystemStatus] = useState<ISystemStatus>(
 -     {} as ISystemStatus,
 -   );
 -   const [loading, setLoading] = useState(false);
 - 
 -   const fetchSystemStatus = useCallback(async () => {
 -     setLoading(true);
 -     const { data } = await userService.getSystemStatus();
 -     if (data.code === 0) {
 -       setSystemStatus(data.data);
 -       setLoading(false);
 -     }
 -   }, []);
 - 
 -   return {
 -     systemStatus,
 -     fetchSystemStatus,
 -     loading,
 -   };
 - };
 - 
 - export const useFetchSystemTokenList = (params: Record<string, any>) => {
 -   const {
 -     data,
 -     isFetching: loading,
 -     refetch,
 -   } = useQuery<IToken[]>({
 -     queryKey: ['fetchSystemTokenList', params],
 -     initialData: [],
 -     gcTime: 0,
 -     queryFn: async () => {
 -       const { data } = await userService.listToken(params);
 - 
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, refetch };
 - };
 - 
 - export const useRemoveSystemToken = () => {
 -   const queryClient = useQueryClient();
 -   const { t } = useTranslation();
 - 
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['removeSystemToken'],
 -     mutationFn: async (token: string) => {
 -       const { data } = await userService.removeToken({}, token);
 -       if (data.code === 0) {
 -         message.success(t('message.deleted'));
 -         queryClient.invalidateQueries({ queryKey: ['fetchSystemTokenList'] });
 -       }
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, removeToken: mutateAsync };
 - };
 - 
 - export const useCreateSystemToken = () => {
 -   const queryClient = useQueryClient();
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['createSystemToken'],
 -     mutationFn: async (params: Record<string, any>) => {
 -       const { data } = await userService.createToken(params);
 -       if (data.code === 0) {
 -         queryClient.invalidateQueries({ queryKey: ['fetchSystemTokenList'] });
 -       }
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, createToken: mutateAsync };
 - };
 - 
 - export const useListTenantUser = () => {
 -   const { data: tenantInfo } = useFetchTenantInfo();
 -   const tenantId = tenantInfo.tenant_id;
 -   const {
 -     data,
 -     isFetching: loading,
 -     refetch,
 -   } = useQuery<ITenantUser[]>({
 -     queryKey: ['listTenantUser', tenantId],
 -     initialData: [],
 -     gcTime: 0,
 -     enabled: !!tenantId,
 -     queryFn: async () => {
 -       const { data } = await listTenantUser(tenantId);
 - 
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, refetch };
 - };
 - 
 - export const useAddTenantUser = () => {
 -   const { data: tenantInfo } = useFetchTenantInfo();
 -   const queryClient = useQueryClient();
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['addTenantUser'],
 -     mutationFn: async (email: string) => {
 -       const { data } = await addTenantUser(tenantInfo.tenant_id, email);
 -       if (data.code === 0) {
 -         queryClient.invalidateQueries({ queryKey: ['listTenantUser'] });
 -       }
 -       return data?.code;
 -     },
 -   });
 - 
 -   return { data, loading, addTenantUser: mutateAsync };
 - };
 - 
 - export const useDeleteTenantUser = () => {
 -   const { data: tenantInfo } = useFetchTenantInfo();
 -   const queryClient = useQueryClient();
 -   const { t } = useTranslation();
 - 
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['deleteTenantUser'],
 -     mutationFn: async ({
 -       userId,
 -       tenantId,
 -     }: {
 -       userId: string;
 -       tenantId?: string;
 -     }) => {
 -       const { data } = await deleteTenantUser({
 -         tenantId: tenantId ?? tenantInfo.tenant_id,
 -         userId,
 -       });
 -       if (data.code === 0) {
 -         message.success(t('message.deleted'));
 -         queryClient.invalidateQueries({ queryKey: ['listTenantUser'] });
 -         queryClient.invalidateQueries({ queryKey: ['listTenant'] });
 -       }
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, deleteTenantUser: mutateAsync };
 - };
 - 
 - export const useListTenant = () => {
 -   const { data: tenantInfo } = useFetchTenantInfo();
 -   const tenantId = tenantInfo.tenant_id;
 -   const {
 -     data,
 -     isFetching: loading,
 -     refetch,
 -   } = useQuery<ITenant[]>({
 -     queryKey: ['listTenant', tenantId],
 -     initialData: [],
 -     gcTime: 0,
 -     enabled: !!tenantId,
 -     queryFn: async () => {
 -       const { data } = await listTenant();
 - 
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, refetch };
 - };
 - 
 - export const useAgreeTenant = () => {
 -   const queryClient = useQueryClient();
 -   const { t } = useTranslation();
 - 
 -   const {
 -     data,
 -     isPending: loading,
 -     mutateAsync,
 -   } = useMutation({
 -     mutationKey: ['agreeTenant'],
 -     mutationFn: async (tenantId: string) => {
 -       const { data } = await agreeTenant(tenantId);
 -       if (data.code === 0) {
 -         message.success(t('message.operated'));
 -         queryClient.invalidateQueries({ queryKey: ['listTenant'] });
 -       }
 -       return data?.data ?? [];
 -     },
 -   });
 - 
 -   return { data, loading, agreeTenant: mutateAsync };
 - };
 
 
  |