import type { Meta, StoryFn } from '@storybook/react-webpack5'
import React from 'react'
import type { Column } from '../../types'
import { Grid } from '.'
import { GridCellDefault } from '../../components'
import { theme } from '@planview/pv-utilities'
export default {
title: 'pv-grid/Components/Grid/Column spans',
tags: ['hidden'],
component: undefined,
} satisfies Meta
type UserWithSkill = {
id: number
firstName: string
lastName: string
age: number
skill: string
skillDetails?: string
}
const users: UserWithSkill[] = [
{
id: 1,
firstName: 'John',
lastName: 'Doe',
age: 30,
skill: 'Programming',
skillDetails: 'JavaScript, TypeScript',
},
{
id: 2,
firstName: 'Jane',
lastName: 'Smith',
age: 28,
skill: 'Design',
skillDetails: 'UI/UX, Graphic Design',
},
{
id: 3,
firstName: 'Alice',
lastName: 'Johnson',
age: 35,
skill: 'Marketing',
skillDetails: 'SEO, Content Strategy',
},
{
id: 4,
firstName: 'Bob',
lastName: 'Brown',
age: 40,
skill: 'None',
},
{
id: 5,
firstName: 'Charlie',
lastName: 'Davis',
age: 25,
skill: 'Data Analysis',
skillDetails: 'Python, SQL',
},
]
export const BasicUsage: StoryFn = () => {
const columns = React.useMemo(
() =>
[
{
id: 'firstName',
label: 'First',
width: 70,
cell: {
/* Always merge cells */
colSpan: ['firstName', 'lastName'],
label({ row }) {
return [row.firstName, row.lastName].join(' ')
},
Renderer({ label, tabIndex }) {
return (
)
},
},
},
{
id: 'lastName',
label: 'Last',
width: 70,
},
{
id: 'age',
label: 'Age',
},
{
id: 'skill',
label: 'Skill',
cell: {
colSpan: ({ row }) => {
if (row.skill === 'None') {
/* Merge cells only if skill is none */
return ['skill', 'skillDetails']
}
return []
},
Renderer({ label, tabIndex }) {
return (
)
},
},
},
{
id: 'skillDetails',
label: 'Skill Details',
},
] satisfies Column[],
[]
)
return
}
BasicUsage.parameters = {
docs: {
source: {
code: `
type UserWithSkill = {
id: number
firstName: string
lastName: string
age: number
skill: string
skillDetails?: string
}
const users: UserWithSkill[] = [
{
id: 1,
firstName: 'John',
lastName: 'Doe',
age: 30,
skill: 'Programming',
skillDetails: 'JavaScript, TypeScript',
},
{
id: 2,
firstName: 'Jane',
lastName: 'Smith',
age: 28,
skill: 'Design',
skillDetails: 'UI/UX, Graphic Design',
},
{
id: 3,
firstName: 'Alice',
lastName: 'Johnson',
age: 35,
skill: 'Marketing',
skillDetails: 'SEO, Content Strategy',
},
{
id: 4,
firstName: 'Bob',
lastName: 'Brown',
age: 40,
skill: 'None',
},
{
id: 5,
firstName: 'Charlie',
lastName: 'Davis',
age: 25,
skill: 'Data Analysis',
skillDetails: 'Python, SQL',
},
]
export const BasicUsage: StoryFn = () => {
const columns = React.useMemo(
() =>
[
{
id: 'firstName',
label: 'First',
width: 70,
cell: {
/* Always merge cells */
colSpan: ['firstName', 'lastName'],
label({ row }) {
return [row.firstName, row.lastName].join(' ')
},
Renderer({ label, tabIndex }) {
return (
)
},
},
},
{
id: 'lastName',
label: 'Last',
width: 70,
},
{
id: 'age',
label: 'Age',
},
{
id: 'skill',
label: 'Skill',
cell: {
colSpan: ({ row }) => {
if (row.skill === 'None') {
/* Merge cells only if skill is none */
return ['skill', 'skillDetails']
}
return []
},
Renderer({ label, tabIndex }) {
return (
)
},
},
},
{
id: 'skillDetails',
label: 'Skill Details',
},
] satisfies Column[],
[]
)
return
}
`,
},
},
}