UNPKG

@linzjs/step-ag-grid

Version:

[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) > Reusable [ag-grid](https://www.ag-grid.com/) component for LINZ / Toitū te whenua.

42 lines (38 loc) 1.15 kB
import { useEffect, useRef } from 'react'; export const useDeferredPromise = <T>() => { const promiseResolve = useRef<((value: T | PromiseLike<T>) => void) | undefined>(); const promiseReject = useRef<() => void>(); // End promise on unload useEffect(() => { return () => { promiseReject.current && promiseReject.current(); }; }, []); return { invoke: () => new Promise<T>((resolve, reject) => { promiseResolve.current = resolve; promiseReject.current = reject; }), resolve: (value: T) => { if (!promiseResolve.current) { console.error("Promise not invoked so can't resolve"); return; } const temp = promiseResolve.current; promiseResolve.current = undefined; promiseReject.current = undefined; temp(value); }, reject: () => { if (!promiseResolve.current) { console.error("Promise not invoked so can't reject"); return; } const reject = promiseReject.current; promiseResolve.current = undefined; promiseReject.current = undefined; if (reject) reject(); }, }; };