@medusajs/ui 4.0.22-snapshot-20250829134337 → 4.0.22-snapshot-20250901132949

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 (113) hide show
  1. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.d.ts +9 -0
  2. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.d.ts.map +1 -0
  3. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.js +58 -0
  4. package/dist/cjs/blocks/data-table/components/data-table-column-visibility-menu.js.map +1 -0
  5. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.d.ts +5 -1
  6. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.d.ts.map +1 -1
  7. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.js +71 -9
  8. package/dist/cjs/blocks/data-table/components/data-table-filter-bar.js.map +1 -1
  9. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.d.ts +5 -1
  10. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.d.ts.map +1 -1
  11. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.js +35 -7
  12. package/dist/cjs/blocks/data-table/components/data-table-filter-menu.js.map +1 -1
  13. package/dist/cjs/blocks/data-table/components/data-table-filter.d.ts +4 -1
  14. package/dist/cjs/blocks/data-table/components/data-table-filter.d.ts.map +1 -1
  15. package/dist/cjs/blocks/data-table/components/data-table-filter.js +488 -73
  16. package/dist/cjs/blocks/data-table/components/data-table-filter.js.map +1 -1
  17. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts +9 -0
  18. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts.map +1 -0
  19. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.js +42 -0
  20. package/dist/cjs/blocks/data-table/components/data-table-non-sortable-header-cell.js.map +1 -0
  21. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.d.ts +9 -0
  22. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.d.ts.map +1 -0
  23. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.js +44 -0
  24. package/dist/cjs/blocks/data-table/components/data-table-sortable-header-cell.js.map +1 -0
  25. package/dist/cjs/blocks/data-table/components/data-table-table.d.ts.map +1 -1
  26. package/dist/cjs/blocks/data-table/components/data-table-table.js +132 -4
  27. package/dist/cjs/blocks/data-table/components/data-table-table.js.map +1 -1
  28. package/dist/cjs/blocks/data-table/components/data-table-toolbar.d.ts +12 -0
  29. package/dist/cjs/blocks/data-table/components/data-table-toolbar.d.ts.map +1 -1
  30. package/dist/cjs/blocks/data-table/components/data-table-toolbar.js +5 -2
  31. package/dist/cjs/blocks/data-table/components/data-table-toolbar.js.map +1 -1
  32. package/dist/cjs/blocks/data-table/context/data-table-context-provider.d.ts.map +1 -1
  33. package/dist/cjs/blocks/data-table/context/data-table-context-provider.js +5 -1
  34. package/dist/cjs/blocks/data-table/context/data-table-context-provider.js.map +1 -1
  35. package/dist/cjs/blocks/data-table/context/data-table-context.d.ts +2 -0
  36. package/dist/cjs/blocks/data-table/context/data-table-context.d.ts.map +1 -1
  37. package/dist/cjs/blocks/data-table/context/data-table-context.js.map +1 -1
  38. package/dist/cjs/blocks/data-table/data-table.d.ts +6 -1
  39. package/dist/cjs/blocks/data-table/data-table.d.ts.map +1 -1
  40. package/dist/cjs/blocks/data-table/data-table.js +4 -0
  41. package/dist/cjs/blocks/data-table/data-table.js.map +1 -1
  42. package/dist/cjs/blocks/data-table/index.d.ts +2 -1
  43. package/dist/cjs/blocks/data-table/index.d.ts.map +1 -1
  44. package/dist/cjs/blocks/data-table/index.js.map +1 -1
  45. package/dist/cjs/blocks/data-table/types.d.ts +75 -3
  46. package/dist/cjs/blocks/data-table/types.d.ts.map +1 -1
  47. package/dist/cjs/blocks/data-table/types.js.map +1 -1
  48. package/dist/cjs/blocks/data-table/use-data-table.d.ts +21 -3
  49. package/dist/cjs/blocks/data-table/use-data-table.d.ts.map +1 -1
  50. package/dist/cjs/blocks/data-table/use-data-table.js +47 -7
  51. package/dist/cjs/blocks/data-table/use-data-table.js.map +1 -1
  52. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.d.ts.map +1 -1
  53. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.js +2 -1
  54. package/dist/cjs/blocks/data-table/utils/create-data-table-column-helper.js.map +1 -1
  55. package/dist/cjs/blocks/data-table/utils/create-data-table-filter-helper.d.ts +27 -0
  56. package/dist/cjs/blocks/data-table/utils/create-data-table-filter-helper.d.ts.map +1 -1
  57. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.d.ts +9 -0
  58. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.d.ts.map +1 -0
  59. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.js +54 -0
  60. package/dist/esm/blocks/data-table/components/data-table-column-visibility-menu.js.map +1 -0
  61. package/dist/esm/blocks/data-table/components/data-table-filter-bar.d.ts +5 -1
  62. package/dist/esm/blocks/data-table/components/data-table-filter-bar.d.ts.map +1 -1
  63. package/dist/esm/blocks/data-table/components/data-table-filter-bar.js +71 -9
  64. package/dist/esm/blocks/data-table/components/data-table-filter-bar.js.map +1 -1
  65. package/dist/esm/blocks/data-table/components/data-table-filter-menu.d.ts +5 -1
  66. package/dist/esm/blocks/data-table/components/data-table-filter-menu.d.ts.map +1 -1
  67. package/dist/esm/blocks/data-table/components/data-table-filter-menu.js +35 -7
  68. package/dist/esm/blocks/data-table/components/data-table-filter-menu.js.map +1 -1
  69. package/dist/esm/blocks/data-table/components/data-table-filter.d.ts +4 -1
  70. package/dist/esm/blocks/data-table/components/data-table-filter.d.ts.map +1 -1
  71. package/dist/esm/blocks/data-table/components/data-table-filter.js +489 -74
  72. package/dist/esm/blocks/data-table/components/data-table-filter.js.map +1 -1
  73. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts +9 -0
  74. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.d.ts.map +1 -0
  75. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.js +38 -0
  76. package/dist/esm/blocks/data-table/components/data-table-non-sortable-header-cell.js.map +1 -0
  77. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.d.ts +9 -0
  78. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.d.ts.map +1 -0
  79. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.js +40 -0
  80. package/dist/esm/blocks/data-table/components/data-table-sortable-header-cell.js.map +1 -0
  81. package/dist/esm/blocks/data-table/components/data-table-table.d.ts.map +1 -1
  82. package/dist/esm/blocks/data-table/components/data-table-table.js +132 -4
  83. package/dist/esm/blocks/data-table/components/data-table-table.js.map +1 -1
  84. package/dist/esm/blocks/data-table/components/data-table-toolbar.d.ts +12 -0
  85. package/dist/esm/blocks/data-table/components/data-table-toolbar.d.ts.map +1 -1
  86. package/dist/esm/blocks/data-table/components/data-table-toolbar.js +5 -2
  87. package/dist/esm/blocks/data-table/components/data-table-toolbar.js.map +1 -1
  88. package/dist/esm/blocks/data-table/context/data-table-context-provider.d.ts.map +1 -1
  89. package/dist/esm/blocks/data-table/context/data-table-context-provider.js +5 -1
  90. package/dist/esm/blocks/data-table/context/data-table-context-provider.js.map +1 -1
  91. package/dist/esm/blocks/data-table/context/data-table-context.d.ts +2 -0
  92. package/dist/esm/blocks/data-table/context/data-table-context.d.ts.map +1 -1
  93. package/dist/esm/blocks/data-table/context/data-table-context.js.map +1 -1
  94. package/dist/esm/blocks/data-table/data-table.d.ts +6 -1
  95. package/dist/esm/blocks/data-table/data-table.d.ts.map +1 -1
  96. package/dist/esm/blocks/data-table/data-table.js +4 -0
  97. package/dist/esm/blocks/data-table/data-table.js.map +1 -1
  98. package/dist/esm/blocks/data-table/index.d.ts +2 -1
  99. package/dist/esm/blocks/data-table/index.d.ts.map +1 -1
  100. package/dist/esm/blocks/data-table/index.js.map +1 -1
  101. package/dist/esm/blocks/data-table/types.d.ts +75 -3
  102. package/dist/esm/blocks/data-table/types.d.ts.map +1 -1
  103. package/dist/esm/blocks/data-table/types.js.map +1 -1
  104. package/dist/esm/blocks/data-table/use-data-table.d.ts +21 -3
  105. package/dist/esm/blocks/data-table/use-data-table.d.ts.map +1 -1
  106. package/dist/esm/blocks/data-table/use-data-table.js +47 -7
  107. package/dist/esm/blocks/data-table/use-data-table.js.map +1 -1
  108. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.d.ts.map +1 -1
  109. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.js +2 -1
  110. package/dist/esm/blocks/data-table/utils/create-data-table-column-helper.js.map +1 -1
  111. package/dist/esm/blocks/data-table/utils/create-data-table-filter-helper.d.ts +27 -0
  112. package/dist/esm/blocks/data-table/utils/create-data-table-filter-helper.d.ts.map +1 -1
  113. package/package.json +6 -3
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface DataTableColumnVisibilityMenuProps {
3
+ className?: string;
4
+ tooltip?: string;
5
+ }
6
+ declare const DataTableColumnVisibilityMenu: ({ className, tooltip, }: DataTableColumnVisibilityMenuProps) => React.JSX.Element | null;
7
+ export { DataTableColumnVisibilityMenu };
8
+ export type { DataTableColumnVisibilityMenuProps };
9
+ //# sourceMappingURL=data-table-column-visibility-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-column-visibility-menu.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-column-visibility-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,UAAU,kCAAkC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,QAAA,MAAM,6BAA6B,4BAGhC,kCAAkC,6BA8EpC,CAAA;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAA;AACxC,YAAY,EAAE,kCAAkC,EAAE,CAAA"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataTableColumnVisibilityMenu = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const checkbox_1 = require("../../../components/checkbox");
7
+ const dropdown_menu_1 = require("../../../components/dropdown-menu");
8
+ const icon_button_1 = require("../../../components/icon-button");
9
+ const tooltip_1 = require("../../../components/tooltip");
10
+ const icons_1 = require("@medusajs/icons");
11
+ const use_data_table_context_1 = require("../context/use-data-table-context");
12
+ const DataTableColumnVisibilityMenu = ({ className, tooltip, }) => {
13
+ const { instance, enableColumnVisibility } = (0, use_data_table_context_1.useDataTableContext)();
14
+ if (!enableColumnVisibility) {
15
+ return null;
16
+ }
17
+ const columns = instance
18
+ .getAllColumns()
19
+ .filter((column) => column.getCanHide());
20
+ const handleToggleColumn = (column) => {
21
+ column.toggleVisibility();
22
+ };
23
+ const handleToggleAll = (value) => {
24
+ instance.setColumnVisibility(Object.fromEntries(columns.map((column) => [column.id, value])));
25
+ };
26
+ const allColumnsVisible = columns.every((column) => column.getIsVisible());
27
+ const someColumnsVisible = columns.some((column) => column.getIsVisible());
28
+ const Wrapper = tooltip ? tooltip_1.Tooltip : react_1.default.Fragment;
29
+ const wrapperProps = tooltip ? { content: tooltip } : {};
30
+ return (react_1.default.createElement(dropdown_menu_1.DropdownMenu, null,
31
+ react_1.default.createElement(Wrapper, { ...wrapperProps },
32
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Trigger, { asChild: true },
33
+ react_1.default.createElement(icon_button_1.IconButton, { size: "small", className: className },
34
+ react_1.default.createElement(icons_1.Adjustments, null)))),
35
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Content, { align: "end", className: "min-w-[200px] max-h-[400px] overflow-hidden" },
36
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Label, null, "Toggle columns"),
37
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Separator, null),
38
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Item, { onSelect: (e) => {
39
+ e.preventDefault();
40
+ handleToggleAll(!allColumnsVisible);
41
+ } },
42
+ react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
43
+ react_1.default.createElement(checkbox_1.Checkbox, { checked: allColumnsVisible ? true : (someColumnsVisible && !allColumnsVisible) ? "indeterminate" : false }),
44
+ react_1.default.createElement("span", null, "Toggle all"))),
45
+ react_1.default.createElement(dropdown_menu_1.DropdownMenu.Separator, null),
46
+ react_1.default.createElement("div", { className: "max-h-[250px] overflow-y-auto" }, columns.map((column) => {
47
+ var _a;
48
+ return (react_1.default.createElement(dropdown_menu_1.DropdownMenu.Item, { key: column.id, onSelect: (e) => {
49
+ e.preventDefault();
50
+ handleToggleColumn(column);
51
+ } },
52
+ react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
53
+ react_1.default.createElement(checkbox_1.Checkbox, { checked: column.getIsVisible() }),
54
+ react_1.default.createElement("span", { className: "truncate" }, ((_a = column.columnDef.meta) === null || _a === void 0 ? void 0 : _a.name) || column.id))));
55
+ })))));
56
+ };
57
+ exports.DataTableColumnVisibilityMenu = DataTableColumnVisibilityMenu;
58
+ //# sourceMappingURL=data-table-column-visibility-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-column-visibility-menu.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-column-visibility-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\"\nimport { Column } from \"@tanstack/react-table\"\n\nimport { Checkbox } from \"@/components/checkbox\"\nimport { DropdownMenu } from \"@/components/dropdown-menu\"\nimport { IconButton } from \"@/components/icon-button\"\nimport { Tooltip } from \"@/components/tooltip\"\nimport { Adjustments } from \"@medusajs/icons\"\nimport { clx } from \"@/utils/clx\"\n\nimport { useDataTableContext } from \"../context/use-data-table-context\"\n\ninterface DataTableColumnVisibilityMenuProps {\n className?: string\n tooltip?: string\n}\n\nconst DataTableColumnVisibilityMenu = ({\n className,\n tooltip,\n}: DataTableColumnVisibilityMenuProps) => {\n const { instance, enableColumnVisibility } = useDataTableContext()\n\n if (!enableColumnVisibility) {\n return null\n }\n\n const columns = instance\n .getAllColumns()\n .filter((column) => column.getCanHide())\n\n const handleToggleColumn = (column: Column<any, any>) => {\n column.toggleVisibility()\n }\n\n const handleToggleAll = (value: boolean) => {\n instance.setColumnVisibility(\n Object.fromEntries(\n columns.map((column: Column<any, any>) => [column.id, value])\n )\n )\n }\n\n const allColumnsVisible = columns.every((column: Column<any, any>) => column.getIsVisible())\n const someColumnsVisible = columns.some((column: Column<any, any>) => column.getIsVisible())\n\n const Wrapper = tooltip ? Tooltip : React.Fragment\n const wrapperProps = tooltip ? { content: tooltip } : ({} as any)\n\n return (\n <DropdownMenu>\n <Wrapper {...wrapperProps}>\n <DropdownMenu.Trigger asChild>\n <IconButton size=\"small\" className={className}>\n <Adjustments />\n </IconButton>\n </DropdownMenu.Trigger>\n </Wrapper>\n <DropdownMenu.Content align=\"end\" className=\"min-w-[200px] max-h-[400px] overflow-hidden\">\n <DropdownMenu.Label>Toggle columns</DropdownMenu.Label>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n onSelect={(e: Event) => {\n e.preventDefault()\n handleToggleAll(!allColumnsVisible)\n }}\n >\n <div className=\"flex items-center gap-x-2\">\n <Checkbox\n checked={allColumnsVisible ? true : (someColumnsVisible && !allColumnsVisible) ? \"indeterminate\" : false}\n />\n <span>Toggle all</span>\n </div>\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <div className=\"max-h-[250px] overflow-y-auto\">\n {columns.map((column: Column<any, any>) => {\n return (\n <DropdownMenu.Item\n key={column.id}\n onSelect={(e: Event) => {\n e.preventDefault()\n handleToggleColumn(column)\n }}\n >\n <div className=\"flex items-center gap-x-2\">\n <Checkbox checked={column.getIsVisible()} />\n <span className=\"truncate\">\n {(column.columnDef.meta as any)?.name || column.id}\n </span>\n </div>\n </DropdownMenu.Item>\n )\n })}\n </div>\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\n\nexport { DataTableColumnVisibilityMenu }\nexport type { DataTableColumnVisibilityMenuProps }\n"]}
@@ -1,9 +1,13 @@
1
1
  import * as React from "react";
