import type { Meta, StoryObj } from '@storybook/vue3-vite' import { ref } from 'vue' import type { VDataTable } from 'vuetify/components' import SyTable from './SyTable.vue' import { commonTableArgTypes, commonTableEventArgs } from '../common/storyArgTypes' import { users, usersHeaders } from '../common/storyData' const meta = { title: 'Composants/Tableaux/SyTable/Sélection', component: SyTable, decorators: [ () => ({ template: '
', }), ], parameters: { layout: 'fullscreen', }, argTypes: { ...commonTableArgTypes, items: { description: 'Liste des éléments à afficher dans le tableau', control: { type: 'object' }, table: { category: 'props', defaultValue: { summary: '[]' }, }, }, showFilters: { description: 'Affiche les filtres au-dessus du tableau', control: { type: 'boolean' }, }, }, } satisfies Meta export default meta type Story = StoryObj /** * Sélection multiple : `show-select` ajoute une colonne de cases à cocher. * La sélection est un `v-model` (tableau des lignes sélectionnées). */ export const RowSelection: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { headers: usersHeaders, items: users, options: { itemsPerPage: 4 }, caption: '', suffix: 'selection-table', density: 'default', striped: false, showSelect: true, showFilters: true, ...commonTableEventArgs(), }, render: args => ({ components: { SyTable }, setup() { const items = ref(args.items) const selection = ref[]>([]) return { args, selection, items } }, template: `

Item(s) sélectionné(s) ({{ selection.length }})

Nom : {{ item.lastname }}
Prénom : {{ item.firstname }}
Email : {{ item.email }}
`, }), } /** * Sélection unique : `show-select-single` limite la sélection à une seule ligne * (boutons radio). Le `v-model` contient au plus un élément. */ export const SingleRowSelection: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { headers: usersHeaders, items: users, options: { itemsPerPage: 4 }, caption: '', suffix: 'selection-table', density: 'default', striped: false, showSelectSingle: true, showFilters: true, ...commonTableEventArgs(), }, render: args => ({ components: { SyTable }, setup() { const items = ref(args.items) const selection = ref[]>([]) return { args, selection, items } }, template: `

Item(s) sélectionné(s) ({{ selection.length }})

Nom : {{ item.lastname }}
Prénom : {{ item.firstname }}
Email : {{ item.email }}
`, }), }