diff options
Diffstat (limited to 'src/renderer/editor/util.ts')
-rw-r--r-- | src/renderer/editor/util.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/renderer/editor/util.ts b/src/renderer/editor/util.ts new file mode 100644 index 0000000..b2331bb --- /dev/null +++ b/src/renderer/editor/util.ts @@ -0,0 +1,31 @@ +import { useCallback, useEffect, useState } from 'react'; + +import * as fs from 'fs'; + +export function usePromise<T>(f: () => Promise<T>): T | null { + const [value, setValue] = useState<T | null>(null); + + useEffect(() => { + setValue(null); + + let cancelled = false; + + (async (): Promise<void> => { + const v = await f(); + if (!cancelled) { + setValue(v); + } + })(); + + return (): void => { + cancelled = true; + }; + }, [f]); + + return value; +} + +export function useReadFile(path: string, encoding: BufferEncoding): string | null { + const readFile = useCallback(() => fs.promises.readFile(path, encoding), [path, encoding]); + return usePromise(readFile); +} |