diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2020-03-19 23:12:13 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2020-03-19 23:12:13 +0100 |
commit | 1605e743f44b835e99b3403cb3cfc5018b697d26 (patch) | |
tree | a7d05b20bfa587a5f0cc448d66b2fc7ad392b974 /src/renderer/editor/util.ts | |
parent | 6c8f2d780acd6c41d42de6b5fc8d84e765334b64 (diff) | |
download | rpgedit-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.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); +} |