import type { Meta, StoryObj } from '@storybook/vue3-vite' import { fn } from 'storybook/test' import type { VDataTable } from 'vuetify/components' import SyTable from './SyTable.vue' import { commonTableArgTypes } from '../common/storyArgTypes' import { manyUsers, users, usersHeaders } from '../common/storyData' const meta = { title: 'Composants/Tableaux/SyTable/Pagination', 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: '[]' }, }, }, }, } satisfies Meta export default meta type Story = StoryObj /** * Choix du nombre de lignes par page (`items-per-page-options`) : la liste * déroulante du pied de page propose les paliers fournis. */ export const ItemsPerPageOptions: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { 'headers': usersHeaders, 'items': manyUsers, 'options': { itemsPerPage: 5 }, 'itemsPerPageOptions': [5, 10, 15], 'caption': '', 'suffix': 'items-per-page-options-table', 'density': 'default', 'striped': false, 'onUpdate:options': fn(), }, render: args => ({ components: { SyTable }, setup() { return { args } }, template: ` `, }), } /** * Masquer le pied de page (`hide-default-footer`) : utile quand toutes les lignes * sont affichées (`itemsPerPage: -1`) ou lorsque la pagination est gérée ailleurs. */ export const HideDefaultFooter: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { 'headers': usersHeaders, 'items': users, 'options': { itemsPerPage: -1 }, 'suffix': 'hide-footer-table', 'hideDefaultFooter': true, 'density': 'default', 'striped': false, 'onUpdate:options': fn(), }, render: args => ({ components: { SyTable }, setup() { return { args } }, template: ` `, }), } /** * Saisie directe de la page (`page-input`) : un champ numérique permet d'aller * directement à une page donnée, en complément des flèches de navigation. */ export const PageInput: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { 'headers': usersHeaders, 'items': manyUsers, 'options': { itemsPerPage: 5 }, 'suffix': 'page-input-table', 'pageInput': true, 'density': 'default', 'striped': false, 'onUpdate:options': fn(), }, render: args => ({ components: { SyTable }, setup() { return { args } }, template: ` `, }), }