import Link from "next/link"; import dateformat from "dateformat"; import { ArticleLoader } from "../../../util/articleLoader"; import { TableElement } from "../../_components/tableElements"; import { ArciveLinkElement } from "../../_components/archiveLinkElement"; dateformat.i18n.dayNames = [ '日', '月', '火', '水', '木', '金', '土', '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' ]; type DisplayData = Awaited>["articles"][number]; type CategoryTagData = Awaited>["categoryTag"] export function ArticleListElement(displayData: DisplayData[], categoryTag: CategoryTagData) { const result = TableElement({ header: [ { label: "No" }, { label: "カテゴリ" }, { label: "タイトル" }, { label: "日付" }, ] }, displayData.map(d => { return getDisplayData(d, categoryTag); })); return result; } function getDisplayData(d: DisplayData, categoryTag: CategoryTagData) { const topCategory = d.breadLinks[0]; const timestampStr = dateformat(new Date(d.timestampMs), "yyyy/mm/dd(ddd)HH:MM"); const originalUrl = `https://akiba-souken.com/article/${d.articleId}/`; const page2After = (() => { if (d.maxPageNumber == 1) { return [(<>)]; } const result: JSX.Element[] = [ (
) ]; for (let page = 2; page <= d.maxPageNumber; page++) { result.push(
{ArciveLinkElement({ type: "article", articleId: d.articleId, subPageNumber: page })}
); } return result; })(); // パンくずリスト部分を作成 let breadElement = (); if (0 < d.breadLinks.length) { const breadChildElement: JSX.Element[] = []; breadChildElement.push(パンくずリスト:); for (const bread of d.breadLinks) { if (d.breadLinks.indexOf(bread) != 0) { breadChildElement.push(); } const tagCount = categoryTag.getTagCount(bread); breadChildElement.push( {bread}({tagCount}) ); } breadElement = ( {breadChildElement} ); } // タグ部分を作成 let tagElement = (タグ無し); if (d.tags.length != 0) { const tagChildElements: JSX.Element[] = []; tagChildElements.push(タグ:); for (const tag of d.tags) { if (d.tags.indexOf(tag) != 0) { tagChildElements.push(); }; const tagCount = categoryTag.getTagCount(tag); tagChildElements.push( {tag}({tagCount}) ); } tagElement = ( {tagChildElements} ); } const hatebuElement = ( ); const result: { element: JSX.Element }[] = [ { element: <>{d.articleId} }, { element: {topCategory} }, { element: <>
{d.title}
{ArciveLinkElement({ type: "article", articleId: d.articleId })} {breadElement} {tagElement} {hatebuElement}
{page2After} }, { element: <>{timestampStr} } ] return result; }