aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/hooks/useEmitter.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/hooks/useEmitter.ts')
-rw-r--r--packages/excalidraw/hooks/useEmitter.ts21
1 files changed, 21 insertions, 0 deletions
diff --git a/packages/excalidraw/hooks/useEmitter.ts b/packages/excalidraw/hooks/useEmitter.ts
new file mode 100644
index 0000000..27b94bc
--- /dev/null
+++ b/packages/excalidraw/hooks/useEmitter.ts
@@ -0,0 +1,21 @@
+import { useEffect, useState } from "react";
+import type { Emitter } from "../emitter";
+
+export const useEmitter = <TEvent extends unknown>(
+ emitter: Emitter<[TEvent]>,
+ initialState: TEvent,
+) => {
+ const [event, setEvent] = useState<TEvent>(initialState);
+
+ useEffect(() => {
+ const unsubscribe = emitter.on((event) => {
+ setEvent(event);
+ });
+
+ return () => {
+ unsubscribe();
+ };
+ }, [emitter]);
+
+ return event;
+};