@progress/kendo-react-grid 9.0.0-develop.2 → 9.0.0-develop.21

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 (68) hide show
  1. package/Grid.js +1 -1
  2. package/Grid.mjs +927 -1042
  3. package/GridNoRecords.js +1 -1
  4. package/GridNoRecords.mjs +7 -14
  5. package/GridToolbar.js +1 -1
  6. package/GridToolbar.mjs +23 -28
  7. package/README.md +34 -33
  8. package/VirtualScroll.js +1 -1
  9. package/VirtualScroll.mjs +63 -58
  10. package/VirtualScrollFixed.js +1 -1
  11. package/VirtualScrollFixed.mjs +16 -14
  12. package/cells/GridCell.mjs +6 -3
  13. package/cells/GridDetailCell.mjs +6 -3
  14. package/cells/GridEditCell.mjs +10 -38
  15. package/cells/GridFilterCell.js +1 -1
  16. package/cells/GridFilterCell.mjs +99 -113
  17. package/cells/GridGroupCell.mjs +24 -30
  18. package/cells/GridHierarchyCell.mjs +2 -13
  19. package/cells/GridSelectionCell.mjs +3 -24
  20. package/columnMenu/GridColumnMenuCheckboxFilter.js +1 -1
  21. package/columnMenu/GridColumnMenuCheckboxFilter.mjs +132 -184
  22. package/columnMenu/GridColumnMenuFilter.js +1 -1
  23. package/columnMenu/GridColumnMenuFilter.mjs +127 -170
  24. package/columnMenu/GridColumnMenuFilterCell.js +1 -1
  25. package/columnMenu/GridColumnMenuFilterCell.mjs +42 -61
  26. package/columnMenu/GridColumnMenuFilterUI.js +1 -1
  27. package/columnMenu/GridColumnMenuFilterUI.mjs +15 -24
  28. package/columnMenu/GridColumnMenuGroup.js +1 -1
  29. package/columnMenu/GridColumnMenuGroup.mjs +29 -40
  30. package/columnMenu/GridColumnMenuItemContent.js +1 -1
  31. package/columnMenu/GridColumnMenuItemContent.mjs +7 -20
  32. package/columnMenu/GridColumnMenuItemGroup.js +1 -1
  33. package/columnMenu/GridColumnMenuItemGroup.mjs +7 -20
  34. package/columnMenu/GridColumnMenuSort.js +1 -1
  35. package/columnMenu/GridColumnMenuSort.mjs +42 -53
  36. package/columnMenu/GridColumnMenuWrapper.mjs +6 -18
  37. package/dist/cdn/js/kendo-react-grid.js +1 -1
  38. package/drag/ColumnDraggable.js +1 -1
  39. package/drag/ColumnDraggable.mjs +34 -33
  40. package/drag/ColumnResize.js +1 -1
  41. package/drag/ColumnResize.mjs +36 -44
  42. package/drag/GroupingIndicator.js +1 -1
  43. package/drag/GroupingIndicator.mjs +51 -83
  44. package/filterCommon.mjs +1 -3
  45. package/footer/Footer.js +1 -1
  46. package/footer/Footer.mjs +40 -57
  47. package/footer/FooterRow.mjs +6 -5
  48. package/header/FilterRow.js +1 -1
  49. package/header/FilterRow.mjs +69 -82
  50. package/header/GridHeaderSelectionCell.js +1 -1
  51. package/header/GridHeaderSelectionCell.mjs +28 -35
  52. package/header/GroupPanel.js +1 -1
  53. package/header/GroupPanel.mjs +43 -49
  54. package/header/Header.js +1 -1
  55. package/header/Header.mjs +70 -74
  56. package/header/HeaderRow.mjs +24 -27
  57. package/index.d.mts +259 -724
  58. package/index.d.ts +259 -724
  59. package/index.js +1 -1
  60. package/index.mjs +78 -80
  61. package/messages/index.mjs +4 -1
  62. package/package-metadata.mjs +1 -1
  63. package/package.json +11 -11
  64. package/rows/GridDetailRow.js +1 -1
  65. package/rows/GridDetailRow.mjs +2 -10
  66. package/rows/GridRow.mjs +10 -8
  67. package/utils/index.js +1 -1
  68. package/utils/index.mjs +35 -39
@@ -6,194 +6,142 @@
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
8
  "use client";
