about summary refs log tree commit diff
path: root/src/state/events.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-11-15 17:17:50 -0800
committerGitHub <noreply@github.com>2023-11-15 17:17:50 -0800
commit6616b2bff098ff4a5e464c175edf2446dae0cc88 (patch)
treefb314b51dd3d17b488fa2971735aa7c19176493b /src/state/events.ts
parentf23e9978d839322aab7304d2b6f183722e3ad4c1 (diff)
downloadvoidsky-6616b2bff098ff4a5e464c175edf2446dae0cc88.tar.zst
Shell behaviors update (react-query refactor) (#1915)
* Move tick-every-minute into a hook/context

* Move soft-reset event out of the shell model

* Update soft-reset listener on new search page

* Implement session-loaded and session-dropped events

* Update analytics and push-notifications to use new session system
Diffstat (limited to 'src/state/events.ts')
-rw-r--r--src/state/events.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/state/events.ts b/src/state/events.ts
new file mode 100644
index 000000000..5441aafef
--- /dev/null
+++ b/src/state/events.ts
@@ -0,0 +1,38 @@
+import EventEmitter from 'eventemitter3'
+import {BskyAgent} from '@atproto/api'
+import {SessionAccount} from './session'
+
+type UnlistenFn = () => void
+
+const emitter = new EventEmitter()
+
+// a "soft reset" typically means scrolling to top and loading latest
+// but it can depend on the screen
+export function emitSoftReset() {
+  emitter.emit('soft-reset')
+}
+export function listenSoftReset(fn: () => void): UnlistenFn {
+  emitter.on('soft-reset', fn)
+  return () => emitter.off('soft-reset', fn)
+}
+
+export function emitSessionLoaded(
+  sessionAccount: SessionAccount,
+  agent: BskyAgent,
+) {
+  emitter.emit('session-loaded', sessionAccount, agent)
+}
+export function listenSessionLoaded(
+  fn: (sessionAccount: SessionAccount, agent: BskyAgent) => void,
+): UnlistenFn {
+  emitter.on('session-loaded', fn)
+  return () => emitter.off('session-loaded', fn)
+}
+
+export function emitSessionDropped() {
+  emitter.emit('session-dropped')
+}
+export function listenSessionDropped(fn: () => void): UnlistenFn {
+  emitter.on('session-dropped', fn)
+  return () => emitter.off('session-dropped', fn)
+}