@stella-source/stellasource-dsl 0.2.4 → 0.2.8

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.
@@ -42,6 +42,7 @@ export interface TableProps<T> {
42
42
  header: string;
43
43
  subHeader?: string;
44
44
  showClearFilterButton?: boolean;
45
+ onClearFilters?: () => void;
45
46
  };
46
47
  }
47
48
  export interface CustomColumnMeta {
@@ -3414,7 +3414,7 @@ var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();
3414
3414
  * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
3415
3415
  * exposing only those methods and properties that are defined in the spec.
3416
3416
  */
3417
- var ResizeObserver$1 = /** @class */ (function () {
3417
+ var ResizeObserver$2 = /** @class */ (function () {
3418
3418
  /**
3419
3419
  * Creates a new instance of ResizeObserver.
3420
3420
  *
@@ -3440,7 +3440,7 @@ var ResizeObserver$1 = /** @class */ (function () {
3440
3440
  'unobserve',
3441
3441
  'disconnect'
3442
3442
  ].forEach(function (method) {
3443
- ResizeObserver$1.prototype[method] = function () {
3443
+ ResizeObserver$2.prototype[method] = function () {
3444
3444
  var _a;
3445
3445
  return (_a = observers.get(this))[method].apply(_a, arguments);
3446
3446
  };
@@ -3451,7 +3451,7 @@ var index = (function () {
3451
3451
  if (typeof global$1.ResizeObserver !== 'undefined') {
3452
3452
  return global$1.ResizeObserver;
3453
3453
  }
3454
- return ResizeObserver$1;
3454
+ return ResizeObserver$2;
3455
3455
  })();
3456
3456
 
3457
3457
  // =============================== Const ===============================
@@ -3691,7 +3691,7 @@ if (process.env.NODE_ENV !== 'production') {
3691
3691
  }
3692
3692
 
3693
3693
  var INTERNAL_PREFIX_KEY = 'rc-observer-key';
3694
- function ResizeObserver(props, ref) {
3694
+ function ResizeObserver$1(props, ref) {
3695
3695
  var children = props.children;
3696
3696
  var childNodes = typeof children === 'function' ? [children] : toArray$2(children);
3697
3697
  if (process.env.NODE_ENV !== 'production') {
@@ -3709,7 +3709,7 @@ function ResizeObserver(props, ref) {
3709
3709
  }), child);
3710
3710
  });
3711
3711
  }
3712
- var RefResizeObserver = /*#__PURE__*/a$j.forwardRef(ResizeObserver);
3712
+ var RefResizeObserver = /*#__PURE__*/a$j.forwardRef(ResizeObserver$1);
3713
3713
  if (process.env.NODE_ENV !== 'production') {
3714
3714
  RefResizeObserver.displayName = 'ResizeObserver';
3715
3715
  }
@@ -20769,6 +20769,7 @@ const TableWrapper = styled.div `
20769
20769
  const TableWrapperScroll = styled.div `
20770
20770
  width: 100%;
20771
20771
  overflow-x: ${({ $stopScroll }) => ($stopScroll ? "hidden" : "auto")};
20772
+ overflow-y: hidden;
20772
20773
  `;
20773
20774
  const StyledTable = styled.table `
20774
20775
  width: 100%;
@@ -21075,7 +21076,11 @@ const TableHeaderCell = ({ header, serverSide, filters, sorting, scrollPosition,
21075
21076
  const [coords, setCoords] = useState({ top: 0, left: 0 });
21076
21077
  const [tempFilters, setTempFilters] = useState([]);
21077
21078
  const [currentAppliedFilters, setCurrentAppliedFilters] = useState([]);
21079
+ const [filterOptions, setFilterOptions] = useState([]);
21078
21080
  const [textAlign, setTextAlign] = useState("left");
21081
+ useEffect(() => {
21082
+ setFilterOptions(meta?.filterOptions || []);
21083
+ }, [meta]);
21079
21084
  const toggleMenu = (e) => {
21080
21085
  e.stopPropagation();
21081
21086
  if (buttonRef.current) {
@@ -21100,7 +21105,7 @@ const TableHeaderCell = ({ header, serverSide, filters, sorting, scrollPosition,
21100
21105
  const insideButton = !!buttonRef.current?.contains(target);
21101
21106
  const insideMenu = !!menuRef.current?.contains(target);
21102
21107
  if (!insideButton && !insideMenu) {
21103
- setTempFilters(currentAppliedFilters);
21108
+ setTempFilters(filters?.[header.id] || currentAppliedFilters);
21104
21109
  showFilterMenu(false);
21105
21110
  }
21106
21111
  };
@@ -21159,7 +21164,7 @@ const TableHeaderCell = ({ header, serverSide, filters, sorting, scrollPosition,
21159
21164
  } }),
21160
21165
  a__default.createElement(FilterBoxLabel, { htmlFor: "all-checkbox" }, "Select All"))),
21161
21166
  (serverSide
21162
- ? meta?.filterOptions
21167
+ ? filterOptions
21163
21168
  : Array.from(header.column.getFacetedUniqueValues().keys()))?.map((item) => {
21164
21169
  if (meta?.singleSelect) {
21165
21170
  return (a__default.createElement(MenuItemOption, { key: item, id: `${item}-button`, onClick: () => {
@@ -21261,6 +21266,8 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
21261
21266
  pageIndex: paginationDetails?.startingPage - 1,
21262
21267
  pageSize: paginationDetails?.rowsPerPage || 10,
21263
21268
  });
21269
+ const [localData, setLocalData] = useState(data);
21270
+ const [localColumns, setLocalColumns] = useState(columns);
21264
21271
  const [totalData, setTotalData] = useState(paginationDetails?.totalRows);
21265
21272
  const [sorting, setSorting] = useState([]);
21266
21273
  const [filters, setFilters] = useState({});
@@ -21283,20 +21290,47 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
21283
21290
  pageIndex: paginationDetails?.startingPage - 1,
21284
21291
  pageSize: paginationDetails?.rowsPerPage || 10,
21285
21292
  });
21286
- }, [paginationDetails, data]);
21287
- useEffect(() => {
21288
- const el = scrollRef?.current;
21293
+ setLocalColumns(columns);
21294
+ setLocalData(data);
21295
+ }, [paginationDetails, data, columns]);
21296
+ useLayoutEffect$1(() => {
21297
+ const el = scrollRef.current;
21289
21298
  if (!el)
21290
21299
  return;
21291
- const handleScroll = () => {
21292
- const atLeft = el.scrollLeft <= 0;
21293
- const atRight = el.scrollWidth - el.scrollLeft <= el.clientWidth + 1;
21300
+ let raf = 0;
21301
+ const update = () => {
21302
+ const maxScrollLeft = Math.max(0, el.scrollWidth - el.clientWidth);
21303
+ const hasOverflow = maxScrollLeft > 1; // tolerance for rounding
21304
+ let atLeft = el.scrollLeft <= 0;
21305
+ let atRight = el.scrollLeft >= maxScrollLeft - 1;
21306
+ if (!hasOverflow) {
21307
+ atLeft = true;
21308
+ atRight = true;
21309
+ }
21294
21310
  setScrollState({ atLeft, atRight });
21295
21311
  };
21296
- el.addEventListener("scroll", handleScroll);
21297
- handleScroll(); // initial check
21298
- return () => el.removeEventListener("scroll", handleScroll);
21299
- }, [scrollRef]);
21312
+ const schedule = () => {
21313
+ cancelAnimationFrame(raf);
21314
+ raf = requestAnimationFrame(update);
21315
+ };
21316
+ // Listen to scroll
21317
+ el.addEventListener("scroll", schedule);
21318
+ // Recalculate when sizes change
21319
+ const ro = new ResizeObserver(schedule);
21320
+ ro.observe(el);
21321
+ const tableEl = el.querySelector("table");
21322
+ if (tableEl)
21323
+ ro.observe(tableEl);
21324
+ window.addEventListener("resize", schedule);
21325
+ // Initial measurement after layout
21326
+ schedule();
21327
+ return () => {
21328
+ el.removeEventListener("scroll", schedule);
21329
+ window.removeEventListener("resize", schedule);
21330
+ ro.disconnect();
21331
+ cancelAnimationFrame(raf);
21332
+ };
21333
+ }, []);
21300
21334
  const handleInputChange = (rowId, field, value) => {
21301
21335
  setRowState((prev) => ({
21302
21336
  ...prev,
@@ -21317,7 +21351,7 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
21317
21351
  size: 20,
21318
21352
  });
21319
21353
  }
21320
- cols.push(...columns);
21354
+ cols.push(...localColumns);
21321
21355
  if (showRowOptions) {
21322
21356
  cols.push({
21323
21357
  id: "options",
@@ -21329,9 +21363,16 @@ function Table({ columns, data, isLoading, serverSide = false, onPageChange, onS
21329
21363
  });
21330
21364
  }
21331
21365
  return cols;
21332
- }, [columns, selectedRows, data, onRowSelect, showSelection, showRowOptions]);
21366
+ }, [
21367
+ localColumns,
21368
+ selectedRows,
21369
+ localData,
21370
+ onRowSelect,
21371
+ showSelection,
21372
+ showRowOptions,
21373
+ ]);
21333
21374
  const table = useReactTable({
21334
- data,
21375
+ data: localData,
21335
21376
  columns: enhancedColumns,
21336
21377
  state: {
21337
21378
  pagination,