@hyper-fetch/react
Version:
React hooks and utils for the hyper-fetch
37 lines (28 loc) • 1.27 kB
text/typescript
import { useDidMount } from "@better-hooks/lifecycle";
import { ClientInstance } from "@hyper-fetch/core";
import { useState } from "react";
import { UseAppManagerReturnType } from "hooks/use-app-manager";
export const useAppManager = <Client extends ClientInstance>(client: Client): UseAppManagerReturnType => {
const [online, setIsOnline] = useState(client.appManager.isOnline);
const [focused, setIsFocused] = useState(client.appManager.isFocused);
const mountEvents = () => {
const unmountIsOnline = client.appManager.events.onOnline(() => setIsOnline(true));
const unmountIsOffline = client.appManager.events.onOffline(() => setIsOnline(false));
const unmountIsFocus = client.appManager.events.onFocus(() => setIsFocused(true));
const unmountIsBlur = client.appManager.events.onBlur(() => setIsFocused(false));
return () => {
unmountIsOnline();
unmountIsOffline();
unmountIsFocus();
unmountIsBlur();
};
};
const setOnline = (isOnline: boolean) => {
client.appManager.setOnline(isOnline);
};
const setFocused = (isFocused: boolean) => {
client.appManager.setFocused(isFocused);
};
useDidMount(mountEvents);
return { isOnline: online, isFocused: focused, setOnline, setFocused };
};