//@ts-ignore import type { Meta, StoryObj } from '@storybook/react'; import { useState } from 'react'; import type { BoxerItem } from '../Boxer.types'; import { Boxer } from '../Boxer'; const meta: Meta = { component: Boxer, parameters: { layout: 'centered', }, tags: ['autodocs'], title: 'Components/Boxer', }; export default meta; type Story = StoryObj; // Sample data const sampleData: Array = [ { label: 'Apple', value: 'apple' }, { label: 'Banana', value: 'banana' }, { label: 'Cherry', value: 'cherry' }, { label: 'Date', value: 'date' }, { label: 'Elderberry', value: 'elderberry' }, { label: 'Fig', value: 'fig' }, { label: 'Grape', value: 'grape' }, { label: 'Honeydew', value: 'honeydew' }, { label: 'Kiwi', value: 'kiwi' }, { label: 'Lemon', value: 'lemon' }, { label: 'Mango', value: 'mango' }, { label: 'Nectarine', value: 'nectarine' }, { label: 'Orange', value: 'orange' }, { label: 'Papaya', value: 'papaya' }, { label: 'Quince', value: 'quince' }, { label: 'Raspberry', value: 'raspberry' }, { label: 'Strawberry', value: 'strawberry' }, { label: 'Tangerine', value: 'tangerine' }, { label: 'Ugli Fruit', value: 'ugli' }, { label: 'Watermelon', value: 'watermelon' }, ]; // Local Data Example export const LocalData: Story = { render: () => { const [value, setValue] = useState(null); return (
Selected Value: {value ?? 'None'}
); }, }; // Multi-Select Example export const MultiSelect: Story = { render: () => { const [value, setValue] = useState>([]); return (
Selected Values:{' '} {value.length > 0 ? value.join(', ') : 'None'}
); }, }; // Server-Side Example (Simulated) export const ServerSide: Story = { render: () => { const [value, setValue] = useState(null); // Simulate server-side API call const handleAPICall = async (params: { page: number; pageSize: number; search?: string; }): Promise<{ data: Array; total: number }> => { // Simulate network delay await new Promise((resolve) => setTimeout(resolve, 500)); // Filter based on search let filteredData = [...sampleData]; if (params.search) { filteredData = filteredData.filter((item) => item.label.toLowerCase().includes(params.search!.toLowerCase()) ); } // Paginate const start = params.page * params.pageSize; const end = start + params.pageSize; const paginatedData = filteredData.slice(start, end); return { data: paginatedData, total: filteredData.length, }; }; return (
Selected Value: {value ?? 'None'}
); }, }; // Select First Example export const SelectFirst: Story = { render: () => { const [value, setValue] = useState(null); return (
Selected Value: {value ?? 'None'}
); }, }; // With Error export const WithError: Story = { render: () => { const [value, setValue] = useState(null); return (
); }, }; // Disabled export const Disabled: Story = { render: () => { return (
{}} placeholder="Select a fruit" value="apple" />
); }, };