2
2
  interface DataTableFilterBarProps {
3
3
  clearAllFiltersLabel?: string;
4
+ alwaysShow?: boolean;
5
+ sortingTooltip?: string;
6
+ columnsTooltip?: string;
7
+ children?: React.ReactNode;
4
8
  }
5
9
  declare const DataTableFilterBar: {
6
- ({ clearAllFiltersLabel, }: DataTableFilterBarProps): React.JSX.Element | null;
10
+ ({ clearAllFiltersLabel, alwaysShow, sortingTooltip, columnsTooltip, children, }: DataTableFilterBarProps): React.JSX.Element | null;
7
11
  displayName: string;
8
12
  };
9
13
  export { DataTableFilterBar };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter-bar.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-bar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,UAAU,uBAAuB;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,QAAA,MAAM,kBAAkB;gCAErB,uBAAuB;;CAqCzB,CAAA;AAkBD,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,YAAY,EAAE,uBAAuB,EAAE,CAAA"}
1
+ {"version":3,"file":"data-table-filter-bar.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-bar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,UAAU,uBAAuB;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAQD,QAAA,MAAM,kBAAkB;sFAMrB,uBAAuB;;CAgHzB,CAAA;AAkBD,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,YAAY,EAAE,uBAAuB,EAAE,CAAA"}
@@ -5,25 +5,87 @@ exports.DataTableFilterBar = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const data_table_filter_1 = require("../../data-table/components/data-table-filter");
8
+ const data_table_filter_menu_1 = require("../../data-table/components/data-table-filter-menu");
9
+ const data_table_sorting_menu_1 = require("../../data-table/components/data-table-sorting-menu");
10
+ const data_table_column_visibility_menu_1 = require("../../data-table/components/data-table-column-visibility-menu");
8
11
  const use_data_table_context_1 = require("../../data-table/context/use-data-table-context");
