{"version":3,"file":"ColumnHeaderCell.cjs","sources":["../../../../../src/lib/DataTable/cells/ColumnHeaderCell.tsx"],"sourcesContent":["import type {ComponentProps, FC, ReactNode} from 'react';\nimport {useCallback, useState, useMemo} from 'react';\n\nimport {\n    IconEllipsisVertical,\n    IconPinRight,\n    IconPinLeft,\n    IconUnPin,\n    IconFilter,\n    IconSortAsc,\n    IconSortDesc,\n    IconSortOff,\n} from '@/internal/Icons';\nimport {MenuActions} from '@/lib/Menu';\nimport {useDialogState} from '@/lib/Dialog';\n\nimport type {HeaderCell} from './../types.ts';\nimport classes from './Cells.module.css';\n\nexport type Props = ComponentProps<HeaderCell> & {\n    children?: ReactNode;\n};\n\nexport const ColumnHeaderCell: FC<Props> = ({title, headerContext}) => {\n    const [isOpen, setOpen] = useState(false);\n    const handleClick = useCallback(() => {\n        setOpen(!isOpen);\n    }, [isOpen]);\n    const handleToggle = useCallback(\n        (openState: boolean) => {\n            setOpen(openState);\n        },\n        [setOpen]\n    );\n    const isPinned = headerContext.column.getIsPinned();\n\n    const isSorted = headerContext.column.getIsSorted();\n\n    const hasFilter = headerContext.column.getIsFiltered();\n\n    const {openDialog} = useDialogState(headerContext.table.options.meta?.filterModalId as string);\n\n    const actions = useMemo(\n        () => [\n            {\n                title: hasFilter ? 'Edit filter' : 'Filter column',\n                icon: IconFilter,\n                onClick: () => {\n                    openDialog({columnId: headerContext.column.id});\n                    setOpen(false);\n                },\n            },\n            {\n                title: isSorted !== 'asc' ? 'Sort ascending' : 'Clear ascending',\n                icon: isSorted !== 'asc' ? IconSortAsc : IconSortOff,\n                onClick: () => {\n                    isSorted !== 'asc' &&\n                        headerContext.table.setSorting([\n                            {desc: false, id: headerContext.column.id},\n                        ]);\n                    isSorted === 'asc' && headerContext.column.clearSorting();\n                    setOpen(false);\n                },\n            },\n            {\n                title: isSorted !== 'desc' ? 'Sort descending' : 'Clear descending',\n                icon: isSorted !== 'desc' ? IconSortDesc : IconSortOff,\n                onClick: () => {\n                    isSorted !== 'desc' &&\n                        headerContext.table.setSorting([{desc: true, id: headerContext.column.id}]);\n                    isSorted === 'desc' && headerContext.column.clearSorting();\n                    setOpen(false);\n                },\n            },\n            {\n                title: isPinned !== 'left' ? 'Pin left' : 'Unpin left',\n                icon: isPinned !== 'left' ? IconPinLeft : IconUnPin,\n                onClick: () => {\n                    setOpen(false);\n                    if (isPinned !== 'left') {\n                        headerContext.column.pin('left');\n                    } else {\n                        headerContext.column.pin(false);\n                    }\n                },\n            },\n            {\n                title: isPinned !== 'right' ? 'Pin right' : 'Unpin right',\n                icon: isPinned !== 'right' ? IconPinRight : IconUnPin,\n                onClick: () => {\n                    setOpen(false);\n                    if (isPinned !== 'right') {\n                        headerContext.column.pin('right');\n                    } else {\n                        headerContext.column.pin(false);\n                    }\n                },\n            },\n        ],\n        [hasFilter, headerContext.column, headerContext.table, isPinned, isSorted, openDialog]\n    );\n    return (\n        <div className={classes.headerCell}>\n            <div className={classes.columnTitle}>{title}</div>\n\n            <div className={classes.columnActions}>\n                <MenuActions\n                    allowedPlacements={['bottom', 'bottom-end', 'bottom-start']}\n                    variant=\"plain\"\n                    actions={actions}\n                    isOpen={isOpen}\n                    onToggle={handleToggle}>\n                    <button className={classes.actionsButton} onClick={handleClick}>\n                        <IconEllipsisVertical className={classes.actionsIcon} />\n                    </button>\n                </MenuActions>\n            </div>\n        </div>\n    );\n};\n"],"names":["ColumnHeaderCell","title","headerContext","isOpen","setOpen","useState","handleClick","useCallback","handleToggle","openState","isPinned","isSorted","hasFilter","openDialog","useDialogState","actions","useMemo","IconFilter","IconSortAsc","IconSortOff","IconSortDesc","IconPinLeft","IconUnPin","IconPinRight","jsxs","classes","jsx","MenuActions","IconEllipsisVertical"],"mappings":"8rBAuBaA,EAA8B,CAAC,CAAC,MAAAC,EAAO,cAAAC,KAAmB,CACnE,KAAM,CAACC,EAAQC,CAAO,EAAIC,EAAAA,SAAS,EAAK,EAClCC,EAAcC,EAAAA,YAAY,IAAM,CAClCH,EAAQ,CAACD,CAAM,CACnB,EAAG,CAACA,CAAM,CAAC,EACLK,EAAeD,EAAAA,YAChBE,GAAuB,CACpBL,EAAQK,CAAS,CACrB,EACA,CAACL,CAAO,CAAA,EAENM,EAAWR,EAAc,OAAO,YAAA,EAEhCS,EAAWT,EAAc,OAAO,YAAA,EAEhCU,EAAYV,EAAc,OAAO,cAAA,EAEjC,CAAC,WAAAW,GAAcC,iBAAeZ,EAAc,MAAM,QAAQ,MAAM,aAAuB,EAEvFa,EAAUC,EAAAA,QACZ,IAAM,CACF,CACI,MAAOJ,EAAY,cAAgB,gBACnC,KAAMK,EAAAA,WACN,QAAS,IAAM,CACXJ,EAAW,CAAC,SAAUX,EAAc,OAAO,GAAG,EAC9CE,EAAQ,EAAK,CACjB,CAAA,EAEJ,CACI,MAAOO,IAAa,MAAQ,iBAAmB,kBAC/C,KAAMA,IAAa,MAAQO,EAAAA,YAAcC,EAAAA,YACzC,QAAS,IAAM,CACXR,IAAa,OACTT,EAAc,MAAM,WAAW,CAC3B,CAAC,KAAM,GAAO,GAAIA,EAAc,OAAO,EAAA,CAAE,CAC5C,EACLS,IAAa,OAAST,EAAc,OAAO,aAAA,EAC3CE,EAAQ,EAAK,CACjB,CAAA,EAEJ,CACI,MAAOO,IAAa,OAAS,kBAAoB,mBACjD,KAAMA,IAAa,OAASS,EAAAA,aAAeD,EAAAA,YAC3C,QAAS,IAAM,CACXR,IAAa,QACTT,EAAc,MAAM,WAAW,CAAC,CAAC,KAAM,GAAM,GAAIA,EAAc,OAAO,EAAA,CAAG,CAAC,EAC9ES,IAAa,QAAUT,EAAc,OAAO,aAAA,EAC5CE,EAAQ,EAAK,CACjB,CAAA,EAEJ,CACI,MAAOM,IAAa,OAAS,WAAa,aAC1C,KAAMA,IAAa,OAASW,EAAAA,YAAcC,EAAAA,UAC1C,QAAS,IAAM,CACXlB,EAAQ,EAAK,EACTM,IAAa,OACbR,EAAc,OAAO,IAAI,MAAM,EAE/BA,EAAc,OAAO,IAAI,EAAK,CAEtC,CAAA,EAEJ,CACI,MAAOQ,IAAa,QAAU,YAAc,cAC5C,KAAMA,IAAa,QAAUa,EAAAA,aAAeD,EAAAA,UAC5C,QAAS,IAAM,CACXlB,EAAQ,EAAK,EACTM,IAAa,QACbR,EAAc,OAAO,IAAI,OAAO,EAEhCA,EAAc,OAAO,IAAI,EAAK,CAEtC,CAAA,CACJ,EAEJ,CAACU,EAAWV,EAAc,OAAQA,EAAc,MAAOQ,EAAUC,EAAUE,CAAU,CAAA,EAEzF,OACIW,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAAA,QAAQ,WACpB,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAAA,QAAQ,YAAc,SAAAxB,EAAM,EAE5CyB,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAAA,QAAQ,cACpB,SAAAC,EAAAA,IAACC,EAAAA,YAAA,CACG,kBAAmB,CAAC,SAAU,aAAc,cAAc,EAC1D,QAAQ,QACR,QAAAZ,EACA,OAAAZ,EACA,SAAUK,EACV,SAAAkB,EAAAA,IAAC,SAAA,CAAO,UAAWD,EAAAA,QAAQ,cAAe,QAASnB,EAC/C,SAAAoB,EAAAA,IAACE,uBAAA,CAAqB,UAAWH,EAAAA,QAAQ,WAAA,CAAa,CAAA,CAC1D,CAAA,CAAA,CACJ,CACJ,CAAA,EACJ,CAER"}