summaryrefslogtreecommitdiffstats
path: root/src/renderer/editor/util.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/editor/util.ts')
-rw-r--r--src/renderer/editor/util.ts31
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);
+}