import React from 'react'; import { Observable, Subject } from 'rxjs'; // This error is thrown when ui goes wrong with bad logic. // Such as a variable should not be null, but it does. // This error should never occur. If it does, it indicates there is some logic bug in codes. export class UiLogicError extends Error {} export function useEventEmiiter(): [() => Observable, () => void] { const ref = React.useRef | null>(null); return React.useMemo(() => { const getter = (): Subject => { if (ref.current == null) { ref.current = new Subject(); } return ref.current; }; const trigger = (): void => { getter().next(null); }; return [getter, trigger]; }, []); } export function useValueEventEmiiter(): [ () => Observable, (value: T) => void ] { const ref = React.useRef | null>(null); return React.useMemo(() => { const getter = (): Subject => { if (ref.current == null) { ref.current = new Subject(); } return ref.current; }; const trigger = (value: T): void => { getter().next(value); }; return [getter, trigger]; }, []); }