-
Notifications
You must be signed in to change notification settings - Fork 365
Expand file tree
/
Copy pathuseSetExclusiveState.js
More file actions
75 lines (71 loc) · 1.96 KB
/
useSetExclusiveState.js
File metadata and controls
75 lines (71 loc) · 1.96 KB
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
74
75
import { useMemo } from 'react';
import {
useUserStore,
useMemberStore,
useSearchMessageStore,
useChannelStore,
useThreadsMessageStore,
useMentionsStore,
usePinnedMessageStore,
useStarredMessageStore,
useFileStore,
useSidebarStore,
} from '../store';
const useSetExclusiveState = () => {
const setShowSidebar = useSidebarStore((state) => state.setShowSidebar);
const setShowMembers = useMemberStore((state) => state.setShowMembers);
const setShowSearch = useSearchMessageStore((state) => state.setShowSearch);
const setShowPinned = usePinnedMessageStore((state) => state.setShowPinned);
const setShowStarred = useStarredMessageStore(
(state) => state.setShowStarred
);
const setShowAllThreads = useThreadsMessageStore(
(state) => state.setShowAllThreads
);
const setShowAllFiles = useFileStore((state) => state.setShowAllFiles);
const setShowMentions = useMentionsStore((state) => state.setShowMentions);
const setShowCurrentUserInfo = useUserStore(
(state) => state.setShowCurrentUserInfo
);
const setShowChannelinfo = useChannelStore(
(state) => state.setShowChannelinfo
);
const stateSetters = useMemo(
() => [
setShowStarred,
setShowPinned,
setShowMembers,
setShowSearch,
setShowChannelinfo,
setShowAllThreads,
setShowAllFiles,
setShowMentions,
setShowCurrentUserInfo,
],
[
setShowAllFiles,
setShowAllThreads,
setShowChannelinfo,
setShowCurrentUserInfo,
setShowMembers,
setShowMentions,
setShowPinned,
setShowSearch,
setShowStarred,
]
);
const setExclusiveState = (activeSetter) => {
let isPanelActive = false;
stateSetters.forEach((setter) => {
if (setter === activeSetter) {
isPanelActive = true;
setter(true);
} else {
setter(false);
}
});
setShowSidebar(isPanelActive);
};
return setExclusiveState;
};
export default useSetExclusiveState;