import DataList from './DataList.vue' import type { Meta, StoryObj } from '@storybook/vue3' import { mdiAccount, mdiCalendar, mdiInformationOutline } from '@mdi/js' import SyAlert from '../../components/SyAlert/SyAlert.vue' const meta: Meta = { title: 'Composants/Données/DataList', component: DataList, parameters: { layout: 'fullscreen', controls: { exclude: ['width', 'minWidth', 'maxWidth'] }, }, argTypes: { items: { control: 'object' }, icons: { control: 'object' }, listTitle: { control: 'text' }, titleClass: { control: 'text' }, title: { control: 'text' }, placeholder: { control: 'text' }, row: { control: 'boolean' }, loading: { control: 'boolean' }, itemsNumberLoading: { control: 'number' }, headingLoading: { control: 'boolean' }, renderHtmlValue: { control: 'boolean', description: '@deprecated Utiliser un slot (par exemple "item") pour rendre du HTML plutôt qu\'une string interprétée via v-html.', }, }, } export default meta type Story = StoryObj export const Default: Story = { parameters: { sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Date de naissance', value: '24/09/1970', }, ], icons: undefined, listTitle: undefined, titleClass: 'text-subtitle-1 font-weight-bold mb-3', title: ``, row: false, placeholder: undefined, loading: false, itemsNumberLoading: 1, headingLoading: false, width: '100%', minWidth: undefined, maxWidth: undefined, }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const Row: Story = { parameters: { controls: { exclude: ['icons', 'listTitle', 'titleClass', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Date de naissance', value: '24/09/1970', }, ], icons: undefined, listTitle: undefined, titleClass: 'text-subtitle-1 font-weight-bold mb-3', row: true, placeholder: undefined, loading: false, itemsNumberLoading: 1, headingLoading: false, }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const Title: Story = { parameters: { controls: { exclude: ['icons', 'title', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Date de naissance', value: '24/09/1970', }, ], icons: undefined, listTitle: 'Informations personnelles', titleClass: 'text-subtitle-1 font-weight-bold mb-3', row: false, placeholder: undefined, loading: false, itemsNumberLoading: 1, headingLoading: false, }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const Icons: Story = { parameters: { controls: { exclude: ['listTitle', 'titleClass', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', icon: 'accountIcon', }, { key: 'Prénom', value: 'Paul', icon: 'accountIcon', }, { key: 'Date de naissance', value: '24/09/1970', icon: 'calendarIcon', }, ], icons: { calendarIcon: mdiCalendar, accountIcon: mdiAccount, mdiInformationOutline: mdiInformationOutline, }, }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const ActionBtn: Story = { parameters: { controls: { exclude: ['icons', 'listTitle', 'titleClass', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Date de naissance', value: '24/09/1970', action: 'Modifier', }, ], }, render: (args) => { return { components: { DataList }, setup() { const updateBirthdate = (index: number) => { args.items[index]!.value = '25/09/1970' } return { args, updateBirthdate } }, template: `
`, } }, } export const Chips: Story = { parameters: { controls: { exclude: ['icons', 'listTitle', 'titleClass', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', chip: true, }, { key: 'Prénom', value: 'Paul', chip: true, }, { key: 'Date de naissance', value: '24/09/1970', chip: true, }, { key: 'Statut', value: 'Enregistré', chip: true, options: { chip: { color: 'onSuccessVariant', }, }, }, ], }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const HtmlValue: Story = { parameters: { controls: { exclude: ['icons', 'listTitle', 'titleClass', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Adresse', value: '50 Avenue du Professeur André Lemierre', }, ], }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const Loading: Story = { parameters: { controls: { exclude: ['icons', 'listTitle', 'titleClass', 'row', 'placeholder', 'title', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { key: 'Nom', value: 'Dupont', }, { key: 'Prénom', value: 'Paul', }, { key: 'Date de naissance', value: '24/09/1970', }, ], itemsNumberLoading: 3, loading: true, listTitle: 'Titre', headingLoading: true, }, render: (args) => { return { components: { DataList }, setup() { return { args } }, template: `
`, } }, } export const SlotTitle: Story = { parameters: { controls: { exclude: ['icons', 'titleClass', 'row', 'placeholder', 'loading', 'itemsNumberLoading', 'headingLoading', 'renderHtmlValue', 'listTitle', 'click:item-action', 'width', 'minWidth', 'maxWidth'] }, sourceCode: [ { name: 'Template', code: `