@stella-source/stellasource-dsl 5.2.0 → 5.3.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.
@@ -44,7 +44,6 @@ export interface TableProps<T> {
44
44
  emptyTableState?: {
45
45
  header: string;
46
46
  subHeader?: string;
47
- showClearFilterButton?: boolean;
48
47
  onClearFilters?: () => void;
49
48
  };
50
49
  defaultFilters?: {
@@ -1,8 +1,9 @@
1
- import { ColumnSizingState, SortingState, VisibilityState } from "@tanstack/react-table";
1
+ import { ColumnFiltersState, ColumnSizingState, SortingState, VisibilityState } from "@tanstack/react-table";
2
2
  type PersistedTableState = {
3
3
  columnVisibility: VisibilityState;
4
4
  columnSizing: ColumnSizingState;
5
5
  sorting: SortingState;
6
+ columnFilters: ColumnFiltersState;
6
7
  };
7
8
  export declare function loadTableState(tableId: string): Partial<PersistedTableState>;
8
9
  export declare function usePersistTableState(tableId: string, state: Partial<PersistedTableState>, sizingDebounceMs?: number): void;
@@ -21841,14 +21841,15 @@ function usePersistTableState(tableId, state, sizingDebounceMs = 300) {
21841
21841
  useEffect(() => {
21842
21842
  latestSizing.current = state.columnSizing;
21843
21843
  }, [state.columnSizing]);
21844
- // Persist visibility and sorting immediately
21844
+ // Persist visibility, sorting, and filters immediately
21845
21845
  useEffect(() => {
21846
21846
  saveTableState(tableId, {
21847
21847
  columnVisibility: state.columnVisibility,
21848
21848
  columnSizing: latestSizing.current,
21849
21849
  sorting: state.sorting,
21850
+ columnFilters: state.columnFilters,
21850
21851
  });
21851
- }, [tableId, state.columnVisibility, state.sorting]);
21852
+ }, [tableId, state.columnVisibility, state.sorting, state.columnFilters]);
21852
21853
  // Persist sizing debounced
21853
21854
  useEffect(() => {
21854
21855
  if (debounceTimer.current)
@@ -21858,6 +21859,7 @@ function usePersistTableState(tableId, state, sizingDebounceMs = 300) {
21858
21859
  columnVisibility: state.columnVisibility,
21859
21860
  columnSizing: latestSizing.current,
21860
21861
  sorting: state.sorting,
21862
+ columnFilters: state.columnFilters,
21861
21863
  });
21862
21864
  }, sizingDebounceMs);
21863
21865
  return () => {
@@ -22521,7 +22523,9 @@ const TableHeaderCell = ({ header, serverSide, filters, sorting, scrollPosition,
22521
22523
  }, 300);
22522
22524
  const displayOptions = serverSide
22523
22525
  ? filterOptions
22524
- : normalizeOptions(Array.from(header.column.getFacetedUniqueValues().keys()));
22526
+ : header.column.getCanFilter()
22527
+ ? normalizeOptions(Array.from(header.column.getFacetedUniqueValues().keys()))
22528
+ : [];
22525
22529
  useEffect(() => {
22526
22530
  setFilterOptions(normalizeOptions(meta?.filterOptions || []));
22527
22531
  }, [meta]);
@@ -22657,7 +22661,6 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22657
22661
  const [localColumns, setLocalColumns] = useState(columns);
22658
22662
  const [totalData, setTotalData] = useState(paginationDetails?.totalRows);
22659
22663
  const [sorting, setSorting] = useState(() => loadTableState(id).sorting ?? []);
22660
- const [filters, setFilters] = useState({});
22661
22664
  const [rowState, setRowState] = useState({});
22662
22665
  const [columnVisibility, setColumnVisibility] = useState(() => {
22663
22666
  const persisted = loadTableState(id);
@@ -22671,7 +22674,8 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22671
22674
  ]));
22672
22675
  });
