venice-ui 3.0.36 → 3.0.38
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.
|
@@ -90,27 +90,12 @@ const Filters = ({ theme, themeVariant = 'default', size = 'md', labels = {
|
|
|
90
90
|
return headers
|
|
91
91
|
.filter((h) => !h.action)
|
|
92
92
|
.map((h) => {
|
|
93
|
+
const type = h.filterType || 'select';
|
|
93
94
|
const key = h.valueSource || h.name;
|
|
94
95
|
const values = (elements || [])
|
|
95
96
|
.map((it) => it?.[key])
|
|
96
97
|
.filter((v) => v !== undefined && v !== null);
|
|
97
|
-
|
|
98
|
-
if (nameLower === 'age' || nameLower.includes('age')) {
|
|
99
|
-
const nums = values
|
|
100
|
-
.map((v) => Number(v))
|
|
101
|
-
.filter((n) => !Number.isNaN(n));
|
|
102
|
-
const min = nums.length ? Math.min(...nums) : 0;
|
|
103
|
-
const max = nums.length ? Math.max(...nums) : 0;
|
|
104
|
-
return {
|
|
105
|
-
label: h.name,
|
|
106
|
-
name: key,
|
|
107
|
-
type: 'range',
|
|
108
|
-
min,
|
|
109
|
-
max,
|
|
110
|
-
collapsible: true,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
if (h.scope && h.scope.length) {
|
|
98
|
+
if (type === 'select' && h.scope && h.scope.length) {
|
|
114
99
|
return {
|
|
115
100
|
label: h.name,
|
|
116
101
|
name: key,
|
|
@@ -119,26 +104,26 @@ const Filters = ({ theme, themeVariant = 'default', size = 'md', labels = {
|
|
|
119
104
|
collapsible: true,
|
|
120
105
|
};
|
|
121
106
|
}
|
|
122
|
-
if (
|
|
107
|
+
if (type === 'date') {
|
|
123
108
|
const dates = values
|
|
124
109
|
.map((v) => (v ? new Date(v).getTime() : NaN))
|
|
125
110
|
.filter((d) => !Number.isNaN(d));
|
|
126
111
|
const min = dates.length
|
|
127
|
-
?
|
|
112
|
+
? Math.min(...dates)
|
|
128
113
|
: undefined;
|
|
129
114
|
const max = dates.length
|
|
130
|
-
?
|
|
115
|
+
? Math.max(...dates)
|
|
131
116
|
: undefined;
|
|
132
117
|
return {
|
|
133
118
|
label: h.name,
|
|
134
119
|
name: key,
|
|
135
120
|
type: 'date',
|
|
136
|
-
min,
|
|
137
|
-
max,
|
|
121
|
+
min: min,
|
|
122
|
+
max: max,
|
|
138
123
|
collapsible: true,
|
|
139
124
|
};
|
|
140
125
|
}
|
|
141
|
-
if (
|
|
126
|
+
if (type === 'range') {
|
|
142
127
|
const nums = values
|
|
143
128
|
.map((v) => Number(v))
|
|
144
129
|
.filter((n) => !Number.isNaN(n));
|
|
@@ -151,19 +136,6 @@ const Filters = ({ theme, themeVariant = 'default', size = 'md', labels = {
|
|
|
151
136
|
collapsible: true,
|
|
152
137
|
};
|
|
153
138
|
}
|
|
154
|
-
const numericValues = values
|
|
155
|
-
.map((v) => Number(v))
|
|
156
|
-
.filter((n) => !Number.isNaN(n));
|
|
157
|
-
if (numericValues.length === values.length && values.length > 0) {
|
|
158
|
-
return {
|
|
159
|
-
label: h.name,
|
|
160
|
-
name: key,
|
|
161
|
-
type: 'range',
|
|
162
|
-
min: Math.min(...numericValues),
|
|
163
|
-
max: Math.max(...numericValues),
|
|
164
|
-
collapsible: true,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
139
|
return {
|
|
168
140
|
label: h.name,
|
|
169
141
|
name: key,
|
|
@@ -172,7 +144,7 @@ const Filters = ({ theme, themeVariant = 'default', size = 'md', labels = {
|
|
|
172
144
|
collapsible: true,
|
|
173
145
|
};
|
|
174
146
|
});
|
|
175
|
-
}, [filters, headers, elements]);
|
|
147
|
+
}, [filters, headers, elements, fullElements]);
|
|
176
148
|
const generateStateObj = (0, react_1.useCallback)(() => {
|
|
177
149
|
const obj = {};
|
|
178
150
|
filtersConfig.forEach((filter) => {
|
|
@@ -427,10 +399,12 @@ const Filters = ({ theme, themeVariant = 'default', size = 'md', labels = {
|
|
|
427
399
|
react_1.default.createElement(Numerical_1.Numerical, { type: "number", name: `${filter.name}_min`, value: activeFilters[filter.name]?.min ?? '', handleChange: setRangeFilter, componentWidth: '100%' }),
|
|
428
400
|
react_1.default.createElement(Numerical_1.Numerical, { type: "number", name: `${filter.name}_max`, value: activeFilters[filter.name]?.max ?? '', handleChange: setRangeFilter, componentWidth: '100%' }))));
|
|
429
401
|
case 'date':
|
|
402
|
+
const minValue = activeFilters[filter.name]?.min !== '' ? activeFilters[filter.name]?.min : activeFilters[filter.name]?.rangeMin;
|
|
403
|
+
const maxValue = activeFilters[filter.name]?.max !== '' ? activeFilters[filter.name]?.max : activeFilters[filter.name]?.rangeMax;
|
|
430
404
|
return (react_1.default.createElement(Aligment_1.Aligment, { wrap: "nowrap", direction: "row", align: "flex-start", justify: "flex-start", gap: 8 },
|
|
431
405
|
react_1.default.createElement(Filters_styles_1.FilterGrid, null,
|
|
432
|
-
react_1.default.createElement(DatePicker_1.DatePicker, { name: `${filter.name}_min`, value:
|
|
433
|
-
react_1.default.createElement(DatePicker_1.DatePicker, { name: `${filter.name}_max`, value:
|
|
406
|
+
react_1.default.createElement(DatePicker_1.DatePicker, { name: `${filter.name}_min`, value: minValue, isAdvance: false, autoConfirm: true, handleChange: setRangeFilter, componentWidth: '100%', labels: calendarLabels, localeLabels: calendarLocaleLabels, zIndex: filterConfig.size.zIndex, placeholder: calendarLabels?.placeholder }),
|
|
407
|
+
react_1.default.createElement(DatePicker_1.DatePicker, { name: `${filter.name}_max`, value: maxValue, isAdvance: false, autoConfirm: true, handleChange: setRangeFilter, componentWidth: '100%', labels: calendarLabels, localeLabels: calendarLocaleLabels, zIndex: filterConfig.size.zIndex, placeholder: calendarLabels?.placeholder }))));
|
|
434
408
|
case 'text':
|
|
435
409
|
return (react_1.default.createElement(Aligment_1.Aligment, { wrap: "nowrap", direction: "row", align: "flex-start", justify: "flex-start", gap: 8 },
|
|
436
410
|
react_1.default.createElement(Input_1.Input, { type: "text", name: `${filter.name}_query`, value: activeFilters[filter.name]?.value?.[0] ?? '', handleChange: setTextFilter, componentWidth: '100%', width: '100%' })));
|
|
@@ -54,27 +54,12 @@ export const Filters = ({ theme, themeVariant = 'default', size = 'md', labels =
|
|
|
54
54
|
return headers
|
|
55
55
|
.filter((h) => !h.action)
|
|
56
56
|
.map((h) => {
|
|
57
|
+
const type = h.filterType || 'select';
|
|
57
58
|
const key = h.valueSource || h.name;
|
|
58
59
|
const values = (elements || [])
|
|
59
60
|
.map((it) => it?.[key])
|
|
60
61
|
.filter((v) => v !== undefined && v !== null);
|
|
61
|
-
|
|
62
|
-
if (nameLower === 'age' || nameLower.includes('age')) {
|
|
63
|
-
const nums = values
|
|
64
|
-
.map((v) => Number(v))
|
|
65
|
-
.filter((n) => !Number.isNaN(n));
|
|
66
|
-
const min = nums.length ? Math.min(...nums) : 0;
|
|
67
|
-
const max = nums.length ? Math.max(...nums) : 0;
|
|
68
|
-
return {
|
|
69
|
-
label: h.name,
|
|
70
|
-
name: key,
|
|
71
|
-
type: 'range',
|
|
72
|
-
min,
|
|
73
|
-
max,
|
|
74
|
-
collapsible: true,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
if (h.scope && h.scope.length) {
|
|
62
|
+
if (type === 'select' && h.scope && h.scope.length) {
|
|
78
63
|
return {
|
|
79
64
|
label: h.name,
|
|
80
65
|
name: key,
|
|
@@ -83,26 +68,26 @@ export const Filters = ({ theme, themeVariant = 'default', size = 'md', labels =
|
|
|
83
68
|
collapsible: true,
|
|
84
69
|
};
|
|
85
70
|
}
|
|
86
|
-
if (
|
|
71
|
+
if (type === 'date') {
|
|
87
72
|
const dates = values
|
|
88
73
|
.map((v) => (v ? new Date(v).getTime() : NaN))
|
|
89
74
|
.filter((d) => !Number.isNaN(d));
|
|
90
75
|
const min = dates.length
|
|
91
|
-
?
|
|
76
|
+
? Math.min(...dates)
|
|
92
77
|
: undefined;
|
|
93
78
|
const max = dates.length
|
|
94
|
-
?
|
|
79
|
+
? Math.max(...dates)
|
|
95
80
|
: undefined;
|
|
96
81
|
return {
|
|
97
82
|
label: h.name,
|
|
98
83
|
name: key,
|
|
99
84
|
type: 'date',
|
|
100
|
-
min,
|
|
101
|
-
max,
|
|
85
|
+
min: min,
|
|
86
|
+
max: max,
|
|
102
87
|
collapsible: true,
|
|
103
88
|
};
|
|
104
89
|
}
|
|
105
|
-
if (
|
|
90
|
+
if (type === 'range') {
|
|
106
91
|
const nums = values
|
|
107
92
|
.map((v) => Number(v))
|
|
108
93
|
.filter((n) => !Number.isNaN(n));
|
|
@@ -115,19 +100,6 @@ export const Filters = ({ theme, themeVariant = 'default', size = 'md', labels =
|
|
|
115
100
|
collapsible: true,
|
|
116
101
|
};
|
|
117
102
|
}
|
|
118
|
-
const numericValues = values
|
|
119
|
-
.map((v) => Number(v))
|
|
120
|
-
.filter((n) => !Number.isNaN(n));
|
|
121
|
-
if (numericValues.length === values.length && values.length > 0) {
|
|
122
|
-
return {
|
|
123
|
-
label: h.name,
|
|
124
|
-
name: key,
|
|
125
|
-
type: 'range',
|
|
126
|
-
min: Math.min(...numericValues),
|
|
127
|
-
max: Math.max(...numericValues),
|
|
128
|
-
collapsible: true,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
103
|
return {
|
|
132
104
|
label: h.name,
|
|
133
105
|
name: key,
|
|
@@ -136,7 +108,7 @@ export const Filters = ({ theme, themeVariant = 'default', size = 'md', labels =
|
|
|
136
108
|
collapsible: true,
|
|
137
109
|
};
|
|
138
110
|
});
|
|
139
|
-
}, [filters, headers, elements]);
|
|
111
|
+
}, [filters, headers, elements, fullElements]);
|
|
140
112
|
const generateStateObj = useCallback(() => {
|
|
141
113
|
const obj = {};
|
|
142
114
|
filtersConfig.forEach((filter) => {
|
|
@@ -391,10 +363,12 @@ export const Filters = ({ theme, themeVariant = 'default', size = 'md', labels =
|
|
|
391
363
|
React.createElement(Numerical, { type: "number", name: `${filter.name}_min`, value: activeFilters[filter.name]?.min ?? '', handleChange: setRangeFilter, componentWidth: '100%' }),
|
|
392
364
|
React.createElement(Numerical, { type: "number", name: `${filter.name}_max`, value: activeFilters[filter.name]?.max ?? '', handleChange: setRangeFilter, componentWidth: '100%' }))));
|
|
393
365
|
case 'date':
|
|
366
|
+
const minValue = activeFilters[filter.name]?.min !== '' ? activeFilters[filter.name]?.min : activeFilters[filter.name]?.rangeMin;
|
|
367
|
+
const maxValue = activeFilters[filter.name]?.max !== '' ? activeFilters[filter.name]?.max : activeFilters[filter.name]?.rangeMax;
|
|
394
368
|
return (React.createElement(Aligment, { wrap: "nowrap", direction: "row", align: "flex-start", justify: "flex-start", gap: 8 },
|
|
395
369
|
React.createElement(FilterGrid, null,
|
|
396
|
-
React.createElement(DatePicker, { name: `${filter.name}_min`, value:
|
|
397
|
-
React.createElement(DatePicker, { name: `${filter.name}_max`, value:
|
|
370
|
+
React.createElement(DatePicker, { name: `${filter.name}_min`, value: minValue, isAdvance: false, autoConfirm: true, handleChange: setRangeFilter, componentWidth: '100%', labels: calendarLabels, localeLabels: calendarLocaleLabels, zIndex: filterConfig.size.zIndex, placeholder: calendarLabels?.placeholder }),
|
|
371
|
+
React.createElement(DatePicker, { name: `${filter.name}_max`, value: maxValue, isAdvance: false, autoConfirm: true, handleChange: setRangeFilter, componentWidth: '100%', labels: calendarLabels, localeLabels: calendarLocaleLabels, zIndex: filterConfig.size.zIndex, placeholder: calendarLabels?.placeholder }))));
|
|
398
372
|
case 'text':
|
|
399
373
|
return (React.createElement(Aligment, { wrap: "nowrap", direction: "row", align: "flex-start", justify: "flex-start", gap: 8 },
|
|
400
374
|
React.createElement(Input, { type: "text", name: `${filter.name}_query`, value: activeFilters[filter.name]?.value?.[0] ?? '', handleChange: setTextFilter, componentWidth: '100%', width: '100%' })));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { AppTheme, ThemeName } from '../../config';
|
|
3
|
-
import { ICalendarLocaleLabels, IFilterLabels, InputSize } from 'types';
|
|
3
|
+
import { FilterType, ICalendarLocaleLabels, IFilterLabels, InputSize } from 'types';
|
|
4
4
|
interface IHeader {
|
|
5
5
|
name: string;
|
|
6
6
|
valueSource?: string;
|
|
@@ -11,6 +11,7 @@ interface IHeader {
|
|
|
11
11
|
value?: string;
|
|
12
12
|
label?: string;
|
|
13
13
|
}>;
|
|
14
|
+
filterType?: FilterType;
|
|
14
15
|
}
|
|
15
16
|
export interface IApplyFilterResults {
|
|
16
17
|
name: string;
|
|
@@ -31,7 +32,7 @@ export interface IFilterProps {
|
|
|
31
32
|
}>;
|
|
32
33
|
label: string;
|
|
33
34
|
name: string;
|
|
34
|
-
type: 'select' | 'range' |
|
|
35
|
+
type: 'select' | 'range' | 'date' | 'text';
|
|
35
36
|
allowValues?: string[] | number[];
|
|
36
37
|
min?: number;
|
|
37
38
|
max?: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AppTheme, ThemeName } from '../../config';
|
|
2
2
|
import { FC } from 'react';
|
|
3
|
-
import { IAction, ICalendarLocaleLabels, IFilterLabels, InputSize } from 'types';
|
|
3
|
+
import { FilterType, IAction, ICalendarLocaleLabels, IFilterLabels, InputSize } from 'types';
|
|
4
4
|
interface ITableProps {
|
|
5
5
|
theme?: AppTheme;
|
|
6
6
|
themeVariant?: ThemeName;
|
|
@@ -33,6 +33,7 @@ export interface ITableHeaderProps {
|
|
|
33
33
|
isCount?: boolean;
|
|
34
34
|
scope?: ITableScopeProps[];
|
|
35
35
|
size?: InputSize;
|
|
36
|
+
filterType?: FilterType;
|
|
36
37
|
}
|
|
37
38
|
export interface ITableSortProps {
|
|
38
39
|
name: string;
|
|
@@ -8,3 +8,4 @@ export type TIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xl2' | 'xl3' | 'xl4'
|
|
|
8
8
|
export type THelperMode = 'default' | 'error' | 'success';
|
|
9
9
|
export type AdditionalType = 'button' | 'toggle';
|
|
10
10
|
export type TagType = 'default' | 'success' | 'warning' | 'error';
|
|
11
|
+
export type FilterType = 'text' | 'number' | 'date' | 'select' | 'range';
|