schummar-table 0.8.1 → 0.9.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.
package/dist/cjs/index.js CHANGED
@@ -401,7 +401,7 @@ const noopParentId = () => void 0;
401
401
  function calcProps(props) {
402
402
  const cache = useTableMemo();
403
403
  return react.useMemo(() => {
404
- var _f, _g, _h, _i, _j, _k, _l;
404
+ var _f, _g, _h, _i, _j, _k, _l, _m;
405
405
  let id;
406
406
  if (props.id instanceof Function || Array.isArray(props.id)) {
407
407
  id = cache("id", props.id);
@@ -480,8 +480,9 @@ function calcProps(props) {
480
480
  stickyFooter: (_i = props.stickyFooter) != null ? _i : true,
481
481
  enableExport,
482
482
  enableColumnSelection: (_j = props.enableColumnSelection) != null ? _j : true,
483
- enableColumnResize: (_k = props.enableColumnResize) != null ? _k : true,
484
- enableColumnReorder: (_l = props.enableColumnReorder) != null ? _l : true
483
+ enableClearFiltersButton: (_k = props.enableClearFiltersButton) != null ? _k : false,
484
+ enableColumnResize: (_l = props.enableColumnResize) != null ? _l : true,
485
+ enableColumnReorder: (_m = props.enableColumnReorder) != null ? _m : true
485
486
  });
486
487
  }, [props]);
487
488
  }
@@ -637,7 +638,7 @@ function ColumnFooter() {
637
638
  const column = state.activeColumns.find((column2) => column2.id === columnId);
638
639
  if ((column == null ? void 0 : column.footer) instanceof Function) {
639
640
  const items = state.activeItems;
640
- const values = items.map((item) => column == null ? void 0 : column.value(item));
641
+ const values = items.map((item) => column == null ? void 0 : column.value(item.value));
641
642
  return column == null ? void 0 : column.footer(values, items);
642
643
  }
643
644
  return column == null ? void 0 : column.footer;
@@ -1635,6 +1636,13 @@ const TableInner = react.memo(function TableInner2({
1635
1636
  width: column.width,
1636
1637
  classes: column.classes
1637
1638
  })));
1639
+ const hasActiveFilters = table.useState((state) => {
1640
+ return state.activeColumns.some((column) => {
1641
+ const filter = state.filters.get(column.id);
1642
+ const filterValue = state.filterValues.get(column.id);
1643
+ return filter !== void 0 && filterValue !== void 0 && filter.isActive(filterValue);
1644
+ });
1645
+ });
1638
1646
  const columnWidths = table.useState("columnWidths", {
1639
1647
  throttle: 16
1640
1648
  });
@@ -1646,6 +1654,9 @@ const TableInner = react.memo(function TableInner2({
1646
1654
  const enableColumnSelection = table.useState("props.enableColumnSelection");
1647
1655
  const enableExport = table.useState((state) => !!state.props.enableExport.copy || !!state.props.enableExport.download);
1648
1656
  const cssVariables = useCssVariables();
1657
+ const enableClearFiltersButton = table.useState("props.enableClearFiltersButton");
1658
+ const Button2 = useTheme((t) => t.components.Button);
1659
+ const textClearFilters = useTheme((t) => t.text.clearFilters);
1649
1660
  react.useLayoutEffect(() => {
1650
1661
  var _a, _b;
1651
1662
  return (_b = (_a = table.getState().props).debugRender) == null ? void 0 : _b.call(_a, "render table inner");
@@ -1683,19 +1694,34 @@ const TableInner = react.memo(function TableInner2({
1683
1694
  css: [tableTheme.defaultClasses.headerFill, stickyHeader && tableTheme.defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]
1684
1695
  })]
1685
1696
  }),
1686
- footer: hasFooter && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
1687
- children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
1688
- className: classes == null ? void 0 : classes.footerCell,
1689
- css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1690
- }), /* @__PURE__ */ jsxRuntime.jsx("div", {
1691
- className: classes == null ? void 0 : classes.footerCell,
1692
- css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1693
- }), activeColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(ColumnContext.Provider, {
1694
- value: column.id,
1695
- children: /* @__PURE__ */ jsxRuntime.jsx(ColumnFooter, {})
1696
- }, column.id)), /* @__PURE__ */ jsxRuntime.jsx("div", {
1697
- className: classes == null ? void 0 : classes.footerCell,
1698
- css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1697
+ footer: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
1698
+ children: [enableClearFiltersButton && hasActiveFilters && /* @__PURE__ */ jsxRuntime.jsx("div", {
1699
+ css: tableTheme.defaultClasses.clearFiltersButton,
1700
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button2, {
1701
+ variant: "text",
1702
+ onClick: () => {
1703
+ table.update((state) => {
1704
+ state.activeColumns.forEach((column) => {
1705
+ state.filterValues.delete(column.id);
1706
+ });
1707
+ });
1708
+ },
1709
+ children: textClearFilters
1710
+ })
1711
+ }), hasFooter && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
1712
+ children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
1713
+ className: classes == null ? void 0 : classes.footerCell,
1714
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1715
+ }), /* @__PURE__ */ jsxRuntime.jsx("div", {
1716
+ className: classes == null ? void 0 : classes.footerCell,
1717
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1718
+ }), activeColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(ColumnContext.Provider, {
1719
+ value: column.id,
1720
+ children: /* @__PURE__ */ jsxRuntime.jsx(ColumnFooter, {})
1721
+ }, column.id)), /* @__PURE__ */ jsxRuntime.jsx("div", {
1722
+ className: classes == null ? void 0 : classes.footerCell,
1723
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1724
+ })]
1699
1725
  })]
1700
1726
  }),
1701
1727
  children: (itemIds, startIndex) => itemIds.map((itemId, index) => /* @__PURE__ */ jsxRuntime.jsx(Row, {
@@ -2127,6 +2153,7 @@ const defaultTexts = {
2127
2153
  exportDownload: "Download",
2128
2154
  today: "Today",
2129
2155
  thisWeek: "This week",
2156
+ clearFilters: "Clear all filters",
2130
2157
  reset: "Reset",
2131
2158
  loading: "Loading",
2132
2159
  selected: (count) => `${count} selected`
@@ -2343,6 +2370,7 @@ function DatePicker({
2343
2370
  const textToday = useTheme((t) => t.text.today);
2344
2371
  const textThisWeek = useTheme((t) => t.text.thisWeek);
2345
2372
  const textReset = useTheme((t) => t.text.reset);
2373
+ const cssVariables = useCssVariables();
2346
2374
  const [baseDate] = react.useState(new Date());
2347
2375
  const [dateInView, setDateInView] = react.useState(baseDate);
2348
2376
  const [dirty, setDirty] = react.useState();
@@ -2420,6 +2448,7 @@ function DatePicker({
2420
2448
  return (year) => format(new Date(year, 0, 1));
2421
2449
  }, [locale]);
2422
2450
  return /* @__PURE__ */ jsxRuntime.jsxs("div", {
2451
+ css: cssVariables,
2423
2452
  children: [/* @__PURE__ */ jsxRuntime.jsxs("div", {
2424
2453
  css: {
2425
2454
  display: "grid",