22673
22676
  const [columnFilters, setColumnFilters] = useState(() => {
22674
- const base = defaultFilters ?? [];
22677
+ const persisted = loadTableState(id);
22678
+ const base = persisted.columnFilters ?? defaultFilters ?? [];
22675
22679
  if (!staticFilters?.length)
22676
22680
  return base;
22677
22681
  const merged = [...base];
@@ -22690,6 +22694,11 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22690
22694
  });
22691
22695
  return merged;
22692
22696
  });
22697
+ const filters = useMemo$1(() => {
22698
+ const map = {};
22699
+ columnFilters.forEach((f) => (map[f.id] = f.value));
22700
+ return map;
22701
+ }, [columnFilters]);
22693
22702
  const [columnPinning, setColumnPinning] = useState({ left: ["select"], right: ["options"] });
22694
22703
  const scrollRef = useRef(null);
22695
22704
  const visibilityButtonRef = useRef(null);
@@ -22726,7 +22735,13 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22726
22735
  setLocalData(data);
22727
22736
  if (paginationDetails && paginationDetails.startingPage !== pageIndex)
22728
22737
  setPageIndex(paginationDetails?.startingPage);
22729
- }, [paginationDetails, data, columns]);
22738
+ }, [
22739
+ paginationDetails?.totalRows,
22740
+ paginationDetails?.startingPage,
22741
+ paginationDetails?.rowsPerPage,
22742
+ data,
22743
+ columns,
22744
+ ]);
22730
22745
  useEffect(() => {
22731
22746
  if (!showVisibilityMenu)
22732
22747
  return;
@@ -22806,7 +22821,7 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22806
22821
  !table.getIsAllPageRowsSelected();
22807
22822
  return (a__default.createElement(IndeterminateCheckbox, { isIndeterminate: isIndeterminate, isChecked: table.getIsAllPageRowsSelected(), onChange: table.getToggleAllPageRowsSelectedHandler() }));
22808
22823
  },
22809
- cell: ({ row }) => (a__default.createElement(Checkbox, { checked: row.getIsSelected(), onChange: row.getToggleSelectedHandler() })),
22824
+ cell: ({ row }) => (a__default.createElement(Checkbox, { checked: row.getIsSelected(), onChange: row.getToggleSelectedHandler(), onClick: (e) => e.stopPropagation() })),
22810
22825
  size: 20,
22811
22826
  });
22812
22827
  }
@@ -22892,9 +22907,6 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22892
22907
  });
22893
22908
  }
22894
22909
  setColumnFilters(next);
22895
- const map = {};
22896
- next.forEach((f) => (map[f.id] = f.value));
22897
- setFilters(map);
22898
22910
  onFilterChange?.(next);
22899
22911
  },
22900
22912
  filterFns: {
@@ -22905,7 +22917,7 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22905
22917
  },
22906
22918
  },
22907
22919
  });
22908
- usePersistTableState(id, { columnVisibility, sorting });
22920
+ usePersistTableState(id, { columnVisibility, sorting, columnFilters });
22909
22921
  useEffect(() => {
22910
22922
  if (onRowSelect) {
22911
22923
  const selectedData = table
@@ -22914,6 +22926,12 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22914
22926
  onRowSelect?.(selectedData);
22915
22927
  }
22916
22928
  }, [rowSelection]);
22929
+ const initialColumnFilters = useRef(columnFilters);
22930
+ useEffect(() => {
22931
+ if (initialColumnFilters.current.length > 0) {
22932
+ onFilterChange?.(initialColumnFilters.current);
22933
+ }
22934
+ }, []);
22917
22935
  const isMounted = useRef(false);
