mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.4 KiB
TypeScript
114 lines
2.4 KiB
TypeScript
import { message, Modal } from 'antd';
|
|
import React from 'react';
|
|
import {
|
|
buildStorage,
|
|
setAlert,
|
|
setGlobalLoading,
|
|
setServiceUrl,
|
|
setStorage,
|
|
setToasts,
|
|
setTokenGetter,
|
|
showErrorToasts,
|
|
t,
|
|
fetchGlobalClientConfig,
|
|
request,
|
|
isValidStr,
|
|
isDevelopment,
|
|
setErrorHook,
|
|
showToasts,
|
|
} from 'tailchat-shared';
|
|
import { getPopupContainer } from './utils/dom-helper';
|
|
import { getUserJWT } from './utils/jwt-helper';
|
|
import _get from 'lodash/get';
|
|
|
|
if (isDevelopment) {
|
|
import('source-ref-runtime').then(({ start }) => start());
|
|
}
|
|
|
|
const webStorage = buildStorage(window.localStorage);
|
|
setStorage(() => webStorage);
|
|
|
|
setTokenGetter(async () => {
|
|
return await getUserJWT();
|
|
});
|
|
|
|
const localStorageServiceUrl = window.localStorage.getItem('serviceUrl');
|
|
if (localStorageServiceUrl) {
|
|
setServiceUrl(() => localStorageServiceUrl);
|
|
} else if (process.env.SERVICE_URL) {
|
|
setServiceUrl(() => String(process.env.SERVICE_URL));
|
|
}
|
|
|
|
setToasts((msg, type = 'info') => {
|
|
message.open({
|
|
type,
|
|
duration: 3,
|
|
content: <span data-testid="toast">{String(msg)}</span>,
|
|
});
|
|
});
|
|
|
|
setAlert((options) => {
|
|
Modal.confirm({
|
|
content: options.message,
|
|
onOk: async () => {
|
|
if (typeof options.onConfirm === 'function') {
|
|
await options.onConfirm();
|
|
}
|
|
},
|
|
getContainer: getPopupContainer,
|
|
});
|
|
});
|
|
|
|
setGlobalLoading((text) => {
|
|
const hide = message.loading(text, 0);
|
|
|
|
return hide;
|
|
});
|
|
|
|
const backToLoginPage = (() => {
|
|
let timer: number;
|
|
|
|
return () => {
|
|
if (timer) {
|
|
// 如果已经存在则跳过
|
|
return;
|
|
}
|
|
|
|
if (
|
|
window.location.pathname.startsWith('/entry') ||
|
|
window.location.pathname.startsWith('/invite')
|
|
) {
|
|
// 如果已经在入口页面或者邀请页面则跳过
|
|
return;
|
|
}
|
|
|
|
console.warn('账号授权已过期, 2秒后自动跳转到登录页');
|
|
showToasts(t('账号授权已过期, 2秒后自动跳转到登录页'), 'warning');
|
|
|
|
timer = window.setTimeout(() => {
|
|
window.clearTimeout(timer);
|
|
window.location.href = '/entry/login';
|
|
}, 2000);
|
|
};
|
|
})();
|
|
setErrorHook((err) => {
|
|
const statusCode = _get(err, 'response.data.code');
|
|
if (
|
|
statusCode === 401 // Unauthorized (jwt过期)
|
|
) {
|
|
backToLoginPage();
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
|
|
/**
|
|
* 获取前端配置
|
|
*/
|
|
fetchGlobalClientConfig().catch((e) => {
|
|
showErrorToasts(t('全局配置加载失败'));
|
|
console.error('全局配置加载失败', e);
|
|
});
|