presentation/views/anatomy.view.ts

presentation/views/anatomy.view.ts is a file in Bane's Lab Site. 68 lines of code and 8 definitions.

import { ANATOMY_DESCRIPTION, ANATOMY_TITLE, CREATIVE_COMMONS_LICENSE } from "#configuration/strings/page.strings";
import {
    AUTHOR,
    DATASET_FRAGMENT,
    DATASET_TYPE,
    DATA_CATALOG,
    DATA_CATALOG_ID,
} from "#configuration/constants/schema.constants";
import {
    CREATIVE_COMMONS,
    SITE_URL,
    SOURCE_REPOSITORY_TREE,
    pageIndexPath,
    pagePath,
} from "#core/assets/link.assets";
import { TREE_TAB_HEADS, loadTreeTab, loadTreeTabs } from "#core/loaders/tree.loader";
import { mountTabSwitching, renderTabbedPage } from "#presentation/widgets/tab.widget";
import { ANATOMY_META } from "#configuration/strings/tab.strings";
import { ANATOMY_PAGE } from "#core/ids/page.ids";
import { ANATOMY_READING_TABS } from "#core/generated/anatomy.page.generated";
import { ANATOMY_TONE } from "#configuration/constants/tab.constants";
import { ANATOMY_TREE_DECLARATIONS } from "#core/registries/anatomy.tree.registry";
import type { PageDefinition } from "#types/page.types";
import type { SchemaEntity } from "#types/schema.types";
import type { Tab } from "#types/document.types";
import type { TabbedPage } from "#types/tab.types";

const ANATOMY_ENTITY: SchemaEntity = {
    "@id": SITE_URL + pagePath(ANATOMY_PAGE) + DATASET_FRAGMENT,
    "@type": DATASET_TYPE,
    creator: AUTHOR,
    description: ANATOMY_DESCRIPTION,
    identifier: SITE_URL + pageIndexPath(ANATOMY_PAGE),
    includedInDataCatalog: { "@id": DATA_CATALOG_ID },
    isAccessibleForFree: true,
    keywords: ANATOMY_TREE_DECLARATIONS.map((declaration) => declaration.label),
    license: CREATIVE_COMMONS,
    name: ANATOMY_META.title,
    sameAs: SOURCE_REPOSITORY_TREE,
    url: SITE_URL + pagePath(ANATOMY_PAGE),
    version: ANATOMY_META.version,
};

const ANATOMY_TABS: readonly Tab[] = [...ANATOMY_READING_TABS, ...TREE_TAB_HEADS];

const DEFINITION: TabbedPage = {
    layout: "chapter",
    loadTab: loadTreeTab,
    meta: ANATOMY_META,
    page: ANATOMY_PAGE,
    tabs: ANATOMY_TABS,
    tone: ANATOMY_TONE,
};

void mountTabSwitching(DEFINITION);

const pageOf = function pageOf(definition: TabbedPage, tabs: readonly Tab[]): PageDefinition {
    return {
        content: { kind: "tabbed", layout: definition.layout, meta: ANATOMY_META, tabs, tone: definition.tone },
        description: ANATOMY_DESCRIPTION,
        entities: [ANATOMY_ENTITY, DATA_CATALOG],
        id: ANATOMY_PAGE,
        license: CREATIVE_COMMONS_LICENSE,
        render: () => renderTabbedPage(definition),
        title: ANATOMY_TITLE,
    };
};

const completePage = async function completePage(): Promise<PageDefinition> {
    const tabs = [...ANATOMY_READING_TABS, ...(await loadTreeTabs())];
    const { layout, meta, page, tone } = DEFINITION;
    return pageOf({ layout, meta, page, tabs, tone }, tabs);
};

export const PAGE: PageDefinition = { ...pageOf(DEFINITION, ANATOMY_TABS), complete: completePage };