import type { Meta, StoryObj } from '@storybook/react' import { useState } from 'react' import { Table } from './Table' const meta = { title: 'Components/Table', component: Table, args: { children: null }, argTypes: { isLayoutFixed: { control: 'boolean' }, isFullHeight: { control: 'boolean' }, isHoverable: { control: 'boolean' }, isClickable: { control: 'boolean' }, }, } satisfies Meta export default meta type Story = StoryObj const sampleData = [ { id: 1, name: '홍길동', email: 'hong@example.com', role: '관리자' }, { id: 2, name: '김철수', email: 'kim@example.com', role: '사용자' }, { id: 3, name: '이영희', email: 'lee@example.com', role: '사용자' }, { id: 4, name: '박민수', email: 'park@example.com', role: '편집자' }, { id: 5, name: '최지은', email: 'choi@example.com', role: '사용자' }, ] export const Default: Story = { render: () => (
ID 이름 이메일 역할 {sampleData.map((row) => ( {row.id} {row.name} {row.email} {row.role} ))}
), } export const Empty: Story = { render: () => (
ID 이름 이메일 역할
), } export const Loading: Story = { render: () => (
ID 이름 이메일 역할
), } export const Selectable: Story = { render: function Render() { const [selectedId, setSelectedId] = useState(null) return (
{selectedId && ( 선택: {selectedId} )} ID 이름 이메일 역할 {sampleData.map((row) => ( setSelectedId(row.id)} > {row.id} {row.name} {row.email} {row.role} ))}
) }, } export const GroupedHeader: Story = { render: () => (
ID 이름 연락처 이메일 전화번호 1 홍길동 hong@example.com 010-1234-5678 2 김철수 kim@example.com 010-9876-5432
), } export const ManyRows: Story = { render: () => { const manyData = Array.from({ length: 50 }, (_, i) => ({ id: i + 1, name: `사용자 ${i + 1}`, email: `user${i + 1}@example.com`, role: i % 3 === 0 ? '관리자' : '사용자', })) return (
ID 이름 이메일 역할 {manyData.map((row) => ( {row.id} {row.name} {row.email} {row.role} ))}
) }, }