@linzjs/step-ag-grid
Version:
[](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
text/typescript
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();
},
};
};