import { css } from '@emotion/css'; import { Dropdown, Menu, Modal } from 'antd'; import React, { createContext, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { useACLRoleContext, useAPIClient, useCurrentUserContext } from '..'; import { useCurrentAppInfo } from '../appInfo/CurrentAppInfoProvider'; import { ChangePassword } from './ChangePassword'; import { EditProfile } from './EditProfile'; import { LanguageSettings } from './LanguageSettings'; import { SwitchRole } from './SwitchRole'; import { ThemeSettings } from './ThemeSettings'; const ApplicationVersion = () => { const data = useCurrentAppInfo(); return ( Version {data?.data?.version} ); }; /** * @note If you want to change here, Note the Setting block on the mobile side */ export const SettingsMenu: React.FC<{ redirectUrl?: string; }> = (props) => { const { redirectUrl = '' } = props; const { allowAll, snippets } = useACLRoleContext(); const appAllowed = allowAll || snippets?.includes('app'); const navigate = useNavigate(); const api = useAPIClient(); const { t } = useTranslation(); const silenceApi = useAPIClient(); const check = async () => { return await new Promise((resolve) => { const heartbeat = setInterval(() => { silenceApi .silent() .resource('app') .getInfo() .then((res) => { console.log(res); if (res?.status === 200) { resolve('ok'); clearInterval(heartbeat); } return res; }) .catch(() => { // ignore }); }, 3000); }); }; return ( {appAllowed && ( <> { await api.resource('app').clearCache(); window.location.reload(); }} > {t('Clear cache')} { Modal.confirm({ title: t('Reboot application'), content: t( 'The will interrupt service, it may take a few seconds to restart. Are you sure to continue?', ), okText: t('Reboot'), okButtonProps: { danger: true, }, onOk: async () => { await api.resource('app').reboot(); await check(); window.location.reload(); }, }); }} > {t('Reboot application')} )} { await api.auth.signOut(); navigate(`/signin?redirect=${encodeURIComponent(redirectUrl)}`); }} > {t('Sign out')} ); }; export const DropdownVisibleContext = createContext(null); export const CurrentUser = () => { const [visible, setVisible] = useState(false); const { data } = useCurrentUserContext(); return (
{ setVisible(visible); }} overlay={} > {data?.data?.nickname || data?.data?.email}
); };