22918
22936
  useEffect(() => {
22919
22937
  if (!isMounted.current) {
@@ -22923,8 +22941,9 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22923
22941
  resetTable();
22924
22942
  }, [resetTrigger]);
22925
22943
  const resetTable = () => {
22926
- setColumnFilters(staticFilters ?? []);
22927
- setFilters({});
22944
+ const resetFilters = staticFilters ?? [];
22945
+ setColumnFilters(resetFilters);
22946
+ onFilterChange?.(resetFilters);
22928
22947
  setSorting([]);
22929
22948
  setPageIndex(1);
22930
22949
  setPagination({
@@ -22933,6 +22952,8 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22933
22952
  });
22934
22953
  table.toggleAllRowsSelected(false);
22935
22954
  };
22955
+ const hasActiveFilters = Object.keys(filters).length > (staticFilters?.length ?? 0) &&
22956
+ Object.values(filters).some((v) => v?.length);
22936
22957
  return (a__default.createElement(a__default.Fragment, null,
22937
22958
  !isLoading && (a__default.createElement(ActionBar, null,
22938
22959
  a__default.createElement(GlobalActionWrapper, null, globalActions?.(table)),
@@ -22997,7 +23018,8 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
22997
23018
  }, key: index + "loading-row" }, Array.from({
22998
23019
  length: 10,
22999
23020
  }).map((_, i) => (a__default.createElement(LoadingShimmer, { key: `${i}-loading`, "$width": "110px", "$height": "25px" }))))))))) : (a__default.createElement(StyledTable, { id: `${id}-table`, ...htmlProps },
23000
- a__default.createElement("thead", null, table.getHeaderGroups().map((headerGroup) => (a__default.createElement(HeaderRow, { key: headerGroup.id, "$isEmpty": table.getRowModel().rows.length === 0 }, headerGroup.headers.map((header, i) => {
23021
+ a__default.createElement("thead", null, table.getHeaderGroups().map((headerGroup) => (a__default.createElement(HeaderRow, { key: headerGroup.id, "$isEmpty": table.getCoreRowModel().rows.length === 0 &&
23022
+ !hasActiveFilters }, headerGroup.headers.map((header, i) => {
23001
23023
  return (a__default.createElement(TableHeaderCell, { key: header.id, serverSide: serverSide, header: header, filters: filters, sorting: sorting, scrollPosition: scrollState, onFilterMenuInteraction: (id, active) => {
23002
23024
  setFilterMenuOpen((prev) => ({
23003
23025
  ...prev,
@@ -23012,14 +23034,21 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
23012
23034
  } }));
23013
23035
  }))))),
23014
23036
  a__default.createElement("tbody", null,
23015
- table.getRowModel().rows.length === 0 && (a__default.createElement(EmptyTableState, { header: emptyTableState?.header || "No data available.", subHeader: emptyTableState?.subHeader, showClearFilterButton: emptyTableState?.showClearFilterButton, onClearFilters: resetTable, colSpan: table.getVisibleLeafColumns().length, size: "large" })),
23037
+ table.getRowModel().rows.length === 0 && (a__default.createElement(EmptyTableState, { header: hasActiveFilters
23038
+ ? "No results found."
23039
+ : emptyTableState?.header || "No data available.", subHeader: !hasActiveFilters ? emptyTableState?.subHeader : undefined, showClearFilterButton: hasActiveFilters, onClearFilters: () => {
23040
+ resetTable();
23041
+ emptyTableState?.onClearFilters?.();
23042
+ }, colSpan: table.getVisibleLeafColumns().length, size: "large" })),
23016
23043
  table.getRowModel().rows.map((row) => (a__default.createElement(a__default.Fragment, { key: row.id },
23017
23044
  a__default.createElement(CellRow, { onClick: () => {
23045
+ if (showSelection)
23046
+ row.toggleSelected();
23018
23047
  if (!showExpandedRowToggle &&
23019
23048
  !!renderExpandedRow?.(row))
23020
23049
  toggleRowExpanded(row.id);
23021
23050
  onRowClick?.(row.original);
23022
- }, "$isClickable": !!onRowClick }, row.getVisibleCells().map((cell) => {
23051
+ }, "$isClickable": !!onRowClick || showSelection }, row.getVisibleCells().map((cell) => {
23023
23052
  const value = flexRender(cell.column.columnDef.cell, {
23024
23053
  ...cell.getContext(),
23025
23054
  localValue: rowState[row.id]?.[cell.column.id],