/* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; import { createDrawerNavigator, DrawerNavigationOptions } from '@react-navigation/drawer'; import { StackScreenProps } from '@react-navigation/stack'; import CustomDrawerContent from './CustomDrawerContent'; import DrawerPlaygroundHeader from './DrawerPlaygroundHeader'; import useSurfaceBackgroundStyleNucleon from '../../nucleons/useSurfaceBackgroundStyleNucleon'; import { pagesSpecs, PageGroup } from '@doc/pages'; import ArticleTemplate from '../../templates/ArticleTemplate'; import groupBy from './groupBy'; import PlaygroundLists from '../../resources/PlaygroundLists'; import { ResourceRouteDefinition, ResourceRoute, resourceRoutesIndex } from '../../../nav-model'; import imagesMap from '../../../imagesMap'; import { memo } from 'react'; interface ResourceRouteNav extends ResourceRouteDefinition { component: React.ComponentType; header?: DrawerNavigationOptions['header']; } const Drawer = createDrawerNavigator>(); const initialRouteName: ResourceRoute = 'root-intro'; interface GroupDefinition { groupLabel: string; group: string; header?: DrawerNavigationOptions['header']; routes: Array; } const specsByGroups = groupBy( Object.values(pagesSpecs).sort((a, b) => a.position - b.position), 'group' ); const groups: Array = Object.entries(specsByGroups).map( ([groupName, pages], groupIndex, groupEntries) => { const [_prevGroupName, prevGroupPages] = groupEntries[groupIndex - 1] || []; const prevGroupLastPage = prevGroupPages ? prevGroupPages?.[prevGroupPages?.length - 1] : null; const [_nextGroupName, nextGroupPages] = groupEntries[groupIndex + 1] || []; const nextGroupFirstPage = nextGroupPages ? nextGroupPages?.[0] : null; return { group: groupName, groupLabel: groupName, routes: pages.map((page, pageIndex) => { return { header: () => null, component: function Page() { const Content = memo(page.component); const prevPage = pages[pageIndex - 1] || prevGroupLastPage || null; const nextPage = pages[pageIndex + 1] || nextGroupFirstPage || null; return ( {React.createElement(Content)} ); }, iconName: page.iconName as any, name: `${groupName as PageGroup}-${page.id}` as const, title: page.title }; }) }; } ); const playgroundsGroup: GroupDefinition = { groupLabel: 'Playgrounds', group: 'playgrounds', header: (props) => , routes: [ { ...resourceRoutesIndex['playground-lists'], component: PlaygroundLists } ] }; function mapGroup({ routes, group, groupLabel, header: groupHeader }: GroupDefinition) { return routes.map(({ component, iconName, name, header, title }) => ( )); } export default function HomeScreen({}: StackScreenProps) { return ( } initialRouteName={initialRouteName} screenOptions={{ headerShown: true, headerTitleAllowFontScaling: true }}> {mapGroup(playgroundsGroup)} {groups.map(mapGroup)} ); }