9
- const button_1 = require("../../../components/button");
10
12
  const skeleton_1 = require("../../../components/skeleton");
11
- const DataTableFilterBar = ({ clearAllFiltersLabel = "Clear all", }) => {
12
- const { instance } = (0, use_data_table_context_1.useDataTableContext)();
13
- const filterState = instance.getFiltering();
13
+ const DataTableFilterBar = ({ clearAllFiltersLabel = "Clear all", alwaysShow = false, sortingTooltip, columnsTooltip, children, }) => {
14
+ const { instance, enableColumnVisibility } = (0, use_data_table_context_1.useDataTableContext)();
15
+ // Local state for managing intermediate filters
16
+ const [localFilters, setLocalFilters] = React.useState([]);
17
+ const parentFilterState = instance.getFiltering();
18
+ const availableFilters = instance.getFilters();
19
+ // Sync parent filters with local state
20
+ React.useEffect(() => {
21
+ setLocalFilters(prevLocalFilters => {
22
+ const parentIds = Object.keys(parentFilterState);
23
+ const localIds = prevLocalFilters.map(f => f.id);
24
+ // Remove local filters that have been removed from parent
25
+ const updatedLocalFilters = prevLocalFilters.filter(f => parentIds.includes(f.id) || f.isNew);
26
+ // Add parent filters that don't exist locally
27
+ parentIds.forEach(id => {
28
+ if (!localIds.includes(id)) {
29
+ updatedLocalFilters.push({
30
+ id,
31
+ value: parentFilterState[id],
32
+ isNew: false
33
+ });
34
+ }
35
+ });
36
+ // Only update if there's an actual change
37
+ if (updatedLocalFilters.length !== prevLocalFilters.length ||
38
+ updatedLocalFilters.some((f, i) => { var _a; return f.id !== ((_a = prevLocalFilters[i]) === null || _a === void 0 ? void 0 : _a.id); })) {
39
+ return updatedLocalFilters;
40
+ }
41
+ return prevLocalFilters;
42
+ });
43
+ }, [parentFilterState]);
44
+ // Add a new filter locally
45
+ const addLocalFilter = React.useCallback((id, value) => {
46
+ setLocalFilters(prev => [...prev, { id, value, isNew: true }]);
47
+ }, []);
48
+ // Update a local filter's value
49
+ const updateLocalFilter = React.useCallback((id, value) => {
50
+ setLocalFilters(prev => prev.map(f => f.id === id ? { ...f, value, isNew: false } : f));
51
+ // If the filter has a meaningful value, propagate to parent
52
+ if (value !== undefined && value !== null && value !== '' &&
53
+ !(Array.isArray(value) && value.length === 0)) {
54
+ instance.updateFilter({ id, value });
55
+ }
56
+ }, [instance]);
57
+ // Remove a local filter
58
+ const removeLocalFilter = React.useCallback((id) => {
59
+ setLocalFilters(prev => prev.filter(f => f.id !== id));
60
+ // Also remove from parent if it exists there
61
+ if (parentFilterState[id] !== undefined) {
62
+ instance.removeFilter(id);
63
+ }
64
+ }, [instance, parentFilterState]);
14
65
  const clearFilters = React.useCallback(() => {
66
+ setLocalFilters([]);
15
67
  instance.clearFilters();
16
68
  }, [instance]);
17
- const filterCount = Object.keys(filterState).length;
18
- if (filterCount === 0) {
69
+ const filterCount = localFilters.length;
70
+ const hasAvailableFilters = availableFilters.length > 0;
71
+ // Check if sorting is enabled
72
+ const sortableColumns = instance.getAllColumns().filter((column) => column.getCanSort());
73
+ const hasSorting = instance.enableSorting && sortableColumns.length > 0;
74
+ // Always show the filter bar when there are available filters, sorting, column visibility, or when forced
75
+ if (filterCount === 0 && !hasAvailableFilters && !hasSorting && !enableColumnVisibility && !alwaysShow && !children) {
19
76
  return null;
20
77
  }
21
78
  if (instance.showSkeleton) {
22
79
  return React.createElement(DataTableFilterBarSkeleton, { filterCount: filterCount });
23
80
  }
24
- return (React.createElement("div", { className: "bg-ui-bg-subtle flex w-full flex-nowrap items-center gap-2 overflow-x-auto border-t px-6 py-2 md:flex-wrap" },
25
- Object.entries(filterState).map(([id, filter]) => (React.createElement(data_table_filter_1.DataTableFilter, { key: id, id: id, filter: filter }))),
26
- filterCount > 0 ? (React.createElement(button_1.Button, { variant: "transparent", size: "small", className: "text-ui-fg-muted hover:text-ui-fg-subtle flex-shrink-0 whitespace-nowrap", type: "button", onClick: clearFilters }, clearAllFiltersLabel)) : null));
81
+ return (React.createElement("div", { className: "bg-ui-bg-subtle flex w-full flex-nowrap items-center justify-between gap-2 overflow-x-auto border-t px-6 py-2" },
82
+ React.createElement("div", { className: "flex flex-nowrap items-center gap-2 md:flex-wrap" },
83
+ localFilters.map((localFilter) => (React.createElement(data_table_filter_1.DataTableFilter, { key: localFilter.id, id: localFilter.id, filter: localFilter.value, isNew: localFilter.isNew, onUpdate: (value) => updateLocalFilter(localFilter.id, value), onRemove: () => removeLocalFilter(localFilter.id) }))),
84
+ hasAvailableFilters && (React.createElement(data_table_filter_menu_1.DataTableFilterMenu, { onAddFilter: addLocalFilter }))),
85
+ React.createElement("div", { className: "flex flex-shrink-0 items-center gap-2" },
86
+ hasSorting && React.createElement(data_table_sorting_menu_1.DataTableSortingMenu, { tooltip: sortingTooltip }),
87
+ enableColumnVisibility && React.createElement(data_table_column_visibility_menu_1.DataTableColumnVisibilityMenu, { tooltip: columnsTooltip }),
88
+ children)));
27
89
  };
28
90
  exports.DataTableFilterBar = DataTableFilterBar;
29
91
  DataTableFilterBar.displayName = "DataTable.FilterBar";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter-bar.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-bar.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAA;;;;AAEZ,qDAA8B;AAE9B,wFAAkF;AAClF,+FAAwF;AACxF,gDAA4C;AAC5C,oDAAgD;AAMhD,MAAM,kBAAkB,GAAG,CAAC,EAC1B,oBAAoB,GAAG,WAAW,GACV,EAAE,EAAE;IAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,4CAAmB,GAAE,CAAA;IAE1C,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAA;IAE3C,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,QAAQ,CAAC,YAAY,EAAE,CAAA;IACzB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAA;IAEnD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,oBAAC,0BAA0B,IAAC,WAAW,EAAE,WAAW,GAAI,CAAA;IACjE,CAAC;IAED,OAAO,CACL,6BAAK,SAAS,EAAC,4GAA4G;QACxH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CACjD,oBAAC,mCAAe,IAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAI,CACrD,CAAC;QACD,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CACjB,oBAAC,eAAM,IACL,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,0EAA0E,EACpF,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,IAEpB,oBAAoB,CACd,CACV,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC,CAAA;AAkBQ,gDAAkB;AAjB3B,kBAAkB,CAAC,WAAW,GAAG,qBAAqB,CAAA;AAEtD,MAAM,0BAA0B,GAAG,CAAC,EAClC,WAAW,GAGZ,EAAE,EAAE;IACH,OAAO,CACL,6BAAK,SAAS,EAAC,4GAA4G;QACxH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CACrD,oBAAC,mBAAQ,IAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,eAAe,GAAG,CACnD,CAAC;QACD,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAC,mBAAQ,IAAC,SAAS,EAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAC3D,CACP,CAAA;AACH,CAAC,CAAA","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { DataTableFilter } from \"@/blocks/data-table/components/data-table-filter\"\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport { Button } from \"@/components/button\"\nimport { Skeleton } from \"@/components/skeleton\"\n\ninterface DataTableFilterBarProps {\n clearAllFiltersLabel?: string\n}\n\nconst DataTableFilterBar = ({\n clearAllFiltersLabel = \"Clear all\",\n}: DataTableFilterBarProps) => {\n const { instance } = useDataTableContext()\n\n const filterState = instance.getFiltering()\n\n const clearFilters = React.useCallback(() => {\n instance.clearFilters()\n }, [instance])\n\n const filterCount = Object.keys(filterState).length\n\n if (filterCount === 0) {\n return null\n }\n\n if (instance.showSkeleton) {\n return <DataTableFilterBarSkeleton filterCount={filterCount} />\n }\n\n return (\n <div className=\"bg-ui-bg-subtle flex w-full flex-nowrap items-center gap-2 overflow-x-auto border-t px-6 py-2 md:flex-wrap\">\n {Object.entries(filterState).map(([id, filter]) => (\n <DataTableFilter key={id} id={id} filter={filter} />\n ))}\n {filterCount > 0 ? (\n <Button\n variant=\"transparent\"\n size=\"small\"\n className=\"text-ui-fg-muted hover:text-ui-fg-subtle flex-shrink-0 whitespace-nowrap\"\n type=\"button\"\n onClick={clearFilters}\n >\n {clearAllFiltersLabel}\n </Button>\n ) : null}\n </div>\n )\n}\nDataTableFilterBar.displayName = \"DataTable.FilterBar\"\n\nconst DataTableFilterBarSkeleton = ({\n filterCount,\n}: {\n filterCount: number\n}) => {\n return (\n <div className=\"bg-ui-bg-subtle flex w-full flex-nowrap items-center gap-2 overflow-x-auto border-t px-6 py-2 md:flex-wrap\">\n {Array.from({ length: filterCount }).map((_, index) => (\n <Skeleton key={index} className=\"h-7 w-[180px]\" />\n ))}\n {filterCount > 0 ? <Skeleton className=\"h-7 w-[66px]\" /> : null}\n </div>\n )\n}\n\nexport { DataTableFilterBar }\nexport type { DataTableFilterBarProps }\n\n"]}
