@economic/taco 2.53.0-virtualiser.4 → 2.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/components/Dialog/components/DialogDrawer.d.ts +2 -2
  2. package/dist/components/Input/util.d.ts +7 -1
  3. package/dist/components/Listbox/util.d.ts +1 -1
  4. package/dist/components/Menu/components/Item.d.ts +7 -7
  5. package/dist/components/Popover/Popover.d.ts +1 -1
  6. package/dist/esm/packages/taco/src/charts/components/Donut/DonutChart.js.map +1 -1
  7. package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js.map +1 -1
  8. package/dist/esm/packages/taco/src/charts/components/Legend.js.map +1 -1
  9. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js.map +1 -1
  10. package/dist/esm/packages/taco/src/components/Dialog/Dialog.js.map +1 -1
  11. package/dist/esm/packages/taco/src/components/Dialog/components/DialogDrawer.js.map +1 -1
  12. package/dist/esm/packages/taco/src/components/Header/components/AgreementSelector.js +1 -1
  13. package/dist/esm/packages/taco/src/components/Header/components/AgreementSelector.js.map +1 -1
  14. package/dist/esm/packages/taco/src/components/Input/util.js.map +1 -1
  15. package/dist/esm/packages/taco/src/components/Listbox/util.js.map +1 -1
  16. package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/OverflowGroup/OverflowGroup.js.map +1 -1
  18. package/dist/esm/packages/taco/src/components/Popover/Popover.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/ScrollArea/ScrollArea.js +4 -4
  20. package/dist/esm/packages/taco/src/components/ScrollArea/ScrollArea.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
  22. package/dist/esm/packages/taco/src/components/Select2/components/Create.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +0 -2
  24. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Select2/components/Option.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/Select2/components/Search.js.map +1 -1
  27. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js.map +1 -1
  28. package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowEditing.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowSelect.js.map +1 -1
  30. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +4 -1
  32. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
  34. package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js.map +1 -1
  35. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/util.js +4 -4
  36. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/util.js.map +1 -1
  37. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Header/components/Menu.js +2 -2
  38. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Header/components/Menu.js.map +1 -1
  39. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Header/components/Resizer.js.map +1 -1
  40. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Header/components/SortIndicator.js.map +1 -1
  41. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/Filters.js.map +1 -1
  42. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.js.map +1 -1
  43. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
  44. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.js.map +1 -1
  45. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Settings/Settings.js.map +1 -1
  46. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +3 -1
  47. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  48. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
  49. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -1
  50. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSettings.js.map +1 -1
  51. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableShortcutsListener.js.map +1 -1
  52. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  53. package/dist/primitives/Sortable/components/Item.d.ts +2 -1
  54. package/dist/primitives/Table/Core/components/Header/components/SortIndicator.d.ts +3 -3
  55. package/dist/taco.cjs.development.js +18 -15
  56. package/dist/taco.cjs.development.js.map +1 -1
  57. package/dist/taco.cjs.production.min.js +1 -1
  58. package/dist/taco.cjs.production.min.js.map +1 -1
  59. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Resizer.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Header/components/Resizer.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'clsx';\nimport { Tooltip } from '../../../../../../components/Tooltip/Tooltip';\nimport { useLocalization } from '../../../../../../components/Provider/Localization';\nimport { TableColumnWidth } from '../../../../types';\n\ntype ResizerProps = {\n headerRef: HTMLTableCellElement | null;\n id: string;\n isResizing: boolean;\n onResize: (event: unknown) => void;\n onResetSize: () => void;\n setColumnSizing: any;\n width?: TableColumnWidth;\n};\n\nexport function Resizer(props: ResizerProps) {\n const { headerRef, id, isResizing, onResetSize, onResize, setColumnSizing, width } = props;\n const { texts } = useLocalization();\n\n // this prevents sort handlers being activated\n const handleClick = event => {\n event.stopPropagation();\n event.preventDefault();\n };\n\n // columns set to \"grow\" don't set a width, so if resize is being triggered on a grow column make sure to set a size first\n const handleResize = event => {\n // event.detail >= 2 means a user has clicked more than once quickly.\n if (event.detail >= 2) {\n onResetSize();\n } else {\n if (!Number.isInteger(width) && headerRef) {\n setColumnSizing(sizes => ({\n ...sizes,\n [id]: headerRef.getBoundingClientRect().width,\n }));\n setTimeout(() => {\n onResize?.(event);\n }, 1);\n } else {\n onResize?.(event);\n }\n }\n };\n\n const handle = (\n <div\n className={cn(\n 'invisible absolute right-0 top-0 z-10 -mr-2 flex h-full w-4 cursor-col-resize touch-none select-none justify-center rounded py-0.5',\n 'group-hover/header:visible',\n '[th:last-child>&]:!mr-0 [th:last-child>&]:w-2',\n {\n '!visible': isResizing,\n }\n )}\n onClick={handleClick}\n onMouseDown={handleResize}\n onTouchStart={handleResize}>\n <div\n className={cn('h-full w-1 rounded', {\n '!bg-blue-500': isResizing,\n 'bg-grey-500 hover:bg-grey-700': !isResizing,\n })}\n />\n </div>\n );\n\n if (isResizing) {\n return handle;\n }\n\n return (\n <Tooltip placement=\"top\" title={texts.table.columns.resize.tooltip}>\n {handle}\n </Tooltip>\n );\n}\n"],"names":["Resizer","props","headerRef","id","isResizing","onResetSize","onResize","setColumnSizing","width","texts","useLocalization","handleClick","event","stopPropagation","preventDefault","handleResize","detail","Number","isInteger","sizes","getBoundingClientRect","setTimeout","handle","React","className","cn","onClick","onMouseDown","onTouchStart","Tooltip","placement","title","table","columns","resize","tooltip"],"mappings":";;;;;SAgBgBA,OAAOA,CAACC,KAAmB;EACvC,MAAM;IAAEC,SAAS;IAAEC,EAAE;IAAEC,UAAU;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,eAAe;IAAEC;GAAO,GAAGP,KAAK;EAC1F,MAAM;IAAEQ;GAAO,GAAGC,eAAe,EAAE;;EAGnC,MAAMC,WAAW,GAAGC,KAAK;IACrBA,KAAK,CAACC,eAAe,EAAE;IACvBD,KAAK,CAACE,cAAc,EAAE;GACzB;;EAGD,MAAMC,YAAY,GAAGH,KAAK;;IAEtB,IAAIA,KAAK,CAACI,MAAM,IAAI,CAAC,EAAE;MACnBX,WAAW,EAAE;KAChB,MAAM;MACH,IAAI,CAACY,MAAM,CAACC,SAAS,CAACV,KAAK,CAAC,IAAIN,SAAS,EAAE;QACvCK,eAAe,CAACY,KAAK,KAAK;UACtB,GAAGA,KAAK;UACR,CAAChB,EAAE,GAAGD,SAAS,CAACkB,qBAAqB,EAAE,CAACZ;SAC3C,CAAC,CAAC;QACHa,UAAU,CAAC;UACPf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGM,KAAK,CAAC;SACpB,EAAE,CAAC,CAAC;OACR,MAAM;QACHN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGM,KAAK,CAAC;;;GAG5B;EAED,MAAMU,MAAM,gBACRC;IACIC,SAAS,EAAEC,EAAE,CACT,oIAAoI,EACpI,4BAA4B,EAC5B,+CAA+C,EAC/C;MACI,UAAU,EAAErB;KACf,CACJ;IACDsB,OAAO,EAAEf,WAAW;IACpBgB,WAAW,EAAEZ,YAAY;IACzBa,YAAY,EAAEb;kBACdQ;IACIC,SAAS,EAAEC,EAAE,CAAC,oBAAoB,EAAE;MAChC,cAAc,EAAErB,UAAU;MAC1B,+BAA+B,EAAE,CAACA;KACrC;IACH,CAET;EAED,IAAIA,UAAU,EAAE;IACZ,OAAOkB,MAAM;;EAGjB,oBACIC,6BAACM,OAAO;IAACC,SAAS,EAAC,KAAK;IAACC,KAAK,EAAEtB,KAAK,CAACuB,KAAK,CAACC,OAAO,CAACC,MAAM,CAACC;KACtDb,MAAM,CACD;AAElB;;;;"}
1
+ {"version":3,"file":"Resizer.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Header/components/Resizer.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'clsx';\nimport { Tooltip } from '../../../../../../components/Tooltip/Tooltip';\nimport { useLocalization } from '../../../../../../components/Provider/Localization';\nimport { TableColumnWidth } from '../../../../types';\n\ntype ResizerProps = {\n headerRef: HTMLTableCellElement | null;\n id: string;\n isResizing: boolean;\n onResize: (event: unknown) => void;\n onResetSize: () => void;\n setColumnSizing: any;\n width?: TableColumnWidth;\n};\n\nexport function Resizer(props: ResizerProps) {\n const { headerRef, id, isResizing, onResetSize, onResize, setColumnSizing, width } = props;\n const { texts } = useLocalization();\n\n // this prevents sort handlers being activated\n const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n };\n\n // columns set to \"grow\" don't set a width, so if resize is being triggered on a grow column make sure to set a size first\n const handleResize = event => {\n // event.detail >= 2 means a user has clicked more than once quickly.\n if (event.detail >= 2) {\n onResetSize();\n } else {\n if (!Number.isInteger(width) && headerRef) {\n setColumnSizing(sizes => ({\n ...sizes,\n [id]: headerRef.getBoundingClientRect().width,\n }));\n setTimeout(() => {\n onResize?.(event);\n }, 1);\n } else {\n onResize?.(event);\n }\n }\n };\n\n const handle = (\n <div\n className={cn(\n 'invisible absolute right-0 top-0 z-10 -mr-2 flex h-full w-4 cursor-col-resize touch-none select-none justify-center rounded py-0.5',\n 'group-hover/header:visible',\n '[th:last-child>&]:!mr-0 [th:last-child>&]:w-2',\n {\n '!visible': isResizing,\n }\n )}\n onClick={handleClick}\n onMouseDown={handleResize}\n onTouchStart={handleResize}>\n <div\n className={cn('h-full w-1 rounded', {\n '!bg-blue-500': isResizing,\n 'bg-grey-500 hover:bg-grey-700': !isResizing,\n })}\n />\n </div>\n );\n\n if (isResizing) {\n return handle;\n }\n\n return (\n <Tooltip placement=\"top\" title={texts.table.columns.resize.tooltip}>\n {handle}\n </Tooltip>\n );\n}\n"],"names":["Resizer","props","headerRef","id","isResizing","onResetSize","onResize","setColumnSizing","width","texts","useLocalization","handleClick","event","stopPropagation","preventDefault","handleResize","detail","Number","isInteger","sizes","getBoundingClientRect","setTimeout","handle","React","className","cn","onClick","onMouseDown","onTouchStart","Tooltip","placement","title","table","columns","resize","tooltip"],"mappings":";;;;;SAgBgBA,OAAOA,CAACC,KAAmB;EACvC,MAAM;IAAEC,SAAS;IAAEC,EAAE;IAAEC,UAAU;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,eAAe;IAAEC;GAAO,GAAGP,KAAK;EAC1F,MAAM;IAAEQ;GAAO,GAAGC,eAAe,EAAE;;EAGnC,MAAMC,WAAW,GAAIC,KAAuB;IACxCA,KAAK,CAACC,eAAe,EAAE;IACvBD,KAAK,CAACE,cAAc,EAAE;GACzB;;EAGD,MAAMC,YAAY,GAAGH,KAAK;;IAEtB,IAAIA,KAAK,CAACI,MAAM,IAAI,CAAC,EAAE;MACnBX,WAAW,EAAE;KAChB,MAAM;MACH,IAAI,CAACY,MAAM,CAACC,SAAS,CAACV,KAAK,CAAC,IAAIN,SAAS,EAAE;QACvCK,eAAe,CAACY,KAAK,KAAK;UACtB,GAAGA,KAAK;UACR,CAAChB,EAAE,GAAGD,SAAS,CAACkB,qBAAqB,EAAE,CAACZ;SAC3C,CAAC,CAAC;QACHa,UAAU,CAAC;UACPf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGM,KAAK,CAAC;SACpB,EAAE,CAAC,CAAC;OACR,MAAM;QACHN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGM,KAAK,CAAC;;;GAG5B;EAED,MAAMU,MAAM,gBACRC;IACIC,SAAS,EAAEC,EAAE,CACT,oIAAoI,EACpI,4BAA4B,EAC5B,+CAA+C,EAC/C;MACI,UAAU,EAAErB;KACf,CACJ;IACDsB,OAAO,EAAEf,WAAW;IACpBgB,WAAW,EAAEZ,YAAY;IACzBa,YAAY,EAAEb;kBACdQ;IACIC,SAAS,EAAEC,EAAE,CAAC,oBAAoB,EAAE;MAChC,cAAc,EAAErB,UAAU;MAC1B,+BAA+B,EAAE,CAACA;KACrC;IACH,CAET;EAED,IAAIA,UAAU,EAAE;IACZ,OAAOkB,MAAM;;EAGjB,oBACIC,6BAACM,OAAO;IAACC,SAAS,EAAC,KAAK;IAACC,KAAK,EAAEtB,KAAK,CAACuB,KAAK,CAACC,OAAO,CAACC,MAAM,CAACC;KACtDb,MAAM,CACD;AAElB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortIndicator.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Header/components/SortIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { TableColumnSortDirection } from '../../../../types';\nimport { Icon } from '../../../../../../components/Icon/Icon';\n\ntype SortIndicatorProps = {\n direction: false | TableColumnSortDirection;\n};\n\nconst indicators = {\n asc: <Icon name=\"chevron-up-solid\" className=\"pointer-events-none -my-0.5\" />,\n desc: <Icon name=\"chevron-down-solid\" className=\"pointer-events-none -my-0.5\" />,\n};\n\nexport function SortIndicator(props: SortIndicatorProps) {\n return indicators[props.direction as string] ?? null;\n}\n\nconst ariaSort = {\n asc: 'ascending',\n desc: 'descending',\n};\n\nexport const getAriaSort = direction => ariaSort[direction] ?? 'none';\n\nexport function getSortAttributes(\n canSort: boolean,\n toggleSorting?: (event: unknown) => void,\n sortDirection?: false | TableColumnSortDirection\n) {\n if (!canSort) {\n return {};\n }\n\n const handleClick = (event: React.MouseEvent) => {\n if (event.isDefaultPrevented() || !event.currentTarget.contains(event.target as any)) {\n return;\n }\n\n event.preventDefault();\n toggleSorting?.(event);\n };\n\n return {\n 'aria-sort': ariaSort[sortDirection as any] ?? 'none',\n onClick: handleClick,\n };\n}\n"],"names":["indicators","asc","React","Icon","name","className","desc","SortIndicator","props","_indicators$props$dir","direction","ariaSort","getSortAttributes","canSort","toggleSorting","sortDirection","handleClick","event","isDefaultPrevented","currentTarget","contains","target","preventDefault","_ariaSort$sortDirecti","onClick"],"mappings":";;;AAQA,MAAMA,UAAU,GAAG;EACfC,GAAG,eAAEC,6BAACC,IAAI;IAACC,IAAI,EAAC,kBAAkB;IAACC,SAAS,EAAC;IAAgC;EAC7EC,IAAI,eAAEJ,6BAACC,IAAI;IAACC,IAAI,EAAC,oBAAoB;IAACC,SAAS,EAAC;;CACnD;SAEeE,aAAaA,CAACC,KAAyB;;EACnD,QAAAC,qBAAA,GAAOT,UAAU,CAACQ,KAAK,CAACE,SAAmB,CAAC,cAAAD,qBAAA,cAAAA,qBAAA,GAAI,IAAI;AACxD;AAEA,MAAME,QAAQ,GAAG;EACbV,GAAG,EAAE,WAAW;EAChBK,IAAI,EAAE;CACT;SAIeM,iBAAiBA,CAC7BC,OAAgB,EAChBC,aAAwC,EACxCC,aAAgD;;EAEhD,IAAI,CAACF,OAAO,EAAE;IACV,OAAO,EAAE;;EAGb,MAAMG,WAAW,GAAIC,KAAuB;IACxC,IAAIA,KAAK,CAACC,kBAAkB,EAAE,IAAI,CAACD,KAAK,CAACE,aAAa,CAACC,QAAQ,CAACH,KAAK,CAACI,MAAa,CAAC,EAAE;MAClF;;IAGJJ,KAAK,CAACK,cAAc,EAAE;IACtBR,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAGG,KAAK,CAAC;GACzB;EAED,OAAO;IACH,WAAW,GAAAM,qBAAA,GAAEZ,QAAQ,CAACI,aAAoB,CAAC,cAAAQ,qBAAA,cAAAA,qBAAA,GAAI,MAAM;IACrDC,OAAO,EAAER;GACZ;AACL;;;;"}
1
+ {"version":3,"file":"SortIndicator.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Header/components/SortIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { TableColumnSortDirection } from '../../../../types';\nimport { Icon } from '../../../../../../components/Icon/Icon';\n\ntype SortIndicatorProps = {\n direction: false | TableColumnSortDirection;\n};\n\nconst indicators = {\n asc: <Icon name=\"chevron-up-solid\" className=\"pointer-events-none -my-0.5\" />,\n desc: <Icon name=\"chevron-down-solid\" className=\"pointer-events-none -my-0.5\" />,\n};\n\nexport function SortIndicator(props: SortIndicatorProps) {\n return indicators[props.direction as TableColumnSortDirection] ?? null;\n}\n\nconst ariaSort = {\n asc: 'ascending' as const,\n desc: 'descending' as const,\n};\n\nexport const getAriaSort = (direction: TableColumnSortDirection) => ariaSort[direction] ?? 'none';\n\nexport function getSortAttributes(\n canSort: boolean,\n toggleSorting?: (event: unknown) => void,\n sortDirection?: false | TableColumnSortDirection\n) {\n if (!canSort) {\n return {};\n }\n\n const handleClick = (event: React.MouseEvent) => {\n if (event.isDefaultPrevented() || !event.currentTarget.contains(event.target as any)) {\n return;\n }\n\n event.preventDefault();\n toggleSorting?.(event);\n };\n\n return {\n 'aria-sort': ariaSort[sortDirection as TableColumnSortDirection] ?? 'none',\n onClick: handleClick,\n };\n}\n"],"names":["indicators","asc","React","Icon","name","className","desc","SortIndicator","props","_indicators$props$dir","direction","ariaSort","getSortAttributes","canSort","toggleSorting","sortDirection","handleClick","event","isDefaultPrevented","currentTarget","contains","target","preventDefault","_ariaSort$sortDirecti","onClick"],"mappings":";;;AAQA,MAAMA,UAAU,GAAG;EACfC,GAAG,eAAEC,6BAACC,IAAI;IAACC,IAAI,EAAC,kBAAkB;IAACC,SAAS,EAAC;IAAgC;EAC7EC,IAAI,eAAEJ,6BAACC,IAAI;IAACC,IAAI,EAAC,oBAAoB;IAACC,SAAS,EAAC;;CACnD;SAEeE,aAAaA,CAACC,KAAyB;;EACnD,QAAAC,qBAAA,GAAOT,UAAU,CAACQ,KAAK,CAACE,SAAqC,CAAC,cAAAD,qBAAA,cAAAA,qBAAA,GAAI,IAAI;AAC1E;AAEA,MAAME,QAAQ,GAAG;EACbV,GAAG,EAAE,WAAoB;EACzBK,IAAI,EAAE;CACT;SAIeM,iBAAiBA,CAC7BC,OAAgB,EAChBC,aAAwC,EACxCC,aAAgD;;EAEhD,IAAI,CAACF,OAAO,EAAE;IACV,OAAO,EAAE;;EAGb,MAAMG,WAAW,GAAIC,KAAuB;IACxC,IAAIA,KAAK,CAACC,kBAAkB,EAAE,IAAI,CAACD,KAAK,CAACE,aAAa,CAACC,QAAQ,CAACH,KAAK,CAACI,MAAa,CAAC,EAAE;MAClF;;IAGJJ,KAAK,CAACK,cAAc,EAAE;IACtBR,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAGG,KAAK,CAAC;GACzB;EAED,OAAO;IACH,WAAW,GAAAM,qBAAA,GAAEZ,QAAQ,CAACI,aAAyC,CAAC,cAAAQ,qBAAA,cAAAA,qBAAA,GAAI,MAAM;IAC1EC,OAAO,EAAER;GACZ;AACL;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Filters/Filters.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable } from '@tanstack/react-table';\nimport { useIsLargeScreen } from '../../../../../../../hooks/useIsLargeScreen';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { Button } from '../../../../../../../components/Button/Button';\nimport { Icon } from '../../../../../../../components/Icon/Icon';\nimport { Shortcut } from '../../../../../../../components/Shortcut/Shortcut';\nimport { ManageFiltersPopover } from './ManageFiltersPopover';\nimport { TableFilter } from '../../../../../types';\nimport { isEmptyFilter } from './util';\n\nexport type FiltersProps<TType = unknown> = {\n length: number;\n table: ReactTable<TType>;\n};\n\nexport function Filters<TType = unknown>(props: FiltersProps<TType>) {\n const { length, table } = props;\n const { texts } = useLocalization();\n const isLargeScreen = useIsLargeScreen();\n const columnFilters = table.getState().columnFilters as TableFilter[];\n const appliedFilters = columnFilters.filter(f => !isEmptyFilter(f));\n const ref = React.useRef<HTMLButtonElement>(null);\n\n const shortcut = { key: 'f', meta: true, shift: true };\n\n const buttonProps = {\n 'aria-label': texts.table.filters.tooltip,\n className: appliedFilters.length ? '!wcag-blue-100' : undefined,\n popover: popoverProps => <ManageFiltersPopover {...popoverProps} length={length} table={table} />,\n shortcut,\n ref,\n tooltip: (\n <>\n {texts.table.filters.tooltip}\n <Shortcut className=\"ml-2\" keys={shortcut} />\n </>\n ),\n };\n\n React.useEffect(() => {\n const emptyFilter = columnFilters.find(isEmptyFilter);\n\n // we set an empty filter when adding a filter through a column header.\n if (emptyFilter) {\n ref.current?.click();\n }\n }, [columnFilters]);\n\n if (!isLargeScreen && !appliedFilters.length) {\n return <IconButton {...buttonProps} icon=\"filter\" />;\n }\n\n return (\n <Button {...buttonProps}>\n <Icon className={!isLargeScreen ? '-mr-1.5' : undefined} name={appliedFilters.length ? 'filter-solid' : 'filter'} />\n {isLargeScreen ? texts.table.filters.button : ''}\n {appliedFilters.length ? `(${appliedFilters.length})` : ''}\n </Button>\n );\n}\n"],"names":["Filters","props","length","table","texts","useLocalization","isLargeScreen","useIsLargeScreen","columnFilters","getState","appliedFilters","filter","f","isEmptyFilter","ref","React","useRef","shortcut","key","meta","shift","buttonProps","filters","tooltip","className","undefined","popover","popoverProps","ManageFiltersPopover","Shortcut","keys","useEffect","emptyFilter","find","_ref$current","current","click","IconButton","icon","Button","Icon","name","button"],"mappings":";;;;;;;;;;SAiBgBA,OAAOA,CAAkBC,KAA0B;EAC/D,MAAM;IAAEC,MAAM;IAAEC;GAAO,GAAGF,KAAK;EAC/B,MAAM;IAAEG;GAAO,GAAGC,eAAe,EAAE;EACnC,MAAMC,aAAa,GAAGC,gBAAgB,EAAE;EACxC,MAAMC,aAAa,GAAGL,KAAK,CAACM,QAAQ,EAAE,CAACD,aAA8B;EACrE,MAAME,cAAc,GAAGF,aAAa,CAACG,MAAM,CAACC,CAAC,IAAI,CAACC,aAAa,CAACD,CAAC,CAAC,CAAC;EACnE,MAAME,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EAEjD,MAAMC,QAAQ,GAAG;IAAEC,GAAG,EAAE,GAAG;IAAEC,IAAI,EAAE,IAAI;IAAEC,KAAK,EAAE;GAAM;EAEtD,MAAMC,WAAW,GAAG;IAChB,YAAY,EAAEjB,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACC,OAAO;IACzCC,SAAS,EAAEd,cAAc,CAACR,MAAM,GAAG,gBAAgB,GAAGuB,SAAS;IAC/DC,OAAO,EAAEC,YAAY,iBAAIZ,6BAACa,oBAAoB,oBAAKD,YAAY;MAAEzB,MAAM,EAAEA,MAAM;MAAEC,KAAK,EAAEA;OAAS;IACjGc,QAAQ;IACRH,GAAG;IACHS,OAAO,gBACHR,4DACKX,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACC,OAAO,eAC5BR,6BAACc,QAAQ;MAACL,SAAS,EAAC,MAAM;MAACM,IAAI,EAAEb;MAAY,CAC9C;GAEV;EAEDF,cAAK,CAACgB,SAAS,CAAC;IACZ,MAAMC,WAAW,GAAGxB,aAAa,CAACyB,IAAI,CAACpB,aAAa,CAAC;;IAGrD,IAAImB,WAAW,EAAE;MAAA,IAAAE,YAAA;MACb,CAAAA,YAAA,GAAApB,GAAG,CAACqB,OAAO,cAAAD,YAAA,uBAAXA,YAAA,CAAaE,KAAK,EAAE;;GAE3B,EAAE,CAAC5B,aAAa,CAAC,CAAC;EAEnB,IAAI,CAACF,aAAa,IAAI,CAACI,cAAc,CAACR,MAAM,EAAE;IAC1C,oBAAOa,6BAACsB,UAAU,oBAAKhB,WAAW;MAAEiB,IAAI,EAAC;OAAW;;EAGxD,oBACIvB,6BAACwB,MAAM,oBAAKlB,WAAW,gBACnBN,6BAACyB,IAAI;IAAChB,SAAS,EAAE,CAAClB,aAAa,GAAG,SAAS,GAAGmB,SAAS;IAAEgB,IAAI,EAAE/B,cAAc,CAACR,MAAM,GAAG,cAAc,GAAG;IAAY,EACnHI,aAAa,GAAGF,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACoB,MAAM,GAAG,EAAE,EAC/ChC,cAAc,CAACR,MAAM,GAAG,IAAIQ,cAAc,CAACR,MAAM,GAAG,GAAG,EAAE,CACrD;AAEjB;;;;"}
1
+ {"version":3,"file":"Filters.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Filters/Filters.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable } from '@tanstack/react-table';\nimport { useIsLargeScreen } from '../../../../../../../hooks/useIsLargeScreen';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { Button } from '../../../../../../../components/Button/Button';\nimport { Icon } from '../../../../../../../components/Icon/Icon';\nimport { Shortcut } from '../../../../../../../components/Shortcut/Shortcut';\nimport { ManageFiltersPopover } from './ManageFiltersPopover';\nimport { TableFilter } from '../../../../../types';\nimport { isEmptyFilter } from './util';\nimport { PopoverProps } from '../../../../../../../components/Popover/Popover';\n\nexport type FiltersProps<TType = unknown> = {\n length: number;\n table: ReactTable<TType>;\n};\n\nexport function Filters<TType = unknown>(props: FiltersProps<TType>) {\n const { length, table } = props;\n const { texts } = useLocalization();\n const isLargeScreen = useIsLargeScreen();\n const columnFilters = table.getState().columnFilters as TableFilter[];\n const appliedFilters = columnFilters.filter(f => !isEmptyFilter(f));\n const ref = React.useRef<HTMLButtonElement>(null);\n\n const shortcut = { key: 'f', meta: true, shift: true };\n\n const buttonProps = {\n 'aria-label': texts.table.filters.tooltip,\n className: appliedFilters.length ? '!wcag-blue-100' : undefined,\n popover: (popoverProps: PopoverProps) => <ManageFiltersPopover {...popoverProps} length={length} table={table} />,\n shortcut,\n ref,\n tooltip: (\n <>\n {texts.table.filters.tooltip}\n <Shortcut className=\"ml-2\" keys={shortcut} />\n </>\n ),\n };\n\n React.useEffect(() => {\n const emptyFilter = columnFilters.find(isEmptyFilter);\n\n // we set an empty filter when adding a filter through a column header.\n if (emptyFilter) {\n ref.current?.click();\n }\n }, [columnFilters]);\n\n if (!isLargeScreen && !appliedFilters.length) {\n return <IconButton {...buttonProps} icon=\"filter\" />;\n }\n\n return (\n <Button {...buttonProps}>\n <Icon className={!isLargeScreen ? '-mr-1.5' : undefined} name={appliedFilters.length ? 'filter-solid' : 'filter'} />\n {isLargeScreen ? texts.table.filters.button : ''}\n {appliedFilters.length ? `(${appliedFilters.length})` : ''}\n </Button>\n );\n}\n"],"names":["Filters","props","length","table","texts","useLocalization","isLargeScreen","useIsLargeScreen","columnFilters","getState","appliedFilters","filter","f","isEmptyFilter","ref","React","useRef","shortcut","key","meta","shift","buttonProps","filters","tooltip","className","undefined","popover","popoverProps","ManageFiltersPopover","Shortcut","keys","useEffect","emptyFilter","find","_ref$current","current","click","IconButton","icon","Button","Icon","name","button"],"mappings":";;;;;;;;;;SAkBgBA,OAAOA,CAAkBC,KAA0B;EAC/D,MAAM;IAAEC,MAAM;IAAEC;GAAO,GAAGF,KAAK;EAC/B,MAAM;IAAEG;GAAO,GAAGC,eAAe,EAAE;EACnC,MAAMC,aAAa,GAAGC,gBAAgB,EAAE;EACxC,MAAMC,aAAa,GAAGL,KAAK,CAACM,QAAQ,EAAE,CAACD,aAA8B;EACrE,MAAME,cAAc,GAAGF,aAAa,CAACG,MAAM,CAACC,CAAC,IAAI,CAACC,aAAa,CAACD,CAAC,CAAC,CAAC;EACnE,MAAME,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EAEjD,MAAMC,QAAQ,GAAG;IAAEC,GAAG,EAAE,GAAG;IAAEC,IAAI,EAAE,IAAI;IAAEC,KAAK,EAAE;GAAM;EAEtD,MAAMC,WAAW,GAAG;IAChB,YAAY,EAAEjB,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACC,OAAO;IACzCC,SAAS,EAAEd,cAAc,CAACR,MAAM,GAAG,gBAAgB,GAAGuB,SAAS;IAC/DC,OAAO,EAAGC,YAA0B,iBAAKZ,6BAACa,oBAAoB,oBAAKD,YAAY;MAAEzB,MAAM,EAAEA,MAAM;MAAEC,KAAK,EAAEA;OAAS;IACjHc,QAAQ;IACRH,GAAG;IACHS,OAAO,gBACHR,4DACKX,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACC,OAAO,eAC5BR,6BAACc,QAAQ;MAACL,SAAS,EAAC,MAAM;MAACM,IAAI,EAAEb;MAAY,CAC9C;GAEV;EAEDF,cAAK,CAACgB,SAAS,CAAC;IACZ,MAAMC,WAAW,GAAGxB,aAAa,CAACyB,IAAI,CAACpB,aAAa,CAAC;;IAGrD,IAAImB,WAAW,EAAE;MAAA,IAAAE,YAAA;MACb,CAAAA,YAAA,GAAApB,GAAG,CAACqB,OAAO,cAAAD,YAAA,uBAAXA,YAAA,CAAaE,KAAK,EAAE;;GAE3B,EAAE,CAAC5B,aAAa,CAAC,CAAC;EAEnB,IAAI,CAACF,aAAa,IAAI,CAACI,cAAc,CAACR,MAAM,EAAE;IAC1C,oBAAOa,6BAACsB,UAAU,oBAAKhB,WAAW;MAAEiB,IAAI,EAAC;OAAW;;EAGxD,oBACIvB,6BAACwB,MAAM,oBAAKlB,WAAW,gBACnBN,6BAACyB,IAAI;IAAChB,SAAS,EAAE,CAAClB,aAAa,GAAG,SAAS,GAAGmB,SAAS;IAAEgB,IAAI,EAAE/B,cAAc,CAACR,MAAM,GAAG,cAAc,GAAG;IAAY,EACnHI,aAAa,GAAGF,KAAK,CAACD,KAAK,CAACmB,OAAO,CAACoB,MAAM,GAAG,EAAE,EAC/ChC,cAAc,CAACR,MAAM,GAAG,IAAIQ,cAAc,CAACR,MAAM,GAAG,GAAG,EAAE,CACrD;AAEjB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManageFiltersPopover.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable } from '@tanstack/react-table';\nimport { Popover } from '../../../../../../../components/Popover/Popover';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { Button } from '../../../../../../../components/Button/Button';\nimport { Group } from '../../../../../../../components/Group/Group';\nimport { isEmptyFilter, sortByHeader } from './util';\nimport { isInternalColumn } from '../../../../../useTableManager/util/columns';\nimport { TableFilter, TableFilterComparator, TableFilterValue } from '../../../../../types';\nimport { Filter } from './components/Filter';\nimport { FilterContext } from './FilterContext';\n\nexport type ManageFiltersPopoverProps<TType = unknown> = {\n length: number;\n table: ReactTable<TType>;\n};\n\nconst placeholderFilter: TableFilter = { id: '', value: { comparator: TableFilterComparator.Contains, value: undefined } };\n\nexport function ManageFiltersPopover<TType = unknown>(props: ManageFiltersPopoverProps<TType>) {\n const { length, table, ...popoverProps } = props;\n const { locale, texts } = useLocalization();\n\n const allColumns = table\n .getAllLeafColumns()\n .filter(column => !isInternalColumn(column.id))\n .sort(sortByHeader);\n\n const columnFilters = table.getState().columnFilters as TableFilter[];\n\n // state, since we \"apply\" filters - our filter values have a special shape, so we force to our type\n const [filters, setFilters] = React.useState<TableFilter[]>(columnFilters.length ? columnFilters : [placeholderFilter]);\n\n // this runs if filters are set outside (e.g. through column header)\n React.useEffect(() => {\n setFilters(columnFilters.length === 0 ? [placeholderFilter] : columnFilters);\n\n // focus the filter value, as we preset the column/comparator.\n requestAnimationFrame(() => {\n const filterValues = document.querySelectorAll('[data-query-selector=\"filter-value\"]');\n const lastFilter = filterValues.length ? filterValues[filterValues.length - 1] : undefined;\n\n (lastFilter as HTMLElement)?.focus();\n });\n }, [columnFilters]);\n\n // filters\n const handleChangeFilter = (position: number, filter: { id: string; value: TableFilterValue }) => {\n setFilters(currentFilters => {\n return currentFilters.map((current, index) => {\n if (index === position) {\n return filter;\n }\n return current;\n });\n });\n };\n\n const handleRemoveFilter = position => {\n if (filters.length === 1) {\n setFilters([placeholderFilter]);\n return;\n }\n\n setFilters(currentFilters => currentFilters.filter((_, index) => index !== position));\n };\n\n const handleCreate = () => {\n setFilters(filters.concat(placeholderFilter));\n };\n\n //\n const handleApply = () => {\n table.setColumnFilters(() => {\n const newFilters = filters.filter(f => {\n if (f.id === null || f.id === '') {\n return false;\n }\n\n const controlRenderer = allColumns.find(c => c.id === f.id)?.columnDef.meta?.control;\n\n if (\n f.value.comparator === TableFilterComparator.IsEmpty ||\n f.value.comparator === TableFilterComparator.IsNotEmpty ||\n controlRenderer === 'switch'\n ) {\n return true;\n }\n\n const value = f.value.value;\n\n return value !== undefined && value !== null && value !== '';\n });\n\n return newFilters;\n });\n };\n\n const handleClear = () => {\n table.resetColumnFilters();\n setFilters([placeholderFilter]);\n };\n\n const handleClose = (open: boolean) => {\n if (!open) {\n const nonEmptyFilters = columnFilters.filter(f => !isEmptyFilter(f));\n table.setColumnFilters(nonEmptyFilters);\n setFilters(nonEmptyFilters.length === 0 ? [placeholderFilter] : nonEmptyFilters);\n }\n };\n\n return (\n <Popover {...popoverProps} onChange={handleClose}>\n <Popover.Content>\n <FilterContext.Provider value={filters}>\n <div className=\"flex w-[40rem] flex-col gap-4\">\n <div className=\"flex h-8\">\n <div className=\"flex w-full items-center gap-2\">\n <h4 className=\"mb-0 inline-flex\">{texts.table.filters.button}</h4>\n <p className=\"text-grey-700 mb-0 mr-auto mt-px inline-flex\">\n {texts.table.filters.total\n .replace(\n '[CURRENT]',\n new Intl.NumberFormat(locale).format(table.getFilteredRowModel().rows.length)\n )\n .replace('[TOTAL]', new Intl.NumberFormat(locale).format(length))}\n </p>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n {filters.map((filter, index) => (\n <Filter\n key={`filter_${index}`}\n allColumns={allColumns}\n filter={filter}\n position={index}\n onChange={handleChangeFilter}\n onRemove={\n (filters.length > 0 && filters.some(f => f.id)) || filters.length > 1\n ? handleRemoveFilter\n : undefined\n }\n />\n ))}\n <div className=\"justify-start\">\n <Button appearance=\"discrete\" onClick={handleCreate}>\n + {texts.table.filters.buttons.addFilter}\n </Button>\n </div>\n </div>\n <Group className=\"ml-auto\">\n <Popover.Close>\n <Button>{texts.table.filters.buttons.cancel}</Button>\n </Popover.Close>\n <Button onClick={handleClear}>{texts.table.filters.buttons.clear}</Button>\n <Button appearance=\"primary\" onClick={handleApply}>\n {texts.table.filters.buttons.apply}\n </Button>\n </Group>\n </div>\n </FilterContext.Provider>\n </Popover.Content>\n </Popover>\n );\n}\n"],"names":["placeholderFilter","id","value","comparator","TableFilterComparator","Contains","undefined","ManageFiltersPopover","props","length","table","popoverProps","locale","texts","useLocalization","allColumns","getAllLeafColumns","filter","column","isInternalColumn","sort","sortByHeader","columnFilters","getState","filters","setFilters","React","useState","useEffect","requestAnimationFrame","filterValues","document","querySelectorAll","lastFilter","focus","handleChangeFilter","position","currentFilters","map","current","index","handleRemoveFilter","_","handleCreate","concat","handleApply","setColumnFilters","newFilters","f","controlRenderer","_allColumns$find","find","c","_allColumns$find$colu","columnDef","meta","control","IsEmpty","IsNotEmpty","handleClear","resetColumnFilters","handleClose","open","nonEmptyFilters","isEmptyFilter","Popover","onChange","Content","FilterContext","Provider","className","button","total","replace","Intl","NumberFormat","format","getFilteredRowModel","rows","Filter","key","onRemove","some","Button","appearance","onClick","buttons","addFilter","Group","Close","cancel","clear","apply"],"mappings":"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"}
1
+ {"version":3,"file":"ManageFiltersPopover.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable } from '@tanstack/react-table';\nimport { Popover } from '../../../../../../../components/Popover/Popover';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { Button } from '../../../../../../../components/Button/Button';\nimport { Group } from '../../../../../../../components/Group/Group';\nimport { isEmptyFilter, sortByHeader } from './util';\nimport { isInternalColumn } from '../../../../../useTableManager/util/columns';\nimport { TableFilter, TableFilterComparator, TableFilterValue } from '../../../../../types';\nimport { Filter } from './components/Filter';\nimport { FilterContext } from './FilterContext';\n\nexport type ManageFiltersPopoverProps<TType = unknown> = {\n length: number;\n table: ReactTable<TType>;\n};\n\nconst placeholderFilter: TableFilter = { id: '', value: { comparator: TableFilterComparator.Contains, value: undefined } };\n\nexport function ManageFiltersPopover<TType = unknown>(props: ManageFiltersPopoverProps<TType>) {\n const { length, table, ...popoverProps } = props;\n const { locale, texts } = useLocalization();\n\n const allColumns = table\n .getAllLeafColumns()\n .filter(column => !isInternalColumn(column.id))\n .sort(sortByHeader);\n\n const columnFilters = table.getState().columnFilters as TableFilter[];\n\n // state, since we \"apply\" filters - our filter values have a special shape, so we force to our type\n const [filters, setFilters] = React.useState<TableFilter[]>(columnFilters.length ? columnFilters : [placeholderFilter]);\n\n // this runs if filters are set outside (e.g. through column header)\n React.useEffect(() => {\n setFilters(columnFilters.length === 0 ? [placeholderFilter] : columnFilters);\n\n // focus the filter value, as we preset the column/comparator.\n requestAnimationFrame(() => {\n const filterValues = document.querySelectorAll('[data-query-selector=\"filter-value\"]');\n const lastFilter = filterValues.length ? filterValues[filterValues.length - 1] : undefined;\n\n (lastFilter as HTMLElement)?.focus();\n });\n }, [columnFilters]);\n\n // filters\n const handleChangeFilter = (position: number, filter: { id: string; value: TableFilterValue }) => {\n setFilters(currentFilters => {\n return currentFilters.map((current, index) => {\n if (index === position) {\n return filter;\n }\n return current;\n });\n });\n };\n\n const handleRemoveFilter = (position: number) => {\n if (filters.length === 1) {\n setFilters([placeholderFilter]);\n return;\n }\n\n setFilters(currentFilters => currentFilters.filter((_, index) => index !== position));\n };\n\n const handleCreate = () => {\n setFilters(filters.concat(placeholderFilter));\n };\n\n //\n const handleApply = () => {\n table.setColumnFilters(() => {\n const newFilters = filters.filter(f => {\n if (f.id === null || f.id === '') {\n return false;\n }\n\n const controlRenderer = allColumns.find(c => c.id === f.id)?.columnDef.meta?.control;\n\n if (\n f.value.comparator === TableFilterComparator.IsEmpty ||\n f.value.comparator === TableFilterComparator.IsNotEmpty ||\n controlRenderer === 'switch'\n ) {\n return true;\n }\n\n const value = f.value.value;\n\n return value !== undefined && value !== null && value !== '';\n });\n\n return newFilters;\n });\n };\n\n const handleClear = () => {\n table.resetColumnFilters();\n setFilters([placeholderFilter]);\n };\n\n const handleClose = (open: boolean) => {\n if (!open) {\n const nonEmptyFilters = columnFilters.filter(f => !isEmptyFilter(f));\n table.setColumnFilters(nonEmptyFilters);\n setFilters(nonEmptyFilters.length === 0 ? [placeholderFilter] : nonEmptyFilters);\n }\n };\n\n return (\n <Popover {...popoverProps} onChange={handleClose}>\n <Popover.Content>\n <FilterContext.Provider value={filters}>\n <div className=\"flex w-[40rem] flex-col gap-4\">\n <div className=\"flex h-8\">\n <div className=\"flex w-full items-center gap-2\">\n <h4 className=\"mb-0 inline-flex\">{texts.table.filters.button}</h4>\n <p className=\"text-grey-700 mb-0 mr-auto mt-px inline-flex\">\n {texts.table.filters.total\n .replace(\n '[CURRENT]',\n new Intl.NumberFormat(locale).format(table.getFilteredRowModel().rows.length)\n )\n .replace('[TOTAL]', new Intl.NumberFormat(locale).format(length))}\n </p>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n {filters.map((filter, index) => (\n <Filter\n key={`filter_${index}`}\n allColumns={allColumns}\n filter={filter}\n position={index}\n onChange={handleChangeFilter}\n onRemove={\n (filters.length > 0 && filters.some(f => f.id)) || filters.length > 1\n ? handleRemoveFilter\n : undefined\n }\n />\n ))}\n <div className=\"justify-start\">\n <Button appearance=\"discrete\" onClick={handleCreate}>\n + {texts.table.filters.buttons.addFilter}\n </Button>\n </div>\n </div>\n <Group className=\"ml-auto\">\n <Popover.Close>\n <Button>{texts.table.filters.buttons.cancel}</Button>\n </Popover.Close>\n <Button onClick={handleClear}>{texts.table.filters.buttons.clear}</Button>\n <Button appearance=\"primary\" onClick={handleApply}>\n {texts.table.filters.buttons.apply}\n </Button>\n </Group>\n </div>\n </FilterContext.Provider>\n </Popover.Content>\n </Popover>\n );\n}\n"],"names":["placeholderFilter","id","value","comparator","TableFilterComparator","Contains","undefined","ManageFiltersPopover","props","length","table","popoverProps","locale","texts","useLocalization","allColumns","getAllLeafColumns","filter","column","isInternalColumn","sort","sortByHeader","columnFilters","getState","filters","setFilters","React","useState","useEffect","requestAnimationFrame","filterValues","document","querySelectorAll","lastFilter","focus","handleChangeFilter","position","currentFilters","map","current","index","handleRemoveFilter","_","handleCreate","concat","handleApply","setColumnFilters","newFilters","f","controlRenderer","_allColumns$find","find","c","_allColumns$find$colu","columnDef","meta","control","IsEmpty","IsNotEmpty","handleClear","resetColumnFilters","handleClose","open","nonEmptyFilters","isEmptyFilter","Popover","onChange","Content","FilterContext","Provider","className","button","total","replace","Intl","NumberFormat","format","getFilteredRowModel","rows","Filter","key","onRemove","some","Button","appearance","onClick","buttons","addFilter","Group","Close","cancel","clear","apply"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Print.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Print/Print.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { useToast } from '../../../../../../../components/Toast/Toaster';\nimport { TableRef } from '../../../../../types';\nimport { PrintDialog } from './PrintDialog';\nimport { Shortcut } from '../../../../../../../components/Shortcut/Shortcut';\nimport { getHiddenColumns } from '../../../../../useTableManager/util/columns';\n\nexport type PrintProps<TType = unknown> = {\n table: ReactTable<TType>;\n tableId: string;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Print<TType = unknown>(props: PrintProps<TType>) {\n const { table, tableId, tableRef } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const lastScrollTopRef = React.useRef<number>();\n const toast = useToast();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const { allRows, orientation, size, splitGroups } = tableMeta.printing.settings;\n\n const togglePrinting = React.useCallback(\n enabled => {\n tableMeta.printing.setIsPrinting(enabled);\n\n if (tableRef.current) {\n if (enabled) {\n lastScrollTopRef.current = tableRef.current.scrollTop;\n } else if (lastScrollTopRef.current !== undefined) {\n tableRef.current.scrollTop = lastScrollTopRef.current;\n lastScrollTopRef.current = undefined;\n }\n }\n },\n [tableRef.current]\n );\n\n React.useEffect(() => {\n const afterPrint = () => {\n togglePrinting(false);\n };\n\n window.addEventListener('afterprint', afterPrint);\n\n return () => {\n window.removeEventListener('afterprint', afterPrint);\n };\n }, []);\n\n const print = async () => {\n const toastRef = toast.loading(texts.table.print.loading);\n\n if (tableMeta.server.isEnabled && tableMeta.server.loadAllIfNeeded) {\n const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);\n\n try {\n await tableMeta.server.loadAllIfNeeded(\n table.getState().sorting,\n table.getState().columnFilters,\n hiddenColumns,\n tableMeta.search.enableGlobalFilter ? table.getState().globalFilter : undefined\n );\n } catch (error) {\n const errorMessage = `${texts.table.print.error}: ${error}`;\n console.error(errorMessage);\n toastRef.error(errorMessage);\n }\n }\n\n // this might close immediately if the dataset is small - this is okay\n toastRef.close();\n\n // use a timeout to let the toast close, otherwise it freezes mid animation when the print dialog opens\n setTimeout(() => {\n // do this here because Safari doesn't support the beforeprint event\n togglePrinting(true);\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n if (isSafari) {\n try {\n // Try using document.execCommand for printing in Safari\n document.execCommand('print', false, undefined);\n } catch (error) {\n // If document.execCommand fails or throws an error, fallback to window.print()\n window.print();\n }\n } else {\n // Execute window.print() for all other browsers\n window.print();\n }\n });\n });\n }, 150);\n };\n\n const printStyle = [`@page { size: ${size} ${orientation}; }`];\n\n if (!allRows) {\n printStyle.push(`table[data-taco^='table']#${tableId} tr:not([data-row-selected=\"true\"]) { display: none; }`);\n }\n\n if (splitGroups) {\n printStyle.push(`table[data-taco^='table']#${tableId} tr[data-row-group]:not(:first-child) { break-before: page; }`);\n }\n\n const shortcut = { key: 'p', meta: true, shift: false };\n const tooltip = (\n <>\n {texts.table.print.tooltip}\n <Shortcut className=\"ml-2\" keys={shortcut} />\n </>\n );\n\n return (\n <>\n <style media=\"print\">{printStyle.join('\\n')}</style>\n <IconButton\n icon=\"print\"\n aria-label={texts.table.print.tooltip}\n dialog={dialogProps => (\n <PrintDialog\n {...dialogProps}\n table={table}\n onAccept={print}\n orientation={orientation}\n setOrientation={value => tableMeta.printing.setSetting('orientation', value)}\n size={size}\n setSize={value => tableMeta.printing.setSetting('size', value)}\n allRows={allRows}\n setAllRows={value => tableMeta.printing.setSetting('allRows', value)}\n splitGroups={splitGroups}\n setSplitGroups={value => tableMeta.printing.setSetting('splitGroups', value)}\n />\n )}\n ref={ref}\n shortcut={shortcut}\n tooltip={tooltip}\n />\n </>\n );\n}\n"],"names":["Print","props","table","tableId","tableRef","texts","useLocalization","ref","React","useRef","lastScrollTopRef","toast","useToast","tableMeta","options","meta","allRows","orientation","size","splitGroups","printing","settings","togglePrinting","useCallback","enabled","setIsPrinting","current","scrollTop","undefined","useEffect","afterPrint","window","addEventListener","removeEventListener","print","toastRef","close","setTimeout","requestAnimationFrame","isSafari","test","navigator","userAgent","document","execCommand","error","loading","_temp2","server","isEnabled","loadAllIfNeeded","hiddenColumns","getHiddenColumns","getState","columnVisibility","_temp","_catch","Promise","resolve","sorting","columnFilters","search","enableGlobalFilter","globalFilter","then","errorMessage","console","_temp3","e","reject","printStyle","push","shortcut","key","shift","tooltip","Shortcut","className","keys","media","join","IconButton","icon","dialog","dialogProps","PrintDialog","onAccept","setOrientation","value","setSetting","setSize","setAllRows","setSplitGroups"],"mappings":";;;;;;;;;SAgBgBA,KAAKA,CAAkBC,KAAwB;EAC3D,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC;GAAU,GAAGH,KAAK;EAC1C,MAAM;IAAEI;GAAO,GAAGC,eAAe,EAAE;EACnC,MAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EACjD,MAAMC,gBAAgB,GAAGF,cAAK,CAACC,MAAM,EAAU;EAC/C,MAAME,KAAK,GAAGC,QAAQ,EAAE;EACxB,MAAMC,SAAS,GAAGX,KAAK,CAACY,OAAO,CAACC,IAA6B;EAC7D,MAAM;IAAEC,OAAO;IAAEC,WAAW;IAAEC,IAAI;IAAEC;GAAa,GAAGN,SAAS,CAACO,QAAQ,CAACC,QAAQ;EAE/E,MAAMC,cAAc,GAAGd,cAAK,CAACe,WAAW,CACpCC,OAAO;IACHX,SAAS,CAACO,QAAQ,CAACK,aAAa,CAACD,OAAO,CAAC;IAEzC,IAAIpB,QAAQ,CAACsB,OAAO,EAAE;MAClB,IAAIF,OAAO,EAAE;QACTd,gBAAgB,CAACgB,OAAO,GAAGtB,QAAQ,CAACsB,OAAO,CAACC,SAAS;OACxD,MAAM,IAAIjB,gBAAgB,CAACgB,OAAO,KAAKE,SAAS,EAAE;QAC/CxB,QAAQ,CAACsB,OAAO,CAACC,SAAS,GAAGjB,gBAAgB,CAACgB,OAAO;QACrDhB,gBAAgB,CAACgB,OAAO,GAAGE,SAAS;;;GAG/C,EACD,CAACxB,QAAQ,CAACsB,OAAO,CAAC,CACrB;EAEDlB,cAAK,CAACqB,SAAS,CAAC;IACZ,MAAMC,UAAU,GAAGA;MACfR,cAAc,CAAC,KAAK,CAAC;KACxB;IAEDS,MAAM,CAACC,gBAAgB,CAAC,YAAY,EAAEF,UAAU,CAAC;IAEjD,OAAO;MACHC,MAAM,CAACE,mBAAmB,CAAC,YAAY,EAAEH,UAAU,CAAC;KACvD;GACJ,EAAE,EAAE,CAAC;EAEN,MAAMI,KAAK;IAAA;;;QAqBPC,QAAQ,CAACC,KAAK,EAAE;;QAGhBC,UAAU,CAAC;;UAEPf,cAAc,CAAC,IAAI,CAAC;UAEpBgB,qBAAqB,CAAC;YAClBA,qBAAqB,CAAC;cAClB,MAAMC,QAAQ,GAAG,gCAAgC,CAACC,IAAI,CAACC,SAAS,CAACC,SAAS,CAAC;cAE3E,IAAIH,QAAQ,EAAE;gBACV,IAAI;;kBAEAI,QAAQ,CAACC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAEhB,SAAS,CAAC;iBAClD,CAAC,OAAOiB,KAAK,EAAE;;kBAEZd,MAAM,CAACG,KAAK,EAAE;;eAErB,MAAM;;gBAEHH,MAAM,CAACG,KAAK,EAAE;;aAErB,CAAC;WACL,CAAC;SACL,EAAE,GAAG,CAAC;;MA7CP,MAAMC,QAAQ,GAAGxB,KAAK,CAACmC,OAAO,CAACzC,KAAK,CAACH,KAAK,CAACgC,KAAK,CAACY,OAAO,CAAC;MAAC,MAAAC,MAAA;QAAA,IAEtDlC,SAAS,CAACmC,MAAM,CAACC,SAAS,IAAIpC,SAAS,CAACmC,MAAM,CAACE,eAAe;UAC9D,MAAMC,aAAa,GAAGC,gBAAgB,CAAClD,KAAK,CAACmD,QAAQ,EAAE,CAACC,gBAAgB,CAAC;UAAC,MAAAC,KAAA,GAAAC,MAAA,aAEtE;YAAA,OAAAC,OAAA,CAAAC,OAAA,CACM7C,SAAS,CAACmC,MAAM,CAACE,eAAe,CAClChD,KAAK,CAACmD,QAAQ,EAAE,CAACM,OAAO,EACxBzD,KAAK,CAACmD,QAAQ,EAAE,CAACO,aAAa,EAC9BT,aAAa,EACbtC,SAAS,CAACgD,MAAM,CAACC,kBAAkB,GAAG5D,KAAK,CAACmD,QAAQ,EAAE,CAACU,YAAY,GAAGnC,SAAS,CAClF,EAAAoC,IAAA;WACJ,YAAQnB,KAAK,EAAE;YACZ,MAAMoB,YAAY,GAAG,GAAG5D,KAAK,CAACH,KAAK,CAACgC,KAAK,CAACW,KAAK,KAAKA,KAAK,EAAE;YAC3DqB,OAAO,CAACrB,KAAK,CAACoB,YAAY,CAAC;YAC3B9B,QAAQ,CAACU,KAAK,CAACoB,YAAY,CAAC;WAC/B;UAAA,IAAAV,KAAA,IAAAA,KAAA,CAAAS,IAAA,SAAAT,KAAA,CAAAS,IAAA;;;MAAA,OAAAP,OAAA,CAAAC,OAAA,CAAAX,MAAA,IAAAA,MAAA,CAAAiB,IAAA,GAAAjB,MAAA,CAAAiB,IAAA,CAAAG,MAAA,IAAAA,MAAA,CAAApB,MAAA;KA8BR,QAAAqB,CAAA;MAAA,OAAAX,OAAA,CAAAY,MAAA,CAAAD,CAAA;;;EAED,MAAME,UAAU,GAAG,CAAC,iBAAiBpD,IAAI,IAAID,WAAW,KAAK,CAAC;EAE9D,IAAI,CAACD,OAAO,EAAE;IACVsD,UAAU,CAACC,IAAI,CAAC,6BAA6BpE,OAAO,wDAAwD,CAAC;;EAGjH,IAAIgB,WAAW,EAAE;IACbmD,UAAU,CAACC,IAAI,CAAC,6BAA6BpE,OAAO,+DAA+D,CAAC;;EAGxH,MAAMqE,QAAQ,GAAG;IAAEC,GAAG,EAAE,GAAG;IAAE1D,IAAI,EAAE,IAAI;IAAE2D,KAAK,EAAE;GAAO;EACvD,MAAMC,OAAO,gBACTnE,4DACKH,KAAK,CAACH,KAAK,CAACgC,KAAK,CAACyC,OAAO,eAC1BnE,6BAACoE,QAAQ;IAACC,SAAS,EAAC,MAAM;IAACC,IAAI,EAAEN;IAAY,CAEpD;EAED,oBACIhE,yEACIA;IAAOuE,KAAK,EAAC;KAAST,UAAU,CAACU,IAAI,CAAC,IAAI,CAAC,CAAS,eACpDxE,6BAACyE,UAAU;IACPC,IAAI,EAAC,OAAO;kBACA7E,KAAK,CAACH,KAAK,CAACgC,KAAK,CAACyC,OAAO;IACrCQ,MAAM,EAAEC,WAAW,kBACf5E,6BAAC6E,WAAW,oBACJD,WAAW;MACflF,KAAK,EAAEA,KAAK;MACZoF,QAAQ,EAAEpD,KAAK;MACfjB,WAAW,EAAEA,WAAW;MACxBsE,cAAc,EAAEC,KAAK,IAAI3E,SAAS,CAACO,QAAQ,CAACqE,UAAU,CAAC,aAAa,EAAED,KAAK,CAAC;MAC5EtE,IAAI,EAAEA,IAAI;MACVwE,OAAO,EAAEF,KAAK,IAAI3E,SAAS,CAACO,QAAQ,CAACqE,UAAU,CAAC,MAAM,EAAED,KAAK,CAAC;MAC9DxE,OAAO,EAAEA,OAAO;MAChB2E,UAAU,EAAEH,KAAK,IAAI3E,SAAS,CAACO,QAAQ,CAACqE,UAAU,CAAC,SAAS,EAAED,KAAK,CAAC;MACpErE,WAAW,EAAEA,WAAW;MACxByE,cAAc,EAAEJ,KAAK,IAAI3E,SAAS,CAACO,QAAQ,CAACqE,UAAU,CAAC,aAAa,EAAED,KAAK;OAC7E,CACL;IACDjF,GAAG,EAAEA,GAAG;IACRiE,QAAQ,EAAEA,QAAQ;IAClBG,OAAO,EAAEA;IACX,CACH;AAEX;;;;"}
1
+ {"version":3,"file":"Print.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Print/Print.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { useToast } from '../../../../../../../components/Toast/Toaster';\nimport { TableRef } from '../../../../../types';\nimport { PrintDialog } from './PrintDialog';\nimport { Shortcut } from '../../../../../../../components/Shortcut/Shortcut';\nimport { getHiddenColumns } from '../../../../../useTableManager/util/columns';\n\nexport type PrintProps<TType = unknown> = {\n table: ReactTable<TType>;\n tableId: string;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Print<TType = unknown>(props: PrintProps<TType>) {\n const { table, tableId, tableRef } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const lastScrollTopRef = React.useRef<number>();\n const toast = useToast();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const { allRows, orientation, size, splitGroups } = tableMeta.printing.settings;\n\n const togglePrinting = React.useCallback(\n (enabled: boolean) => {\n tableMeta.printing.setIsPrinting(enabled);\n\n if (tableRef.current) {\n if (enabled) {\n lastScrollTopRef.current = tableRef.current.scrollTop;\n } else if (lastScrollTopRef.current !== undefined) {\n tableRef.current.scrollTop = lastScrollTopRef.current;\n lastScrollTopRef.current = undefined;\n }\n }\n },\n [tableRef.current]\n );\n\n React.useEffect(() => {\n const afterPrint = () => {\n togglePrinting(false);\n };\n\n window.addEventListener('afterprint', afterPrint);\n\n return () => {\n window.removeEventListener('afterprint', afterPrint);\n };\n }, []);\n\n const print = async () => {\n const toastRef = toast.loading(texts.table.print.loading);\n\n if (tableMeta.server.isEnabled && tableMeta.server.loadAllIfNeeded) {\n const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);\n\n try {\n await tableMeta.server.loadAllIfNeeded(\n table.getState().sorting,\n table.getState().columnFilters,\n hiddenColumns,\n tableMeta.search.enableGlobalFilter ? table.getState().globalFilter : undefined\n );\n } catch (error) {\n const errorMessage = `${texts.table.print.error}: ${error}`;\n console.error(errorMessage);\n toastRef.error(errorMessage);\n }\n }\n\n // this might close immediately if the dataset is small - this is okay\n toastRef.close();\n\n // use a timeout to let the toast close, otherwise it freezes mid animation when the print dialog opens\n setTimeout(() => {\n // do this here because Safari doesn't support the beforeprint event\n togglePrinting(true);\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n if (isSafari) {\n try {\n // Try using document.execCommand for printing in Safari\n document.execCommand('print', false, undefined);\n } catch (error) {\n // If document.execCommand fails or throws an error, fallback to window.print()\n window.print();\n }\n } else {\n // Execute window.print() for all other browsers\n window.print();\n }\n });\n });\n }, 150);\n };\n\n const printStyle = [`@page { size: ${size} ${orientation}; }`];\n\n if (!allRows) {\n printStyle.push(`table[data-taco^='table']#${tableId} tr:not([data-row-selected=\"true\"]) { display: none; }`);\n }\n\n if (splitGroups) {\n printStyle.push(`table[data-taco^='table']#${tableId} tr[data-row-group]:not(:first-child) { break-before: page; }`);\n }\n\n const shortcut = { key: 'p', meta: true, shift: false };\n const tooltip = (\n <>\n {texts.table.print.tooltip}\n <Shortcut className=\"ml-2\" keys={shortcut} />\n </>\n );\n\n return (\n <>\n <style media=\"print\">{printStyle.join('\\n')}</style>\n <IconButton\n icon=\"print\"\n aria-label={texts.table.print.tooltip}\n dialog={dialogProps => (\n <PrintDialog\n {...dialogProps}\n table={table}\n onAccept={print}\n orientation={orientation}\n setOrientation={value => tableMeta.printing.setSetting('orientation', value)}\n size={size}\n setSize={value => tableMeta.printing.setSetting('size', value)}\n allRows={allRows}\n setAllRows={value => tableMeta.printing.setSetting('allRows', value)}\n splitGroups={splitGroups}\n setSplitGroups={value => tableMeta.printing.setSetting('splitGroups', value)}\n />\n )}\n ref={ref}\n shortcut={shortcut}\n tooltip={tooltip}\n />\n </>\n );\n}\n"],"names":["Print","props","table","tableId","tableRef","texts","useLocalization","ref","React","useRef","lastScrollTopRef","toast","useToast","tableMeta","options","meta","allRows","orientation","size","splitGroups","printing","settings","togglePrinting","useCallback","enabled","setIsPrinting","current","scrollTop","undefined","useEffect","afterPrint","window","addEventListener","removeEventListener","print","toastRef","close","setTimeout","requestAnimationFrame","isSafari","test","navigator","userAgent","document","execCommand","error","loading","_temp2","server","isEnabled","loadAllIfNeeded","hiddenColumns","getHiddenColumns","getState","columnVisibility","_temp","_catch","Promise","resolve","sorting","columnFilters","search","enableGlobalFilter","globalFilter","then","errorMessage","console","_temp3","e","reject","printStyle","push","shortcut","key","shift","tooltip","Shortcut","className","keys","media","join","IconButton","icon","dialog","dialogProps","PrintDialog","onAccept","setOrientation","value","setSetting","setSize","setAllRows","setSplitGroups"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HideOrOrderPopover.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'clsx';\nimport { Table as ReactTable, Column as ReactTableColumn, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { Popover, PopoverProps } from '../../../../../../../components/Popover/Popover';\nimport { Input } from '../../../../../../../components/Input/Input';\nimport * as SortablePrimitive from '../../../../../../Sortable/Sortable';\nimport { Icon } from '../../../../../../../components/Icon/Icon';\nimport { Checkbox } from '../../../../../../../components/Checkbox/Checkbox';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { ensureOrdering, isInternalColumn } from '../../../../../useTableManager/util/columns';\n\ntype ColumnProps<TType = unknown> = React.HTMLAttributes<HTMLDivElement> & {\n column: ReactTableColumn<TType, unknown>;\n draggable?: boolean;\n};\n\nconst Column = React.forwardRef(function Column<TType = unknown>(props: ColumnProps<TType>, ref: React.Ref<HTMLDivElement>) {\n const { column, draggable = false, ...dragAttributes } = props;\n const canHide = column.getCanHide();\n\n const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {\n 'hover:bg-grey-200': canHide || draggable,\n 'hover:cursor-pointer': canHide,\n 'active:cursor-move active:bg-grey-300': draggable,\n });\n\n const attributes = draggable ? dragAttributes : undefined;\n const isVisible = column.getIsVisible();\n const parentHeader = column.parent?.columnDef?.header;\n\n return (\n <div {...attributes} className={className} onClick={() => column.toggleVisibility(!isVisible)} ref={ref}>\n {draggable ? <Icon name=\"drag\" className=\"text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5\" /> : null}\n <span className=\"flex-grow truncate\">\n {column.columnDef.meta?.header}\n {parentHeader ? <span className=\"italic\">({parentHeader})</span> : null}\n </span>\n {canHide ? <Checkbox checked={isVisible} onChange={() => column.toggleVisibility(!isVisible)} /> : null}\n </div>\n );\n});\n\nexport type HideOrOrderPopoverProps<TType = unknown> = PopoverProps & {\n table: ReactTable<TType>;\n};\n\nexport function HideOrOrderPopover<TType = unknown>(props: HideOrOrderPopoverProps<TType>) {\n const { table, trigger, ...popoverProps } = props;\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n const allColumns = table.getAllLeafColumns();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columns = React.useMemo(\n () =>\n allColumns\n .filter(column => !isInternalColumn(column.id))\n .filter(column =>\n query?.length\n ? column.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase()) ||\n column.parent?.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase())\n : true\n ),\n [allColumns, query]\n );\n\n const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';\n\n const handleReorder = (activeId, overId) => {\n if (columns.find(column => column.id === overId && column.columnDef.meta?.enableOrdering === false)) {\n return;\n }\n\n const currentOrder = table.getState().columnOrder;\n const nextOrder = ensureOrdering(\n allColumns,\n SortablePrimitive.arrayMove(\n currentOrder,\n currentOrder.findIndex(c => c === activeId),\n currentOrder.findIndex(c => c === overId)\n )\n );\n\n // update column order\n table.setColumnOrder(nextOrder);\n\n // update pinned columns - because we do index based \"freezing\" instead of just pinning, pinned state needs updating to align with ordering\n if (table.getIsSomeColumnsPinned()) {\n const currentFrozenIndex = table.getState().columnPinning.left?.length ?? -1;\n\n if (currentFrozenIndex > -1) {\n table.setColumnPinning(currentPinning => ({\n ...currentPinning,\n left: nextOrder.slice(0, currentFrozenIndex),\n }));\n }\n }\n };\n\n return (\n <Popover {...popoverProps} anchor={trigger}>\n <Popover.Content>\n <div className=\"flex min-w-[100px] max-w-sm flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table.columnSettings.search}\n value={query}\n />\n ) : null}\n {tableMeta.columnOrdering.isEnabled && columns.length && !query?.length ? (\n <SortablePrimitive.Container reorder={handleReorder}>\n <SortablePrimitive.List id=\"columns\" className={listClassName}>\n {columns\n .filter(column => !column.getIsGrouped())\n .map(column => (\n <SortablePrimitive.Item\n key={column.id}\n id={column.id}\n disabled={!column.columnDef.meta?.enableOrdering}\n asChild>\n <Column column={column as any} draggable={column.columnDef.meta?.enableOrdering} />\n </SortablePrimitive.Item>\n ))}\n </SortablePrimitive.List>\n </SortablePrimitive.Container>\n ) : (\n <div className={listClassName}>\n {columns.length\n ? columns.map(column => <Column column={column as any} key={column.id} />)\n : texts.table.columnSettings.noResults}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n"],"names":["Column","React","forwardRef","props","ref","column","draggable","dragAttributes","canHide","getCanHide","className","cn","attributes","undefined","isVisible","getIsVisible","parentHeader","_column$parent","parent","_column$parent$column","columnDef","header","onClick","toggleVisibility","Icon","name","meta","_column$columnDef$met","Checkbox","checked","onChange","HideOrOrderPopover","table","trigger","popoverProps","texts","useLocalization","query","setQuery","useState","allColumns","getAllLeafColumns","tableMeta","options","columns","useMemo","filter","isInternalColumn","id","_column$columnDef$met2","_column$parent2","_column$parent2$colum","length","toLowerCase","includes","listClassName","handleReorder","activeId","overId","find","_column$columnDef$met3","enableOrdering","currentOrder","getState","columnOrder","nextOrder","ensureOrdering","SortablePrimitive","findIndex","c","setColumnOrder","getIsSomeColumnsPinned","_table$getState$colum","_table$getState$colum2","currentFrozenIndex","columnPinning","left","setColumnPinning","currentPinning","slice","Popover","anchor","Content","enableHiding","Input","event","target","value","placeholder","columnSettings","search","columnOrdering","isEnabled","reorder","getIsGrouped","map","_column$columnDef$met4","_column$columnDef$met5","key","disabled","asChild","noResults"],"mappings":"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"}
1
+ {"version":3,"file":"HideOrOrderPopover.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'clsx';\nimport { Table as ReactTable, Column as ReactTableColumn, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { Popover, PopoverProps } from '../../../../../../../components/Popover/Popover';\nimport { Input } from '../../../../../../../components/Input/Input';\nimport * as SortablePrimitive from '../../../../../../Sortable/Sortable';\nimport { Icon } from '../../../../../../../components/Icon/Icon';\nimport { Checkbox } from '../../../../../../../components/Checkbox/Checkbox';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { ensureOrdering, isInternalColumn } from '../../../../../useTableManager/util/columns';\nimport { SortableItemId } from '../../../../../../Sortable/Sortable';\n\ntype ColumnProps<TType = unknown> = React.HTMLAttributes<HTMLDivElement> & {\n column: ReactTableColumn<TType, unknown>;\n draggable?: boolean;\n};\n\nconst Column = React.forwardRef(function Column<TType = unknown>(props: ColumnProps<TType>, ref: React.Ref<HTMLDivElement>) {\n const { column, draggable = false, ...dragAttributes } = props;\n const canHide = column.getCanHide();\n\n const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {\n 'hover:bg-grey-200': canHide || draggable,\n 'hover:cursor-pointer': canHide,\n 'active:cursor-move active:bg-grey-300': draggable,\n });\n\n const attributes = draggable ? dragAttributes : undefined;\n const isVisible = column.getIsVisible();\n const parentHeader = column.parent?.columnDef?.header;\n\n return (\n <div {...attributes} className={className} onClick={() => column.toggleVisibility(!isVisible)} ref={ref}>\n {draggable ? <Icon name=\"drag\" className=\"text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5\" /> : null}\n <span className=\"flex-grow truncate\">\n {column.columnDef.meta?.header}\n {parentHeader ? <span className=\"italic\">({parentHeader})</span> : null}\n </span>\n {canHide ? <Checkbox checked={isVisible} onChange={() => column.toggleVisibility(!isVisible)} /> : null}\n </div>\n );\n});\n\nexport type HideOrOrderPopoverProps<TType = unknown> = PopoverProps & {\n table: ReactTable<TType>;\n};\n\nexport function HideOrOrderPopover<TType = unknown>(props: HideOrOrderPopoverProps<TType>) {\n const { table, trigger, ...popoverProps } = props;\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n const allColumns = table.getAllLeafColumns();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columns = React.useMemo(\n () =>\n allColumns\n .filter(column => !isInternalColumn(column.id))\n .filter(column =>\n query?.length\n ? column.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase()) ||\n column.parent?.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase())\n : true\n ),\n [allColumns, query]\n );\n\n const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';\n\n const handleReorder = (activeId: SortableItemId, overId: SortableItemId) => {\n if (columns.find(column => column.id === overId && column.columnDef.meta?.enableOrdering === false)) {\n return;\n }\n\n const currentOrder = table.getState().columnOrder;\n const nextOrder = ensureOrdering(\n allColumns,\n SortablePrimitive.arrayMove(\n currentOrder,\n currentOrder.findIndex(c => c === activeId),\n currentOrder.findIndex(c => c === overId)\n )\n );\n\n // update column order\n table.setColumnOrder(nextOrder);\n\n // update pinned columns - because we do index based \"freezing\" instead of just pinning, pinned state needs updating to align with ordering\n if (table.getIsSomeColumnsPinned()) {\n const currentFrozenIndex = table.getState().columnPinning.left?.length ?? -1;\n\n if (currentFrozenIndex > -1) {\n table.setColumnPinning(currentPinning => ({\n ...currentPinning,\n left: nextOrder.slice(0, currentFrozenIndex),\n }));\n }\n }\n };\n\n return (\n <Popover {...popoverProps} anchor={trigger}>\n <Popover.Content>\n <div className=\"flex min-w-[100px] max-w-sm flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table.columnSettings.search}\n value={query}\n />\n ) : null}\n {tableMeta.columnOrdering.isEnabled && columns.length && !query?.length ? (\n <SortablePrimitive.Container reorder={handleReorder}>\n <SortablePrimitive.List id=\"columns\" className={listClassName}>\n {columns\n .filter(column => !column.getIsGrouped())\n .map(column => (\n <SortablePrimitive.Item\n key={column.id}\n id={column.id}\n disabled={!column.columnDef.meta?.enableOrdering}\n asChild>\n <Column column={column as any} draggable={column.columnDef.meta?.enableOrdering} />\n </SortablePrimitive.Item>\n ))}\n </SortablePrimitive.List>\n </SortablePrimitive.Container>\n ) : (\n <div className={listClassName}>\n {columns.length\n ? columns.map(column => <Column column={column as any} key={column.id} />)\n : texts.table.columnSettings.noResults}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n"],"names":["Column","React","forwardRef","props","ref","column","draggable","dragAttributes","canHide","getCanHide","className","cn","attributes","undefined","isVisible","getIsVisible","parentHeader","_column$parent","parent","_column$parent$column","columnDef","header","onClick","toggleVisibility","Icon","name","meta","_column$columnDef$met","Checkbox","checked","onChange","HideOrOrderPopover","table","trigger","popoverProps","texts","useLocalization","query","setQuery","useState","allColumns","getAllLeafColumns","tableMeta","options","columns","useMemo","filter","isInternalColumn","id","_column$columnDef$met2","_column$parent2","_column$parent2$colum","length","toLowerCase","includes","listClassName","handleReorder","activeId","overId","find","_column$columnDef$met3","enableOrdering","currentOrder","getState","columnOrder","nextOrder","ensureOrdering","SortablePrimitive","findIndex","c","setColumnOrder","getIsSomeColumnsPinned","_table$getState$colum","_table$getState$colum2","currentFrozenIndex","columnPinning","left","setColumnPinning","currentPinning","slice","Popover","anchor","Content","enableHiding","Input","event","target","value","placeholder","columnSettings","search","columnOrdering","isEnabled","reorder","getIsGrouped","map","_column$columnDef$met4","_column$columnDef$met5","key","disabled","asChild","noResults"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Settings/Settings.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { Menu } from '../../../../../../../components/Menu/Menu';\nimport { HideOrOrderPopover } from './HideOrOrderPopover';\nimport { getSettings } from '../../../../../useTableManager/util/settings';\nimport { FontSizes } from '../../../../../../../types';\nimport { IconName } from '../../../../../../../components/Icon/Icon';\nimport { TableCustomSettingsRenderer } from '../../../../../types';\n\nexport type SettingsProps<TType = unknown> = {\n customSettings?: TableCustomSettingsRenderer;\n table: ReactTable<TType>;\n};\n\nexport function Settings<TType = unknown>(props: SettingsProps<TType>) {\n const { customSettings, table } = props;\n const { texts } = useLocalization();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const canHideOrOrder = table.options.enableHiding || tableMeta.columnOrdering.isEnabled;\n const canChangeFontSize = tableMeta.fontSize.isEnabled;\n const canChangeRowHeight = tableMeta.rowHeight.isEnabled;\n\n const [popover, setPopover] = React.useState<string | undefined>(undefined);\n\n let popoverElement;\n\n if (popover) {\n const handleClosePopover = () => setPopover(undefined);\n\n switch (popover) {\n case 'columnSettings': {\n if (canHideOrOrder) {\n popoverElement = popoverProps => (\n <HideOrOrderPopover {...popoverProps} open onChange={handleClosePopover} table={table} />\n );\n }\n }\n }\n }\n\n return (\n <IconButton\n aria-label={texts.table.otherOptions.tooltip}\n icon=\"sliders\"\n menu={\n popoverElement\n ? undefined\n : menuProps => (\n <Menu {...menuProps}>\n <Menu.Content align=\"end\">\n {canHideOrOrder ? (\n <Menu.Item icon=\"columns\" onClick={() => setPopover('columnSettings')}>\n {texts.table.columnSettings.button}\n </Menu.Item>\n ) : null}\n {canHideOrOrder && (canChangeRowHeight || canChangeFontSize || customSettings) ? (\n <Menu.Separator />\n ) : null}\n {canChangeRowHeight ? (\n <Menu.Item\n icon={`height-${tableMeta.rowHeight.height}` as IconName}\n subMenu={() => <RowHeightMenuItem tableMeta={tableMeta} />}>\n {texts.table.rowHeight.tooltip}\n </Menu.Item>\n ) : null}\n {canChangeFontSize ? (\n <Menu.Item icon=\"font-size\" subMenu={() => <FontSizeMenuItem tableMeta={tableMeta} />}>\n {texts.table.fontSize.tooltip}\n </Menu.Item>\n ) : null}\n\n {customSettings ? (\n <>\n {canChangeRowHeight || canChangeFontSize ? <Menu.Separator /> : null}\n {customSettings(getSettings(table)).map((item, index) => (\n <React.Fragment key={index}>{item}</React.Fragment>\n ))}\n </>\n ) : null}\n </Menu.Content>\n </Menu>\n )\n }\n popover={popoverElement}\n onClickCapture={event => event.preventDefault()}\n tooltip={texts.table.otherOptions.tooltip}\n />\n );\n}\n\nfunction FontSizeMenuItem<TType = unknown>({ tableMeta }: { tableMeta: ReactTableMeta<TType> }) {\n const { texts } = useLocalization();\n\n return (\n <Menu.SubMenu>\n <Menu.RadioGroup onChange={tableMeta.fontSize.setSize as any} value={tableMeta.fontSize.size}>\n <Menu.RadioGroup.Item value={FontSizes.small}>{texts.table.fontSize.sizes.small}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value={FontSizes.medium}>{texts.table.fontSize.sizes.medium}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item disabled={tableMeta.rowHeight.height === 'short'} value={FontSizes.large}>\n {texts.table.fontSize.sizes.large}\n </Menu.RadioGroup.Item>\n </Menu.RadioGroup>\n </Menu.SubMenu>\n );\n}\n\nfunction RowHeightMenuItem<TType = unknown>({ tableMeta }: { tableMeta: ReactTableMeta<TType> }) {\n const { texts } = useLocalization();\n\n return (\n <Menu.SubMenu>\n <Menu.RadioGroup onChange={tableMeta.rowHeight.setHeight as any} value={tableMeta.rowHeight.height}>\n <Menu.RadioGroup.Item value=\"short\">{texts.table.rowHeight.sizes.short}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"medium\">{texts.table.rowHeight.sizes.medium}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"tall\">{texts.table.rowHeight.sizes.tall}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"extra-tall\">{texts.table.rowHeight.sizes.extraTall}</Menu.RadioGroup.Item>\n </Menu.RadioGroup>\n </Menu.SubMenu>\n );\n}\n"],"names":["Settings","props","customSettings","table","texts","useLocalization","tableMeta","options","meta","canHideOrOrder","enableHiding","columnOrdering","isEnabled","canChangeFontSize","fontSize","canChangeRowHeight","rowHeight","popover","setPopover","React","useState","undefined","popoverElement","handleClosePopover","popoverProps","HideOrOrderPopover","open","onChange","IconButton","otherOptions","tooltip","icon","menu","menuProps","Menu","Content","align","Item","onClick","columnSettings","button","Separator","height","subMenu","RowHeightMenuItem","FontSizeMenuItem","getSettings","map","item","index","Fragment","key","onClickCapture","event","preventDefault","SubMenu","RadioGroup","setSize","value","size","FontSizes","small","sizes","medium","disabled","large","setHeight","short","tall","extraTall"],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sources":["../../../../../../../../../../../../src/primitives/Table/Core/components/Toolbar/components/Settings/Settings.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { IconButton } from '../../../../../../../components/IconButton/IconButton';\nimport { useLocalization } from '../../../../../../../components/Provider/Localization';\nimport { Menu } from '../../../../../../../components/Menu/Menu';\nimport { HideOrOrderPopover } from './HideOrOrderPopover';\nimport { getSettings } from '../../../../../useTableManager/util/settings';\nimport { FontSizes } from '../../../../../../../types';\nimport { IconName } from '../../../../../../../components/Icon/Icon';\nimport { TableCustomSettingsRenderer } from '../../../../../types';\nimport { PopoverProps } from '../../../../../../../components/Popover/Popover';\n\nexport type SettingsProps<TType = unknown> = {\n customSettings?: TableCustomSettingsRenderer;\n table: ReactTable<TType>;\n};\n\nexport function Settings<TType = unknown>(props: SettingsProps<TType>) {\n const { customSettings, table } = props;\n const { texts } = useLocalization();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const canHideOrOrder = table.options.enableHiding || tableMeta.columnOrdering.isEnabled;\n const canChangeFontSize = tableMeta.fontSize.isEnabled;\n const canChangeRowHeight = tableMeta.rowHeight.isEnabled;\n\n const [popover, setPopover] = React.useState<string | undefined>(undefined);\n\n let popoverElement;\n\n if (popover) {\n const handleClosePopover = () => setPopover(undefined);\n\n switch (popover) {\n case 'columnSettings': {\n if (canHideOrOrder) {\n popoverElement = (popoverProps: PopoverProps) => (\n <HideOrOrderPopover {...popoverProps} open onChange={handleClosePopover} table={table} />\n );\n }\n }\n }\n }\n\n return (\n <IconButton\n aria-label={texts.table.otherOptions.tooltip}\n icon=\"sliders\"\n menu={\n popoverElement\n ? undefined\n : menuProps => (\n <Menu {...menuProps}>\n <Menu.Content align=\"end\">\n {canHideOrOrder ? (\n <Menu.Item icon=\"columns\" onClick={() => setPopover('columnSettings')}>\n {texts.table.columnSettings.button}\n </Menu.Item>\n ) : null}\n {canHideOrOrder && (canChangeRowHeight || canChangeFontSize || customSettings) ? (\n <Menu.Separator />\n ) : null}\n {canChangeRowHeight ? (\n <Menu.Item\n icon={`height-${tableMeta.rowHeight.height}` as IconName}\n subMenu={() => <RowHeightMenuItem tableMeta={tableMeta} />}>\n {texts.table.rowHeight.tooltip}\n </Menu.Item>\n ) : null}\n {canChangeFontSize ? (\n <Menu.Item icon=\"font-size\" subMenu={() => <FontSizeMenuItem tableMeta={tableMeta} />}>\n {texts.table.fontSize.tooltip}\n </Menu.Item>\n ) : null}\n\n {customSettings ? (\n <>\n {canChangeRowHeight || canChangeFontSize ? <Menu.Separator /> : null}\n {customSettings(getSettings(table)).map((item, index) => (\n <React.Fragment key={index}>{item}</React.Fragment>\n ))}\n </>\n ) : null}\n </Menu.Content>\n </Menu>\n )\n }\n popover={popoverElement}\n onClickCapture={event => event.preventDefault()}\n tooltip={texts.table.otherOptions.tooltip}\n />\n );\n}\n\nfunction FontSizeMenuItem<TType = unknown>({ tableMeta }: { tableMeta: ReactTableMeta<TType> }) {\n const { texts } = useLocalization();\n\n return (\n <Menu.SubMenu>\n <Menu.RadioGroup onChange={tableMeta.fontSize.setSize as any} value={tableMeta.fontSize.size}>\n <Menu.RadioGroup.Item value={FontSizes.small}>{texts.table.fontSize.sizes.small}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value={FontSizes.medium}>{texts.table.fontSize.sizes.medium}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item disabled={tableMeta.rowHeight.height === 'short'} value={FontSizes.large}>\n {texts.table.fontSize.sizes.large}\n </Menu.RadioGroup.Item>\n </Menu.RadioGroup>\n </Menu.SubMenu>\n );\n}\n\nfunction RowHeightMenuItem<TType = unknown>({ tableMeta }: { tableMeta: ReactTableMeta<TType> }) {\n const { texts } = useLocalization();\n\n return (\n <Menu.SubMenu>\n <Menu.RadioGroup onChange={tableMeta.rowHeight.setHeight as any} value={tableMeta.rowHeight.height}>\n <Menu.RadioGroup.Item value=\"short\">{texts.table.rowHeight.sizes.short}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"medium\">{texts.table.rowHeight.sizes.medium}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"tall\">{texts.table.rowHeight.sizes.tall}</Menu.RadioGroup.Item>\n <Menu.RadioGroup.Item value=\"extra-tall\">{texts.table.rowHeight.sizes.extraTall}</Menu.RadioGroup.Item>\n </Menu.RadioGroup>\n </Menu.SubMenu>\n );\n}\n"],"names":["Settings","props","customSettings","table","texts","useLocalization","tableMeta","options","meta","canHideOrOrder","enableHiding","columnOrdering","isEnabled","canChangeFontSize","fontSize","canChangeRowHeight","rowHeight","popover","setPopover","React","useState","undefined","popoverElement","handleClosePopover","popoverProps","HideOrOrderPopover","open","onChange","IconButton","otherOptions","tooltip","icon","menu","menuProps","Menu","Content","align","Item","onClick","columnSettings","button","Separator","height","subMenu","RowHeightMenuItem","FontSizeMenuItem","getSettings","map","item","index","Fragment","key","onClickCapture","event","preventDefault","SubMenu","RadioGroup","setSize","value","size","FontSizes","small","sizes","medium","disabled","large","setHeight","short","tall","extraTall"],"mappings":"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"}
@@ -28,6 +28,8 @@ function getPaddingEndOffset(table, options) {
28
28
  const bottomRows = (_table$getBottomRows = table.getBottomRows()) !== null && _table$getBottomRows !== void 0 ? _table$getBottomRows : [];
29
29
  return ROW_HEIGHT_ESTIMATES.medium * ((_options$virtualiserP = options === null || options === void 0 ? void 0 : options.virtualiserPaddingEndOffset) !== null && _options$virtualiserP !== void 0 ? _options$virtualiserP : 1) * bottomRows.length;
30
30
  }
31
+ // A higher number ensure less scroll jumping for dynamic row heights, but too high can reduce performance. 8 worked well
32
+ const OVERSCAN_ROW_COUNT = 8;
31
33
  function useTableRenderer(renderers, table, tableRef, length, defaultRowActiveIndex, options) {
32
34
  var _table$getState$group, _table$getCenterRows, _virtualItems$padding, _virtualItems$padding2, _virtualItems$padding3, _virtualItems$end, _virtualItems;
33
35
  const tableMeta = table.options.meta;
@@ -44,7 +46,7 @@ function useTableRenderer(renderers, table, tableRef, length, defaultRowActiveIn
44
46
  return tableMeta.rowHeight.height ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] : ROW_HEIGHT_ESTIMATES.medium;
45
47
  },
46
48
  getScrollElement: () => tableRef.current,
47
- overscan: tableMeta.printing.isPrinting ? count : 8,
49
+ overscan: tableMeta.printing.isPrinting ? count : OVERSCAN_ROW_COUNT,
48
50
  rangeExtractor,
49
51
  // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list
50
52
  scrollPaddingStart,
@@ -1 +1 @@
1
- {"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta, Row as ReactTableRow } from '@tanstack/react-table';\nimport { useVirtualizer, defaultRangeExtractor, ScrollToOptions as ReactVirtualScrollToOptions } from '@tanstack/react-virtual';\nimport { ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers, useTableRenderOptions } from '../types';\nimport { TableRef } from '../../types';\nimport { SkeletonRow } from '../components/Row/BuiltIns/SkeletonRow';\n\n// scroll padding end is designed to always show half of the next row\nfunction getScrollPaddingEndOffset<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n let offset = 2;\n\n if (tableMeta.footer.isEnabled) {\n offset += 1;\n }\n\n if (table.getHeaderGroups().length > 1) {\n offset += table.getHeaderGroups().length - 1;\n }\n\n let height = ROW_HEIGHT_ESTIMATES.medium * offset;\n\n const bottomRows = table.getBottomRows();\n\n if (bottomRows.length) {\n // 1.4 offsets for half rows and also accounts for increased row heights (which is likely in pinned rows)\n height += ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] * 1.4 * bottomRows.length;\n }\n\n return height;\n}\n\n// scroll padding end is designed to always show half of the next row\nfunction getPaddingEndOffset<TType = unknown>(table: ReactTable<TType>, options?: useTableRenderOptions) {\n const bottomRows = table.getBottomRows() ?? [];\n return ROW_HEIGHT_ESTIMATES.medium * (options?.virtualiserPaddingEndOffset ?? 1) * bottomRows.length;\n}\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n length: number,\n defaultRowActiveIndex?: number | undefined,\n options?: useTableRenderOptions\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isTableRowGrouped = !!table.getState().grouping?.length;\n const rows = table.getCenterRows() ?? [];\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n // account for thead and tfoot in the scroll area - both are always medium row height\n const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;\n\n const count = tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 ? length : rows.length;\n\n const virtualiser = useVirtualizer({\n count,\n estimateSize: () => {\n return tableMeta.rowHeight.height ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] : ROW_HEIGHT_ESTIMATES.medium;\n },\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? count : 8,\n rangeExtractor,\n // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list\n scrollPaddingStart,\n scrollPaddingEnd: getScrollPaddingEndOffset(table),\n paddingEnd: getPaddingEndOffset(table, options),\n });\n\n React.useEffect(() => {\n virtualiser.measure();\n }, [table.getState().expanded]);\n\n const totalSize = virtualiser.getTotalSize();\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index === count - 1) {\n // sometimes the last row doesn't fully show, so we just force scroll to the bottom\n tableRef.current.scrollTop = tableRef.current.scrollHeight;\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current, totalSize, count]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableRowGrouped && count > 1 ? 1 : 0;\n\n const startValue = isTableRowGrouped\n ? virtualItems[paddingStartIndex]?.start - virtualItems[paddingStartIndex]?.size\n : virtualItems[paddingStartIndex]?.start;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [Math.max(0, startValue ?? 0), Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0))]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n // bottom rows aren't virtualised (they're sticky) but we need to set the height\n if (count || table.getBottomRows().length) {\n style = {\n height: totalSize,\n paddingBottom: isNaN(paddingBottom) ? 0 : paddingBottom,\n paddingTop: isNaN(paddingTop) ? 0 : paddingTop,\n };\n }\n\n // only render non sticky rows\n if (count) {\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n let row: ReactTableRow<TType> | undefined;\n\n if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2) {\n const currentPageIndex =\n (Math.floor(virtualRow.index / tableMeta.server.pageSize) * tableMeta.server.pageSize) /\n tableMeta.server.pageSize;\n const pagePosition = tableMeta.server.pages?.indexOf(currentPageIndex) ?? -1;\n\n if (pagePosition > -1) {\n // \"flatten\" row indexes down into the dataloader2 dataset size\n // for example, with a page size of 100...\n // row index 14267 is actually one of index 67, 167, 267 etc within the dataset (depending on number of pages stored)\n const fakeIndex = pagePosition * tableMeta.server.pageSize + (virtualRow.index % tableMeta.server.pageSize);\n row = rows[fakeIndex];\n }\n } else {\n row = rows[virtualRow.index];\n }\n\n if (!row?.original) {\n return (\n <SkeletonRow\n key={virtualRow.index}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n />\n );\n }\n\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n measureRow={virtualiser.resizeItem}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n range => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["getScrollPaddingEndOffset","table","tableMeta","options","meta","offset","footer","isEnabled","getHeaderGroups","length","height","ROW_HEIGHT_ESTIMATES","medium","bottomRows","getBottomRows","rowHeight","getPaddingEndOffset","_table$getBottomRows","_options$virtualiserP","virtualiserPaddingEndOffset","useTableRenderer","renderers","tableRef","defaultRowActiveIndex","isTableRowGrouped","_table$getState$group","getState","grouping","rows","_table$getCenterRows","getCenterRows","rangeExtractor","useRowGroupVirtualisation","scrollPaddingStart","count","server","_experimentalDataLoader2","virtualiser","useVirtualizer","estimateSize","getScrollElement","current","overscan","printing","isPrinting","scrollPaddingEnd","paddingEnd","React","useEffect","measure","expanded","totalSize","getTotalSize","virtualItems","getVirtualItems","scrollToIndex","useCallback","index","align","behavior","notSmooth","scrollToOffset","scrollTop","scrollHeight","paddingStartIndex","startValue","_virtualItems$padding","start","_virtualItems$padding2","size","_virtualItems$padding3","paddingTop","paddingBottom","Math","max","_virtualItems$end","_virtualItems","end","style","content","isNaN","map","virtualRow","row","_tableMeta$server$pag","_tableMeta$server$pag2","currentPageIndex","floor","pageSize","pagePosition","pages","indexOf","fakeIndex","_row","original","_virtualiser$scrollDi","SkeletonRow","key","scrollDirection","undefined","Row","id","_virtualiser$scrollDi2","measureRow","resizeItem","renderer","cellRenderer","cell","getRowModel","isTableGrouped","rowGroupIndexes","useMemo","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort","a","b"],"mappings":"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"}
1
+ {"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta, Row as ReactTableRow } from '@tanstack/react-table';\nimport {\n useVirtualizer,\n defaultRangeExtractor,\n ScrollToOptions as ReactVirtualScrollToOptions,\n Range,\n} from '@tanstack/react-virtual';\nimport { ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers, useTableRenderOptions } from '../types';\nimport { TableRef } from '../../types';\nimport { SkeletonRow } from '../components/Row/BuiltIns/SkeletonRow';\n\n// scroll padding end is designed to always show half of the next row\nfunction getScrollPaddingEndOffset<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n let offset = 2;\n\n if (tableMeta.footer.isEnabled) {\n offset += 1;\n }\n\n if (table.getHeaderGroups().length > 1) {\n offset += table.getHeaderGroups().length - 1;\n }\n\n let height = ROW_HEIGHT_ESTIMATES.medium * offset;\n\n const bottomRows = table.getBottomRows();\n\n if (bottomRows.length) {\n // 1.4 offsets for half rows and also accounts for increased row heights (which is likely in pinned rows)\n height += ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] * 1.4 * bottomRows.length;\n }\n\n return height;\n}\n\n// scroll padding end is designed to always show half of the next row\nfunction getPaddingEndOffset<TType = unknown>(table: ReactTable<TType>, options?: useTableRenderOptions) {\n const bottomRows = table.getBottomRows() ?? [];\n return ROW_HEIGHT_ESTIMATES.medium * (options?.virtualiserPaddingEndOffset ?? 1) * bottomRows.length;\n}\n\n// A higher number ensure less scroll jumping for dynamic row heights, but too high can reduce performance. 8 worked well\nconst OVERSCAN_ROW_COUNT = 8;\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n length: number,\n defaultRowActiveIndex?: number | undefined,\n options?: useTableRenderOptions\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isTableRowGrouped = !!table.getState().grouping?.length;\n const rows = table.getCenterRows() ?? [];\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n // account for thead and tfoot in the scroll area - both are always medium row height\n const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;\n\n const count = tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 ? length : rows.length;\n\n const virtualiser = useVirtualizer({\n count,\n estimateSize: () => {\n return tableMeta.rowHeight.height ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] : ROW_HEIGHT_ESTIMATES.medium;\n },\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? count : OVERSCAN_ROW_COUNT,\n rangeExtractor,\n // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list\n scrollPaddingStart,\n scrollPaddingEnd: getScrollPaddingEndOffset(table),\n paddingEnd: getPaddingEndOffset(table, options),\n });\n\n React.useEffect(() => {\n virtualiser.measure();\n }, [table.getState().expanded]);\n\n const totalSize = virtualiser.getTotalSize();\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index === count - 1) {\n // sometimes the last row doesn't fully show, so we just force scroll to the bottom\n tableRef.current.scrollTop = tableRef.current.scrollHeight;\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current, totalSize, count]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableRowGrouped && count > 1 ? 1 : 0;\n\n const startValue = isTableRowGrouped\n ? virtualItems[paddingStartIndex]?.start - virtualItems[paddingStartIndex]?.size\n : virtualItems[paddingStartIndex]?.start;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [Math.max(0, startValue ?? 0), Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0))]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n // bottom rows aren't virtualised (they're sticky) but we need to set the height\n if (count || table.getBottomRows().length) {\n style = {\n height: totalSize,\n paddingBottom: isNaN(paddingBottom) ? 0 : paddingBottom,\n paddingTop: isNaN(paddingTop) ? 0 : paddingTop,\n };\n }\n\n // only render non sticky rows\n if (count) {\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n let row: ReactTableRow<TType> | undefined;\n\n if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2) {\n const currentPageIndex =\n (Math.floor(virtualRow.index / tableMeta.server.pageSize) * tableMeta.server.pageSize) /\n tableMeta.server.pageSize;\n const pagePosition = tableMeta.server.pages?.indexOf(currentPageIndex) ?? -1;\n\n if (pagePosition > -1) {\n // \"flatten\" row indexes down into the dataloader2 dataset size\n // for example, with a page size of 100...\n // row index 14267 is actually one of index 67, 167, 267 etc within the dataset (depending on number of pages stored)\n const fakeIndex = pagePosition * tableMeta.server.pageSize + (virtualRow.index % tableMeta.server.pageSize);\n row = rows[fakeIndex];\n }\n } else {\n row = rows[virtualRow.index];\n }\n\n if (!row?.original) {\n return (\n <SkeletonRow\n key={virtualRow.index}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n />\n );\n }\n\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n measureRow={virtualiser.resizeItem}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n (range: Range) => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["getScrollPaddingEndOffset","table","tableMeta","options","meta","offset","footer","isEnabled","getHeaderGroups","length","height","ROW_HEIGHT_ESTIMATES","medium","bottomRows","getBottomRows","rowHeight","getPaddingEndOffset","_table$getBottomRows","_options$virtualiserP","virtualiserPaddingEndOffset","OVERSCAN_ROW_COUNT","useTableRenderer","renderers","tableRef","defaultRowActiveIndex","isTableRowGrouped","_table$getState$group","getState","grouping","rows","_table$getCenterRows","getCenterRows","rangeExtractor","useRowGroupVirtualisation","scrollPaddingStart","count","server","_experimentalDataLoader2","virtualiser","useVirtualizer","estimateSize","getScrollElement","current","overscan","printing","isPrinting","scrollPaddingEnd","paddingEnd","React","useEffect","measure","expanded","totalSize","getTotalSize","virtualItems","getVirtualItems","scrollToIndex","useCallback","index","align","behavior","notSmooth","scrollToOffset","scrollTop","scrollHeight","paddingStartIndex","startValue","_virtualItems$padding","start","_virtualItems$padding2","size","_virtualItems$padding3","paddingTop","paddingBottom","Math","max","_virtualItems$end","_virtualItems","end","style","content","isNaN","map","virtualRow","row","_tableMeta$server$pag","_tableMeta$server$pag2","currentPageIndex","floor","pageSize","pagePosition","pages","indexOf","fakeIndex","_row","original","_virtualiser$scrollDi","SkeletonRow","key","scrollDirection","undefined","Row","id","_virtualiser$scrollDi2","measureRow","resizeItem","renderer","cellRenderer","cell","getRowModel","isTableGrouped","rowGroupIndexes","useMemo","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort","a","b"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\n\nexport const DEFAULT_PAGE_SIZE = 100;\n\nexport type useTableDataPageFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderOptions = { pageSize: number };\n\nexport type useTableDataLoaderValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n};\n\nexport function useTableDataLoader<TType = unknown>(\n fetchPage: useTableDataPageFetcher<TType>,\n fetchAll: useTableDataAllFetcher<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues<TType>, () => void] {\n const { pageSize } = options;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number | undefined>(undefined);\n // data will be filled after the first request, then we'll update values in place\n const [data, setData] = React.useState<any[]>([]);\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string>();\n const _lastUsedHiddenColumns = React.useRef<string[]>([]);\n const _lastUsedPageIndex = React.useRef<number>();\n const _forceReset = React.useRef(false);\n\n const loadPage = async (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n ) => {\n let reset = false;\n\n // sorting or filters changed, reset everything\n if (\n _forceReset.current ||\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)\n ) {\n _pendingPageRequests.current = {};\n // nuke the dataset so that we \"start again\" after sorting\n reset = true;\n }\n\n if (_pendingPageRequests.current[pageIndex]) {\n // if page is already loaded/loading, abort, otherwise mark it as loading\n return;\n } else {\n _pendingPageRequests.current[pageIndex] = true;\n }\n\n _forceReset.current = false;\n // set the last page loaded (or tried to load), so that we can load it back again after resets\n _lastUsedPageIndex.current = pageIndex;\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns);\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n let nextData;\n\n // reset table state if:\n // - the length isn't set at all (first load)\n // - the client length and server length are different (the data changed)\n if (reset || length.current !== response.length) {\n length.current = response.length;\n nextData = Array(length.current).fill(undefined);\n } else {\n nextData = [...currentData];\n }\n\n const startIndex = pageIndex * pageSize;\n nextData.splice(startIndex, pageSize, ...response.data);\n return nextData;\n });\n } catch {\n //\n } finally {\n _pendingPageRequests.current[pageIndex] = false;\n }\n };\n\n const loadAll = async (sorting: TableColumnSort[], filters: TableColumnFilter[], hiddenColumns: string[]) => {\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchAll(sorting, filters, hiddenColumns);\n length.current = response.length;\n\n setData(() => {\n let nextData;\n\n if (response.data.length !== response.length) {\n nextData = Array(response.length).fill(undefined);\n nextData.splice(0, response.data.length, ...response.data);\n } else {\n nextData = [...response.data];\n }\n\n return nextData;\n });\n } catch {\n //\n }\n };\n\n const invalidate = async () => {\n // empties the entire data array\n _forceReset.current = true;\n\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(\n _lastUsedPageIndex.current ?? 0,\n _lastUsedSorting.current,\n _lastUsedFilters.current,\n _lastUsedHiddenColumns.current\n );\n }\n };\n\n // search works client side - it fetches all then works client side - so these handlers are a little \"weird\"\n // if a search is currently \"active\", we need to re load all because\n const handleSort = async (sorting: TableColumnSort[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n }\n };\n const handleFilter = async (filters: TableColumnFilter[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, _lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n }\n };\n const handleSearch = async (search: string | undefined) => {\n // set the search so we can track if it changed between loads\n _lastUsedSearch.current = search || undefined;\n // search works client side, and focusing the search field triggers a load of all so we don't actually\n // want to load anything when search gets changed, we just store the value for other handlers\n };\n\n return [\n {\n data,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n },\n invalidate,\n ];\n}\n"],"names":["DEFAULT_PAGE_SIZE","useTableDataLoader","fetchPage","fetchAll","options","pageSize","length","React","useRef","undefined","data","setData","useState","_pendingPageRequests","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","_lastUsedHiddenColumns","_lastUsedPageIndex","_forceReset","loadPage","pageIndex","sorting","filters","hiddenColumns","reset","current","JSON","stringify","Promise","resolve","_temp","_finallyRethrows","_catch","then","response","currentData","nextData","Array","fill","startIndex","splice","_wasThrown","_result","e","reject","loadAll","_temp2","invalidate","_lastUsedPageIndex$cu","handleSort","_lastUsedPageIndex$cu2","handleFilter","_lastUsedPageIndex$cu3","handleSearch","search","onChangeFilter","onChangeSearch","onChangeSort"],"mappings":"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"}
1
+ {"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\n\nexport const DEFAULT_PAGE_SIZE = 100;\n\nexport type useTableDataPageFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderOptions = { pageSize: number };\n\nexport type useTableDataLoaderValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n};\n\nexport function useTableDataLoader<TType = unknown>(\n fetchPage: useTableDataPageFetcher<TType>,\n fetchAll: useTableDataAllFetcher<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues<TType>, () => void] {\n const { pageSize } = options;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number | undefined>(undefined);\n // data will be filled after the first request, then we'll update values in place\n const [data, setData] = React.useState<any[]>([]);\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef<Record<number, boolean>>({});\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string>();\n const _lastUsedHiddenColumns = React.useRef<string[]>([]);\n const _lastUsedPageIndex = React.useRef<number>();\n const _forceReset = React.useRef(false);\n\n const loadPage = async (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n ) => {\n let reset = false;\n\n // sorting or filters changed, reset everything\n if (\n _forceReset.current ||\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)\n ) {\n _pendingPageRequests.current = {};\n // nuke the dataset so that we \"start again\" after sorting\n reset = true;\n }\n\n if (_pendingPageRequests.current[pageIndex]) {\n // if page is already loaded/loading, abort, otherwise mark it as loading\n return;\n } else {\n _pendingPageRequests.current[pageIndex] = true;\n }\n\n _forceReset.current = false;\n // set the last page loaded (or tried to load), so that we can load it back again after resets\n _lastUsedPageIndex.current = pageIndex;\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns);\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n let nextData;\n\n // reset table state if:\n // - the length isn't set at all (first load)\n // - the client length and server length are different (the data changed)\n if (reset || length.current !== response.length) {\n length.current = response.length;\n nextData = Array(length.current).fill(undefined);\n } else {\n nextData = [...currentData];\n }\n\n const startIndex = pageIndex * pageSize;\n nextData.splice(startIndex, pageSize, ...response.data);\n return nextData;\n });\n } catch {\n //\n } finally {\n _pendingPageRequests.current[pageIndex] = false;\n }\n };\n\n const loadAll = async (sorting: TableColumnSort[], filters: TableColumnFilter[], hiddenColumns: string[]) => {\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchAll(sorting, filters, hiddenColumns);\n length.current = response.length;\n\n setData(() => {\n let nextData;\n\n if (response.data.length !== response.length) {\n nextData = Array(response.length).fill(undefined);\n nextData.splice(0, response.data.length, ...response.data);\n } else {\n nextData = [...response.data];\n }\n\n return nextData;\n });\n } catch {\n //\n }\n };\n\n const invalidate = async () => {\n // empties the entire data array\n _forceReset.current = true;\n\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(\n _lastUsedPageIndex.current ?? 0,\n _lastUsedSorting.current,\n _lastUsedFilters.current,\n _lastUsedHiddenColumns.current\n );\n }\n };\n\n // search works client side - it fetches all then works client side - so these handlers are a little \"weird\"\n // if a search is currently \"active\", we need to re load all because\n const handleSort = async (sorting: TableColumnSort[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n }\n };\n const handleFilter = async (filters: TableColumnFilter[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, _lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n }\n };\n const handleSearch = async (search: string | undefined) => {\n // set the search so we can track if it changed between loads\n _lastUsedSearch.current = search || undefined;\n // search works client side, and focusing the search field triggers a load of all so we don't actually\n // want to load anything when search gets changed, we just store the value for other handlers\n };\n\n return [\n {\n data,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n },\n invalidate,\n ];\n}\n"],"names":["DEFAULT_PAGE_SIZE","useTableDataLoader","fetchPage","fetchAll","options","pageSize","length","React","useRef","undefined","data","setData","useState","_pendingPageRequests","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","_lastUsedHiddenColumns","_lastUsedPageIndex","_forceReset","loadPage","pageIndex","sorting","filters","hiddenColumns","reset","current","JSON","stringify","Promise","resolve","_temp","_finallyRethrows","_catch","then","response","currentData","nextData","Array","fill","startIndex","splice","_wasThrown","_result","e","reject","loadAll","_temp2","invalidate","_lastUsedPageIndex$cu","handleSort","_lastUsedPageIndex$cu2","handleFilter","_lastUsedPageIndex$cu3","handleSearch","search","onChangeFilter","onChangeSearch","onChangeSort"],"mappings":"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"}