import { useQuery } from '@tanstack/react-query' import { useMemo } from 'react' import { Helmet } from 'react-helmet-async' import { useSearchParams } from 'react-router-dom' import PrefetchLink from '@/components/PrefetchLink' import PageTitle from '@/components/common/PageTitle' import Pagination from '@/components/common/Pagination' import MainArea from '@/components/layout/MainArea' import { SITE_TITLE } from '@/config' import { getHelpChanges, helpEditionDate } from '@/lib/help' import { helpKeys } from '@/lib/queryKeys' import { LIST_LIMIT_OPTIONS } from '@/lib/settings' import { dateString } from '@/lib/utils' import type { FC } from 'react' const HelpChangesPage: FC = () => { const [searchParams, setSearchParams] = useSearchParams () const identifier = searchParams.get ('identifier') ?? '' const pageValue = searchParams.get ('page') ?? '1' const pageNumber = Number (pageValue) const requestedPage = (/^[1-9]\d*$/.test (pageValue) && Number.isSafeInteger (pageNumber)) ? pageNumber : 1 const limit = LIST_LIMIT_OPTIONS.find ( value => String (value) === searchParams.get ('limit')) ?? 20 const { data: changes = [], isLoading, error } = useQuery ({ queryKey: helpKeys.changes ('ja'), queryFn: () => getHelpChanges ('ja'), staleTime: Infinity }) const results = useMemo (() => identifier ? changes.filter (entry => entry.identifier === identifier) : changes, [changes, identifier]) const totalPages = Math.ceil (results.length / limit) const page = requestedPage <= Math.max (1, totalPages) ? requestedPage : 1 const pageResults = results.slice ((page - 1) * limit, page * limit) const handleLimit = (value: string) => { const next = new URLSearchParams (searchParams) next.set ('limit', value) next.set ('page', '1') setSearchParams (next) } return ( {`ヘルプ改定履歴 | ${ SITE_TITLE }`}
ヘルプ改定履歴
{isLoading ?

読み込み中...

: (error ?

{error.message}

: (
{pageResults.map (entry => { const path = `/help/${ encodeURIComponent (entry.identifier) }` const diffQuery = new URLSearchParams ({ from: entry.pred ?? '', to: entry.edition }) const diffTo = `${ path }/diff?${ diffQuery.toString () }` const updatedAt = helpEditionDate (entry.edition) return ( ) })}
差分 タイトル 有効開始年月日
{entry.pred != null && ( 差分 )} {entry.title} {updatedAt != null && dateString (updatedAt, 'hour')}
{totalPages > 0 && }
))}
) } export default HelpChangesPage