import { useRouter } from 'next/router'; import { traverseHeadings } from '../../utils/traverseHeadings'; import { gatherAllFilters } from '../../utils/gatherFilters'; import Layout from '../Layout/index'; import MetaContent from './metaContent'; import { getChapterDirectory, isProductRoot } from '../../utils/getLocalDirectory'; import { useRef } from 'react'; import { filterMetadataByOption, SelectedFilters } from '../../utils/filter-data'; import ChooseFilterPage from '../../pages/ChooseFilterPage'; import { parseLocalStorage } from '../../utils/parseLocalStorage'; import { withFilterOverrides } from '../../utils/withFilterOverrides'; export type MdxFrontmatterType = { lastUpdated: string; }; export default function Page({ children, meta, frontmatter }: { children: any; meta?: any; frontmatter?: MdxFrontmatterType; }) { const footerRef = useRef(null); const router = useRouter(); if (!router.isReady) { return <>; } let url = router.asPath; // remove trailing slash. this is important on pages like /cli/index.mdx // or /console/index.mdx where router.asPath has a trailing slash and // router.pathname doesn't. if (url.endsWith('/')) { url = url.slice(0, -1); } const directoryPath = router.pathname; let filterKey = '', filterKind = ''; const filterKeysLoaded = parseLocalStorage( 'filterKeys', {} as SelectedFilters ); const filterKeyUpdates = {} as SelectedFilters; if ('platform' in router.query) { filterKey = router.query.platform as string; filterKeyUpdates.platform = filterKey; filterKind = 'platform'; } else if ('integration' in router.query) { filterKey = router.query.integration as string; filterKeyUpdates.integration = filterKey; filterKind = 'integration'; } else if ('framework' in router.query) { filterKey = router.query.framework as string; filterKeyUpdates.framework = filterKey; filterKind = 'framework'; } const headers = traverseHeadings(children, filterKey); let filters = gatherAllFilters(children, filterKind); // special cases if (url.startsWith('/sdk')) { filters = filters.filter( (filter) => filter !== 'flutter' && filter !== 'js' ); } const overrides = withFilterOverrides(filterKeyUpdates, filterKeysLoaded); const filterKeys = { ...filterKeysLoaded, ...overrides }; localStorage.setItem('filterKeys', JSON.stringify(filterKeys)); if (filters.length !== 0 && !filters.includes(filterKey) && meta) { return ( ); } meta.chapterTitle = ''; if (meta && !isProductRoot(url)) { const { title: chapTitle } = getChapterDirectory(url) as { title: string; }; meta.chapterTitle = chapTitle; } const basePath = 'docs.amplify.aws'; meta.url = basePath + router.asPath; let parentPageLastUpdatedDate; if (frontmatter && frontmatter.lastUpdated) { parentPageLastUpdatedDate = frontmatter.lastUpdated; } return ( {meta ? ( ) : ( children )} ); }