-
Notifications
You must be signed in to change notification settings - Fork 22
/
useDaoTabs.ts
114 lines (108 loc) · 2.95 KB
/
useDaoTabs.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import {
AccountBalanceWalletOutlined,
AccountBalanceWalletRounded,
FiberSmartRecordOutlined,
FiberSmartRecordRounded,
HomeOutlined,
HomeRounded,
HowToVoteOutlined,
HowToVoteRounded,
QuestionMark,
WebOutlined,
WebRounded,
} from '@mui/icons-material'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import {
DaoTabId,
DaoTabWithComponent,
LoadingData,
WidgetLocation,
} from '@dao-dao/types'
import {
AppsTab,
HomeTab,
ProposalsTab,
SubDaosTab,
TreasuryTab,
} from '../components'
import { useVotingModuleAdapter } from '../voting-module-adapter'
import { useWidgets } from '../widgets'
export const useDaoTabs = (): LoadingData<DaoTabWithComponent[]> => {
const { t } = useTranslation()
const {
components: { extraTabs },
} = useVotingModuleAdapter()
// Get widget tab components, if exist.
const loadingWidgets = useWidgets({
// Only load tab widgets.
location: WidgetLocation.Tab,
})
return useMemo(
() => ({
// Some tabs are ready right away, so just use the `updating` field to
// indicate if more tabs are still loading.
loading: false,
updating: loadingWidgets.loading || loadingWidgets.updating,
data: [
{
id: DaoTabId.Home,
label: t('title.home'),
Component: HomeTab,
Icon: HomeOutlined,
IconFilled: HomeRounded,
},
{
id: DaoTabId.Proposals,
label: t('title.proposals'),
Component: ProposalsTab,
Icon: HowToVoteOutlined,
IconFilled: HowToVoteRounded,
},
{
id: DaoTabId.Treasury,
label: t('title.treasury'),
Component: TreasuryTab,
Icon: AccountBalanceWalletOutlined,
IconFilled: AccountBalanceWalletRounded,
lazy: true,
},
{
id: DaoTabId.SubDaos,
label: t('title.subDaos'),
Component: SubDaosTab,
Icon: FiberSmartRecordOutlined,
IconFilled: FiberSmartRecordRounded,
},
...(extraTabs?.map(({ labelI18nKey, ...tab }) => ({
label: t(labelI18nKey),
...tab,
})) ?? []),
{
id: DaoTabId.Apps,
label: t('title.apps'),
Component: AppsTab,
Icon: WebOutlined,
IconFilled: WebRounded,
},
...(loadingWidgets.loading
? []
: loadingWidgets.data.map(
({
title,
widget: { id, Icon, IconFilled },
WidgetComponent,
}): DaoTabWithComponent => ({
id,
label: title,
// Icon should always be defined for tab widgets, but just in case...
Icon: Icon || QuestionMark,
IconFilled: IconFilled || QuestionMark,
Component: WidgetComponent,
})
)),
],
}),
[extraTabs, t, loadingWidgets]
)
}