64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import type { GlobalState } from '../global/types';
|
|
import type { OldLangFn } from './useOldLang';
|
|
|
|
import useBrowserOnline from './window/useBrowserOnline';
|
|
|
|
export enum ConnectionStatus {
|
|
waitingForNetwork,
|
|
syncing,
|
|
online,
|
|
}
|
|
|
|
type ConnectionStatusPosition =
|
|
'overlay'
|
|
| 'minimized'
|
|
| 'middleHeader'
|
|
| 'none';
|
|
|
|
export default function useConnectionStatus(
|
|
lang: OldLangFn,
|
|
connectionState: GlobalState['connectionState'],
|
|
isSyncing: boolean | undefined,
|
|
hasMiddleHeader: boolean,
|
|
isMinimized?: boolean,
|
|
isDisabled?: boolean,
|
|
) {
|
|
let status: ConnectionStatus;
|
|
const isBrowserOnline = useBrowserOnline();
|
|
if (!isBrowserOnline || connectionState === 'connectionStateConnecting') {
|
|
status = ConnectionStatus.waitingForNetwork;
|
|
} else if (isSyncing) {
|
|
status = ConnectionStatus.syncing;
|
|
} else {
|
|
status = ConnectionStatus.online;
|
|
}
|
|
|
|
let position: ConnectionStatusPosition;
|
|
if (status === ConnectionStatus.online || isDisabled) {
|
|
position = 'none';
|
|
} else if (hasMiddleHeader) {
|
|
position = 'middleHeader';
|
|
} else if (isMinimized) {
|
|
position = 'minimized';
|
|
} else {
|
|
position = 'overlay';
|
|
}
|
|
|
|
let text: string | undefined;
|
|
if (status === ConnectionStatus.waitingForNetwork) {
|
|
text = lang('WaitingForNetwork');
|
|
} else if (status === ConnectionStatus.syncing) {
|
|
text = lang('Updating');
|
|
}
|
|
|
|
if (position === 'middleHeader') {
|
|
text = text!.toLowerCase().replace(/\.+$/, '');
|
|
}
|
|
|
|
return {
|
|
connectionStatus: status,
|
|
connectionStatusPosition: position,
|
|
connectionStatusText: text,
|
|
};
|
|
}
|