Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
1import { createTrackedSelector } from "react-tracked";
2import type { StateCreator, StoreApi } from "zustand";
3import { create } from "zustand";
4import { type PersistOptions, persist } from "zustand/middleware";
5
6interface TrackedStore<State> {
7 store: StoreApi<State>;
8 useStore: () => State;
9}
10
11export const createTrackedStore = <State>(
12 initializer: StateCreator<State>
13): TrackedStore<State> => {
14 const store = create<State>(initializer);
15 const useStore = createTrackedSelector(store);
16 return { store, useStore };
17};
18
19export const createPersistedTrackedStore = <State>(
20 initializer: StateCreator<State>,
21 options: PersistOptions<State>
22): TrackedStore<State> => {
23 const store = create(persist<State>(initializer, options));
24 const useStore = createTrackedSelector(store);
25 return { store, useStore };
26};