import type { Meta, StoryObj } from '@storybook/vue3-vite' import { ref } from 'vue' import type { VDataTable } from 'vuetify/components' import SyServerTable from './SyServerTable.vue' import { commonTableArgTypes, commonTableEventArgs } from '../common/storyArgTypes' import { serverUsers } from '../common/storyData' import { useServerTableDemo } from '../common/serverStoryHelpers' const meta = { title: 'Composants/Tableaux/SyServerTable/Sélection', component: SyServerTable, 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: 'undefined' }, }, }, serverItemsLength: { description: 'Nombre total d\'éléments à afficher', control: { type: 'number' }, }, }, } satisfies Meta export default meta type Story = StoryObj const serverHeaders = [ { title: 'Nom', key: 'lastname' }, { title: 'Prénom', key: 'firstname' }, { title: 'Email', value: 'email' }, ] /** * Sélection multiple côté serveur : `show-select` ajoute une colonne de cases à * cocher. La sélection reste un `v-model` local (indépendant du « fetch »). */ export const RowSelection: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { options: { itemsPerPage: 5, page: 1 }, headers: serverHeaders, caption: '', serverItemsLength: 15, suffix: 'selection-server-table', density: 'default', striped: false, showSelect: true, ...commonTableEventArgs(), }, render: args => ({ components: { SyServerTable }, setup() { const { items, totalItems, state, options, fetchData, StateEnum } = useServerTableDemo(args, serverUsers) const selection = ref[]>([]) return { args, items, totalItems, state, options, fetchData, StateEnum, selection } }, template: `

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

Nom : {{ item.lastname }}
Prénom : {{ item.firstname }}
Email : {{ item.email }}
`, }), } /** * Sélection unique côté serveur : `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: { options: { itemsPerPage: 5, page: 1 }, headers: serverHeaders, caption: '', serverItemsLength: 15, suffix: 'selection-server-table', density: 'default', striped: false, showSelectSingle: true, ...commonTableEventArgs(), }, render: args => ({ components: { SyServerTable }, setup() { const { items, totalItems, state, options, fetchData, StateEnum } = useServerTableDemo(args, serverUsers) const selection = ref[]>([]) return { args, items, totalItems, state, options, fetchData, StateEnum, selection } }, template: `

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

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