1
+ {"version":3,"file":"data-table-filter-bar.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-bar.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { DataTableFilter } from \"@/blocks/data-table/components/data-table-filter\"\nimport { DataTableFilterMenu } from \"@/blocks/data-table/components/data-table-filter-menu\"\nimport { DataTableSortingMenu } from \"@/blocks/data-table/components/data-table-sorting-menu\"\nimport { DataTableColumnVisibilityMenu } from \"@/blocks/data-table/components/data-table-column-visibility-menu\"\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport { Button } from \"@/components/button\"\nimport { Skeleton } from \"@/components/skeleton\"\n\ninterface DataTableFilterBarProps {\n clearAllFiltersLabel?: string\n alwaysShow?: boolean\n sortingTooltip?: string\n columnsTooltip?: string\n children?: React.ReactNode\n}\n\ninterface LocalFilter {\n id: string\n value: unknown\n isNew: boolean\n}\n\nconst DataTableFilterBar = ({\n clearAllFiltersLabel = \"Clear all\",\n alwaysShow = false,\n sortingTooltip,\n columnsTooltip,\n children,\n}: DataTableFilterBarProps) => {\n const { instance, enableColumnVisibility } = useDataTableContext()\n \n // Local state for managing intermediate filters\n const [localFilters, setLocalFilters] = React.useState<LocalFilter[]>([])\n \n const parentFilterState = instance.getFiltering()\n const availableFilters = instance.getFilters()\n \n // Sync parent filters with local state\n React.useEffect(() => {\n setLocalFilters(prevLocalFilters => {\n const parentIds = Object.keys(parentFilterState)\n const localIds = prevLocalFilters.map(f => f.id)\n \n // Remove local filters that have been removed from parent\n const updatedLocalFilters = prevLocalFilters.filter(f => \n parentIds.includes(f.id) || f.isNew\n )\n \n // Add parent filters that don't exist locally\n parentIds.forEach(id => {\n if (!localIds.includes(id)) {\n updatedLocalFilters.push({\n id,\n value: parentFilterState[id],\n isNew: false\n })\n }\n })\n \n // Only update if there's an actual change\n if (updatedLocalFilters.length !== prevLocalFilters.length ||\n updatedLocalFilters.some((f, i) => f.id !== prevLocalFilters[i]?.id)) {\n return updatedLocalFilters\n }\n return prevLocalFilters\n })\n }, [parentFilterState])\n \n // Add a new filter locally\n const addLocalFilter = React.useCallback((id: string, value: unknown) => {\n setLocalFilters(prev => [...prev, { id, value, isNew: true }])\n }, [])\n \n // Update a local filter's value\n const updateLocalFilter = React.useCallback((id: string, value: unknown) => {\n setLocalFilters(prev => prev.map(f => \n f.id === id ? { ...f, value, isNew: false } : f\n ))\n \n // If the filter has a meaningful value, propagate to parent\n if (value !== undefined && value !== null && value !== '' && \n !(Array.isArray(value) && value.length === 0)) {\n instance.updateFilter({ id, value })\n }\n }, [instance])\n \n // Remove a local filter\n const removeLocalFilter = React.useCallback((id: string) => {\n setLocalFilters(prev => prev.filter(f => f.id !== id))\n // Also remove from parent if it exists there\n if (parentFilterState[id] !== undefined) {\n instance.removeFilter(id)\n }\n }, [instance, parentFilterState])\n\n const clearFilters = React.useCallback(() => {\n setLocalFilters([])\n instance.clearFilters()\n }, [instance])\n\n const filterCount = localFilters.length\n const hasAvailableFilters = availableFilters.length > 0\n \n // Check if sorting is enabled\n const sortableColumns = instance.getAllColumns().filter((column) => column.getCanSort())\n const hasSorting = instance.enableSorting && sortableColumns.length > 0\n\n // Always show the filter bar when there are available filters, sorting, column visibility, or when forced\n if (filterCount === 0 && !hasAvailableFilters && !hasSorting && !enableColumnVisibility && !alwaysShow && !children) {\n return null\n }\n\n if (instance.showSkeleton) {\n return <DataTableFilterBarSkeleton filterCount={filterCount} />\n }\n\n return (\n <div className=\"bg-ui-bg-subtle flex w-full flex-nowrap items-center justify-between gap-2 overflow-x-auto border-t px-6 py-2\">\n <div className=\"flex flex-nowrap items-center gap-2 md:flex-wrap\">\n {localFilters.map((localFilter) => (\n <DataTableFilter \n key={localFilter.id} \n id={localFilter.id} \n filter={localFilter.value} \n isNew={localFilter.isNew}\n onUpdate={(value) => updateLocalFilter(localFilter.id, value)}\n onRemove={() => removeLocalFilter(localFilter.id)}\n />\n ))}\n {hasAvailableFilters && (\n <DataTableFilterMenu onAddFilter={addLocalFilter} />\n )}\n </div>\n <div className=\"flex flex-shrink-0 items-center gap-2\">\n {hasSorting && <DataTableSortingMenu tooltip={sortingTooltip} />}\n {enableColumnVisibility && <DataTableColumnVisibilityMenu tooltip={columnsTooltip} />}\n {children}\n </div>\n </div>\n )\n}\nDataTableFilterBar.displayName = \"DataTable.FilterBar\"\n\nconst DataTableFilterBarSkeleton = ({\n filterCount,\n}: {\n filterCount: number\n}) => {\n return (\n <div className=\"bg-ui-bg-subtle flex w-full flex-nowrap items-center gap-2 overflow-x-auto border-t px-6 py-2 md:flex-wrap\">\n {Array.from({ length: filterCount }).map((_, index) => (\n <Skeleton key={index} className=\"h-7 w-[180px]\" />\n ))}\n {filterCount > 0 ? <Skeleton className=\"h-7 w-[66px]\" /> : null}\n </div>\n )\n}\n\nexport { DataTableFilterBar }\nexport type { DataTableFilterBarProps }\n\n"]}
@@ -4,13 +4,17 @@ interface DataTableFilterMenuProps {
4
4
  * The tooltip to show when hovering over the filter menu.
5
5
  */
6
6
  tooltip?: string;
7
+ /**
8
+ * Callback when a filter is added
9
+ */
10
+ onAddFilter?: (id: string, value: unknown) => void;
7
11
  }
8
12
  /**
9
13
  * This component adds a filter menu to the data table, allowing users
10
14
  * to filter the table's data.
11
15
  */
12
16
  declare const DataTableFilterMenu: {
13
- (props: DataTableFilterMenuProps): React.JSX.Element;
17
+ ({ tooltip, onAddFilter }: DataTableFilterMenuProps): React.JSX.Element;
14
18
  displayName: string;
15
19
  };
16
20
  export { DataTableFilterMenu };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter-menu.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,UAAU,wBAAwB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB;YAAW,wBAAwB;;CA+C3D,CAAA;AAOD,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAC9B,YAAY,EAAE,wBAAwB,EAAE,CAAA"}
1
+ {"version":3,"file":"data-table-filter-menu.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,UAAU,wBAAwB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnD;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB;+BAA8B,wBAAwB;;CA2E9E,CAAA;AAOD,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAC9B,YAAY,EAAE,wBAAwB,EAAE,CAAA"}
@@ -13,7 +13,7 @@ const icons_1 = require("@medusajs/icons");
13
13
  * This component adds a filter menu to the data table, allowing users
14
14
  * to filter the table's data.
15
15
  */
16
- const DataTableFilterMenu = (props) => {
16
+ const DataTableFilterMenu = ({ tooltip, onAddFilter }) => {
17
17
  const { instance } = (0, use_data_table_context_1.useDataTableContext)();
18
18
  const enabledFilters = Object.keys(instance.getFiltering());
19
19
  const filterOptions = instance
@@ -22,9 +22,9 @@ const DataTableFilterMenu = (props) => {
22
22
  if (!enabledFilters.length && !filterOptions.length) {
23
23
  throw new Error("DataTable.FilterMenu was rendered but there are no filters to apply. Make sure to pass filters to 'useDataTable'");
24
24
  }
25
- const Wrapper = props.tooltip ? tooltip_1.Tooltip : React.Fragment;
26
- const wrapperProps = props.tooltip
27
- ? { content: props.tooltip, hidden: filterOptions.length === 0 }
25
+ const Wrapper = tooltip ? tooltip_1.Tooltip : React.Fragment;
26
+ const wrapperProps = tooltip
27
+ ? { content: tooltip, hidden: filterOptions.length === 0 }
28
28
  : {};
29
29
  if (instance.showSkeleton) {
30
30
  return React.createElement(DataTableFilterMenuSkeleton, null);
@@ -34,9 +34,37 @@ const DataTableFilterMenu = (props) => {
34
34
  React.createElement(dropdown_menu_1.DropdownMenu.Trigger, { asChild: true, disabled: filterOptions.length === 0 },
35
35
  React.createElement(icon_button_1.IconButton, { size: "small" },
36
36
  React.createElement(icons_1.Funnel, null)))),
37
- React.createElement(dropdown_menu_1.DropdownMenu.Content, { side: "bottom" }, filterOptions.map((filter) => (React.createElement(dropdown_menu_1.DropdownMenu.Item, { key: filter.id, onClick: () => {
38
- instance.addFilter({ id: filter.id, value: undefined });
39
- } }, filter.label))))));
37
+ React.createElement(dropdown_menu_1.DropdownMenu.Content, { side: "bottom", align: "start" }, filterOptions.map((filter) => {
38
+ const getDefaultValue = () => {
39
+ switch (filter.type) {
40
+ case "select":
41
+ case "multiselect":
42
+ return [];
43
+ case "string":
44
+ return "";
45
+ case "number":
46
+ return null;
47
+ case "date":
48
+ return null;
49
+ case "radio":
50
+ return null;
51
+ case "custom":
52
+ return null;
53
+ default:
54
+ return null;
55
+ }
56
+ };
57
+ return (React.createElement(dropdown_menu_1.DropdownMenu.Item, { key: filter.id, onClick: (e) => {
58
+ // Prevent any bubbling that might interfere
59
+ e.stopPropagation();
60
+ if (onAddFilter) {
61
+ onAddFilter(filter.id, getDefaultValue());
62
+ }
63
+ else {
64
+ instance.addFilter({ id: filter.id, value: getDefaultValue() });
65
+ }
66
+ } }, filter.label));
67
+ }))));
40
68
  };
