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: `
Item(s) sélectionné(s) ({{ selection.length }})
Nom : {{ item.lastname }}
Prénom : {{ item.firstname }}
Email : {{ item.email }}
`,
},
{
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: `
Item(s) sélectionné(s) ({{ selection.length }})
Nom : {{ item.lastname }}
Prénom : {{ item.firstname }}
Email : {{ item.email }}
`,
},
{
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 }}
`,
}),
}