@jmruthers/pace-core 0.5.81 → 0.5.83

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 (114) hide show
  1. package/dist/{DataTable-OBT663FS.js → DataTable-7NVDMWPY.js} +2 -2
  2. package/dist/{chunk-3FV24IOD.js → chunk-IGMNHF3A.js} +2 -2
  3. package/dist/{chunk-CACHCRZS.js → chunk-JAA6F35O.js} +109 -12
  4. package/dist/{chunk-CACHCRZS.js.map → chunk-JAA6F35O.js.map} +1 -1
  5. package/dist/components.js +2 -2
  6. package/dist/index.js +2 -2
  7. package/dist/utils.js +1 -1
  8. package/docs/api/classes/ColumnFactory.md +1 -1
  9. package/docs/api/classes/ErrorBoundary.md +1 -1
  10. package/docs/api/classes/InvalidScopeError.md +1 -1
  11. package/docs/api/classes/MissingUserContextError.md +1 -1
  12. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  13. package/docs/api/classes/PermissionDeniedError.md +1 -1
  14. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  15. package/docs/api/classes/RBACAuditManager.md +1 -1
  16. package/docs/api/classes/RBACCache.md +1 -1
  17. package/docs/api/classes/RBACEngine.md +1 -1
  18. package/docs/api/classes/RBACError.md +1 -1
  19. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  20. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  21. package/docs/api/classes/StorageUtils.md +1 -1
  22. package/docs/api/enums/FileCategory.md +1 -1
  23. package/docs/api/interfaces/AggregateConfig.md +1 -1
  24. package/docs/api/interfaces/ButtonProps.md +1 -1
  25. package/docs/api/interfaces/CardProps.md +1 -1
  26. package/docs/api/interfaces/ColorPalette.md +1 -1
  27. package/docs/api/interfaces/ColorShade.md +1 -1
  28. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  29. package/docs/api/interfaces/DataRecord.md +1 -1
  30. package/docs/api/interfaces/DataTableAction.md +1 -1
  31. package/docs/api/interfaces/DataTableColumn.md +1 -1
  32. package/docs/api/interfaces/DataTableProps.md +1 -1
  33. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  34. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  35. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  36. package/docs/api/interfaces/EventLogoProps.md +1 -1
  37. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  38. package/docs/api/interfaces/FileMetadata.md +1 -1
  39. package/docs/api/interfaces/FileReference.md +1 -1
  40. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  41. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  42. package/docs/api/interfaces/FileUploadProps.md +1 -1
  43. package/docs/api/interfaces/FooterProps.md +1 -1
  44. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  45. package/docs/api/interfaces/InputProps.md +1 -1
  46. package/docs/api/interfaces/LabelProps.md +1 -1
  47. package/docs/api/interfaces/LoginFormProps.md +1 -1
  48. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  49. package/docs/api/interfaces/NavigationContextType.md +1 -1
  50. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  51. package/docs/api/interfaces/NavigationItem.md +1 -1
  52. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  53. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  54. package/docs/api/interfaces/Organisation.md +1 -1
  55. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  56. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  57. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  58. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  59. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  60. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  61. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  62. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  63. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  64. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  65. package/docs/api/interfaces/PaletteData.md +1 -1
  66. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  67. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  68. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  69. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  70. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  71. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  72. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  73. package/docs/api/interfaces/RBACConfig.md +1 -1
  74. package/docs/api/interfaces/RBACLogger.md +1 -1
  75. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  76. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  77. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  78. package/docs/api/interfaces/RouteConfig.md +1 -1
  79. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  80. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  81. package/docs/api/interfaces/StorageConfig.md +1 -1
  82. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  83. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  84. package/docs/api/interfaces/StorageListOptions.md +1 -1
  85. package/docs/api/interfaces/StorageListResult.md +1 -1
  86. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  87. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  88. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  89. package/docs/api/interfaces/StyleImport.md +1 -1
  90. package/docs/api/interfaces/SwitchProps.md +1 -1
  91. package/docs/api/interfaces/ToastActionElement.md +1 -1
  92. package/docs/api/interfaces/ToastProps.md +1 -1
  93. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  94. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  95. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  96. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  97. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  98. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  99. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  100. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  101. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  102. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  103. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  104. package/docs/api/interfaces/UserEventAccess.md +1 -1
  105. package/docs/api/interfaces/UserMenuProps.md +1 -1
  106. package/docs/api/interfaces/UserProfile.md +1 -1
  107. package/docs/api/modules.md +2 -2
  108. package/package.json +1 -1
  109. package/src/components/DataTable/components/DataTableCore.tsx +63 -0
  110. package/src/components/DataTable/components/UnifiedTableBody.tsx +35 -0
  111. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +33 -7
  112. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +12 -1
  113. /package/dist/{DataTable-OBT663FS.js.map → DataTable-7NVDMWPY.js.map} +0 -0
  114. /package/dist/{chunk-3FV24IOD.js.map → chunk-IGMNHF3A.js.map} +0 -0
