import { useEffect, useState } from 'react' import { Meta, StoryObj } from '@storybook/react-vite' import Pagination, { type PaginationProps } from '.' type PaginationStoryArgs = Pick< PaginationProps, 'page' | 'pageCount' | 'pageRangeDisplayed' | 'size' > type LinkPaginationStoryArgs = PaginationStoryArgs & Pick function PaginationWithState(args: PaginationStoryArgs) { const [page, setPage] = useState(args.page) return ( ) } function parsePageFromHash(fallback: number): number { const match = window.location.hash.match(/^#page-(\d+)$/) return match ? parseInt(match[1], 10) : fallback } function LinkPaginationWithState(args: LinkPaginationStoryArgs) { const [page, setPage] = useState(() => parsePageFromHash(args.page)) useEffect(() => { const handleHashChange = () => setPage(parsePageFromHash(args.page)) window.addEventListener('hashchange', handleHashChange) return () => window.removeEventListener('hashchange', handleHashChange) }, [args.page]) return (

Current page: {page}

`#page-${p}`} linkProps={args.linkProps} />
) } export default { title: 'react/Pagination', component: Pagination, parameters: { layout: 'centered', }, render: (args) => , } satisfies Meta export const Default: StoryObj = { args: { page: 5, pageCount: 10, }, } export const FirstPage: StoryObj = { args: { page: 1, pageCount: 10, }, } export const LastPage: StoryObj = { args: { page: 10, pageCount: 10, }, } export const ManyPages: StoryObj = { args: { page: 50, pageCount: 103, }, } export const SizeS: StoryObj = { args: { page: 5, pageCount: 10, size: 'S', }, } export const PageRange5: StoryObj = { args: { page: 5, pageCount: 10, pageRangeDisplayed: 5, size: 'S', }, } export const LinkPaginationStory: StoryObj = { args: { page: 5, pageCount: 10, }, render: (args) => , } export const LinkPaginationWithLinkProps: StoryObj = { args: { page: 5, pageCount: 10, linkProps: { scroll: 'marker' }, }, render: (args) => (

linkProps を渡した例(scroll: 'marker' は Next.js Link 用)

), } export const ComponentAStory: StoryObj = { render: () => { return ( `https://example.com?page=${p}`} /> ) }, }