@elliemae/ds-data-table 3.60.0-next.32 → 3.60.0-next.34

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 (99) hide show
  1. package/dist/cjs/addons/Filters/Components/CurrencyRangeFilter/CurrencyRangeFilterV2.js +173 -0
  2. package/dist/cjs/addons/Filters/Components/CurrencyRangeFilter/CurrencyRangeFilterV2.js.map +7 -0
  3. package/dist/cjs/addons/Filters/Components/DateRangeFilter/DateRangeFilterV2.js +138 -0
  4. package/dist/cjs/addons/Filters/Components/DateRangeFilter/DateRangeFilterV2.js.map +7 -0
  5. package/dist/cjs/addons/Filters/Components/DateSwitcherFilter/DateSwitcherFilterV2.js +177 -0
  6. package/dist/cjs/addons/Filters/Components/DateSwitcherFilter/DateSwitcherFilterV2.js.map +7 -0
  7. package/dist/cjs/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.js +161 -0
  8. package/dist/cjs/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.js.map +7 -0
  9. package/dist/cjs/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.js +181 -0
  10. package/dist/cjs/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.js.map +7 -0
  11. package/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.js +202 -0
  12. package/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.js.map +7 -0
  13. package/dist/cjs/addons/Filters/Components/SelectFilter/MultiCreatableFilterV2.js +68 -0
  14. package/dist/cjs/addons/Filters/Components/SelectFilter/MultiCreatableFilterV2.js.map +7 -0
  15. package/dist/cjs/addons/Filters/Components/SelectFilter/MultiSelectFilterV2.js +67 -0
  16. package/dist/cjs/addons/Filters/Components/SelectFilter/MultiSelectFilterV2.js.map +7 -0
  17. package/dist/cjs/addons/Filters/Components/SelectFilter/SingleCreatableFilterV2.js +67 -0
  18. package/dist/cjs/addons/Filters/Components/SelectFilter/SingleCreatableFilterV2.js.map +7 -0
  19. package/dist/cjs/addons/Filters/Components/SelectFilter/SingleSelectFilterV2.js +66 -0
  20. package/dist/cjs/addons/Filters/Components/SelectFilter/SingleSelectFilterV2.js.map +7 -0
  21. package/dist/cjs/addons/Filters/Components/SingleDateFilter/SingleDateFilterV2.js +118 -0
  22. package/dist/cjs/addons/Filters/Components/SingleDateFilter/SingleDateFilterV2.js.map +7 -0
  23. package/dist/cjs/addons/Filters/Components/index.js +26 -0
  24. package/dist/cjs/addons/Filters/Components/index.js.map +2 -2
  25. package/dist/cjs/constants/index.js +2 -1
  26. package/dist/cjs/constants/index.js.map +2 -2
  27. package/dist/cjs/exported-related/FilterPopover/FilterPopoverV2.js +158 -0
  28. package/dist/cjs/exported-related/FilterPopover/FilterPopoverV2.js.map +7 -0
  29. package/dist/cjs/exported-related/FilterPopover/styled.js +62 -0
  30. package/dist/cjs/exported-related/FilterPopover/styled.js.map +7 -0
  31. package/dist/cjs/exported-related/FilterPopover/types.js.map +1 -1
  32. package/dist/cjs/exported-related/FilterPopover/useGetFilterHandlers.js.map +1 -1
  33. package/dist/cjs/exported-related/FilterPopover/useOnClickOutside.js +60 -0
  34. package/dist/cjs/exported-related/FilterPopover/useOnClickOutside.js.map +7 -0
  35. package/dist/cjs/exported-related/FilterTypes.js +11 -1
  36. package/dist/cjs/exported-related/FilterTypes.js.map +2 -2
  37. package/dist/cjs/parts/FilterBar/FiltersBar.js +9 -1
  38. package/dist/cjs/parts/FilterBar/FiltersBar.js.map +2 -2
  39. package/dist/cjs/parts/Filters/index.js +11 -1
  40. package/dist/cjs/parts/Filters/index.js.map +2 -2
  41. package/dist/esm/addons/Filters/Components/CurrencyRangeFilter/CurrencyRangeFilterV2.js +143 -0
  42. package/dist/esm/addons/Filters/Components/CurrencyRangeFilter/CurrencyRangeFilterV2.js.map +7 -0
  43. package/dist/esm/addons/Filters/Components/DateRangeFilter/DateRangeFilterV2.js +108 -0
  44. package/dist/esm/addons/Filters/Components/DateRangeFilter/DateRangeFilterV2.js.map +7 -0
  45. package/dist/esm/addons/Filters/Components/DateSwitcherFilter/DateSwitcherFilterV2.js +147 -0
  46. package/dist/esm/addons/Filters/Components/DateSwitcherFilter/DateSwitcherFilterV2.js.map +7 -0
  47. package/dist/esm/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.js +131 -0
  48. package/dist/esm/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.js.map +7 -0
  49. package/dist/esm/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.js +151 -0
  50. package/dist/esm/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.js.map +7 -0
  51. package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.js +172 -0
  52. package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.js.map +7 -0
  53. package/dist/esm/addons/Filters/Components/SelectFilter/MultiCreatableFilterV2.js +38 -0
  54. package/dist/esm/addons/Filters/Components/SelectFilter/MultiCreatableFilterV2.js.map +7 -0
  55. package/dist/esm/addons/Filters/Components/SelectFilter/MultiSelectFilterV2.js +37 -0
  56. package/dist/esm/addons/Filters/Components/SelectFilter/MultiSelectFilterV2.js.map +7 -0
  57. package/dist/esm/addons/Filters/Components/SelectFilter/SingleCreatableFilterV2.js +37 -0
  58. package/dist/esm/addons/Filters/Components/SelectFilter/SingleCreatableFilterV2.js.map +7 -0
  59. package/dist/esm/addons/Filters/Components/SelectFilter/SingleSelectFilterV2.js +36 -0
  60. package/dist/esm/addons/Filters/Components/SelectFilter/SingleSelectFilterV2.js.map +7 -0
  61. package/dist/esm/addons/Filters/Components/SingleDateFilter/SingleDateFilterV2.js +88 -0
  62. package/dist/esm/addons/Filters/Components/SingleDateFilter/SingleDateFilterV2.js.map +7 -0
  63. package/dist/esm/addons/Filters/Components/index.js +22 -0
  64. package/dist/esm/addons/Filters/Components/index.js.map +2 -2
  65. package/dist/esm/constants/index.js +2 -1
  66. package/dist/esm/constants/index.js.map +2 -2
  67. package/dist/esm/exported-related/FilterPopover/FilterPopoverV2.js +128 -0
  68. package/dist/esm/exported-related/FilterPopover/FilterPopoverV2.js.map +7 -0
  69. package/dist/esm/exported-related/FilterPopover/styled.js +32 -0
  70. package/dist/esm/exported-related/FilterPopover/styled.js.map +7 -0
  71. package/dist/esm/exported-related/FilterPopover/useGetFilterHandlers.js.map +1 -1
  72. package/dist/esm/exported-related/FilterPopover/useOnClickOutside.js +30 -0
  73. package/dist/esm/exported-related/FilterPopover/useOnClickOutside.js.map +7 -0
  74. package/dist/esm/exported-related/FilterTypes.js +11 -1
  75. package/dist/esm/exported-related/FilterTypes.js.map +2 -2
  76. package/dist/esm/parts/FilterBar/FiltersBar.js +9 -1
  77. package/dist/esm/parts/FilterBar/FiltersBar.js.map +2 -2
  78. package/dist/esm/parts/Filters/index.js +22 -2
  79. package/dist/esm/parts/Filters/index.js.map +2 -2
  80. package/dist/types/addons/Filters/Components/CurrencyRangeFilter/CurrencyRangeFilterV2.d.ts +8 -0
  81. package/dist/types/addons/Filters/Components/DateRangeFilter/DateRangeFilterV2.d.ts +8 -0
  82. package/dist/types/addons/Filters/Components/DateSwitcherFilter/DateSwitcherFilterV2.d.ts +9 -0
  83. package/dist/types/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.d.ts +3 -0
  84. package/dist/types/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.d.ts +8 -0
  85. package/dist/types/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.d.ts +11 -0
  86. package/dist/types/addons/Filters/Components/SelectFilter/MultiCreatableFilterV2.d.ts +6 -0
  87. package/dist/types/addons/Filters/Components/SelectFilter/MultiSelectFilterV2.d.ts +6 -0
  88. package/dist/types/addons/Filters/Components/SelectFilter/SingleCreatableFilterV2.d.ts +6 -0
  89. package/dist/types/addons/Filters/Components/SelectFilter/SingleSelectFilterV2.d.ts +6 -0
  90. package/dist/types/addons/Filters/Components/SingleDateFilter/SingleDateFilterV2.d.ts +5 -0
  91. package/dist/types/addons/Filters/Components/index.d.ts +10 -0
  92. package/dist/types/constants/index.d.ts +4 -0
  93. package/dist/types/exported-related/FilterPopover/FilterPopoverV2.d.ts +3 -0
  94. package/dist/types/exported-related/FilterPopover/styled.d.ts +6 -0
  95. package/dist/types/exported-related/FilterPopover/types.d.ts +16 -0
  96. package/dist/types/exported-related/FilterPopover/useGetFilterHandlers.d.ts +2 -2
  97. package/dist/types/exported-related/FilterPopover/useOnClickOutside.d.ts +1 -0
  98. package/dist/types/exported-related/FilterTypes.d.ts +10 -0
  99. package/package.json +30 -29
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var FreeTextSearchFilterV2_exports = {};
30
+ __export(FreeTextSearchFilterV2_exports, {
31
+ FreeTextSearchFilterV2: () => FreeTextSearchFilterV2
32
+ });
33
+ module.exports = __toCommonJS(FreeTextSearchFilterV2_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_ds_form_input_text = require("@elliemae/ds-form-input-text");
37
+ var import_ds_grid = require("@elliemae/ds-grid");
38
+ var import_ds_icons = require("@elliemae/ds-icons");
39
+ var import_ds_system = require("@elliemae/ds-system");
40
+ var import_react = require("react");
41
+ var import_uid = require("uid");
42
+ var import_constants = require("../../../../configs/constants.js");
43
+ var import_createInternalAndPropsContext = require("../../../../configs/useStore/createInternalAndPropsContext.js");
44
+ var import_constants2 = require("../../../../constants/index.js");
45
+ var import_FilterPopoverV2 = require("../../../../exported-related/FilterPopover/FilterPopoverV2.js");
46
+ var import_exported_related = require("../../../../exported-related/index.js");
47
+ var import_styled = require("../../../../styled.js");
48
+ const StyledInputFreeTextSearch = (0, import_ds_system.styled)(import_ds_form_input_text.DSInputText, {
49
+ name: import_constants2.DSDataTableName,
50
+ slot: import_constants2.DSDataTableSlots.FREE_TEXT_SEARCH_FILTER
51
+ })``;
52
+ const StyledInputFreeTextSearchWrapper = (0, import_ds_system.styled)(import_ds_grid.Grid, {
53
+ name: import_constants2.DSDataTableName,
54
+ slot: import_constants2.DSDataTableSlots.FREE_TEXT_SEARCH_WRAPPER
55
+ })``;
56
+ const FreeTextSearchFilterV2 = (props) => {
57
+ const {
58
+ column,
59
+ referenceColumn,
60
+ column: { id, persistFilterInputAfterSubmit = false },
61
+ onValueChange,
62
+ patchHeaderFilterButtonAndMenu,
63
+ reduxHeader,
64
+ innerRef,
65
+ domIdAffix = (0, import_uid.uid)(4)
66
+ } = props;
67
+ const ref = (0, import_react.useRef)(null);
68
+ const shouldFocus = (0, import_react.useRef)(true);
69
+ const getOwnerProps = (0, import_createInternalAndPropsContext.usePropsStore)((store) => store.get);
70
+ const getOwnerPropsArguments = (0, import_react.useCallback)(
71
+ () => ({
72
+ columnId: id
73
+ }),
74
+ [id]
75
+ );
76
+ const handleRef = (0, import_react.useCallback)((newRef) => {
77
+ ref.current = newRef;
78
+ if (shouldFocus.current) {
79
+ requestAnimationFrame(() => {
80
+ ref.current?.focus();
81
+ shouldFocus.current = false;
82
+ });
83
+ }
84
+ }, []);
85
+ (0, import_react.useEffect)(() => {
86
+ if (reduxHeader?.hideFilterMenu) {
87
+ shouldFocus.current = true;
88
+ }
89
+ }, [reduxHeader?.hideFilterMenu]);
90
+ const [value, setValue] = (0, import_react.useState)("");
91
+ const handleSubmit = (0, import_react.useCallback)(
92
+ (e) => {
93
+ e.preventDefault();
94
+ const trimmed = value.trim();
95
+ if (trimmed === "") return;
96
+ onValueChange(import_exported_related.FILTER_TYPES.FREE_TEXT_SEARCH_V2, trimmed || void 0);
97
+ if (!persistFilterInputAfterSubmit) {
98
+ setValue("");
99
+ }
100
+ setTimeout(() => {
101
+ patchHeaderFilterButtonAndMenu(id, true);
102
+ innerRef?.current?.focus();
103
+ }, 0);
104
+ },
105
+ [id, innerRef, onValueChange, patchHeaderFilterButtonAndMenu, persistFilterInputAfterSubmit, value]
106
+ );
107
+ const handleReset = (0, import_react.useCallback)(() => {
108
+ setValue("");
109
+ onValueChange(import_exported_related.FILTER_TYPES.FREE_TEXT_SEARCH_V2, void 0);
110
+ }, [onValueChange]);
111
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
112
+ import_FilterPopoverV2.FilterPopoverV2,
113
+ {
114
+ onFilterSubmit: handleSubmit,
115
+ onFilterReset: handleReset,
116
+ firstElementRef: ref,
117
+ reduxHeader,
118
+ column,
119
+ columnReference: referenceColumn,
120
+ columnId: id,
121
+ customStyles: {
122
+ backgroundColor: "#fff",
123
+ width: referenceColumn?.offsetWidth,
124
+ minWidth: "80px"
125
+ },
126
+ menuContent: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
127
+ StyledInputFreeTextSearchWrapper,
128
+ {
129
+ p: "xxs",
130
+ gutter: "xxs",
131
+ getOwnerProps,
132
+ getOwnerPropsArguments,
133
+ children: [
134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styled.ScreenReaderOnly, { id: "filter-input-instructions", children: "Press Enter to apply the filter and close the dialog. Focus will return to the button that opened this dialog." }),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
136
+ StyledInputFreeTextSearch,
137
+ {
138
+ id: `ds-data-table-free-text-search-${id}-${domIdAffix}`,
139
+ placeholder: "",
140
+ value,
141
+ onValueChange: (newValue) => {
142
+ setValue(newValue);
143
+ },
144
+ innerRef: handleRef,
145
+ "data-testid": import_constants.DATA_TESTID.DATA_TABLE_FILTER_FREE_TEXT_SEARCH,
146
+ "aria-label": "Free Text Search Filter",
147
+ "aria-describedby": "filter-input-instructions",
148
+ getOwnerProps,
149
+ getOwnerPropsArguments
150
+ }
151
+ )
152
+ ]
153
+ }
154
+ ),
155
+ triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.SearchXsmall, {}),
156
+ innerRef,
157
+ ariaLabel: "Open Free Text Search Filter"
158
+ }
159
+ );
160
+ };
161
+ //# sourceMappingURL=FreeTextSearchFilterV2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/addons/Filters/Components/FreeTextSearchFilter/FreeTextSearchFilterV2.tsx", "../../../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { DSInputText } from '@elliemae/ds-form-input-text';\nimport { Grid } from '@elliemae/ds-grid';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { styled } from '@elliemae/ds-system';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { uid } from 'uid';\nimport { DATA_TESTID } from '../../../../configs/constants.js';\nimport { usePropsStore } from '../../../../configs/useStore/createInternalAndPropsContext.js';\nimport { DSDataTableName, DSDataTableSlots } from '../../../../constants/index.js';\nimport { FilterPopoverV2 } from '../../../../exported-related/FilterPopover/FilterPopoverV2.js';\nimport { FILTER_TYPES } from '../../../../exported-related/index.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { ScreenReaderOnly } from '../../../../styled.js';\n\nconst StyledInputFreeTextSearch = styled(DSInputText, {\n name: DSDataTableName,\n slot: DSDataTableSlots.FREE_TEXT_SEARCH_FILTER,\n})``;\n\nconst StyledInputFreeTextSearchWrapper = styled(Grid, {\n name: DSDataTableName,\n slot: DSDataTableSlots.FREE_TEXT_SEARCH_WRAPPER,\n})``;\n\nexport const FreeTextSearchFilterV2: React.ComponentType<DSDataTableT.FilterProps<string>> = (props) => {\n const {\n column,\n referenceColumn,\n column: { id, persistFilterInputAfterSubmit = false },\n onValueChange,\n patchHeaderFilterButtonAndMenu,\n reduxHeader,\n innerRef,\n domIdAffix = uid(4),\n } = props;\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n\n const getOwnerProps = usePropsStore((store) => store.get);\n const getOwnerPropsArguments = useCallback(\n () => ({\n columnId: id,\n }),\n [id],\n );\n\n const handleRef = useCallback((newRef: HTMLInputElement | null) => {\n ref.current = newRef;\n if (shouldFocus.current) {\n requestAnimationFrame(() => {\n ref.current?.focus();\n shouldFocus.current = false;\n });\n }\n }, []);\n useEffect(() => {\n if (reduxHeader?.hideFilterMenu) {\n shouldFocus.current = true;\n }\n }, [reduxHeader?.hideFilterMenu]);\n\n const [value, setValue] = useState<string>('');\n const handleSubmit = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n\n const trimmed = value.trim();\n if (trimmed === '') return;\n\n onValueChange(FILTER_TYPES.FREE_TEXT_SEARCH_V2, trimmed || undefined);\n if (!persistFilterInputAfterSubmit) {\n setValue('');\n }\n setTimeout(() => {\n patchHeaderFilterButtonAndMenu(id, true);\n innerRef?.current?.focus();\n }, 0);\n },\n [id, innerRef, onValueChange, patchHeaderFilterButtonAndMenu, persistFilterInputAfterSubmit, value],\n );\n const handleReset = useCallback(() => {\n setValue('');\n onValueChange(FILTER_TYPES.FREE_TEXT_SEARCH_V2, undefined);\n }, [onValueChange]);\n return (\n <FilterPopoverV2\n onFilterSubmit={handleSubmit}\n onFilterReset={handleReset}\n firstElementRef={ref}\n reduxHeader={reduxHeader}\n column={column}\n columnReference={referenceColumn}\n columnId={id}\n customStyles={{\n backgroundColor: '#fff',\n width: referenceColumn?.offsetWidth,\n minWidth: '80px',\n }}\n menuContent={\n <StyledInputFreeTextSearchWrapper\n p=\"xxs\"\n gutter=\"xxs\"\n getOwnerProps={getOwnerProps}\n getOwnerPropsArguments={getOwnerPropsArguments}\n >\n <ScreenReaderOnly id=\"filter-input-instructions\">\n Press Enter to apply the filter and close the dialog. Focus will return to the button that opened this\n dialog.\n </ScreenReaderOnly>\n <StyledInputFreeTextSearch\n id={`ds-data-table-free-text-search-${id}-${domIdAffix}`}\n placeholder=\"\"\n value={value}\n onValueChange={(newValue) => {\n setValue(newValue);\n }}\n innerRef={handleRef}\n data-testid={DATA_TESTID.DATA_TABLE_FILTER_FREE_TEXT_SEARCH}\n aria-label=\"Free Text Search Filter\"\n aria-describedby=\"filter-input-instructions\"\n getOwnerProps={getOwnerProps}\n getOwnerPropsArguments={getOwnerPropsArguments}\n />\n </StyledInputFreeTextSearchWrapper>\n }\n triggerIcon={<SearchXsmall />}\n innerRef={innerRef}\n ariaLabel=\"Open Free Text Search Filter\"\n />\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": ["import_constants"]
7
+ }
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var NumberRangeFilterV2_exports = {};
30
+ __export(NumberRangeFilterV2_exports, {
31
+ NumberRangeFilterV2: () => NumberRangeFilterV2
32
+ });
33
+ module.exports = __toCommonJS(NumberRangeFilterV2_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = require("react");
37
+ var import_ds_grid = require("@elliemae/ds-grid");
38
+ var import_ds_form_input_text = require("@elliemae/ds-form-input-text");
39
+ var import_ds_form_helpers_mask_hooks = require("@elliemae/ds-form-helpers-mask-hooks");
40
+ var import_ds_form_layout_blocks = require("@elliemae/ds-form-layout-blocks");
41
+ var import_ds_icons = require("@elliemae/ds-icons");
42
+ var import_uid = require("uid");
43
+ var import_exported_related = require("../../../../exported-related/index.js");
44
+ var import_FilterPopoverV2 = require("../../../../exported-related/FilterPopover/FilterPopoverV2.js");
45
+ var import_constants = require("../../../../configs/constants.js");
46
+ const opts = {
47
+ includeThousandsSeparator: false,
48
+ decimalPlaces: 0
49
+ };
50
+ const idPreffix = "datatable-number-range";
51
+ const conform = (value) => {
52
+ const valueAsString = value?.toString() ?? "";
53
+ return (0, import_ds_form_helpers_mask_hooks.getNumberMaskedValue)(valueAsString, opts);
54
+ };
55
+ const NumberRangeFilterV2 = (props) => {
56
+ const {
57
+ column,
58
+ referenceColumn,
59
+ filterValue = { from: null, to: null },
60
+ reduxHeader,
61
+ patchHeader,
62
+ onValueChange,
63
+ innerRef,
64
+ domIdAffix = (0, import_uid.uid)(4)
65
+ } = props;
66
+ const [from, setFrom] = (0, import_react.useState)(conform(filterValue.from));
67
+ const [to, setTo] = (0, import_react.useState)(conform(filterValue.to));
68
+ const onKeyDownHandler = (0, import_react.useCallback)(
69
+ (e) => {
70
+ if (e.code === "Escape") {
71
+ patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });
72
+ innerRef.current?.focus();
73
+ }
74
+ },
75
+ [column.id, innerRef, patchHeader]
76
+ );
77
+ const ref = (0, import_react.useRef)(null);
78
+ const shouldFocus = (0, import_react.useRef)(true);
79
+ const handleRef = (0, import_react.useCallback)(
80
+ (newRef) => {
81
+ ref.current = newRef;
82
+ if (shouldFocus.current) {
83
+ setTimeout(() => {
84
+ newRef?.focus();
85
+ shouldFocus.current = false;
86
+ });
87
+ }
88
+ },
89
+ [shouldFocus]
90
+ );
91
+ (0, import_react.useEffect)(() => {
92
+ if (reduxHeader?.hideFilterMenu) {
93
+ shouldFocus.current = true;
94
+ setFrom(conform(filterValue.from));
95
+ setTo(conform(filterValue.to));
96
+ }
97
+ }, [filterValue.from, filterValue.to, reduxHeader?.hideFilterMenu]);
98
+ const handleFromChange = (0, import_react.useCallback)((e) => {
99
+ setFrom(e.target.value);
100
+ }, []);
101
+ const handleToChange = (0, import_react.useCallback)((e) => {
102
+ setTo(e.target.value);
103
+ }, []);
104
+ const handleSubmit = (0, import_react.useCallback)(
105
+ (e) => {
106
+ e.preventDefault();
107
+ if (!from || !to) {
108
+ return;
109
+ }
110
+ const normalizedFrom = from !== "" ? parseInt(from, 10) : "";
111
+ const normalizedTo = to !== "" ? parseInt(to, 10) : "";
112
+ const nextValue = {
113
+ from: normalizedFrom,
114
+ to: normalizedTo
115
+ };
116
+ onValueChange(import_exported_related.FILTER_TYPES.NUMBER_RANGE_V2, nextValue);
117
+ patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });
118
+ innerRef.current?.focus();
119
+ },
120
+ [column.id, from, to, innerRef, onValueChange, patchHeader]
121
+ );
122
+ const handleReset = (0, import_react.useCallback)(() => {
123
+ setFrom("");
124
+ setTo("");
125
+ onValueChange(import_exported_related.FILTER_TYPES.NUMBER_RANGE_V2, void 0);
126
+ patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });
127
+ innerRef.current?.focus();
128
+ }, [column.id, innerRef, onValueChange, patchHeader]);
129
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
130
+ import_FilterPopoverV2.FilterPopoverV2,
131
+ {
132
+ onFilterSubmit: handleSubmit,
133
+ onFilterReset: handleReset,
134
+ firstElementRef: ref,
135
+ reduxHeader,
136
+ column,
137
+ columnReference: referenceColumn,
138
+ columnId: column.id,
139
+ menuContent: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
140
+ import_ds_grid.Grid,
141
+ {
142
+ "data-testid": import_constants.DATA_TESTID.DATA_TABLE_NUMBER_RANGE_CONTROLLER,
143
+ gutter: "xxxs",
144
+ padding: "xxs",
145
+ cols: ["auto", "auto"],
146
+ style: { background: "white" },
147
+ children: [
148
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_form_layout_blocks.DSFormLayoutBlockItem, { label: "Low", inputID: `${idPreffix}-low-${column.id}-${domIdAffix}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
149
+ import_ds_form_input_text.DSInputText,
150
+ {
151
+ value: from,
152
+ onChange: handleFromChange,
153
+ id: `${idPreffix}-low-${column.id}-${domIdAffix}`,
154
+ style: { textAlign: "right" },
155
+ placeholder: "0",
156
+ innerRef: handleRef,
157
+ onKeyDown: onKeyDownHandler
158
+ }
159
+ ) }),
160
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_form_layout_blocks.DSFormLayoutBlockItem, { label: "High", inputID: `${idPreffix}-high-${column.id}-${domIdAffix}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
161
+ import_ds_form_input_text.DSInputText,
162
+ {
163
+ value: to,
164
+ onChange: handleToChange,
165
+ id: `${idPreffix}-high-${column.id}-${domIdAffix}`,
166
+ style: { textAlign: "right" },
167
+ placeholder: "0",
168
+ onKeyDown: onKeyDownHandler
169
+ }
170
+ ) })
171
+ ]
172
+ }
173
+ ),
174
+ triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.SearchXsmall, {}),
175
+ customStyles: { width: referenceColumn?.offsetWidth },
176
+ innerRef,
177
+ ariaLabel: "Open Number Range Filter"
178
+ }
179
+ );
180
+ };
181
+ //# sourceMappingURL=NumberRangeFilterV2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/addons/Filters/Components/NumberRangeFilter/NumberRangeFilterV2.tsx", "../../../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import React, { useRef, useEffect, useCallback, useState } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSInputText } from '@elliemae/ds-form-input-text';\nimport { getNumberMaskedValue } from '@elliemae/ds-form-helpers-mask-hooks';\nimport { DSFormLayoutBlockItem } from '@elliemae/ds-form-layout-blocks';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FILTER_TYPES } from '../../../../exported-related/index.js';\nimport { FilterPopoverV2 } from '../../../../exported-related/FilterPopover/FilterPopoverV2.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID } from '../../../../configs/constants.js';\n\ninterface NumberRangeFilterValue {\n from: number | '' | null;\n to: number | '' | null;\n}\n\nconst opts = {\n includeThousandsSeparator: false,\n decimalPlaces: 0,\n};\n\nconst idPreffix = 'datatable-number-range';\n\nconst conform = (value: number | string | null) => {\n const valueAsString = value?.toString() ?? '';\n return getNumberMaskedValue(valueAsString, opts);\n};\n\nexport const NumberRangeFilterV2: React.ComponentType<DSDataTableT.FilterProps<NumberRangeFilterValue>> = (props) => {\n const {\n column,\n referenceColumn,\n filterValue = { from: null, to: null },\n reduxHeader,\n patchHeader,\n onValueChange,\n innerRef,\n domIdAffix = uid(4),\n } = props;\n\n const [from, setFrom] = useState<string>(conform(filterValue.from));\n const [to, setTo] = useState<string>(conform(filterValue.to));\n\n // workaround to close menu with esc key since DSInputMask has stoppropagation on key down\n const onKeyDownHandler = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.code === 'Escape') {\n patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });\n innerRef.current?.focus();\n }\n },\n [column.id, innerRef, patchHeader],\n );\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const handleRef = useCallback(\n (newRef: HTMLInputElement | null) => {\n ref.current = newRef;\n if (shouldFocus.current) {\n setTimeout(() => {\n newRef?.focus();\n shouldFocus.current = false;\n });\n }\n },\n [shouldFocus],\n );\n\n useEffect(() => {\n if (reduxHeader?.hideFilterMenu) {\n shouldFocus.current = true;\n setFrom(conform(filterValue.from));\n setTo(conform(filterValue.to));\n }\n }, [filterValue.from, filterValue.to, reduxHeader?.hideFilterMenu]);\n\n const handleFromChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setFrom(e.target.value);\n }, []);\n\n const handleToChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setTo(e.target.value);\n }, []);\n\n const handleSubmit = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n if (!from || !to) {\n return;\n }\n const normalizedFrom: NumberRangeFilterValue['from'] = from !== '' ? parseInt(from, 10) : '';\n const normalizedTo: NumberRangeFilterValue['to'] = to !== '' ? parseInt(to, 10) : '';\n\n const nextValue: NumberRangeFilterValue = {\n from: normalizedFrom,\n to: normalizedTo,\n };\n\n onValueChange(FILTER_TYPES.NUMBER_RANGE_V2, nextValue);\n patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });\n innerRef.current?.focus();\n },\n [column.id, from, to, innerRef, onValueChange, patchHeader],\n );\n\n const handleReset = useCallback(() => {\n setFrom('');\n setTo('');\n onValueChange(FILTER_TYPES.NUMBER_RANGE_V2, undefined);\n patchHeader(column.id, { hideFilterMenu: true, hideFilterButton: false });\n innerRef.current?.focus();\n }, [column.id, innerRef, onValueChange, patchHeader]);\n\n return (\n <FilterPopoverV2\n onFilterSubmit={handleSubmit}\n onFilterReset={handleReset}\n firstElementRef={ref}\n reduxHeader={reduxHeader}\n column={column}\n columnReference={referenceColumn}\n columnId={column.id}\n menuContent={\n <Grid\n data-testid={DATA_TESTID.DATA_TABLE_NUMBER_RANGE_CONTROLLER}\n gutter=\"xxxs\"\n padding=\"xxs\"\n cols={['auto', 'auto']}\n style={{ background: 'white' }}\n >\n <DSFormLayoutBlockItem label=\"Low\" inputID={`${idPreffix}-low-${column.id}-${domIdAffix}`}>\n <DSInputText\n value={from}\n onChange={handleFromChange}\n id={`${idPreffix}-low-${column.id}-${domIdAffix}`}\n style={{ textAlign: 'right' }}\n placeholder=\"0\"\n innerRef={handleRef}\n onKeyDown={onKeyDownHandler}\n />\n </DSFormLayoutBlockItem>\n <DSFormLayoutBlockItem label=\"High\" inputID={`${idPreffix}-high-${column.id}-${domIdAffix}`}>\n <DSInputText\n value={to}\n onChange={handleToChange}\n id={`${idPreffix}-high-${column.id}-${domIdAffix}`}\n style={{ textAlign: 'right' }}\n placeholder=\"0\"\n onKeyDown={onKeyDownHandler}\n />\n </DSFormLayoutBlockItem>\n </Grid>\n }\n triggerIcon={<SearchXsmall />}\n customStyles={{ width: referenceColumn?.offsetWidth }}\n innerRef={innerRef}\n ariaLabel=\"Open Number Range Filter\"\n />\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var BaseSelectFilterV2_exports = {};
30
+ __export(BaseSelectFilterV2_exports, {
31
+ BaseSelectFilterV2: () => BaseSelectFilterV2
32
+ });
33
+ module.exports = __toCommonJS(BaseSelectFilterV2_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = require("react");
37
+ var import_ds_grid = require("@elliemae/ds-grid");
38
+ var import_ds_form_combobox = require("@elliemae/ds-form-combobox");
39
+ var import_ds_icons = require("@elliemae/ds-icons");
40
+ var import_uid = require("uid");
41
+ var import_FilterPopoverV2 = require("../../../../exported-related/FilterPopover/FilterPopoverV2.js");
42
+ var import_configs = require("../../../../configs/index.js");
43
+ var import_createInternalAndPropsContext = require("../../../../configs/useStore/createInternalAndPropsContext.js");
44
+ const getValue = (datum) => datum?.toString();
45
+ const BaseSelectFilterV2 = (props) => {
46
+ const {
47
+ isMulti = false,
48
+ referenceColumn,
49
+ filterValue: selectedItems = null,
50
+ creatable = false,
51
+ column,
52
+ type,
53
+ column: { id, filterOptions: userFilterOptions, filterMinWidth, disableFirstOptionFocusOnFilter = false },
54
+ reduxHeader,
55
+ patchHeaderFilterButtonAndMenu,
56
+ innerRef,
57
+ onValueChange
58
+ } = props;
59
+ const data = (0, import_createInternalAndPropsContext.usePropsStore)((state) => state.data);
60
+ const ref = (0, import_react.useRef)(null);
61
+ const shouldFocus = (0, import_react.useRef)(true);
62
+ const filterOptions = (0, import_react.useMemo)(() => {
63
+ if (!userFilterOptions) {
64
+ const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];
65
+ const hasEmptyValue = automaticFilters.some((item) => item === null || item === void 0 || item === "");
66
+ const finalAutomaticFilters = automaticFilters.filter((item) => item !== null && item !== void 0 && item !== "").map((item) => ({
67
+ type: "option",
68
+ dsId: item,
69
+ value: item,
70
+ label: item
71
+ }));
72
+ if (hasEmptyValue) {
73
+ finalAutomaticFilters.push({
74
+ type: "option",
75
+ dsId: import_configs.EMPTY_FILTER,
76
+ value: import_configs.EMPTY_FILTER,
77
+ label: "(Empty)"
78
+ });
79
+ }
80
+ return finalAutomaticFilters;
81
+ }
82
+ if (Array.isArray(userFilterOptions)) return userFilterOptions;
83
+ return userFilterOptions();
84
+ }, [data, id, userFilterOptions]);
85
+ const filters = filterOptions;
86
+ const [draftSelection, setDraftSelection] = (0, import_react.useState)(selectedItems);
87
+ const handleOnChange = (0, import_react.useCallback)((value) => {
88
+ setDraftSelection(value);
89
+ }, []);
90
+ const handleOnCreate = (0, import_react.useCallback)(
91
+ (label) => {
92
+ if (label.trim() === "") {
93
+ return;
94
+ }
95
+ if (filterOptions.some((item) => "label" in item && item.label === label)) {
96
+ return;
97
+ }
98
+ const newId = (0, import_uid.uid)();
99
+ const newItem = {
100
+ dsId: newId,
101
+ value: newId,
102
+ label,
103
+ type: "option"
104
+ };
105
+ filterOptions.unshift(newItem);
106
+ handleOnChange(Array.isArray(draftSelection) ? [...draftSelection, newItem] : newItem);
107
+ },
108
+ [draftSelection, filterOptions, handleOnChange]
109
+ );
110
+ const handleRef = (0, import_react.useCallback)((newRef) => {
111
+ ref.current = newRef;
112
+ if (shouldFocus.current) {
113
+ setTimeout(() => {
114
+ ref.current?.focus();
115
+ shouldFocus.current = false;
116
+ });
117
+ }
118
+ }, []);
119
+ (0, import_react.useEffect)(() => {
120
+ if (reduxHeader?.hideFilterMenu) {
121
+ shouldFocus.current = true;
122
+ setDraftSelection(selectedItems);
123
+ }
124
+ }, [reduxHeader?.hideFilterMenu, selectedItems]);
125
+ const Select = (0, import_react.useMemo)(
126
+ () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
127
+ import_ds_grid.Grid,
128
+ {
129
+ "data-testid": isMulti ? import_configs.DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : import_configs.DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER,
130
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
131
+ import_ds_form_combobox.DSComboBox,
132
+ {
133
+ inline: true,
134
+ "aria-label": "Search filter options",
135
+ innerRef: handleRef,
136
+ allOptions: filters,
137
+ onCreate: creatable ? handleOnCreate : void 0,
138
+ forceFocusFirstOptionOnType: creatable && disableFirstOptionFocusOnFilter === false,
139
+ onChange: handleOnChange,
140
+ selectedValues: draftSelection,
141
+ menuMaxHeight: 300,
142
+ isMenuOpen: true
143
+ }
144
+ )
145
+ }
146
+ ),
147
+ [
148
+ creatable,
149
+ disableFirstOptionFocusOnFilter,
150
+ filters,
151
+ handleOnChange,
152
+ handleOnCreate,
153
+ handleRef,
154
+ isMulti,
155
+ draftSelection
156
+ ]
157
+ );
158
+ const handleSubmit = (0, import_react.useCallback)(
159
+ (e) => {
160
+ e.preventDefault();
161
+ const value = draftSelection;
162
+ let normalized;
163
+ if (isMulti) {
164
+ const asArray = Array.isArray(value) ? value : value ? [value] : [];
165
+ normalized = asArray.length ? asArray : void 0;
166
+ } else {
167
+ normalized = value ?? void 0;
168
+ }
169
+ onValueChange(type, normalized);
170
+ patchHeaderFilterButtonAndMenu(column.id, true);
171
+ innerRef?.current?.focus();
172
+ },
173
+ [column.id, draftSelection, innerRef, isMulti, onValueChange, patchHeaderFilterButtonAndMenu, type]
174
+ );
175
+ const handleReset = (0, import_react.useCallback)(() => {
176
+ setDraftSelection(isMulti ? [] : null);
177
+ onValueChange(type, void 0);
178
+ patchHeaderFilterButtonAndMenu(column.id, true);
179
+ innerRef?.current?.focus();
180
+ }, [column.id, innerRef, onValueChange, patchHeaderFilterButtonAndMenu, type, isMulti]);
181
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
182
+ import_FilterPopoverV2.FilterPopoverV2,
183
+ {
184
+ onFilterSubmit: handleSubmit,
185
+ onFilterReset: handleReset,
186
+ firstElementRef: ref,
187
+ reduxHeader,
188
+ column,
189
+ columnReference: referenceColumn,
190
+ columnId: column.id,
191
+ menuContent: Select,
192
+ triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.SearchXsmall, {}),
193
+ innerRef,
194
+ ariaLabel: "Open Selection Filter",
195
+ customStyles: {
196
+ backgroundColor: "#fff",
197
+ width: filterMinWidth ?? referenceColumn?.offsetWidth
198
+ }
199
+ }
200
+ );
201
+ };
202
+ //# sourceMappingURL=BaseSelectFilterV2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/addons/Filters/Components/SelectFilter/BaseSelectFilterV2.tsx", "../../../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable max-lines */\nimport React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport type { DSComboboxT } from '@elliemae/ds-form-combobox';\nimport { DSComboBox } from '@elliemae/ds-form-combobox';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FilterPopoverV2 } from '../../../../exported-related/FilterPopover/FilterPopoverV2.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID, EMPTY_FILTER } from '../../../../configs/index.js';\nimport { usePropsStore } from '../../../../configs/useStore/createInternalAndPropsContext.js';\n\ninterface BaseSelectProps {\n isMulti?: boolean;\n creatable?: boolean;\n type: string;\n}\n\ntype MaybeToStringable =\n | string\n | number\n | boolean\n | Date\n | RegExp\n | Array<unknown>\n | Record<string, unknown>\n | null\n | undefined;\n\nconst getValue = (datum: unknown) => (datum as MaybeToStringable)?.toString();\n\ntype BaseSelectFilterValue = DSComboboxT.SelectedOptionsT;\n\nexport const BaseSelectFilterV2: React.ComponentType<\n DSDataTableT.FilterProps<BaseSelectFilterValue> & BaseSelectProps\n> = (props) => {\n const {\n isMulti = false,\n referenceColumn,\n filterValue: selectedItems = null,\n creatable = false,\n column,\n type,\n column: { id, filterOptions: userFilterOptions, filterMinWidth, disableFirstOptionFocusOnFilter = false },\n reduxHeader,\n patchHeaderFilterButtonAndMenu,\n innerRef,\n onValueChange,\n } = props;\n\n const data = usePropsStore((state) => state.data);\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const filterOptions = useMemo(() => {\n // If the user didn't provide options, use the available ones\n if (!userFilterOptions) {\n const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];\n\n const hasEmptyValue = automaticFilters.some((item) => item === null || item === undefined || item === '');\n\n const finalAutomaticFilters: DSDataTableT.FilterOptionT[] = automaticFilters\n .filter((item) => item !== null && item !== undefined && item !== '')\n .map((item) => ({\n type: 'option',\n dsId: item as string,\n value: item as string,\n label: item as string,\n }));\n\n if (hasEmptyValue) {\n finalAutomaticFilters.push({\n type: 'option',\n dsId: EMPTY_FILTER,\n value: EMPTY_FILTER,\n label: '(Empty)',\n });\n }\n\n return finalAutomaticFilters;\n }\n\n // If user provided the array itself, use it\n if (Array.isArray(userFilterOptions)) return userFilterOptions;\n // Otherwise, it is a function\n return userFilterOptions();\n }, [data, id, userFilterOptions]);\n const filters = filterOptions;\n\n const [draftSelection, setDraftSelection] = useState<BaseSelectFilterValue>(selectedItems);\n\n const handleOnChange = useCallback((value: BaseSelectFilterValue) => {\n setDraftSelection(value);\n }, []);\n\n const handleOnCreate = useCallback(\n (label: string) => {\n if (label.trim() === '') {\n return;\n }\n if (filterOptions.some((item) => 'label' in item && item.label === label)) {\n return;\n }\n const newId = uid();\n const newItem: DSDataTableT.FilterOptionT = {\n dsId: newId,\n value: newId,\n label,\n type: 'option',\n };\n filterOptions.unshift(newItem);\n handleOnChange(Array.isArray(draftSelection) ? [...draftSelection, newItem] : newItem);\n },\n [draftSelection, filterOptions, handleOnChange],\n );\n\n const handleRef = useCallback((newRef: HTMLInputElement | null) => {\n ref.current = newRef;\n if (shouldFocus.current) {\n setTimeout(() => {\n ref.current?.focus();\n shouldFocus.current = false;\n });\n }\n }, []);\n\n useEffect(() => {\n if (reduxHeader?.hideFilterMenu) {\n shouldFocus.current = true;\n setDraftSelection(selectedItems);\n }\n }, [reduxHeader?.hideFilterMenu, selectedItems]);\n\n const Select = useMemo(\n () => (\n <Grid\n data-testid={\n isMulti ? DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER\n }\n >\n <DSComboBox\n inline\n aria-label=\"Search filter options\"\n innerRef={handleRef}\n allOptions={filters}\n onCreate={creatable ? handleOnCreate : undefined}\n forceFocusFirstOptionOnType={creatable && disableFirstOptionFocusOnFilter === false}\n onChange={handleOnChange}\n selectedValues={draftSelection}\n menuMaxHeight={300}\n isMenuOpen\n />\n </Grid>\n ),\n [\n creatable,\n disableFirstOptionFocusOnFilter,\n filters,\n handleOnChange,\n handleOnCreate,\n handleRef,\n isMulti,\n draftSelection,\n ],\n );\n\n const handleSubmit = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n\n const value = draftSelection;\n\n let normalized: BaseSelectFilterValue | undefined;\n\n if (isMulti) {\n // eslint-disable-next-line no-nested-ternary\n const asArray = Array.isArray(value) ? value : value ? [value] : [];\n normalized = asArray.length ? asArray : undefined;\n } else {\n normalized = value ?? undefined;\n }\n\n onValueChange(type, normalized);\n patchHeaderFilterButtonAndMenu(column.id, true);\n innerRef?.current?.focus();\n },\n [column.id, draftSelection, innerRef, isMulti, onValueChange, patchHeaderFilterButtonAndMenu, type],\n );\n\n const handleReset = useCallback(() => {\n setDraftSelection(isMulti ? [] : null);\n onValueChange(type, undefined);\n patchHeaderFilterButtonAndMenu(column.id, true);\n innerRef?.current?.focus();\n }, [column.id, innerRef, onValueChange, patchHeaderFilterButtonAndMenu, type, isMulti]);\n\n return (\n <FilterPopoverV2\n onFilterSubmit={handleSubmit}\n onFilterReset={handleReset}\n firstElementRef={ref}\n reduxHeader={reduxHeader}\n column={column}\n columnReference={referenceColumn}\n columnId={column.id}\n menuContent={Select}\n triggerIcon={<SearchXsmall />}\n innerRef={innerRef}\n ariaLabel=\"Open Selection Filter\"\n customStyles={{\n backgroundColor: '#fff',\n width: filterMinWidth ?? referenceColumn?.offsetWidth,\n }}\n />\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }