schummar-table 0.8.2 → 0.10.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
  }
@@ -621,6 +622,25 @@ function useCssVariables() {
621
622
  "--secondaryContrastText": colors.secondary.contrastText
622
623
  }));
623
624
  }
625
+ function ClearFiltersButton() {
626
+ const Button2 = useTheme((t) => t.components.Button);
627
+ const textClearFilters = useTheme((t) => t.text.clearFilters);
628
+ const table = useTableContext();
629
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
630
+ css: tableTheme.defaultClasses.clearFiltersButton,
631
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button2, {
632
+ variant: "text",
633
+ onClick: () => {
634
+ table.update((state) => {
635
+ state.activeColumns.forEach((column) => {
636
+ state.filterValues.delete(column.id);
637
+ });
638
+ });
639
+ },
640
+ children: textClearFilters
641
+ })
642
+ });
643
+ }
624
644
  function ColumnFooter() {
625
645
  const table = useTableContext();
626
646
  const columnId = useColumnContext();
@@ -1635,6 +1655,13 @@ const TableInner = react.memo(function TableInner2({
1635
1655
  width: column.width,
1636
1656
  classes: column.classes
1637
1657
  })));
1658
+ const hasActiveFilters = table.useState((state) => {
1659
+ return state.activeColumns.some((column) => {
1660
+ const filter = state.filters.get(column.id);
1661
+ const filterValue = state.filterValues.get(column.id);
1662
+ return filter !== void 0 && filterValue !== void 0 && filter.isActive(filterValue);
1663
+ });
1664
+ });
1638
1665
  const columnWidths = table.useState("columnWidths", {
1639
1666
  throttle: 16
1640
1667
  });
@@ -1646,6 +1673,7 @@ const TableInner = react.memo(function TableInner2({
1646
1673
  const enableColumnSelection = table.useState("props.enableColumnSelection");
1647
1674
  const enableExport = table.useState((state) => !!state.props.enableExport.copy || !!state.props.enableExport.download);
1648
1675
  const cssVariables = useCssVariables();
1676
+ const enableClearFiltersButton = table.useState("props.enableClearFiltersButton");
1649
1677
  react.useLayoutEffect(() => {
1650
1678
  var _a, _b;
1651
1679
  return (_b = (_a = table.getState().props).debugRender) == null ? void 0 : _b.call(_a, "render table inner");
@@ -1683,19 +1711,21 @@ const TableInner = react.memo(function TableInner2({
1683
1711
  css: [tableTheme.defaultClasses.headerFill, stickyHeader && tableTheme.defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]
1684
1712
  })]
1685
1713
  }),
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]
1714
+ footer: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
1715
+ children: [enableClearFiltersButton && hasActiveFilters && /* @__PURE__ */ jsxRuntime.jsx(ClearFiltersButton, {}), hasFooter && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
1716
+ children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
1717
+ className: classes == null ? void 0 : classes.footerCell,
1718
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1719
+ }), /* @__PURE__ */ jsxRuntime.jsx("div", {
1720
+ className: classes == null ? void 0 : classes.footerCell,
1721
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1722
+ }), activeColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(ColumnContext.Provider, {
1723
+ value: column.id,
1724
+ children: /* @__PURE__ */ jsxRuntime.jsx(ColumnFooter, {})
1725
+ }, column.id)), /* @__PURE__ */ jsxRuntime.jsx("div", {
1726
+ className: classes == null ? void 0 : classes.footerCell,
1727
+ css: [tableTheme.defaultClasses.footerFill, stickyFooter && tableTheme.defaultClasses.stickyBottom, stickyFooter instanceof Object && stickyFooter]
1728
+ })]
1699
1729
  })]
1700
1730
  }),
1701
1731
  children: (itemIds, startIndex) => itemIds.map((itemId, index) => /* @__PURE__ */ jsxRuntime.jsx(Row, {
@@ -2127,9 +2157,10 @@ const defaultTexts = {
2127
2157
  exportDownload: "Download",
2128
2158
  today: "Today",
2129
2159
  thisWeek: "This week",
2160
+ clearFilters: "Clear all filters",
2130
2161
  reset: "Reset",
2131
2162
  loading: "Loading",
2132
- selected: (count) => `${count} selected`
2163
+ deselectAll: "Deselect all"
2133
2164
  };
2134
2165
  const defaultTableTheme = {
2135
2166
  text: defaultTexts,
@@ -2148,14 +2179,11 @@ function useTheme(selector) {
2148
2179
  const process = (t) => {
2149
2180
  var _a2;
2150
2181
  const cell = (_a2 = t.classes) == null ? void 0 : _a2.cell;
2151
- const selected = t.text.selected;
2152
2182
  return __spreadProps(__spreadValues({}, t), {
2153
2183
  classes: __spreadProps(__spreadValues({}, t.classes), {
2154
2184
  cell: cell instanceof Function || Array.isArray(cell) ? memo("theme.classes.cell", cell) : cell
2155
2185
  }),
2156
- text: __spreadProps(__spreadValues({}, t.text), {
2157
- selected: selected instanceof Function || Array.isArray(selected) ? memo("theme.text.selected", selected) : selected
2158
- })
2186
+ text: __spreadValues({}, t.text)
2159
2187
  });
2160
2188
  };
2161
2189
  const theme = (_b = (_a = table == null ? void 0 : table.useState((state) => {
@@ -2343,6 +2371,7 @@ function DatePicker({
2343
2371
  const textToday = useTheme((t) => t.text.today);
2344
2372
  const textThisWeek = useTheme((t) => t.text.thisWeek);
2345
2373
  const textReset = useTheme((t) => t.text.reset);
2374
+ const cssVariables = useCssVariables();
2346
2375
  const [baseDate] = react.useState(new Date());
2347
2376
  const [dateInView, setDateInView] = react.useState(baseDate);
2348
2377
  const [dirty, setDirty] = react.useState();
@@ -2420,6 +2449,7 @@ function DatePicker({
2420
2449
  return (year) => format(new Date(year, 0, 1));
2421
2450
  }, [locale]);
2422
2451
  return /* @__PURE__ */ jsxRuntime.jsxs("div", {
2452
+ css: cssVariables,
2423
2453
  children: [/* @__PURE__ */ jsxRuntime.jsxs("div", {
2424
2454
  css: {
2425
2455
  display: "grid",
@@ -2661,7 +2691,7 @@ function SelectFilter(_m) {
2661
2691
  const Checkbox2 = useTheme((t) => t.components.Checkbox);
2662
2692
  const Search2 = useTheme((t) => t.icons.Search);
2663
2693
  const Clear2 = useTheme((t) => t.icons.Clear);
2664
- const selected = useTheme((t) => t.text.selected);
2694
+ const deselectAll = useTheme((t) => t.text.deselectAll);
2665
2695
  const noResults = useTheme((t) => t.text.noResults);
2666
2696
  const table = useTableContext();
2667
2697
  const columnId = useColumnContext();
@@ -2688,6 +2718,7 @@ function SelectFilter(_m) {
2688
2718
  });
2689
2719
  const [query, setQuery] = react.useState("");
2690
2720
  const filtered = options.filter((option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()));
2721
+ const Button2 = useTheme((t) => t.components.Button);
2691
2722
  return /* @__PURE__ */ jsxRuntime.jsxs("div", {
2692
2723
  css: {
2693
2724
  padding: "calc(var(--spacing) * 2)",
@@ -2709,16 +2740,16 @@ function SelectFilter(_m) {
2709
2740
  maxHeight: "20em",
2710
2741
  overflowY: "auto"
2711
2742
  },
2712
- children: [/* @__PURE__ */ jsxRuntime.jsx(FormControlLabel, {
2743
+ children: [/* @__PURE__ */ jsxRuntime.jsx(Button2, {
2713
2744
  disabled: value.size === 0,
2714
- control: /* @__PURE__ */ jsxRuntime.jsx(Checkbox2, {
2715
- disabled: value.size === 0,
2716
- checked: value.size > 0,
2717
- onChange: () => onChange(/* @__PURE__ */ new Set())
2718
- }),
2719
- label: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
2720
- children: ["<", selected(value.size), ">"]
2721
- })
2745
+ onClick: () => onChange(/* @__PURE__ */ new Set()),
2746
+ variant: "outlined",
2747
+ css: {
2748
+ justifyContent: "center",
2749
+ width: "calc(100% - 5px)",
2750
+ marginRight: "5px"
2751
+ },
2752
+ children: deselectAll
2722
2753
  }), filtered.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(FormControlLabel, {
2723
2754
  control: /* @__PURE__ */ jsxRuntime.jsx(Checkbox2, {
2724
2755
  checked: value.has(option),