41
69
  exports.DataTableFilterMenu = DataTableFilterMenu;
42
70
  DataTableFilterMenu.displayName = "DataTable.FilterMenu";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter-menu.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-menu.tsx"],"names":[],"mappings":";;;;AAAA,qDAA8B;AAE9B,+FAAwF;AACxF,8DAAyD;AACzD,0DAAqD;AACrD,oDAAgD;AAChD,kDAA8C;AAC9C,2CAAwC;AASxC;;;GAGG;AACH,MAAM,mBAAmB,GAAG,CAAC,KAA+B,EAAE,EAAE;IAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,4CAAmB,GAAE,CAAA;IAE1C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;IAE3D,MAAM,aAAa,GAAG,QAAQ;SAC3B,UAAU,EAAE;SACZ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1D,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;IACxD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO;QAChC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QAChE,CAAC,CAAE,EAAU,CAAA;IAEf,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,oBAAC,2BAA2B,OAAG,CAAA;IACxC,CAAC;IAED,OAAO,CACL,oBAAC,4BAAY;QACX,oBAAC,OAAO,OAAK,YAAY;YACvB,oBAAC,4BAAY,CAAC,OAAO,IAAC,OAAO,QAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;gBAChE,oBAAC,wBAAU,IAAC,IAAI,EAAC,OAAO;oBACtB,oBAAC,cAAM,OAAG,CACC,CACQ,CACf;QACV,oBAAC,4BAAY,CAAC,OAAO,IAAC,IAAI,EAAC,QAAQ,IAChC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,oBAAC,4BAAY,CAAC,IAAI,IAChB,GAAG,EAAE,MAAM,CAAC,EAAE,EACd,OAAO,EAAE,GAAG,EAAE;gBACZ,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACzD,CAAC,IAEA,MAAM,CAAC,KAAK,CACK,CACrB,CAAC,CACmB,CACV,CAChB,CAAA;AACH,CAAC,CAAA;AAOQ,kDAAmB;AAN5B,mBAAmB,CAAC,WAAW,GAAG,sBAAsB,CAAA;AAExD,MAAM,2BAA2B,GAAG,GAAG,EAAE;IACvC,OAAO,oBAAC,mBAAQ,IAAC,SAAS,EAAC,QAAQ,GAAG,CAAA;AACxC,CAAC,CAAA","sourcesContent":["import * as React from \"react\"\n\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport { DropdownMenu } from \"@/components/dropdown-menu\"\nimport { IconButton } from \"@/components/icon-button\"\nimport { Skeleton } from \"@/components/skeleton\"\nimport { Tooltip } from \"@/components/tooltip\"\nimport { Funnel } from \"@medusajs/icons\"\n\ninterface DataTableFilterMenuProps {\n /**\n * The tooltip to show when hovering over the filter menu.\n */\n tooltip?: string\n}\n\n/**\n * This component adds a filter menu to the data table, allowing users\n * to filter the table's data.\n */\nconst DataTableFilterMenu = (props: DataTableFilterMenuProps) => {\n const { instance } = useDataTableContext()\n\n const enabledFilters = Object.keys(instance.getFiltering())\n\n const filterOptions = instance\n .getFilters()\n .filter((filter) => !enabledFilters.includes(filter.id))\n\n if (!enabledFilters.length && !filterOptions.length) {\n throw new Error(\n \"DataTable.FilterMenu was rendered but there are no filters to apply. Make sure to pass filters to 'useDataTable'\"\n )\n }\n\n const Wrapper = props.tooltip ? Tooltip : React.Fragment\n const wrapperProps = props.tooltip\n ? { content: props.tooltip, hidden: filterOptions.length === 0 }\n : ({} as any)\n\n if (instance.showSkeleton) {\n return <DataTableFilterMenuSkeleton />\n }\n\n return (\n <DropdownMenu>\n <Wrapper {...wrapperProps}>\n <DropdownMenu.Trigger asChild disabled={filterOptions.length === 0}>\n <IconButton size=\"small\">\n <Funnel />\n </IconButton>\n </DropdownMenu.Trigger>\n </Wrapper>\n <DropdownMenu.Content side=\"bottom\">\n {filterOptions.map((filter) => (\n <DropdownMenu.Item\n key={filter.id}\n onClick={() => {\n instance.addFilter({ id: filter.id, value: undefined })\n }}\n >\n {filter.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\nDataTableFilterMenu.displayName = \"DataTable.FilterMenu\"\n\nconst DataTableFilterMenuSkeleton = () => {\n return <Skeleton className=\"size-7\" />\n}\n\nexport { DataTableFilterMenu }\nexport type { DataTableFilterMenuProps }\n"]}