9
- import * as s from "react";
10
- import { GridColumnMenuItem as S } from "./GridColumnMenuItem.mjs";
11
- import { GridColumnMenuItemGroup as B } from "./GridColumnMenuItemGroup.mjs";
12
- import { GridColumnMenuItemContent as N } from "./GridColumnMenuItemContent.mjs";
13
- import { Input as D, Checkbox as m } from "@progress/kendo-react-inputs";
14
- import { provideLocalizationService as b, registerForLocalization as y } from "@progress/kendo-react-intl";
15
- import { searchPlaceholder as x, messages as h, filterTitle as g, filterCheckAll as F, filterSelectedItems as C, filterSubmitButton as I, filterClearButton as k } from "../messages/index.mjs";
16
- import { filterBy as v } from "@progress/kendo-data-query";
17
- import { clone as q, IconWrap as L } from "@progress/kendo-react-common";
18
- import { Button as p } from "@progress/kendo-react-buttons";
19
- import { getNestedValue as E } from "../utils/index.mjs";
20
- import { searchIcon as O, xIcon as w, filterIcon as M } from "@progress/kendo-svg-icons";
21
- const P = (f, o) => f.length !== o.length ? !1 : f.every((e, t) => e === o[t]), u = class u extends s.Component {
22
- constructor(o) {
23
- super(o), this.defaultFilter = () => this.props.filter ? q(this.props.filter) : { filters: [], logic: "and" }, this.isControlled = () => this.props.expanded !== void 0, this.parseData = (e, t) => {
24
- const n = this.props.column.field || "", r = e.map((a) => E(n, a));
25
- return t ? r.filter((a, i) => r.indexOf(a) === i) : r;
26
- }, this.getFilterIndex = () => {
27
- const e = this.props.column.field;
28
- return this.defaultFilter().filters.findIndex((r) => r.filters && r.filters.length > 0 && r.filters[0].field === e);
29
- }, this.onFilterExpand = () => {
30
- const e = this.isControlled(), t = !(e ? this.props.expanded : this.state.expanded);
31
- this.props.onExpandChange && this.props.onExpandChange(t), e || this.setState({
32
- expanded: t
33
- });
34
- }, this.handleSearchChange = (e) => {
35
- const t = this.props.searchBoxFilterOperator ? this.props.searchBoxFilterOperator : "startswith", n = {
36
- logic: "and",
37
- filters: [
38
- { field: this.props.column.field, operator: t, value: e.target.value, ignoreCase: !0 }
39
- ]
40
- };
41
- this.setState({
42
- value: e.target.value,
43
- data: this.parseData(v(this.props.data || [], n), this.props.uniqueData)
44
- });
45
- }, this.handleClear = () => {
46
- const e = this.props.searchBoxFilterOperator ? this.props.searchBoxFilterOperator : "startswith", t = {
47
- logic: "and",
48
- filters: [
49
- { field: this.props.column.field, operator: e, value: "", ignoreCase: !0 }
50
- ]
51
- };
52
- this.setState({
53
- value: "",
54
- data: this.parseData(v(this.props.data || [], t), this.props.uniqueData)
55
- });
56
- }, this.clear = (e) => {
57
- if (e.preventDefault(), !this.props.onFilterChange)
58
- return;
59
- const t = this.state.currentFilter || null;
60
- t !== null && t.filters.length > 0 ? (this.compositeFilterIndex >= 0 && t.filters.splice(this.compositeFilterIndex, 1), this.props.onFilterChange(t, e)) : this.props.onFilterChange(null, e), this.props.onCloseMenu && this.props.onCloseMenu();
61
- }, this.submit = (e) => {
62
- if (e.preventDefault(), !this.props.onFilterChange)
63
- return;
64
- const t = this.state.currentFilter || null;
65
- this.props.onFilterChange(t, e), this.props.onCloseMenu && this.props.onCloseMenu();
66
- }, this.handleCheckBoxChange = (e, t) => {
67
- const n = this.props.column.field || "", r = { ...this.state.currentFilter }, a = [...this.state.currentFilter.filters];
68
- let i = [];
69
- if (this.compositeFilterIndex !== -1 && r.filters[this.compositeFilterIndex].filters && t !== "all" && (i = r.filters[this.compositeFilterIndex].filters), e.value && t === "all")
70
- this.state.data.forEach((l) => {
71
- i.push({ field: n, operator: "eq", value: l });
72
- });
73
- else if (e.value)
74
- i.push({ field: n, operator: "eq", value: t });
75
- else if (this.state.currentFilter) {
76
- const l = i.findIndex((c) => c.value === t);
77
- i.splice(l, 1);
78
- }
79
- r.logic = "and", this.compositeFilterIndex !== -1 ? a[this.compositeFilterIndex] = {
80
- logic: "or",
81
- filters: i
82
- } : a.push({
83
- logic: "or",
84
- filters: i
85
- }), (!e.value && t === "all" || i.length === 0) && a.splice(this.compositeFilterIndex, 1), r.filters = a, this.setState({ currentFilter: r });
86
- }, this.isAllSelected = () => {
87
- let e = !1;
88
- if (this.state.currentFilter) {
89
- const t = [...this.state.currentFilter.filters];
90
- return this.compositeFilterIndex === -1 ? !1 : (e = this.state.data.every((n) => this.compositeFilterIndex !== -1 && t[this.compositeFilterIndex].filters ? t[this.compositeFilterIndex].filters.findIndex((a) => a.value === n) >= 0 : !1), e);
91
- }
92
- return e;
93
- }, this.compositeFilterIndex = this.getFilterIndex(), this.state = {
94
- expanded: o.expanded || !1,
95
- value: "",
96
- data: this.parseData(this.props.data, this.props.uniqueData) || [],
97
- dataFromProps: this.parseData(this.props.data, !1) || [],
98
- currentFilter: this.defaultFilter()
9
+ import * as l from "react";
10
+ import { GridColumnMenuItem as Z } from "./GridColumnMenuItem.mjs";
11
+ import { GridColumnMenuItemGroup as _ } from "./GridColumnMenuItemGroup.mjs";
12
+ import { GridColumnMenuItemContent as $ } from "./GridColumnMenuItemContent.mjs";
13
+ import { Input as p, Checkbox as M } from "@progress/kendo-react-inputs";
14
+ import { useLocalization as ee } from "@progress/kendo-react-intl";
15
+ import { searchPlaceholder as O, messages as m, filterTitle as q, filterCheckAll as L, filterSelectedItems as w, filterSubmitButton as V, filterClearButton as G } from "../messages/index.mjs";
16
+ import { filterBy as P } from "@progress/kendo-data-query";
17
+ import { IconWrap as te, clone as ne } from "@progress/kendo-react-common";
18
+ import { Button as F } from "@progress/kendo-react-buttons";
19
+ import { getNestedValue as R } from "../utils/index.mjs";
20
+ import { searchIcon as le, xIcon as re, filterIcon as ae } from "@progress/kendo-svg-icons";
21
+ const ie = (e, u) => e.length !== u.length ? !1 : e.every((h, f) => h === u[f]), ce = {
22
+ uniqueData: !0
23
+ }, Ee = (e) => {
24
+ const { uniqueData: u = ce.uniqueData } = e, h = () => {
25
+ const t = e.column.field;
26
+ return v().filters.findIndex(
27
+ (a) => a.filters && a.filters.length > 0 && a.filters[0].field === t
28
+ );
29
+ }, f = (t, n) => {
30
+ const i = e.column.field || "", a = t.map((c) => R(i, c));
31
+ return n ? a.filter((c, o) => a.indexOf(c) === o) : a;
32
+ }, v = () => e.filter ? ne(e.filter) : { filters: [], logic: "and" }, r = l.useRef(h()), [S, z] = l.useState(e.expanded || !1), [I, b] = l.useState(""), [g, x] = l.useState(f(e.data, u) || []), [A, j] = l.useState(f(e.data, !1) || []), [s, T] = l.useState(v());
33
+ l.useEffect(() => {
34
+ const t = e.column.field || "", n = e.data.map((i) => R(t, i));
35
+ ie(n, A) || (x(n), j(n));
36
+ }, [e.column, e.data]);
37
+ const N = () => e.expanded !== void 0, W = () => {
38
+ const t = N(), n = !(t ? e.expanded : S);
39
+ e.onExpandChange && e.onExpandChange(n), t || z(n);
40
+ }, B = (t) => {
41
+ const n = e.searchBoxFilterOperator ? e.searchBoxFilterOperator : "startswith", i = {
42
+ logic: "and",
43
+ filters: [{ field: e.column.field, operator: n, value: t.target.value, ignoreCase: !0 }]
99
44
  };
100
- }
101
- /**
102
- * @hidden
103
- */
104
- componentDidUpdate() {
105
- const o = this.props.column.field || "", e = this.props.data.map((t) => E(o, t));
106
- P(e, this.state.dataFromProps) || this.setState({
107
- data: e,
108
- dataFromProps: e
109
- });
110
- }
111
- /**
112
- * @hidden
113
- */
114
- render() {
115
- const { column: o } = this.props;
116
- if (!o || !o.field)
117
- return /* @__PURE__ */ s.createElement("div", null);
118
- const e = b(this), t = this.isControlled() ? this.props.expanded : this.state.expanded, n = [];
119
- if (this.state.currentFilter) {
120
- const i = [...this.state.currentFilter.filters];
121
- this.compositeFilterIndex = i.findIndex((l) => l.filters && l.filters.length > 0 ? l.filters[0].field === o.field : !1), this.compositeFilterIndex !== -1 && i[this.compositeFilterIndex].filters.length > 0 && i[this.compositeFilterIndex].filters.forEach((l) => {
122
- l.field === this.props.column.field && n.push(l.value);
45
+ b(t.target.value), x(f(P(e.data || [], i), u));
46
+ }, H = () => {
47
+ const t = e.searchBoxFilterOperator ? e.searchBoxFilterOperator : "startswith", n = {
48
+ logic: "and",
49
+ filters: [{ field: e.column.field, operator: t, value: "", ignoreCase: !0 }]
50
+ };
51
+ b(""), x(f(P(e.data || [], n), u));
52
+ }, J = (t) => {
53
+ if (t.preventDefault(), !e.onFilterChange)
54
+ return;
55
+ const n = s || null;
56
+ n !== null && n.filters.length > 0 ? (r.current >= 0 && n.filters.splice(r.current, 1), e.onFilterChange(n, t)) : e.onFilterChange(null, t), e.onCloseMenu && e.onCloseMenu();
57
+ }, K = (t) => {
58
+ if (t.preventDefault(), !e.onFilterChange)
59
+ return;
60
+ const n = s || null;
61
+ e.onFilterChange(n, t), e.onCloseMenu && e.onCloseMenu();
62
+ }, D = (t, n) => {
63
+ const i = e.column.field || "", a = { ...s }, c = [...s.filters];
64
+ let o = [];
65
+ if (r.current !== -1 && a.filters[r.current].filters && n !== "all" && (o = a.filters[r.current].filters), t.value && n === "all")
66
+ g.forEach((E) => {
67
+ o.push({ field: i, operator: "eq", value: E });
123
68
  });
69
+ else if (t.value)
70
+ o.push({ field: i, operator: "eq", value: n });
71
+ else if (s) {
72
+ const E = o.findIndex((Y) => Y.value === n);
73
+ o.splice(E, 1);
74
+ }
75
+ a.logic = "and", r.current !== -1 ? c[r.current] = {
76
+ logic: "or",
77
+ filters: o
78
+ } : c.push({
79
+ logic: "or",
80
+ filters: o
81
+ }), (!t.value && n === "all" || o.length === 0) && c.splice(r.current, 1), a.filters = c, T(a);
82
+ }, Q = () => {
83
+ let t = !1;
84
+ if (s) {
85
+ const n = [...s.filters];
86
+ return r.current === -1 ? !1 : (t = g.every((i) => r.current !== -1 && n[r.current].filters ? n[r.current].filters.findIndex(
87
+ (c) => c.value === i
88
+ ) >= 0 : !1), t);
124
89
  }
125
- const r = this.props.searchBox ? /* @__PURE__ */ s.createElement(this.props.searchBox, { value: this.state.value, onChange: this.handleSearchChange }) : /* @__PURE__ */ s.createElement("div", { className: "k-searchbox k-textbox k-input k-input-md k-input-solid" }, /* @__PURE__ */ s.createElement(L, { className: "k-input-icon", name: "search", icon: O }), /* @__PURE__ */ s.createElement(
126
- D,
127
- {
128
- className: "k-input-inner",
129
- type: "text",
130
- placeholder: e.toLanguageString(x, h[x]),
131
- value: this.state.value,
132
- onChange: (i) => this.handleSearchChange(i.nativeEvent)
133
- }
134
- ), /* @__PURE__ */ s.createElement(
135
- p,
136
- {
137
- type: "button",
138
- rounded: null,
139
- className: "k-input-button",
140
- onClick: this.handleClear,
141
- icon: "x",
142
- svgIcon: w
143
- }
144
- )), a = n.filter((i, l) => n.indexOf(i) === l);
145
- return /* @__PURE__ */ s.createElement(B, null, /* @__PURE__ */ s.createElement(
146
- S,
147
- {
148
- title: e.toLanguageString(g, h[g]),
149
- iconClass: "k-i-filter",
150
- svgIcon: M,
151
- onClick: this.onFilterExpand
152
- }
153
- ), /* @__PURE__ */ s.createElement(N, { show: !!t }, /* @__PURE__ */ s.createElement(
154
- "form",
155
- {
156
- className: "k-filter-menu",
157
- onSubmit: this.submit,
158
- onReset: this.clear
159
- },
160
- /* @__PURE__ */ s.createElement("div", { className: "k-filter-menu-container" }, r, /* @__PURE__ */ s.createElement("ul", { className: "k-reset k-multicheck-wrap" }, /* @__PURE__ */ s.createElement("li", { className: "k-item k-check-all-wrap" }, /* @__PURE__ */ s.createElement(
161
- m,
162
- {
163
- label: e.toLanguageString(F, h[F]),
164
- onChange: (i) => this.handleCheckBoxChange(i, "all"),
165
- checked: this.isAllSelected()
166
- }
167
- )), this.state.data.map((i, l) => /* @__PURE__ */ s.createElement("li", { className: "k-item", key: l }, /* @__PURE__ */ s.createElement(
168
- m,
169
- {
170
- label: String(i),
171
- onChange: (c) => this.handleCheckBoxChange(c, i),
172
- checked: a.includes(i)
173
- }
174
- )))), /* @__PURE__ */ s.createElement("div", { className: "k-filter-selected-items" }, a.length + " " + e.toLanguageString(C, h[C])), /* @__PURE__ */ s.createElement("div", { className: "k-actions k-hstack k-justify-content-stretch" }, /* @__PURE__ */ s.createElement(
175
- p,
176
- {
177
- themeColor: "primary",
178
- type: "submit"
179
- },
180
- e.toLanguageString(I, h[I])
181
- ), /* @__PURE__ */ s.createElement(
182
- p,
183
- {
184
- className: "k-button",
185
- type: "reset"
186
- },
187
- e.toLanguageString(k, h[k])
188
- )))
189
- )));
90
+ return t;
91
+ }, d = ee(), { column: C } = e;
92
+ if (!C || !C.field)
93
+ return /* @__PURE__ */ l.createElement("div", null);
94
+ const U = N() ? e.expanded : S, k = [];
95
+ if (s) {
96
+ const t = [...s.filters];
97
+ r.current = t.findIndex((n) => n.filters && n.filters.length > 0 ? n.filters[0].field === C.field : !1), r.current !== -1 && t[r.current].filters.length > 0 && t[r.current].filters.forEach((n) => {
98
+ n.field === e.column.field && k.push(n.value);
99
+ });
190
100
  }
101
+ const X = e.searchBox ? /* @__PURE__ */ l.createElement(e.searchBox, { value: I, onChange: B }) : /* @__PURE__ */ l.createElement("div", { className: "k-searchbox k-textbox k-input k-input-md k-input-solid" }, /* @__PURE__ */ l.createElement(te, { className: "k-input-icon", name: "search", icon: le }), /* @__PURE__ */ l.createElement(
102
+ p,
103
+ {
104
+ className: "k-input-inner",
105
+ type: "text",
106
+ placeholder: d.toLanguageString(O, m[O]),
107
+ value: I,
108
+ onChange: (t) => B(t.nativeEvent)
109
+ }
110
+ ), /* @__PURE__ */ l.createElement(
111
+ F,
112
+ {
113
+ type: "button",
114
+ rounded: null,
115
+ className: "k-input-button",
116
+ onClick: H,
117
+ icon: "x",
118
+ svgIcon: re
119
+ }
120
+ )), y = k.filter((t, n) => k.indexOf(t) === n);
121
+ return /* @__PURE__ */ l.createElement(_, null, /* @__PURE__ */ l.createElement(
122
+ Z,
123
+ {
124
+ title: d.toLanguageString(q, m[q]),
125
+ iconClass: "k-i-filter",
126
+ svgIcon: ae,
127
+ onClick: W
128
+ }
129
+ ), /* @__PURE__ */ l.createElement($, { show: !!U }, /* @__PURE__ */ l.createElement("form", { className: "k-filter-menu", onSubmit: K, onReset: J }, /* @__PURE__ */ l.createElement("div", { className: "k-filter-menu-container" }, X, /* @__PURE__ */ l.createElement("ul", { className: "k-reset k-multicheck-wrap" }, /* @__PURE__ */ l.createElement("li", { className: "k-item k-check-all-wrap" }, /* @__PURE__ */ l.createElement(
130
+ M,
131
+ {
132
+ label: d.toLanguageString(L, m[L]),
133
+ onChange: (t) => D(t, "all"),
134
+ checked: Q()
135
+ }
136
+ )), g.map((t, n) => /* @__PURE__ */ l.createElement("li", { className: "k-item", key: n }, /* @__PURE__ */ l.createElement(
137
+ M,
138
+ {
139
+ label: String(t),
140
+ onChange: (i) => D(i, t),
141
+ checked: y.includes(t)
142
+ }
143
+ )))), /* @__PURE__ */ l.createElement("div", { className: "k-filter-selected-items" }, y.length + " " + d.toLanguageString(w, m[w])), /* @__PURE__ */ l.createElement("div", { className: "k-actions k-hstack k-justify-content-stretch" }, /* @__PURE__ */ l.createElement(F, { themeColor: "primary", type: "submit" }, d.toLanguageString(V, m[V])), /* @__PURE__ */ l.createElement(F, { className: "k-button", type: "reset" }, d.toLanguageString(G, m[G])))))));
191
144
  };
192
- u.defaultProps = {
193
- uniqueData: !0
194
- };
195
- let d = u;
196
- y(d);
197
145
  export {
198
- d as GridColumnMenuCheckboxFilter
146
+ Ee as GridColumnMenuCheckboxFilter
199
147
  };
@@ -5,4 +5,4 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("react"),y=require("@progress/kendo-data-query"),L=require("./GridColumnMenuItem.js"),P=require("./GridColumnMenuItemGroup.js"),U=require("./GridColumnMenuItemContent.js"),b=require("@progress/kendo-react-intl"),a=require("../filterCommon.js"),f=require("../messages/index.js"),T=require("./GridColumnMenuFilterUI.js"),E=require("@progress/kendo-react-buttons"),j=require("@progress/kendo-svg-icons");function R(c){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const l in c)if(l!=="default"){const e=Object.getOwnPropertyDescriptor(c,l);Object.defineProperty(i,l,e.get?e:{enumerable:!0,get:()=>c[l]})}}return i.default=c,Object.freeze(i)}const u=R(B),g=c=>c||{filters:[],logic:"and"},h=(c,i)=>g(i).filters.filter(t=>y.isCompositeFilterDescriptor(t)?t.filters&&t.filters.length&&t.filters.length<=2&&!t.filters.find(r=>y.isCompositeFilterDescriptor(r)||r.field!==c):!1)[0]||null,F=class F extends u.Component{constructor(i){super(i),this.removeGroup=(e,t)=>{const r=[...t.filters],n=r.findIndex(o=>o===e);return n>-1&&r.splice(n,1),{...t,filters:r}},this.insertGroup=(e,t)=>({...t,filters:[e,...t.filters]}),this.isControlled=()=>this.props.expanded!==void 0,this.onFilterExpand=()=>{const e=this.isControlled(),t=!(e?this.props.expanded:this.state.expanded);this.props.onExpandChange&&this.props.onExpandChange(t),e||this.setState({expanded:t})},this.firstFilterChange=e=>{this.filterChange(0,e)},this.secondFilterChange=e=>{this.filterChange(1,e)},this.filterChange=(e,t)=>{const r=this.state.filterGroup.filters.map((n,o)=>o===e?{...n,value:t.value,operator:t.operator}:n);this.setState({filterGroup:{...this.state.filterGroup,filters:r}})},this.logicChange=e=>{this.setState({filterGroup:{...this.state.filterGroup,logic:e.target.value.operator}})},this.clear=e=>{if(e.preventDefault(),!this.props.onFilterChange)return;const t=this.props.column.field,r=g(this.props.filter),n=h(t,this.props.filter),o=r.filters.filter(s=>s!==n);o.length?this.props.onFilterChange({...r,filters:o},e):this.props.onFilterChange(null,e),this.props.onCloseMenu&&this.props.onCloseMenu()},this.currentFilterGroup=()=>({...this.state.filterGroup,filters:this.state.filterGroup.filters.filter(e=>e.value!==void 0&&e.value!==null&&e.value!==""||e.value===null&&e.operator)}),this.submit=e=>{if(e.preventDefault(),!this.props.onFilterChange)return;const t=this.props.column.field,r=g(this.props.filter),n=h(t,this.props.filter),o=this.currentFilterGroup();let s=null;if(n&&o.filters.length>0){const p=r.filters.map(d=>d===n?o:d);s={...r,filters:p}}else if(o.filters.length===0){const p=r.filters.filter(d=>d!==n);p.length&&(s={...r,filters:p})}else s={...r,filters:[...r.filters,o]};this.props.onFilterChange(s,e),this.props.onCloseMenu&&this.props.onCloseMenu()};let l;if(i.column&&i.column.field){const e=a.getFilterType(i.column.filter),t=a.getDefaultOperator(i.filterOperators,e);l=h(i.column.field,i.filter),l=l?{...l,filters:l.filters.map(r=>({...r}))}:{logic:"and",filters:[{field:i.column.field,operator:t,value:a.IsUnaryFilter(t)?null:void 0},{field:i.column.field,operator:t,value:a.IsUnaryFilter(t)?null:void 0}]},l.filters.filter(r=>r.field===i.column.field).length===1&&l.filters.splice(1,0,{field:i.column.field,operator:t})}this.state={expanded:i.expanded||!1,filterGroup:l}}render(){const{column:i,filterUI:l,hideSecondFilter:e,filterOperators:t}=this.props;if(!i||!i.field)return u.createElement("div",null);const r=a.getFilterType(i.filter),n=e!==void 0?e:a.defaultHideSecondFilter[r],o=b.provideLocalizationService(this),s=this.state.filterGroup.filters,p=a.operatorMap(t[r],o),d=a.operatorMap(a.booleanFilterValues,o),M={field:i.field,value:s[0].value,operator:s[0].operator,operators:p,booleanValues:d,onChange:this.firstFilterChange,filterType:r},O={field:i.field,value:s[1].value,operator:s[1].operator,operators:p,booleanValues:d,onChange:this.secondFilterChange,filterType:r},v=this.state.filterGroup.logic,G=a.operatorMap(a.filterLogicList,o),C={value:G.find(q=>q.operator===(v===null?"":v)),onChange:this.logicChange,data:G},I=l,S={firstFilterProps:M,secondFilterProps:O,logicData:C.data,logicValue:C.value,onLogicChange:C.onChange,hideSecondFilter:n},D=this.currentFilterGroup().filters.length!==0||a.IsUnaryFilter(s[0].operator)||a.IsUnaryFilter(s[1].operator),k=this.isControlled()?this.props.expanded:this.state.expanded,x=this.props.alwaysExpand;return u.createElement(P.GridColumnMenuItemGroup,null,!x&&u.createElement(L.GridColumnMenuItem,{title:o.toLanguageString(f.filterTitle,f.messages[f.filterTitle]),iconClass:"k-i-filter",svgIcon:j.filterIcon,onClick:this.onFilterExpand}),u.createElement(U.GridColumnMenuItemContent,{show:x||!!k},u.createElement("form",{className:"k-filter-menu",onSubmit:this.submit,onReset:this.clear},u.createElement("div",{className:"k-filter-menu-container"},I?u.createElement(I,{...S}):u.createElement(T.GridColumnMenuFilterUI,{...S}),u.createElement("div",{className:"k-actions k-actions-stretched"},u.createElement(E.Button,{themeColor:"primary",disabled:!D},o.toLanguageString(f.filterSubmitButton,f.messages[f.filterSubmitButton])),u.createElement(E.Button,{type:"reset"},o.toLanguageString(f.filterClearButton,f.messages[f.filterClearButton])))))))}};F.active=(i,l)=>!!h(i,l);let m=F;b.registerForLocalization(m);exports.GridColumnMenuFilter=m;exports.filterGroupByField=h;exports.rootFilterOrDefault=g;
8
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const X=require("react"),L=require("@progress/kendo-data-query"),Y=require("./GridColumnMenuItem.js"),Z=require("./GridColumnMenuItemGroup.js"),$=require("./GridColumnMenuItemContent.js"),ee=require("@progress/kendo-react-intl"),i=require("../filterCommon.js"),c=require("../messages/index.js"),te=require("./GridColumnMenuFilterUI.js"),T=require("@progress/kendo-react-buttons"),re=require("@progress/kendo-svg-icons");function le(e){const u=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const f in e)if(f!=="default"){const F=Object.getOwnPropertyDescriptor(e,f);Object.defineProperty(u,f,F.get?F:{enumerable:!0,get:()=>e[f]})}}return u.default=e,Object.freeze(u)}const l=le(X),I=e=>e||{filters:[],logic:"and"},v=(e,u)=>I(u).filters.filter(n=>L.isCompositeFilterDescriptor(n)?n.filters&&n.filters.length&&n.filters.length<=2&&!n.filters.find(C=>L.isCompositeFilterDescriptor(C)||C.field!==e):!1)[0]||null,ne=(e,u)=>!!v(e,u),ie=e=>{const u=l.useCallback(()=>{let t;if(e.column&&e.column.field){const a=i.getFilterType(e.column.filter),r=i.getDefaultOperator(e.filterOperators,a);t=v(e.column.field,e.filter),t=t?{...t,filters:t.filters.map(o=>({...o}))}:{logic:"and",filters:[{field:e.column.field,operator:r,value:i.IsUnaryFilter(r)?null:void 0},{field:e.column.field,operator:r,value:i.IsUnaryFilter(r)?null:void 0}]},t.filters.filter(o=>o.field===e.column.field).length===1&&t.filters.splice(1,0,{field:e.column.field,operator:r})}return t},[e.column]),[f,F]=l.useState(e.expanded||!1),[n,C]=l.useState(u()),S=()=>e.expanded!==void 0,_=()=>{const t=S(),a=!(t?e.expanded:f);e.onExpandChange&&e.onExpandChange(a),t||F(a)},j=t=>{p(0,t)},R=t=>{p(1,t)},p=(t,a)=>{const r=n.filters.map((o,s)=>s===t?{...o,value:a.value,operator:a.operator}:o);C({...n,filters:r})},V=t=>{C({...n,logic:t.target.value.operator})},w=t=>{if(t.preventDefault(),!e.onFilterChange)return;const a=e.column.field,r=I(e.filter),o=v(a,e.filter),s=r.filters.filter(g=>g!==o);s.length?e.onFilterChange({...r,filters:s},t):e.onFilterChange(null,t),e.onCloseMenu&&e.onCloseMenu()},b=()=>({...n,filters:n.filters.filter(t=>t.value!==void 0&&t.value!==null&&t.value!==""||t.value===null&&t.operator)}),N=t=>{if(t.preventDefault(),!e.onFilterChange)return;const a=e.column.field,r=I(e.filter),o=v(a,e.filter),s=b();let g=null;if(o&&s.filters.length>0){const M=r.filters.map(y=>y===o?s:y);g={...r,filters:M}}else if(s.filters.length===0){const M=r.filters.filter(y=>y!==o);M.length&&(g={...r,filters:M})}else g={...r,filters:[...r.filters,s]};e.onFilterChange(g,t),e.onCloseMenu&&e.onCloseMenu()},{column:h,filterUI:z,hideSecondFilter:x,filterOperators:A}=e,d=ee.useLocalization();if(!h||!h.field)return l.createElement("div",null);const G=i.getFilterType(h.filter),H=x!==void 0?x:i.defaultHideSecondFilter[G],m=n.filters,O=i.operatorMap(A[G],d),k=i.operatorMap(i.booleanFilterValues,d),Q={field:h.field,value:m[0].value,operator:m[0].operator,operators:O,booleanValues:k,onChange:j,filterType:G},J={field:h.field,value:m[1].value,operator:m[1].operator,operators:O,booleanValues:k,onChange:R,filterType:G},D=n.logic,q=i.operatorMap(i.filterLogicList,d),E={value:q.find(t=>t.operator===(D===null?"":D)),onChange:V,data:q},B=z,P={firstFilterProps:Q,secondFilterProps:J,logicData:E.data,logicValue:E.value,onLogicChange:E.onChange,hideSecondFilter:H},K=b().filters.length!==0||i.IsUnaryFilter(m[0].operator)||i.IsUnaryFilter(m[1].operator),W=S()?e.expanded:f,U=e.alwaysExpand;return l.createElement(Z.GridColumnMenuItemGroup,null,!U&&l.createElement(Y.GridColumnMenuItem,{title:d.toLanguageString(c.filterTitle,c.messages[c.filterTitle]),iconClass:"k-i-filter",svgIcon:re.filterIcon,onClick:_}),l.createElement($.GridColumnMenuItemContent,{show:U||!!W},l.createElement("form",{className:"k-filter-menu",onSubmit:N,onReset:w},l.createElement("div",{className:"k-filter-menu-container"},B?l.createElement(B,{...P}):l.createElement(te.GridColumnMenuFilterUI,{...P}),l.createElement("div",{className:"k-actions k-actions-stretched"},l.createElement(T.Button,{themeColor:"primary",disabled:!K},d.toLanguageString(c.filterSubmitButton,c.messages[c.filterSubmitButton])),l.createElement(T.Button,{type:"reset"},d.toLanguageString(c.filterClearButton,c.messages[c.filterClearButton])))))))};exports.GridColumnMenuFilter=ie;exports.filterGroupByField=v;exports.isColumnMenuFilterActive=ne;exports.rootFilterOrDefault=I;