-
Notifications
You must be signed in to change notification settings - Fork 1
/
useGlobalData.ts
73 lines (64 loc) · 1.48 KB
/
useGlobalData.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { ReactNode } from "react";
import { create } from "zustand";
type User = {
id: string;
name: string;
};
type Channel = {
id: string;
name: string;
};
type UserGroup = {
id: string;
name: string;
};
type Hooks = {
user?: (data: User) => ReactNode;
channel?: (data: Channel) => ReactNode;
usergroup?: (data: UserGroup) => ReactNode;
atChannel?: () => ReactNode;
atEveryone?: () => ReactNode;
atHere?: () => ReactNode;
emoji?: (emoji_text: string) => string;
date?: (data: {
timestamp: string;
format: string;
link: string | null;
fallback: string;
}) => ReactNode;
};
type Data = {
users: User[];
channels: Channel[];
user_groups: UserGroup[];
hooks: Hooks;
setUsers: (users: User[]) => void;
setChannels: (channels: Channel[]) => void;
setUserGroups: (channels: UserGroup[]) => void;
setHooks: (hooks: Hooks) => void;
};
export type GlobalStore = Data;
const useBearStore = create<Data>((set) => ({
users: [],
channels: [],
user_groups: [],
hooks: {},
setUsers: (users) => set({ users }),
setChannels: (channels) => set({ channels }),
setUserGroups: (user_groups) => set({ user_groups }),
setHooks: (hooks) => set({ hooks }),
}));
export const useGlobalData = () => {
const { users, channels, user_groups, hooks, setChannels, setUsers, setHooks, setUserGroups } =
useBearStore();
return {
users,
channels,
user_groups,
hooks,
setChannels,
setUsers,
setHooks,
setUserGroups,
};
};