1
+ {"version":3,"file":"data-table-filter-menu.js","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\"\n\nimport { useDataTableContext } from \"@/blocks/data-table/context/use-data-table-context\"\nimport { DropdownMenu } from \"@/components/dropdown-menu\"\nimport { IconButton } from \"@/components/icon-button\"\nimport { Skeleton } from \"@/components/skeleton\"\nimport { Tooltip } from \"@/components/tooltip\"\nimport { Funnel } from \"@medusajs/icons\"\n\ninterface DataTableFilterMenuProps {\n /**\n * The tooltip to show when hovering over the filter menu.\n */\n tooltip?: string\n /**\n * Callback when a filter is added\n */\n onAddFilter?: (id: string, value: unknown) => void\n}\n\n/**\n * This component adds a filter menu to the data table, allowing users\n * to filter the table's data.\n */\nconst DataTableFilterMenu = ({ tooltip, onAddFilter }: DataTableFilterMenuProps) => {\n const { instance } = useDataTableContext()\n\n const enabledFilters = Object.keys(instance.getFiltering())\n\n const filterOptions = instance\n .getFilters()\n .filter((filter) => !enabledFilters.includes(filter.id))\n\n if (!enabledFilters.length && !filterOptions.length) {\n throw new Error(\n \"DataTable.FilterMenu was rendered but there are no filters to apply. Make sure to pass filters to 'useDataTable'\"\n )\n }\n\n const Wrapper = tooltip ? Tooltip : React.Fragment\n const wrapperProps = tooltip\n ? { content: tooltip, hidden: filterOptions.length === 0 }\n : ({} as any)\n\n if (instance.showSkeleton) {\n return <DataTableFilterMenuSkeleton />\n }\n\n return (\n <DropdownMenu>\n <Wrapper {...wrapperProps}>\n <DropdownMenu.Trigger asChild disabled={filterOptions.length === 0}>\n <IconButton size=\"small\">\n <Funnel />\n </IconButton>\n </DropdownMenu.Trigger>\n </Wrapper>\n <DropdownMenu.Content side=\"bottom\" align=\"start\">\n {filterOptions.map((filter) => {\n const getDefaultValue = () => {\n switch (filter.type) {\n case \"select\":\n case \"multiselect\":\n return []\n case \"string\":\n return \"\"\n case \"number\":\n return null\n case \"date\":\n return null\n case \"radio\":\n return null\n case \"custom\":\n return null\n default:\n return null\n }\n }\n \n return (\n <DropdownMenu.Item\n key={filter.id}\n onClick={(e) => {\n // Prevent any bubbling that might interfere\n e.stopPropagation()\n if (onAddFilter) {\n onAddFilter(filter.id, getDefaultValue())\n } else {\n instance.addFilter({ id: filter.id, value: getDefaultValue() })\n }\n }}\n >\n {filter.label}\n </DropdownMenu.Item>\n )\n })}\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\nDataTableFilterMenu.displayName = \"DataTable.FilterMenu\"\n\nconst DataTableFilterMenuSkeleton = () => {\n return <Skeleton className=\"size-7\" />\n}\n\nexport { DataTableFilterMenu }\nexport type { DataTableFilterMenuProps }\n"]}
@@ -2,9 +2,12 @@ import * as React from "react";
2
2
  interface DataTableFilterProps {
3
3
  id: string;
4
4
  filter: unknown;
5
+ isNew?: boolean;
6
+ onUpdate?: (value: unknown) => void;
7
+ onRemove?: () => void;
5
8
  }
6
9
  declare const DataTableFilter: {
7
- ({ id, filter }: DataTableFilterProps): React.JSX.Element | null;
10
+ ({ id, filter, isNew, onUpdate, onRemove }: DataTableFilterProps): React.JSX.Element | null;
8
11
  displayName: string;
9
12
  };
10
13
  export { DataTableFilter };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-filter.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAc9B,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;CAChB;AAYD,QAAA,MAAM,eAAe;qBAAoB,oBAAoB;;CAoL5D,CAAA;AAkZD,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,YAAY,EAAE,oBAAoB,EAAE,CAAA"}
1
+ {"version":3,"file":"data-table-filter.d.ts","sourceRoot":"","sources":["../../../../../src/blocks/data-table/components/data-table-filter.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAsB9B,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAYD,QAAA,MAAM,eAAe;gDAAuD,oBAAoB;;CAqU/F,CAAA;AA+4BD,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,YAAY,EAAE,oBAAoB,EAAE,CAAA"}