@@ -53,7 +53,7 @@ import {
53
53
  sortHierarchicalDataWithSorting,
54
54
  validateHierarchicalData,
55
55
  validatePaginationConfig
56
- } from "./chunk-CACHCRZS.js";
56
+ } from "./chunk-JAA6F35O.js";
57
57
  import "./chunk-YVUZWLQG.js";
58
58
  import "./chunk-S63MFSY6.js";
59
59
  import "./chunk-Q7APDV6H.js";
@@ -154,4 +154,4 @@ export {
154
154
  validateHierarchicalData,
155
155
  validatePaginationConfig
156
156
  };
157
- //# sourceMappingURL=DataTable-OBT663FS.js.map
157
+ //# sourceMappingURL=DataTable-7NVDMWPY.js.map
@@ -22,7 +22,7 @@ import {
22
22
  SelectSeparator,
23
23
  SelectTrigger,
24
24
  SelectValue
25
- } from "./chunk-CACHCRZS.js";
25
+ } from "./chunk-JAA6F35O.js";
26
26
  import {
27
27
  isPermitted,
28
28
  isSuperAdmin
@@ -3883,4 +3883,4 @@ export {
3883
3883
  PublicPageDiagnostic,
3884
3884
  PublicPageContextChecker
3885
3885
  };
3886
- //# sourceMappingURL=chunk-3FV24IOD.js.map
3886
+ //# sourceMappingURL=chunk-IGMNHF3A.js.map
@@ -7660,6 +7660,37 @@ function UnifiedTableBody({
7660
7660
  const shouldVirtualize = forceVirtualization || dataLength > VIRTUALIZATION_THRESHOLD;
7661
7661
  const rows = table.getRowModel().rows;
7662
7662
  const headerGroups = table.getHeaderGroups();
7663
+ useEffect3(() => {
7664
+ if (import.meta.env?.MODE === "development" && rows.length === 0 && dataLength > 0) {
7665
+ const tableState = table.getState();
7666
+ const pagination = tableState.pagination;
7667
+ const columnFilters = tableState.columnFilters;
7668
+ const globalFilter = tableState.globalFilter;
7669
+ const allRows = table.getPrePaginationRowModel?.()?.rows || [];
7670
+ const rowCount = table.getRowCount();
7671
+ const pageCount = table.getPageCount();
7672
+ console.warn("[DataTable] Diagnostic: Rows empty but data exists", {
7673
+ dataLength,
7674
+ rowsLength: rows.length,
7675
+ allRowsLength: allRows.length,
7676
+ rowCount,
7677
+ pageCount,
7678
+ pagination: {
7679
+ pageIndex: pagination.pageIndex,
7680
+ pageSize: pagination.pageSize
7681
+ },
7682
+ columnFilters,
7683
+ globalFilter,
7684
+ hasFilteredRows: table.getFilteredRowModel?.()?.rows?.length || 0,
7685
+ hasSortedRows: table.getSortedRowModel?.()?.rows?.length || 0,
7686
+ tableOptions: {
7687
+ getFilteredRowModel: !!table.options.getFilteredRowModel,
7688
+ getSortedRowModel: !!table.options.getSortedRowModel,
7689
+ getPaginationRowModel: !!table.options.getPaginationRowModel
7690
+ }
7691
+ });
7692
+ }
7693
+ }, [rows.length, dataLength, table]);
7663
7694
  const virtualizer = useVirtualizer({
7664
7695
  count: shouldVirtualize ? rows.length : 0,
7665
7696
  getScrollElement: () => parentRef.current,
@@ -9555,7 +9586,10 @@ function useDataTableDataPipeline({
9555
9586
  );
9556
9587
  const baseData = useMemo8(() => {
9557
9588
  if (finalPaginationMode === "server") {
9558
- return serverData?.data ?? [];
9589
+ if (serverData?.data && serverData.data.length > 0) {
9590
+ return serverData.data;
9591
+ }
9592
+ return structuredHierarchicalData;
9559
9593
  }
9560
9594
  return structuredHierarchicalData;
9561
9595
  }, [finalPaginationMode, serverData?.data, structuredHierarchicalData]);
@@ -9774,7 +9808,8 @@ function useDataTableConfiguration({
9774
9808
  getRowId,
9775
9809
  finalPaginationMode,
9776
9810
  finalDataCount,
9777
- pageSize
9811
+ pageSize,
9812
+ hasServerSideConfig = false
9778
9813
  }) {
9779
9814
  return useMemo11(() => {
9780
9815
  let normalizedColumnOrder = [...stateSnapshot.columnOrder];
@@ -9782,6 +9817,9 @@ function useDataTableConfiguration({
9782
9817
  normalizedColumnOrder = normalizedColumnOrder.filter((id) => id !== "select");
9783
9818
  normalizedColumnOrder = ["select", ...normalizedColumnOrder];
9784
9819
  }
9820
+ const shouldUseManualPagination = finalPaginationMode === "server" && hasServerSideConfig;
9821
+ const shouldUseManualFiltering = shouldUseManualPagination;
9822
+ const shouldUseManualSorting = shouldUseManualPagination;
9785
9823
  return {
9786
9824
  data,
9787
9825
  columns,
@@ -9804,15 +9842,18 @@ function useDataTableConfiguration({
9804
9842
  getRowId,
9805
9843
  ...handlers,
9806
9844
  getCoreRowModel: getCoreRowModel(),
9807
- getFilteredRowModel: finalPaginationMode === "client" ? getFilteredRowModel() : void 0,
9808
- getSortedRowModel: finalPaginationMode === "client" ? getSortedRowModel() : void 0,
9809
- getPaginationRowModel: features.pagination ? getPaginationRowModel() : void 0,
9845
+ // Only disable client-side filtering/sorting if we're ACTUALLY using manual (server-side) mode
9846
+ getFilteredRowModel: shouldUseManualFiltering ? void 0 : getFilteredRowModel(),
9847
+ getSortedRowModel: shouldUseManualSorting ? void 0 : getSortedRowModel(),
9848
+ // CRITICAL: When manualPagination is true, do NOT provide getPaginationRowModel
9849
+ // TanStack Table expects data to be pre-paginated and will not paginate it again
9850
+ getPaginationRowModel: features.pagination && !shouldUseManualPagination ? getPaginationRowModel() : void 0,
9810
9851
  getGroupedRowModel: features.grouping ? getGroupedRowModel() : void 0,
9811
9852
  getExpandedRowModel: features.grouping ? getExpandedRowModel() : void 0,
9812
- manualSorting: finalPaginationMode === "server",
9813
- manualFiltering: finalPaginationMode === "server",
9814
- manualPagination: finalPaginationMode === "server",
9815
- pageCount: finalPaginationMode === "server" ? Math.ceil(finalDataCount / pageSize) : void 0
9853
+ manualSorting: shouldUseManualSorting,
9854
+ manualFiltering: shouldUseManualFiltering,
9855
+ manualPagination: shouldUseManualPagination,
9856
+ pageCount: shouldUseManualPagination ? Math.ceil(finalDataCount / pageSize) : void 0
9816
9857
  };
9817
9858
  }, [
9818
9859
  data,
@@ -9825,7 +9866,8 @@ function useDataTableConfiguration({
9825
9866
  getRowId,
9826
9867
  finalPaginationMode,
9827
9868
  finalDataCount,
9828
- pageSize
9869
+ pageSize,
9870
+ hasServerSideConfig
9829
9871
  ]);
9830
9872
  }
9831
9873
 
@@ -11131,6 +11173,20 @@ function DataTableInternal({
11131
11173
  console.error("[DataTable] Hierarchical data validation failed:", hierarchicalValidation.errors);
11132
11174
  }
11133
11175
  }, [hierarchicalValidation]);
11176
+ useEffect12(() => {
11177
+ if (import.meta.env?.MODE === "development" && finalTableData.length === 0 && data.length > 0) {
11178
+ console.warn("[DataTable] Diagnostic: finalTableData empty but input data exists", {
11179
+ inputDataLength: data.length,
11180
+ finalTableDataLength: finalTableData.length,
11181
+ dataCount: finalDataCount,
11182
+ finalPaginationMode,
11183
+ hasServerData: !!serverData,
11184
+ serverDataLength: serverData?.data?.length || 0,
11185
+ hierarchicalEnabled: Boolean(secureFeatures.hierarchical && hierarchical?.enabled),
11186
+ hierarchicalValid: hierarchicalValidation.isValid
11187
+ });
11188
+ }
11189
+ }, [finalTableData.length, data.length, finalDataCount, finalPaginationMode, serverData, secureFeatures.hierarchical, hierarchical, hierarchicalValidation.isValid]);
11134
11190
  const {
11135
11191
  columnOrder: savedColumnOrder,
11136
11192
  isLoaded: isColumnOrderLoaded,
@@ -11373,9 +11429,50 @@ function DataTableInternal({
11373
11429
  getRowId: resolvedGetRowId,
11374
11430
  finalPaginationMode,
11375
11431
  finalDataCount,
11376
- pageSize: effectivePageSize
11432
+ pageSize: effectivePageSize,
11433
+ hasServerSideConfig: !!serverSide
11377
11434
  });
11435
+ useEffect12(() => {
11436
+ if (import.meta.env?.MODE === "development" && finalTableData.length > 0) {
11437
+ const configDataLength = tableConfig.data?.length || 0;
11438
+ if (configDataLength === 0) {
11439
+ console.warn("[DataTable] Diagnostic: tableConfig.data is empty but finalTableData has items", {
11440
+ finalTableDataLength: finalTableData.length,
11441
+ configDataLength,
11442
+ enhancedColumnsCount: enhancedColumns.length
11443
+ });
11444
+ }
11445
+ }
11446
+ }, [finalTableData.length, tableConfig.data]);
11378
11447
  const table = useReactTable(tableConfig);
11448
+ useEffect12(() => {
11449
+ if (import.meta.env?.MODE === "development" && finalTableData.length > 0) {
11450
+ const rows = table.getRowModel().rows;
11451
+ if (rows.length === 0) {
11452
+ const coreRows = table.getCoreRowModel().rows;
11453
+ const prePaginationRows = table.getPrePaginationRowModel?.()?.rows || [];
11454
+ const filteredRows = table.getFilteredRowModel?.()?.rows || [];
11455
+ const sortedRows = table.getSortedRowModel?.()?.rows || [];
11456
+ console.warn("[DataTable] Diagnostic: Table created but rows are empty", {
11457
+ finalTableDataLength: finalTableData.length,
11458
+ tableConfigDataLength: tableConfig.data?.length || 0,
11459
+ coreRowsLength: coreRows.length,
11460
+ prePaginationRowsLength: prePaginationRows.length,
11461
+ filteredRowsLength: filteredRows.length,
11462
+ sortedRowsLength: sortedRows.length,
11463
+ finalRowsLength: rows.length,
11464
+ pagination: table.getState().pagination,
11465
+ tableOptions: {
11466
+ getCoreRowModel: !!tableConfig.getCoreRowModel,
11467
+ getFilteredRowModel: !!tableConfig.getFilteredRowModel,
11468
+ getSortedRowModel: !!tableConfig.getSortedRowModel,
11469
+ getPaginationRowModel: !!tableConfig.getPaginationRowModel
11470
+ },
11471
+ hasRowId: !!resolvedGetRowId
11472
+ });
11473
+ }
11474
+ }
11475
+ }, [table, finalTableData.length, tableConfig, resolvedGetRowId]);
11379
11476
  if (!user) {
11380
11477
  throw new Error("DataTable requires authenticated user for RBAC");
11381
11478
  }
@@ -11872,4 +11969,4 @@ lodash/lodash.js:
11872
11969
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
11873
11970
  *)
11874
11971
  */
11875
- //# sourceMappingURL=chunk-CACHCRZS.js.map
11972
+ //# sourceMappingURL=chunk-JAA6F35O.js.map