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: `
`,
}),
}