presentation/renderers/search.renderer.ts
presentation/renderers/search.renderer.ts is a file in Bane's Lab Site. 34 lines of code and 8 definitions.
import type { SearchSource, SearchSpread } from "#types/search.types";
import { ICON_BASE_CLASS } from "#configuration/icons/element.icons";
import type { Tab } from "#types/document.types";
import { createElement } from "#core/factories/element.factory";
import { createPageLink } from "#presentation/components/link.component";
import { renderContent } from "#presentation/renderers/tab.renderer";
import { renderDocumentSections } from "#presentation/renderers/document.renderer";
const renderHomeLink = function renderHomeLink(spread: SearchSpread): Element {
const { source } = spread;
const link = createPageLink(
source.page,
"tab-button",
[
createElement("i", { className: `${ICON_BASE_CLASS} ${source.icon}` }),
createElement("span", { className: "tab-label", text: source.label }),
],
spread.home,
);
const bar = createElement("nav", { children: [link], className: "tab-bar" });
return createElement("div", { children: [bar], className: "tab-anchor search-anchor" });
};
const spreadTab = function spreadTab(source: SearchSource, spread: SearchSpread): Tab {
return { icon: source.tab.icon, id: source.tab.id, label: source.tab.label, sections: spread.sections };
};
const renderSpreadContent = function renderSpreadContent(spread: SearchSpread): Element {
const { source } = spread;
return source.layout === "document"
? renderDocumentSections(spread.sections)
: renderContent(source.layout, spreadTab(source, spread), source.page);
};
export const renderSpread = function renderSpread(spread: SearchSpread): Element {
const tone = spread.source.tone === null ? "tab-page" : `tab-page ${spread.source.tone}`;
return createElement("div", { children: [renderHomeLink(spread), renderSpreadContent(spread)], className: tone });
};