summaryrefslogtreecommitdiffstats
path: root/src/renderer/editor/util.ts
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2020-03-19 23:12:13 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2020-03-19 23:12:13 +0100
commit1605e743f44b835e99b3403cb3cfc5018b697d26 (patch)
treea7d05b20bfa587a5f0cc448d66b2fc7ad392b974 /src/renderer/editor/util.ts
parent6c8f2d780acd6c41d42de6b5fc8d84e765334b64 (diff)
downloadrpgedit-1605e743f44b835e99b3403cb3cfc5018b697d26.tar
rpgedit-1605e743f44b835e99b3403cb3cfc5018b697d26.zip
editor: experiment with Material UI for sprite library implementation
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);
+}