codies/frontend/src/hooks/index.tsx

19 lines
620 B
TypeScript
Raw Normal View History

2020-05-23 21:51:11 +00:00
import * as React from 'react';
export interface ServerTime {
setOffset: (v: number) => void;
now: () => number;
}
const Context = React.createContext<ServerTime>(Object.seal({ setOffset: () => {}, now: Date.now }));
2020-10-24 03:23:19 +00:00
export function ServerTimeProvider<P>(props: React.PropsWithChildren<P>) {
2020-05-23 21:51:11 +00:00
const [offset, setOffset] = React.useState(0);
2020-05-25 23:52:46 +00:00
const value = React.useMemo(() => Object.seal({ setOffset, now: () => Date.now() + offset }), [offset]);
2020-05-23 21:51:11 +00:00
return <Context.Provider value={value}>{props.children}</Context.Provider>;
2020-10-24 03:23:19 +00:00
}
2020-05-23 21:51:11 +00:00
export function useServerTime() {
return React.useContext(Context);
}