1import * as React from 'react';
 2
 3export interface ServerTime {
 4    setOffset: (v: number) => void;
 5    now: () => number;
 6}
 7
 8const Context = React.createContext<ServerTime>(Object.seal({ setOffset: () => {}, now: Date.now }));
 9
10export const ServerTimeProvider = (props: React.PropsWithChildren<{}>) => {
11    const [offset, setOffset] = React.useState(0);
12    const value = React.useMemo(() => Object.seal({ setOffset, now: () => Date.now() + offset }), [offset]);
13    return <Context.Provider value={value}>{props.children}</Context.Provider>;
14};
15
16export function useServerTime() {
17    return React.useContext(Context);
18}