Skip to content

Commit 1cff57d

Browse files
authored
feat: render additional footer items in navigation (#2991)
1 parent 0982a58 commit 1cff57d

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

src/containers/AsideNavigation/AsideNavigation.tsx

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ export interface AsideNavigationProps {
5959
menuItems?: MenuItem[];
6060
content: React.ReactNode;
6161
user?: {login: string; icon?: IconData};
62+
renderFooterItems?: (
63+
defaultFooterItems: React.ReactNode[],
64+
ctx: {compact: boolean; asideRef: React.RefObject<HTMLDivElement>},
65+
) => React.ReactNode[];
6266
}
6367

6468
enum Panel {
@@ -110,10 +114,11 @@ export function AsideNavigation(props: AsideNavigationProps) {
110114
onChangeCompact={setIsCompact}
111115
className={b()}
112116
renderContent={() => props.content}
113-
renderFooter={({compact, asideRef}) => (
114-
<React.Fragment>
117+
renderFooter={({compact: footerCompact, asideRef}) => {
118+
const defaultFooterItems = [
115119
<FooterItem
116-
compact={compact}
120+
key="information"
121+
compact={footerCompact}
117122
item={{
118123
id: 'information',
119124
title: i18n('navigation-item.information'),
@@ -125,9 +130,10 @@ export function AsideNavigation(props: AsideNavigationProps) {
125130
popupVisible={informationPopupVisible}
126131
onClosePopup={closeInformationPopup}
127132
renderPopupContent={renderInformationPopup}
128-
/>
133+
/>,
129134

130135
<FooterItem
136+
key="user-settings"
131137
item={{
132138
id: 'user-settings',
133139
title: i18n('navigation-item.settings'),
@@ -141,14 +147,30 @@ export function AsideNavigation(props: AsideNavigationProps) {
141147
);
142148
},
143149
}}
144-
compact={compact}
145-
/>
146-
147-
<UserDropdown isCompact={compact} popupAnchor={asideRef} user={props.user}>
150+
compact={footerCompact}
151+
/>,
152+
153+
<UserDropdown
154+
key="user-dropdown"
155+
isCompact={footerCompact}
156+
popupAnchor={asideRef}
157+
user={props.user}
158+
>
148159
{props.ydbInternalUser}
149-
</UserDropdown>
150-
</React.Fragment>
151-
)}
160+
</UserDropdown>,
161+
];
162+
163+
return (
164+
<React.Fragment>
165+
{props.renderFooterItems
166+
? props.renderFooterItems(defaultFooterItems, {
167+
compact: footerCompact,
168+
asideRef,
169+
})
170+
: defaultFooterItems}
171+
</React.Fragment>
172+
);
173+
}}
152174
panelItems={[
153175
{
154176
id: 'user-settings',

0 commit comments

Comments
 (0)