|
1 | 1 | import { useState, useRef, useEffect, useCallback, useMemo } from 'react' |
2 | 2 | import { Layout as UiLayout } from '@ui/components/editor/settings/Layout' |
| 3 | +import { NavigationSection as UiNavigationSection } from '@ui/components/editor/settings/NavigationSection' |
3 | 4 | import { NavigationItemSection as UiNavigationItemSection } from '@ui/components/editor/settings/NavigationItemSection' |
4 | 5 | import { NavigationItemGroup as UiNavigationItemGroup } from '@ui/components/editor/settings/NavigationItemGroup' |
5 | 6 | import { ApiConfigurationsSection } from './sections/ApiConfigurationsSection' |
@@ -353,47 +354,50 @@ export const Home: React.FC<Props> = (props) => { |
353 | 354 | <UiLayout |
354 | 355 | ref={scroll_container_ref} |
355 | 356 | title={t('sections.settings')} |
356 | | - sidebar={NAV_ITEMS_CONFIG.map((item, i) => { |
357 | | - let current_parent: NavItem | null = null |
358 | | - for (let j = i; j >= 0; j--) { |
| 357 | + sidebar={(() => { |
| 358 | + const sections: { |
| 359 | + parent: NavConfigItem |
| 360 | + groups: NavConfigItem[] |
| 361 | + }[] = [] |
| 362 | + |
| 363 | + for (const item of NAV_ITEMS_CONFIG) { |
359 | 364 | if ( |
360 | | - NAV_ITEMS_CONFIG[j].id.startsWith('section:') && |
361 | | - !NAV_ITEMS_CONFIG[j].id.includes(':group:') |
| 365 | + item.id.startsWith('section:') && |
| 366 | + !item.id.includes(':group:') |
362 | 367 | ) { |
363 | | - current_parent = NAV_ITEMS_CONFIG[j].id |
364 | | - break |
| 368 | + sections.push({ parent: item, groups: [] }) |
| 369 | + } else if (sections.length > 0) { |
| 370 | + sections[sections.length - 1].groups.push(item) |
365 | 371 | } |
366 | 372 | } |
367 | | - const is_parent_active = |
368 | | - current_parent === active_nav_item_id || |
369 | | - current_parent === active_parent_id |
370 | 373 |
|
371 | | - if (item.id.includes(':group:')) { |
| 374 | + return sections.map((section, i) => { |
| 375 | + const is_section_active = |
| 376 | + section.parent.id === active_nav_item_id || |
| 377 | + section.parent.id === active_parent_id |
| 378 | + |
372 | 379 | return ( |
373 | | - <UiNavigationItemGroup |
374 | | - key={i} |
375 | | - href={`#${item.id}`} |
376 | | - label={t(item.label)} |
377 | | - is_active={item.id == active_nav_item_id} |
378 | | - is_parent_active={is_parent_active} |
379 | | - has_warning={get_has_warning(item.id)} |
380 | | - on_click={(e) => handle_nav_click(e, item.id)} |
381 | | - is_last={!NAV_ITEMS_CONFIG[i + 1]?.id.includes(':group:')} |
382 | | - /> |
| 380 | + <UiNavigationSection key={i} is_active={is_section_active}> |
| 381 | + <UiNavigationItemSection |
| 382 | + label={t(section.parent.label)} |
| 383 | + is_active={is_section_active} |
| 384 | + has_warning={get_has_warning(section.parent.id)} |
| 385 | + /> |
| 386 | + {section.groups.map((group, j) => ( |
| 387 | + <UiNavigationItemGroup |
| 388 | + key={j} |
| 389 | + href={`#${group.id}`} |
| 390 | + label={t(group.label)} |
| 391 | + is_active={group.id === active_nav_item_id} |
| 392 | + has_warning={get_has_warning(group.id)} |
| 393 | + on_click={(e) => handle_nav_click(e, group.id)} |
| 394 | + is_last={j === section.groups.length - 1} |
| 395 | + /> |
| 396 | + ))} |
| 397 | + </UiNavigationSection> |
383 | 398 | ) |
384 | | - } |
385 | | - |
386 | | - return ( |
387 | | - <UiNavigationItemSection |
388 | | - key={i} |
389 | | - label={t(item.label)} |
390 | | - is_active={ |
391 | | - item.id == active_nav_item_id || item.id == active_parent_id |
392 | | - } |
393 | | - has_warning={get_has_warning(item.id)} |
394 | | - /> |
395 | | - ) |
396 | | - })} |
| 399 | + }) |
| 400 | + })()} |
397 | 401 | > |
398 | 402 | <GeneralSection |
399 | 403 | ref={(el) => set_section_ref('section:general', el)} |
|
0 commit comments