@monolith-forensics/monolith-ui 1.2.60 → 1.2.62
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.
|
@@ -7,10 +7,11 @@ import { DefaultOperators } from "./DefaultOperators";
|
|
|
7
7
|
import Input from "../Input";
|
|
8
8
|
import DateInput from "../DateInput";
|
|
9
9
|
import { useDebouncedCallback } from "use-debounce";
|
|
10
|
+
import moment from "moment";
|
|
10
11
|
const StyledContainer = styled.div `
|
|
11
12
|
display: flex;
|
|
12
13
|
flex-direction: row;
|
|
13
|
-
gap:
|
|
14
|
+
gap: 2px;
|
|
14
15
|
`;
|
|
15
16
|
const RuleContainer = styled(StyledContainer) `
|
|
16
17
|
// first child
|
|
@@ -34,10 +35,14 @@ const RuleContainer = styled(StyledContainer) `
|
|
|
34
35
|
const FilterContainer = styled(StyledContainer) `
|
|
35
36
|
gap: 10px;
|
|
36
37
|
flex-wrap: wrap;
|
|
38
|
+
|
|
39
|
+
button.mfui-DropDownMenu:hover {
|
|
40
|
+
border-color: ${({ theme }) => theme.palette.primary.main};
|
|
41
|
+
}
|
|
37
42
|
`;
|
|
38
43
|
const StyledButton = styled(Button) `
|
|
39
44
|
border-radius: 0;
|
|
40
|
-
font-size:
|
|
45
|
+
font-size: 12px;
|
|
41
46
|
height: 20px;
|
|
42
47
|
|
|
43
48
|
padding: 3px 5px;
|
|
@@ -58,11 +63,11 @@ const BaseLabel = styled.div `
|
|
|
58
63
|
|
|
59
64
|
background-color: ${({ theme }) => theme.palette.background.secondary};
|
|
60
65
|
|
|
61
|
-
font-size:
|
|
66
|
+
font-size: 12px;
|
|
62
67
|
|
|
63
68
|
height: 20px;
|
|
64
69
|
|
|
65
|
-
padding:
|
|
70
|
+
padding: 3px 5px;
|
|
66
71
|
|
|
67
72
|
overflow: hidden;
|
|
68
73
|
white-space: nowrap;
|
|
@@ -81,8 +86,8 @@ const StyledInput = styled(Input) `
|
|
|
81
86
|
min-height: 20px;
|
|
82
87
|
width: 100px;
|
|
83
88
|
border-radius: 0;
|
|
84
|
-
font-size:
|
|
85
|
-
padding:
|
|
89
|
+
font-size: 12px;
|
|
90
|
+
padding: 3px 5px;
|
|
86
91
|
|
|
87
92
|
border-color: transparent;
|
|
88
93
|
background-color: ${({ theme }) => theme.palette.background.secondary};
|
|
@@ -93,37 +98,79 @@ const StyledInput = styled(Input) `
|
|
|
93
98
|
`;
|
|
94
99
|
const StyledDateInput = styled(DateInput) `
|
|
95
100
|
height: 20px;
|
|
96
|
-
|
|
97
|
-
font-size: 11px;
|
|
101
|
+
font-size: 12px;
|
|
98
102
|
border-radius: 0;
|
|
99
103
|
border-color: transparent;
|
|
100
104
|
background-color: ${({ theme }) => theme.palette.background.secondary};
|
|
105
|
+
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
|
|
108
|
+
&:hover {
|
|
109
|
+
border-color: ${({ theme }) => theme.palette.primary.main};
|
|
110
|
+
}
|
|
101
111
|
`;
|
|
112
|
+
const dateFormatResolver = (resolution) => {
|
|
113
|
+
switch (resolution) {
|
|
114
|
+
case "day":
|
|
115
|
+
return "YYYY-MM-DD";
|
|
116
|
+
// case "month":
|
|
117
|
+
// return "YYYY-MM";
|
|
118
|
+
// case "year":
|
|
119
|
+
// return "YYYY";
|
|
120
|
+
// case "hour":
|
|
121
|
+
// return "YYYY-MM-DD HH";
|
|
122
|
+
// case "minute":
|
|
123
|
+
// return "YYYY-MM-DD HH:mm";
|
|
124
|
+
case "second":
|
|
125
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
126
|
+
case "millisecond":
|
|
127
|
+
return "YYYY-MM-DD HH:mm:ss.SSS";
|
|
128
|
+
default:
|
|
129
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
130
|
+
}
|
|
131
|
+
};
|
|
102
132
|
const ValueEditor = ({ rule, inputType, filterDef, onChange }) => {
|
|
103
|
-
var _a, _b, _c;
|
|
133
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
104
134
|
const theme = useTheme();
|
|
105
135
|
const handleInputChange = useDebouncedCallback((e) => {
|
|
106
136
|
const value = e.target.value;
|
|
107
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value }));
|
|
137
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: value ? [value] : undefined }));
|
|
108
138
|
}, 250);
|
|
109
139
|
const handleMultiSelectChange = useDebouncedCallback((selected) => {
|
|
110
140
|
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: selected.map((s) => s.value) }));
|
|
111
141
|
}, 100);
|
|
112
142
|
const handleTimestampChange = useDebouncedCallback((timestamp) => {
|
|
113
|
-
|
|
143
|
+
let formattedValue = timestamp;
|
|
144
|
+
if (formattedValue && filterDef.resolution) {
|
|
145
|
+
const date = moment(formattedValue);
|
|
146
|
+
switch (filterDef.resolution) {
|
|
147
|
+
case "day":
|
|
148
|
+
date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
|
|
149
|
+
break;
|
|
150
|
+
case "second":
|
|
151
|
+
date.set({ millisecond: 0 });
|
|
152
|
+
break;
|
|
153
|
+
case "millisecond":
|
|
154
|
+
break;
|
|
155
|
+
default:
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
formattedValue = date.toISOString();
|
|
159
|
+
}
|
|
160
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: formattedValue ? [formattedValue] : undefined }));
|
|
114
161
|
}, 100);
|
|
115
162
|
switch (inputType) {
|
|
116
163
|
case "text":
|
|
117
|
-
return (_jsx(StyledInput, { placeholder: "Enter Value...", defaultValue: rule.value, onChange: handleInputChange }));
|
|
164
|
+
return (_jsx(StyledInput, { placeholder: "Enter Value...", defaultValue: (_a = rule === null || rule === void 0 ? void 0 : rule.value) === null || _a === void 0 ? void 0 : _a[0], onChange: handleInputChange }));
|
|
118
165
|
case "number":
|
|
119
|
-
return (_jsx(StyledInput, { type: "number", placeholder: "Enter Value...", defaultValue: rule.value, onChange: handleInputChange }));
|
|
166
|
+
return (_jsx(StyledInput, { type: "number", placeholder: "Enter Value...", defaultValue: (_b = rule === null || rule === void 0 ? void 0 : rule.value) === null || _b === void 0 ? void 0 : _b[0], onChange: handleInputChange }));
|
|
120
167
|
case "date":
|
|
121
|
-
return (_jsx(StyledDateInput, { arrow:
|
|
168
|
+
return (_jsx(StyledDateInput, { arrow: false, enableCalendar: true, format: "YYYY-MM-DD", defaultValue: ((_c = rule.value) === null || _c === void 0 ? void 0 : _c[0]) === "" ? undefined : (_d = rule.value) === null || _d === void 0 ? void 0 : _d[0], onChange: handleTimestampChange }));
|
|
122
169
|
case "datetime":
|
|
123
|
-
return (_jsx(StyledDateInput, { arrow:
|
|
170
|
+
return (_jsx(StyledDateInput, { arrow: false, enableCalendar: true, format: dateFormatResolver(filterDef === null || filterDef === void 0 ? void 0 : filterDef.resolution), defaultValue: ((_e = rule.value) === null || _e === void 0 ? void 0 : _e[0]) === "" ? undefined : (_f = rule.value) === null || _f === void 0 ? void 0 : _f[0], onChange: handleTimestampChange }));
|
|
124
171
|
case "multiselect":
|
|
125
172
|
let display = Array.isArray(rule.value) && rule.value.length > 0
|
|
126
|
-
? ((
|
|
173
|
+
? ((_h = (_g = filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions) === null || _g === void 0 ? void 0 : _g.filter((o) => rule.value.includes(o.value))) === null || _h === void 0 ? void 0 : _h.map((o) => o.label).join(", ")) || "Select Value"
|
|
127
174
|
: "Select Value";
|
|
128
175
|
if (Array.isArray(rule.value) && rule.value.length > 1) {
|
|
129
176
|
display = `${rule.value.length} ${(filterDef === null || filterDef === void 0 ? void 0 : filterDef.pluralLabel) || "Values"}`;
|
|
@@ -148,19 +195,20 @@ const ValueEditor = ({ rule, inputType, filterDef, onChange }) => {
|
|
|
148
195
|
},
|
|
149
196
|
}, dropDownProps: {
|
|
150
197
|
style: { width: 175, maxWidth: 400 },
|
|
151
|
-
}, defaultValue: (
|
|
198
|
+
}, defaultValue: (_j = filterDef === null || filterDef === void 0 ? void 0 : filterDef.selectOptions) === null || _j === void 0 ? void 0 : _j.filter((o) => Array.isArray(rule.value) &&
|
|
152
199
|
!!rule.value.find((v) => v == o.value)), onChange: handleMultiSelectChange, children: display }));
|
|
153
200
|
default:
|
|
154
201
|
return (_jsx(StyledInput, { placeholder: "Enter Value...", onChange: handleInputChange }));
|
|
155
202
|
}
|
|
156
203
|
};
|
|
157
|
-
const ValueSelector = ({ rule, inputType, filterDef, onChange
|
|
204
|
+
const ValueSelector = ({ rule, inputType, filterDef, onChange }) => {
|
|
205
|
+
var _a;
|
|
158
206
|
const isBetween = rule.operator.value.toLowerCase().includes("between");
|
|
159
207
|
const handleValueChange = (e) => {
|
|
160
208
|
const currentValue = rule.value;
|
|
161
209
|
if (isBetween) {
|
|
162
|
-
const newValue =
|
|
163
|
-
if (
|
|
210
|
+
const newValue = (e === null || e === void 0 ? void 0 : e.value) || [""];
|
|
211
|
+
if (currentValue === null || currentValue === void 0 ? void 0 : currentValue[1]) {
|
|
164
212
|
newValue.push(currentValue[1]);
|
|
165
213
|
}
|
|
166
214
|
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: newValue }));
|
|
@@ -169,19 +217,10 @@ const ValueSelector = ({ rule, inputType, filterDef, onChange, }) => {
|
|
|
169
217
|
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: e.value }));
|
|
170
218
|
};
|
|
171
219
|
const handleSecondaryValueChange = (e) => {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
// current value already an array?
|
|
175
|
-
if (Array.isArray(currentValue)) {
|
|
176
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: [currentValue[0], e.value] }));
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
const newValue = [currentValue, e.value];
|
|
180
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: newValue }));
|
|
181
|
-
}
|
|
182
|
-
return;
|
|
220
|
+
var _a, _b;
|
|
221
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(Object.assign(Object.assign({}, rule), { value: [((_a = rule === null || rule === void 0 ? void 0 : rule.value) === null || _a === void 0 ? void 0 : _a[0]) || "", ((_b = e.value) === null || _b === void 0 ? void 0 : _b[0]) || ""] }));
|
|
183
222
|
};
|
|
184
|
-
return (_jsxs(_Fragment, { children: [_jsx(ValueEditor, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: handleValueChange }), isBetween && (_jsxs(_Fragment, { children: [_jsx(FieldLabel, { children: "and" }), _jsx(ValueEditor, { rule: rule, inputType: inputType, onChange: handleSecondaryValueChange })] }))] }));
|
|
223
|
+
return (_jsxs(_Fragment, { children: [_jsx(ValueEditor, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: handleValueChange }), isBetween && (_jsxs(_Fragment, { children: [_jsx(FieldLabel, { children: "and" }), _jsx(ValueEditor, { rule: Object.assign(Object.assign({}, rule), { value: [((_a = rule === null || rule === void 0 ? void 0 : rule.value) === null || _a === void 0 ? void 0 : _a[1]) || ""] }), inputType: inputType, filterDef: filterDef, onChange: handleSecondaryValueChange })] }))] }));
|
|
185
224
|
};
|
|
186
225
|
const CloseLabel = styled(StyledButton) `
|
|
187
226
|
padding: 2px;
|
|
@@ -192,26 +231,51 @@ const CloseLabel = styled(StyledButton) `
|
|
|
192
231
|
border-color: ${({ theme }) => theme.palette.primary.main};
|
|
193
232
|
}
|
|
194
233
|
`;
|
|
195
|
-
const Rules = ({ rules = [], combinator, showCombinator, filterDefinitions, onDelete, onUpdate, }) => {
|
|
196
|
-
|
|
234
|
+
const Rules = ({ rules = [], combinator, showCombinator, filterDefinitions, onDelete, onUpdate, onUpdateRootCombinator, }) => {
|
|
235
|
+
const handleCombinatorChange = (e) => {
|
|
236
|
+
onUpdateRootCombinator(e);
|
|
237
|
+
};
|
|
238
|
+
const handleOperatorChange = (rule, operator) => {
|
|
239
|
+
onUpdate(Object.assign(Object.assign({}, rule), { operator }));
|
|
240
|
+
};
|
|
241
|
+
return (_jsxs(_Fragment, { children: [showCombinator === true && (_jsx(DropDownMenu, { variant: "outlined", data: [
|
|
242
|
+
{ label: "AND", value: "and" },
|
|
243
|
+
{ label: "OR", value: "or" },
|
|
244
|
+
],
|
|
245
|
+
// arrow={true}
|
|
246
|
+
size: "sm", buttonProps: {
|
|
247
|
+
title: "Chain these query filters together using AND | OR logic",
|
|
248
|
+
variant: "contained",
|
|
249
|
+
style: {
|
|
250
|
+
fontWeight: "normal",
|
|
251
|
+
fontSize: 12,
|
|
252
|
+
padding: "3px 5px",
|
|
253
|
+
height: 20,
|
|
254
|
+
borderRadius: 4,
|
|
255
|
+
},
|
|
256
|
+
}, onItemSelect: (e) => handleCombinatorChange(e.value), dropDownProps: {
|
|
257
|
+
style: { width: 175, maxWidth: 400 },
|
|
258
|
+
}, children: combinator.toUpperCase() })), rules.map((rule) => {
|
|
197
259
|
const filterDef = filterDefinitions.find((f) => f.dataField === rule.dataField);
|
|
260
|
+
if (!filterDef)
|
|
261
|
+
throw new Error(`Filter Definition not found for dataField: ${rule.dataField}`);
|
|
198
262
|
const operatorOptions = (filterDef === null || filterDef === void 0 ? void 0 : filterDef.operators) || DefaultOperators;
|
|
199
263
|
const inputType = (filterDef === null || filterDef === void 0 ? void 0 : filterDef.inputType) || "text";
|
|
200
264
|
return (_jsxs(RuleContainer, { "data-rule-id": rule.id, children: [_jsx(FieldLabel, { children: rule.label }), _jsx(DropDownMenu, { variant: "outlined", data: operatorOptions,
|
|
201
265
|
// arrow={true}
|
|
202
|
-
buttonProps: {
|
|
266
|
+
size: "sm", buttonProps: {
|
|
203
267
|
title: "Select Operator",
|
|
204
268
|
variant: "contained",
|
|
205
|
-
size: "xxs",
|
|
206
269
|
style: {
|
|
207
270
|
fontWeight: "normal",
|
|
271
|
+
fontSize: 12,
|
|
208
272
|
padding: "3px 5px",
|
|
209
273
|
height: 20,
|
|
210
274
|
borderRadius: 0,
|
|
211
275
|
},
|
|
212
|
-
}, onItemSelect: (e) =>
|
|
276
|
+
}, onItemSelect: (e) => handleOperatorChange(rule, e), dropDownProps: {
|
|
213
277
|
style: { width: 175, maxWidth: 400 },
|
|
214
|
-
}, children: rule.operator.label }), _jsx(ValueSelector, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: onUpdate }), _jsx(CloseLabel, { variant: "contained",
|
|
278
|
+
}, children: rule.operator.label }), _jsx(ValueSelector, { rule: rule, inputType: inputType, filterDef: filterDef, onChange: onUpdate }), _jsx(CloseLabel, { variant: "contained", onClick: () => onDelete(rule), children: _jsx(XIcon, { size: 16 }) })] }, rule.id));
|
|
215
279
|
})] }));
|
|
216
280
|
};
|
|
217
281
|
export const QueryFilter = ({ queryFilter, }) => {
|
|
@@ -219,5 +283,5 @@ export const QueryFilter = ({ queryFilter, }) => {
|
|
|
219
283
|
const { filter, filterDefinitions, showCombinator } = queryFilter;
|
|
220
284
|
if (((_a = filter === null || filter === void 0 ? void 0 : filter.rules) === null || _a === void 0 ? void 0 : _a.length) == 0)
|
|
221
285
|
return null;
|
|
222
|
-
return (_jsx(FilterContainer, { className: "mfui-QueryFilter", children: _jsx(Rules, { rules: filter.rules, combinator: filter.combinator, showCombinator: showCombinator, filterDefinitions: filterDefinitions, onDelete: (rule) => queryFilter.removeRule(rule.id), onUpdate: (rule) => queryFilter.updateRule(rule) }) }));
|
|
286
|
+
return (_jsx(FilterContainer, { className: "mfui-QueryFilter", children: _jsx(Rules, { rules: filter.rules, combinator: filter.combinator, showCombinator: showCombinator, filterDefinitions: filterDefinitions, onDelete: (rule) => queryFilter.removeRule(rule.id), onUpdate: (rule) => queryFilter.updateRule(rule), onUpdateRootCombinator: (e) => queryFilter.updateRootCombinator(e) }) }));
|
|
223
287
|
};
|
|
@@ -12,6 +12,7 @@ export type QueryFilterType = {
|
|
|
12
12
|
addRule: (rule: Rule) => void;
|
|
13
13
|
removeRule: (id: string) => void;
|
|
14
14
|
updateRule: (rule: Rule) => void;
|
|
15
|
+
updateRootCombinator: (combinator: Combinator) => void;
|
|
15
16
|
};
|
|
16
17
|
export type UseQueryFilter = (args: UseQueryFilterProps) => QueryFilterType;
|
|
17
18
|
export type Combinator = "and" | "or";
|
|
@@ -26,6 +27,7 @@ export interface FilterDefinition {
|
|
|
26
27
|
pluralLabel?: string;
|
|
27
28
|
operators?: Operator[];
|
|
28
29
|
inputType?: HTMLInputElement["type"];
|
|
30
|
+
resolution?: "day" | "second" | "millisecond";
|
|
29
31
|
placeholder?: string;
|
|
30
32
|
selectOptions?: DropDownItem[];
|
|
31
33
|
editorType?: EditorType;
|
|
@@ -39,7 +41,7 @@ export interface FilterDefinition {
|
|
|
39
41
|
export interface Rule {
|
|
40
42
|
id?: string;
|
|
41
43
|
dataField: string;
|
|
42
|
-
value
|
|
44
|
+
value?: string[];
|
|
43
45
|
operator: Operator;
|
|
44
46
|
label: string;
|
|
45
47
|
}
|
|
@@ -20,6 +20,9 @@ export const useQueryFilter = (args) => {
|
|
|
20
20
|
const rules = filter.rules.map((r) => (r.id === rule.id ? rule : r));
|
|
21
21
|
setFilter(Object.assign(Object.assign({}, filter), { rules }));
|
|
22
22
|
};
|
|
23
|
+
const updateRootCombinator = (combinator) => {
|
|
24
|
+
setFilter(Object.assign(Object.assign({}, filter), { combinator }));
|
|
25
|
+
};
|
|
23
26
|
useEffect(() => {
|
|
24
27
|
var _a;
|
|
25
28
|
(_a = args === null || args === void 0 ? void 0 : args.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(args, filter);
|
|
@@ -28,6 +31,7 @@ export const useQueryFilter = (args) => {
|
|
|
28
31
|
filter,
|
|
29
32
|
filterDefinitions: args.filterDefinitions,
|
|
30
33
|
showCombinator: args.showCombinator,
|
|
34
|
+
updateRootCombinator,
|
|
31
35
|
addRule,
|
|
32
36
|
removeRule,
|
|
33
37
|
updateRule,
|
|
@@ -35,6 +35,7 @@ const TableMenu = () => {
|
|
|
35
35
|
const queryFilter = useQueryFilter({
|
|
36
36
|
defaultFilter: filterState,
|
|
37
37
|
filterDefinitions: (filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.filterDefinitions) || [],
|
|
38
|
+
showCombinator: true,
|
|
38
39
|
onFilterChange: (q) => {
|
|
39
40
|
var _a;
|
|
40
41
|
handleFilterChange(q);
|
|
@@ -54,11 +55,11 @@ const TableMenu = () => {
|
|
|
54
55
|
id: shortUUID.generate(),
|
|
55
56
|
dataField: item.value,
|
|
56
57
|
operator: ((_a = data === null || data === void 0 ? void 0 : data.operators) === null || _a === void 0 ? void 0 : _a[0]) || DefaultOperators[0],
|
|
57
|
-
value:
|
|
58
|
+
value: undefined,
|
|
58
59
|
label: item.label,
|
|
59
60
|
});
|
|
60
61
|
};
|
|
61
|
-
return (_jsxs(StyledContainer, { children: [_jsxs(FlexedRow, { className: "justify-sb", children: [_jsxs(FlexedRow, { children: [(addButtonOptions === null || addButtonOptions === void 0 ? void 0 : addButtonOptions.enabled) === true && (_jsx(Button, { color: "primary", variant: "contained", size: "xxs", onClick: () => { var _a, _b; return (_b = (_a = tableMenuOptions === null || tableMenuOptions === void 0 ? void 0 : tableMenuOptions.addButtonOptions) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a); }, children: ((_a = tableMenuOptions === null || tableMenuOptions === void 0 ? void 0 : tableMenuOptions.addButtonOptions) === null || _a === void 0 ? void 0 : _a.label) || "+ Add Record" })), (filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.enabled) === true && (_jsx(DropDownMenu, { variant: "outlined", size: "
|
|
62
|
+
return (_jsxs(StyledContainer, { children: [_jsxs(FlexedRow, { className: "justify-sb", children: [_jsxs(FlexedRow, { children: [(addButtonOptions === null || addButtonOptions === void 0 ? void 0 : addButtonOptions.enabled) === true && (_jsx(Button, { color: "primary", variant: "contained", size: "xxs", onClick: () => { var _a, _b; return (_b = (_a = tableMenuOptions === null || tableMenuOptions === void 0 ? void 0 : tableMenuOptions.addButtonOptions) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a); }, children: ((_a = tableMenuOptions === null || tableMenuOptions === void 0 ? void 0 : tableMenuOptions.addButtonOptions) === null || _a === void 0 ? void 0 : _a.label) || "+ Add Record" })), (filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.enabled) === true && (_jsx(DropDownMenu, { variant: "outlined", size: "sm", data: ((_b = filterOptions === null || filterOptions === void 0 ? void 0 : filterOptions.filterDefinitions) === null || _b === void 0 ? void 0 : _b.map((filter) => ({
|
|
62
63
|
label: filter.label,
|
|
63
64
|
value: filter.dataField,
|
|
64
65
|
data: filter,
|
|
@@ -170,74 +170,74 @@ const TableProvider = (_a) => {
|
|
|
170
170
|
for (const rule of rules) {
|
|
171
171
|
const column = columnState.find((col) => col.dataField === rule.dataField);
|
|
172
172
|
const { value, operator, dataField } = rule;
|
|
173
|
-
if (!value) {
|
|
173
|
+
if (!value || value.length === 0) {
|
|
174
174
|
continue;
|
|
175
175
|
}
|
|
176
176
|
switch (operator.value) {
|
|
177
177
|
case "=":
|
|
178
178
|
processedData = processedData.filter((row) => {
|
|
179
179
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
180
|
-
return moment(row[dataField]).isSame(moment(value), "day");
|
|
180
|
+
return moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
181
181
|
}
|
|
182
182
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
183
|
-
return moment(row[dataField]).isSame(moment(value));
|
|
183
|
+
return moment(row[dataField]).isSame(moment(value[0]));
|
|
184
184
|
}
|
|
185
|
-
return row[dataField] == value;
|
|
185
|
+
return row[dataField] == value[0];
|
|
186
186
|
});
|
|
187
187
|
break;
|
|
188
188
|
case "!=":
|
|
189
189
|
processedData = processedData.filter((row) => {
|
|
190
190
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
191
|
-
return !moment(row[dataField]).isSame(moment(value), "day");
|
|
191
|
+
return !moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
192
192
|
}
|
|
193
193
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
194
|
-
return !moment(row[dataField]).isSame(moment(value));
|
|
194
|
+
return !moment(row[dataField]).isSame(moment(value[0]));
|
|
195
195
|
}
|
|
196
|
-
return row[dataField] != value;
|
|
196
|
+
return row[dataField] != value[0];
|
|
197
197
|
});
|
|
198
198
|
break;
|
|
199
199
|
case ">":
|
|
200
200
|
processedData = processedData.filter((row) => {
|
|
201
201
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
202
|
-
return moment(row[dataField]).isAfter(moment(value), "day");
|
|
202
|
+
return moment(row[dataField]).isAfter(moment(value[0]), "day");
|
|
203
203
|
}
|
|
204
204
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
205
|
-
return moment(row[dataField]).isAfter(moment(value));
|
|
205
|
+
return moment(row[dataField]).isAfter(moment(value[0]));
|
|
206
206
|
}
|
|
207
|
-
return row[dataField] > value;
|
|
207
|
+
return row[dataField] > value[0];
|
|
208
208
|
});
|
|
209
209
|
break;
|
|
210
210
|
case "<":
|
|
211
211
|
processedData = processedData.filter((row) => {
|
|
212
212
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
213
|
-
return moment(row[dataField]).isBefore(moment(value), "day");
|
|
213
|
+
return moment(row[dataField]).isBefore(moment(value[0]), "day");
|
|
214
214
|
}
|
|
215
215
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
216
|
-
return moment(row[dataField]).isBefore(moment(value));
|
|
216
|
+
return moment(row[dataField]).isBefore(moment(value[0]));
|
|
217
217
|
}
|
|
218
|
-
return row[dataField] < value;
|
|
218
|
+
return row[dataField] < value[0];
|
|
219
219
|
});
|
|
220
220
|
break;
|
|
221
221
|
case ">=":
|
|
222
222
|
processedData = processedData.filter((row) => {
|
|
223
223
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
224
|
-
return moment(row[dataField]).isSameOrAfter(moment(value), "day");
|
|
224
|
+
return moment(row[dataField]).isSameOrAfter(moment(value[0]), "day");
|
|
225
225
|
}
|
|
226
226
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
227
|
-
return moment(row[dataField]).isSameOrAfter(moment(value));
|
|
227
|
+
return moment(row[dataField]).isSameOrAfter(moment(value[0]));
|
|
228
228
|
}
|
|
229
|
-
return row[dataField] >= value;
|
|
229
|
+
return row[dataField] >= value[0];
|
|
230
230
|
});
|
|
231
231
|
break;
|
|
232
232
|
case "<=":
|
|
233
233
|
processedData = processedData.filter((row) => {
|
|
234
234
|
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
235
|
-
return moment(row[dataField]).isSameOrBefore(moment(value), "day");
|
|
235
|
+
return moment(row[dataField]).isSameOrBefore(moment(value[0]), "day");
|
|
236
236
|
}
|
|
237
237
|
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
238
|
-
return moment(row[dataField]).isSameOrBefore(moment(value));
|
|
238
|
+
return moment(row[dataField]).isSameOrBefore(moment(value[0]));
|
|
239
239
|
}
|
|
240
|
-
return row[dataField] <= value;
|
|
240
|
+
return row[dataField] <= value[0];
|
|
241
241
|
});
|
|
242
242
|
break;
|
|
243
243
|
case "between":
|
|
@@ -266,16 +266,18 @@ const TableProvider = (_a) => {
|
|
|
266
266
|
break;
|
|
267
267
|
case "contains":
|
|
268
268
|
processedData = processedData.filter((row) => {
|
|
269
|
+
var _a;
|
|
269
270
|
return row[dataField]
|
|
270
271
|
.toLowerCase()
|
|
271
|
-
.includes(value.toLowerCase());
|
|
272
|
+
.includes((_a = value[0]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase());
|
|
272
273
|
});
|
|
273
274
|
break;
|
|
274
275
|
case "doesNotContain":
|
|
275
276
|
processedData = processedData.filter((row) => {
|
|
277
|
+
var _a;
|
|
276
278
|
return !row[dataField]
|
|
277
279
|
.toLowerCase()
|
|
278
|
-
.includes(value.toLowerCase());
|
|
280
|
+
.includes((_a = value[0]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase());
|
|
279
281
|
});
|
|
280
282
|
break;
|
|
281
283
|
case "in":
|