@bit.rhplus/ui2.filter-panel 0.0.6 → 0.0.8
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.
- package/dist/filterHelpers.d.ts +6 -0
- package/dist/filterHelpers.js +184 -0
- package/dist/filterHelpers.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.js +40 -30
- package/dist/index.js.map +1 -1
- package/filterHelpers.js +205 -0
- package/index.jsx +71 -55
- package/package.json +2 -2
- /package/dist/{preview-1760814228507.js → preview-1761216241050.js} +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function buildValueLabelsMap(filterConfigs: Object): Object;
|
|
2
|
+
export function buildFieldLabelsMap(filterConfigs: Object): Object;
|
|
3
|
+
export function formatFilterValue(value: any, fieldName: string, valueLabelsMap?: Object, moduleLabels?: Object, fieldKey?: string): string;
|
|
4
|
+
export function normalizeFilterValueForBackend(value: any): any;
|
|
5
|
+
export function throttle(func: Function, wait: number): Function;
|
|
6
|
+
export function debounce(func: Function, wait: number): Function;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* Sdílené utility funkce pro práci s filtry v Master komponentách
|
|
4
|
+
*
|
|
5
|
+
* Tyto funkce jsou memoizovány a používány jak v Desktop tak Mobile verzích
|
|
6
|
+
* pro zajištění konzistentního chování a lepšího výkonu.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Vytvoří mapu hodnot pro převod value → label z filterConfigs
|
|
10
|
+
* @param {Object} filterConfigs - Konfigurace filtrů
|
|
11
|
+
* @returns {Object} Mapa ve formátu { field: { value: label } }
|
|
12
|
+
*/
|
|
13
|
+
export const buildValueLabelsMap = (filterConfigs) => {
|
|
14
|
+
if (!filterConfigs)
|
|
15
|
+
return {};
|
|
16
|
+
const map = {};
|
|
17
|
+
Object.values(filterConfigs).forEach(config => {
|
|
18
|
+
config.fields.forEach(field => {
|
|
19
|
+
if (field.type === 'select' && field.options) {
|
|
20
|
+
map[field.field] = {};
|
|
21
|
+
field.options.forEach(option => {
|
|
22
|
+
map[field.field][option.value] = option.label;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
return map;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Vytvoří mapu labelů pro fieldy z filterConfigs
|
|
31
|
+
* @param {Object} filterConfigs - Konfigurace filtrů
|
|
32
|
+
* @returns {Object} Mapa ve formátu { field: label }
|
|
33
|
+
*/
|
|
34
|
+
export const buildFieldLabelsMap = (filterConfigs) => {
|
|
35
|
+
if (!filterConfigs)
|
|
36
|
+
return {};
|
|
37
|
+
const labels = {};
|
|
38
|
+
Object.values(filterConfigs).forEach(config => {
|
|
39
|
+
config.fields.forEach(field => {
|
|
40
|
+
labels[field.field] = field.label;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return labels;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Formátuje hodnotu filtru pro zobrazení uživateli
|
|
47
|
+
* @param {*} value - Hodnota k formátování
|
|
48
|
+
* @param {string} fieldName - Název pole
|
|
49
|
+
* @param {Object} valueLabelsMap - Mapa hodnot na labely
|
|
50
|
+
* @param {Object} moduleLabels - Dodatečné modulo labely
|
|
51
|
+
* @param {string} fieldKey - Klíč pro moduleLabels lookup
|
|
52
|
+
* @returns {string} Zformátovaná hodnota
|
|
53
|
+
*/
|
|
54
|
+
export const formatFilterValue = (value, fieldName, valueLabelsMap = {}, moduleLabels = {}, fieldKey = null) => {
|
|
55
|
+
// Array hodnoty
|
|
56
|
+
if (Array.isArray(value)) {
|
|
57
|
+
if (valueLabelsMap[fieldName]) {
|
|
58
|
+
return value.map(v => valueLabelsMap[fieldName][v] || v).join(', ');
|
|
59
|
+
}
|
|
60
|
+
return value.join(', ');
|
|
61
|
+
}
|
|
62
|
+
// Boolean hodnoty
|
|
63
|
+
if (typeof value === 'boolean') {
|
|
64
|
+
return value ? 'Ano' : 'Ne';
|
|
65
|
+
}
|
|
66
|
+
// Null/undefined
|
|
67
|
+
if (value === null || value === undefined) {
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
// Module labels (priorita)
|
|
71
|
+
if (fieldKey && moduleLabels[fieldKey]) {
|
|
72
|
+
return moduleLabels[fieldKey];
|
|
73
|
+
}
|
|
74
|
+
// Value labels map
|
|
75
|
+
if (valueLabelsMap[fieldName] && valueLabelsMap[fieldName][value]) {
|
|
76
|
+
return valueLabelsMap[fieldName][value];
|
|
77
|
+
}
|
|
78
|
+
// Datumové hodnoty
|
|
79
|
+
if (value instanceof Date || (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value))) {
|
|
80
|
+
try {
|
|
81
|
+
const date = new Date(value);
|
|
82
|
+
return date.toLocaleDateString('cs-CZ');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return String(value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return String(value);
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Normalizuje hodnotu filtru pro backend (hlavně datumové formáty)
|
|
92
|
+
* @param {*} value - Hodnota k normalizaci
|
|
93
|
+
* @returns {*} Normalizovaná hodnota
|
|
94
|
+
*/
|
|
95
|
+
export const normalizeFilterValueForBackend = (value) => {
|
|
96
|
+
if (value === null || value === undefined) {
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
// Pokud je už Date objekt, převeď na ISO string
|
|
100
|
+
if (value instanceof Date) {
|
|
101
|
+
return value.toISOString();
|
|
102
|
+
}
|
|
103
|
+
// Pokud je string, zkus ho parsovat jako datum
|
|
104
|
+
if (typeof value === 'string') {
|
|
105
|
+
let cleanedValue = value.trim();
|
|
106
|
+
// Odstraň duplicitní časové části (bug fix z původního kódu)
|
|
107
|
+
if (/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/.test(cleanedValue)) {
|
|
108
|
+
cleanedValue = cleanedValue.replace(/(\d{2}:\d{2}:\d{2})\s+\d{2}:\d{2}:\d{2}$/, '$1');
|
|
109
|
+
}
|
|
110
|
+
// Formát: DD/MM/YYYY HH:MM:SS
|
|
111
|
+
const ddmmyyyyWithTime = cleanedValue.match(/^(\d{2})\/(\d{2})\/(\d{4})\s+(\d{2}):(\d{2}):(\d{2})/);
|
|
112
|
+
if (ddmmyyyyWithTime) {
|
|
113
|
+
const [, day, month, year, hours, minutes, seconds] = ddmmyyyyWithTime;
|
|
114
|
+
const date = new Date(year, month - 1, day, hours, minutes, seconds);
|
|
115
|
+
if (!isNaN(date.getTime())) {
|
|
116
|
+
return date.toISOString();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Formát: DD/MM/YYYY
|
|
120
|
+
const ddmmyyyy = cleanedValue.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
|
|
121
|
+
if (ddmmyyyy) {
|
|
122
|
+
const [, day, month, year] = ddmmyyyy;
|
|
123
|
+
const date = new Date(year, month - 1, day);
|
|
124
|
+
if (!isNaN(date.getTime())) {
|
|
125
|
+
return date.toISOString();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// ISO formát: YYYY-MM-DD
|
|
129
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(cleanedValue)) {
|
|
130
|
+
try {
|
|
131
|
+
const date = new Date(cleanedValue);
|
|
132
|
+
if (!isNaN(date.getTime())) {
|
|
133
|
+
return date.toISOString();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return value;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return value;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Vytvoří throttle funkci pro omezení frekvence volání
|
|
145
|
+
* @param {Function} func - Funkce k throttle
|
|
146
|
+
* @param {number} wait - Čekací doba v ms
|
|
147
|
+
* @returns {Function} Throttled funkce
|
|
148
|
+
*/
|
|
149
|
+
export const throttle = (func, wait) => {
|
|
150
|
+
let timeout = null;
|
|
151
|
+
let lastRan = null;
|
|
152
|
+
return function throttled(...args) {
|
|
153
|
+
const now = Date.now();
|
|
154
|
+
if (lastRan && now - lastRan < wait) {
|
|
155
|
+
// Pokud jsme volali příliš brzy, naplánuj volání na později
|
|
156
|
+
clearTimeout(timeout);
|
|
157
|
+
timeout = setTimeout(() => {
|
|
158
|
+
lastRan = now;
|
|
159
|
+
func.apply(this, args);
|
|
160
|
+
}, wait - (now - lastRan));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// První volání nebo už uplynul čas
|
|
164
|
+
lastRan = now;
|
|
165
|
+
func.apply(this, args);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Vytvoří debounce funkci pro odložení volání
|
|
171
|
+
* @param {Function} func - Funkce k debounce
|
|
172
|
+
* @param {number} wait - Čekací doba v ms
|
|
173
|
+
* @returns {Function} Debounced funkce
|
|
174
|
+
*/
|
|
175
|
+
export const debounce = (func, wait) => {
|
|
176
|
+
let timeout = null;
|
|
177
|
+
return function debounced(...args) {
|
|
178
|
+
clearTimeout(timeout);
|
|
179
|
+
timeout = setTimeout(() => {
|
|
180
|
+
func.apply(this, args);
|
|
181
|
+
}, wait);
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=filterHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterHelpers.js","sourceRoot":"","sources":["../filterHelpers.js"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
declare function FilterPanel({ filters, onRemoveFilter, onClearAll, onRefresh, fieldLabels, valueLabelsMap, alwaysVisible, isLoading, current, pageSize, total, pageSizeOptions, onPageChange, onPageSizeChange, showPagination, filterFields, onApplyFilters, initialFilterValues, accessToken, }: {
|
|
1
|
+
declare const _default: React.MemoExoticComponent<({ filters, onRemoveFilter, onClearAll, onRefresh, fieldLabels, valueLabelsMap, alwaysVisible, isLoading, current, pageSize, total, pageSizeOptions, onPageChange, onPageSizeChange, showPagination, filterFields, onApplyFilters, initialFilterValues, accessToken, }: {
|
|
3
2
|
filters?: any[] | undefined;
|
|
4
3
|
onRemoveFilter: any;
|
|
5
4
|
onClearAll: any;
|
|
@@ -19,4 +18,9 @@ declare function FilterPanel({ filters, onRemoveFilter, onClearAll, onRefresh, f
|
|
|
19
18
|
onApplyFilters: any;
|
|
20
19
|
initialFilterValues?: {} | undefined;
|
|
21
20
|
accessToken: any;
|
|
22
|
-
})
|
|
21
|
+
}) => import("react/jsx-runtime").JSX.Element | null>;
|
|
22
|
+
export default _default;
|
|
23
|
+
export { formatFilterValue };
|
|
24
|
+
import React from 'react';
|
|
25
|
+
import { formatFilterValue } from './filterHelpers';
|
|
26
|
+
export { buildValueLabelsMap, buildFieldLabelsMap, normalizeFilterValueForBackend, throttle, debounce } from "./filterHelpers";
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/* eslint-disable */
|
|
3
|
-
import React, { useState, useCallback } from 'react';
|
|
3
|
+
import React, { useState, useCallback, useMemo } from 'react';
|
|
4
4
|
import { Tag, Space, Button, Spin, Pagination, Row, Col, Input, Select, Radio } from 'antd';
|
|
5
5
|
import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled } from '@ant-design/icons';
|
|
6
6
|
import { filterCondition } from '@bit.rhplus/ui2.filter';
|
|
7
|
+
import { formatFilterValue } from './filterHelpers';
|
|
8
|
+
// Konstanty extrahované mimo komponentu pro stabilní references
|
|
7
9
|
const conditionLabels = {
|
|
8
10
|
[filterCondition.equals]: 'je',
|
|
9
11
|
[filterCondition.notEquals]: 'není',
|
|
@@ -19,36 +21,19 @@ const conditionLabels = {
|
|
|
19
21
|
[filterCondition.in]: 'obsahuje',
|
|
20
22
|
[filterCondition.notIn]: 'neobsahuje',
|
|
21
23
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (valueLabelsMap[fieldName]) {
|
|
25
|
-
return value.map(v => valueLabelsMap[fieldName][v] || v).join(', ');
|
|
26
|
-
}
|
|
27
|
-
return value.join(', ');
|
|
28
|
-
}
|
|
29
|
-
if (typeof value === 'boolean') {
|
|
30
|
-
return value ? 'Ano' : 'Ne';
|
|
31
|
-
}
|
|
32
|
-
if (value === null || value === undefined) {
|
|
33
|
-
return '';
|
|
34
|
-
}
|
|
35
|
-
if (fieldKey && moduleLabels[fieldKey]) {
|
|
36
|
-
return moduleLabels[fieldKey];
|
|
37
|
-
}
|
|
38
|
-
if (valueLabelsMap[fieldName] && valueLabelsMap[fieldName][value]) {
|
|
39
|
-
return valueLabelsMap[fieldName][value];
|
|
40
|
-
}
|
|
41
|
-
return String(value);
|
|
42
|
-
};
|
|
24
|
+
// Konstantní loading ikona
|
|
25
|
+
const LOADING_ICON = _jsx(LoadingOutlined, { style: { fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }, spin: true });
|
|
43
26
|
const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fieldLabels = {}, valueLabelsMap = {}, alwaysVisible = false, isLoading = false, current = 1, pageSize = 100, total = 0, pageSizeOptions = ['100', '200', '300', '500', '1000'], onPageChange, onPageSizeChange, showPagination = true, filterFields = [], onApplyFilters, initialFilterValues = {}, accessToken, }) => {
|
|
44
27
|
const [expanded, setExpanded] = useState(false);
|
|
45
28
|
const [filterValues, setFilterValues] = useState(initialFilterValues);
|
|
46
29
|
const [moduleLabels, setModuleLabels] = useState({});
|
|
47
|
-
|
|
30
|
+
// Memoizované hodnoty pro optimalizaci
|
|
31
|
+
const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
|
|
32
|
+
const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
|
|
33
|
+
// Early return pokud není co zobrazit
|
|
34
|
+
if (!alwaysVisible && !hasFilters) {
|
|
48
35
|
return null;
|
|
49
36
|
}
|
|
50
|
-
const hasFilters = filters && filters.length > 0;
|
|
51
|
-
const loadingIcon = _jsx(LoadingOutlined, { style: { fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }, spin: true });
|
|
52
37
|
const handleFieldChange = useCallback((fieldKey, value, displayValue) => {
|
|
53
38
|
setFilterValues(prev => ({
|
|
54
39
|
...prev,
|
|
@@ -117,8 +102,7 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
|
|
|
117
102
|
}, placeholder: `Vyber ${field.label}`, accessToken: accessToken }));
|
|
118
103
|
}
|
|
119
104
|
return (_jsx(Input, { placeholder: `Zadej ${field.label}`, allowClear: true, value: filterValues[fieldKey] || '', onChange: (e) => handleFieldChange(fieldKey, e.target.value) }));
|
|
120
|
-
}, [filterValues, handleFieldChange]);
|
|
121
|
-
const hasFilterFields = filterFields && filterFields.length > 0;
|
|
105
|
+
}, [filterValues, handleFieldChange, accessToken]);
|
|
122
106
|
return (_jsxs("div", { style: { position: 'relative', zIndex: 10 }, children: [_jsxs("div", { style: {
|
|
123
107
|
display: 'flex',
|
|
124
108
|
justifyContent: 'space-between',
|
|
@@ -135,7 +119,7 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
|
|
|
135
119
|
padding: '0 4px',
|
|
136
120
|
height: '22px',
|
|
137
121
|
minWidth: '22px'
|
|
138
|
-
} })), _jsx(Button, { type: "text", size: "small", icon: isLoading ? _jsx(Spin, { indicator:
|
|
122
|
+
} })), _jsx(Button, { type: "text", size: "small", icon: isLoading ? _jsx(Spin, { indicator: LOADING_ICON }) : (expanded ? _jsx(FilterFilled, {}) : _jsx(ReloadOutlined, {})), onClick: handleRefreshOrFilter, disabled: isLoading, style: {
|
|
139
123
|
color: '#1890ff',
|
|
140
124
|
padding: '0 4px',
|
|
141
125
|
height: '22px',
|
|
@@ -144,7 +128,7 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
|
|
|
144
128
|
const fieldLabel = filter.label || fieldLabels[filter.field] || filter.field;
|
|
145
129
|
const conditionLabel = conditionLabels[filter.condition] || 'filtr';
|
|
146
130
|
const fieldKey = `${filter.field}_${filter.condition}`;
|
|
147
|
-
const valueLabel =
|
|
131
|
+
const valueLabel = formatFilterValue(filter.value, filter.field, valueLabelsMap, moduleLabels, fieldKey);
|
|
148
132
|
const displayText = filter.text || (valueLabel
|
|
149
133
|
? `${fieldLabel} ${conditionLabel} (${valueLabel})`
|
|
150
134
|
: `${fieldLabel} ${conditionLabel}`);
|
|
@@ -194,5 +178,31 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
|
|
|
194
178
|
}, children: [field.label, ":"] }), _jsx("div", { style: { width: '175px' }, children: renderField(field) })] }, fieldKey));
|
|
195
179
|
}) }) }) })] }));
|
|
196
180
|
};
|
|
197
|
-
|
|
181
|
+
// Custom comparison funkce pro React.memo
|
|
182
|
+
const areEqual = (prevProps, nextProps) => {
|
|
183
|
+
return (prevProps.filters === nextProps.filters &&
|
|
184
|
+
prevProps.isLoading === nextProps.isLoading &&
|
|
185
|
+
prevProps.current === nextProps.current &&
|
|
186
|
+
prevProps.pageSize === nextProps.pageSize &&
|
|
187
|
+
prevProps.total === nextProps.total &&
|
|
188
|
+
prevProps.alwaysVisible === nextProps.alwaysVisible &&
|
|
189
|
+
prevProps.showPagination === nextProps.showPagination &&
|
|
190
|
+
prevProps.fieldLabels === nextProps.fieldLabels &&
|
|
191
|
+
prevProps.valueLabelsMap === nextProps.valueLabelsMap &&
|
|
192
|
+
prevProps.filterFields === nextProps.filterFields &&
|
|
193
|
+
prevProps.initialFilterValues === nextProps.initialFilterValues &&
|
|
194
|
+
prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
|
|
195
|
+
prevProps.accessToken === nextProps.accessToken &&
|
|
196
|
+
// Callback props
|
|
197
|
+
prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
|
|
198
|
+
prevProps.onClearAll === nextProps.onClearAll &&
|
|
199
|
+
prevProps.onRefresh === nextProps.onRefresh &&
|
|
200
|
+
prevProps.onPageChange === nextProps.onPageChange &&
|
|
201
|
+
prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
|
|
202
|
+
prevProps.onApplyFilters === nextProps.onApplyFilters);
|
|
203
|
+
};
|
|
204
|
+
// Export s React.memo pro optimalizaci re-renderů
|
|
205
|
+
export default React.memo(FilterPanel, areEqual);
|
|
206
|
+
export { buildValueLabelsMap, buildFieldLabelsMap, normalizeFilterValueForBackend, throttle, debounce } from './filterHelpers';
|
|
207
|
+
export { formatFilterValue };
|
|
198
208
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
|
package/filterHelpers.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sdílené utility funkce pro práci s filtry v Master komponentách
|
|
5
|
+
*
|
|
6
|
+
* Tyto funkce jsou memoizovány a používány jak v Desktop tak Mobile verzích
|
|
7
|
+
* pro zajištění konzistentního chování a lepšího výkonu.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Vytvoří mapu hodnot pro převod value → label z filterConfigs
|
|
12
|
+
* @param {Object} filterConfigs - Konfigurace filtrů
|
|
13
|
+
* @returns {Object} Mapa ve formátu { field: { value: label } }
|
|
14
|
+
*/
|
|
15
|
+
export const buildValueLabelsMap = (filterConfigs) => {
|
|
16
|
+
if (!filterConfigs) return {};
|
|
17
|
+
const map = {};
|
|
18
|
+
|
|
19
|
+
Object.values(filterConfigs).forEach(config => {
|
|
20
|
+
config.fields.forEach(field => {
|
|
21
|
+
if (field.type === 'select' && field.options) {
|
|
22
|
+
map[field.field] = {};
|
|
23
|
+
field.options.forEach(option => {
|
|
24
|
+
map[field.field][option.value] = option.label;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
return map;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Vytvoří mapu labelů pro fieldy z filterConfigs
|
|
35
|
+
* @param {Object} filterConfigs - Konfigurace filtrů
|
|
36
|
+
* @returns {Object} Mapa ve formátu { field: label }
|
|
37
|
+
*/
|
|
38
|
+
export const buildFieldLabelsMap = (filterConfigs) => {
|
|
39
|
+
if (!filterConfigs) return {};
|
|
40
|
+
const labels = {};
|
|
41
|
+
|
|
42
|
+
Object.values(filterConfigs).forEach(config => {
|
|
43
|
+
config.fields.forEach(field => {
|
|
44
|
+
labels[field.field] = field.label;
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return labels;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Formátuje hodnotu filtru pro zobrazení uživateli
|
|
53
|
+
* @param {*} value - Hodnota k formátování
|
|
54
|
+
* @param {string} fieldName - Název pole
|
|
55
|
+
* @param {Object} valueLabelsMap - Mapa hodnot na labely
|
|
56
|
+
* @param {Object} moduleLabels - Dodatečné modulo labely
|
|
57
|
+
* @param {string} fieldKey - Klíč pro moduleLabels lookup
|
|
58
|
+
* @returns {string} Zformátovaná hodnota
|
|
59
|
+
*/
|
|
60
|
+
export const formatFilterValue = (value, fieldName, valueLabelsMap = {}, moduleLabels = {}, fieldKey = null) => {
|
|
61
|
+
// Array hodnoty
|
|
62
|
+
if (Array.isArray(value)) {
|
|
63
|
+
if (valueLabelsMap[fieldName]) {
|
|
64
|
+
return value.map(v => valueLabelsMap[fieldName][v] || v).join(', ');
|
|
65
|
+
}
|
|
66
|
+
return value.join(', ');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Boolean hodnoty
|
|
70
|
+
if (typeof value === 'boolean') {
|
|
71
|
+
return value ? 'Ano' : 'Ne';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Null/undefined
|
|
75
|
+
if (value === null || value === undefined) {
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Module labels (priorita)
|
|
80
|
+
if (fieldKey && moduleLabels[fieldKey]) {
|
|
81
|
+
return moduleLabels[fieldKey];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Value labels map
|
|
85
|
+
if (valueLabelsMap[fieldName] && valueLabelsMap[fieldName][value]) {
|
|
86
|
+
return valueLabelsMap[fieldName][value];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Datumové hodnoty
|
|
90
|
+
if (value instanceof Date || (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value))) {
|
|
91
|
+
try {
|
|
92
|
+
const date = new Date(value);
|
|
93
|
+
return date.toLocaleDateString('cs-CZ');
|
|
94
|
+
} catch {
|
|
95
|
+
return String(value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return String(value);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Normalizuje hodnotu filtru pro backend (hlavně datumové formáty)
|
|
104
|
+
* @param {*} value - Hodnota k normalizaci
|
|
105
|
+
* @returns {*} Normalizovaná hodnota
|
|
106
|
+
*/
|
|
107
|
+
export const normalizeFilterValueForBackend = (value) => {
|
|
108
|
+
if (value === null || value === undefined) {
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Pokud je už Date objekt, převeď na ISO string
|
|
113
|
+
if (value instanceof Date) {
|
|
114
|
+
return value.toISOString();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Pokud je string, zkus ho parsovat jako datum
|
|
118
|
+
if (typeof value === 'string') {
|
|
119
|
+
let cleanedValue = value.trim();
|
|
120
|
+
|
|
121
|
+
// Odstraň duplicitní časové části (bug fix z původního kódu)
|
|
122
|
+
if (/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/.test(cleanedValue)) {
|
|
123
|
+
cleanedValue = cleanedValue.replace(/(\d{2}:\d{2}:\d{2})\s+\d{2}:\d{2}:\d{2}$/, '$1');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Formát: DD/MM/YYYY HH:MM:SS
|
|
127
|
+
const ddmmyyyyWithTime = cleanedValue.match(/^(\d{2})\/(\d{2})\/(\d{4})\s+(\d{2}):(\d{2}):(\d{2})/);
|
|
128
|
+
if (ddmmyyyyWithTime) {
|
|
129
|
+
const [, day, month, year, hours, minutes, seconds] = ddmmyyyyWithTime;
|
|
130
|
+
const date = new Date(year, month - 1, day, hours, minutes, seconds);
|
|
131
|
+
if (!isNaN(date.getTime())) {
|
|
132
|
+
return date.toISOString();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Formát: DD/MM/YYYY
|
|
137
|
+
const ddmmyyyy = cleanedValue.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
|
|
138
|
+
if (ddmmyyyy) {
|
|
139
|
+
const [, day, month, year] = ddmmyyyy;
|
|
140
|
+
const date = new Date(year, month - 1, day);
|
|
141
|
+
if (!isNaN(date.getTime())) {
|
|
142
|
+
return date.toISOString();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ISO formát: YYYY-MM-DD
|
|
147
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(cleanedValue)) {
|
|
148
|
+
try {
|
|
149
|
+
const date = new Date(cleanedValue);
|
|
150
|
+
if (!isNaN(date.getTime())) {
|
|
151
|
+
return date.toISOString();
|
|
152
|
+
}
|
|
153
|
+
} catch {
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return value;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Vytvoří throttle funkci pro omezení frekvence volání
|
|
164
|
+
* @param {Function} func - Funkce k throttle
|
|
165
|
+
* @param {number} wait - Čekací doba v ms
|
|
166
|
+
* @returns {Function} Throttled funkce
|
|
167
|
+
*/
|
|
168
|
+
export const throttle = (func, wait) => {
|
|
169
|
+
let timeout = null;
|
|
170
|
+
let lastRan = null;
|
|
171
|
+
|
|
172
|
+
return function throttled(...args) {
|
|
173
|
+
const now = Date.now();
|
|
174
|
+
|
|
175
|
+
if (lastRan && now - lastRan < wait) {
|
|
176
|
+
// Pokud jsme volali příliš brzy, naplánuj volání na později
|
|
177
|
+
clearTimeout(timeout);
|
|
178
|
+
timeout = setTimeout(() => {
|
|
179
|
+
lastRan = now;
|
|
180
|
+
func.apply(this, args);
|
|
181
|
+
}, wait - (now - lastRan));
|
|
182
|
+
} else {
|
|
183
|
+
// První volání nebo už uplynul čas
|
|
184
|
+
lastRan = now;
|
|
185
|
+
func.apply(this, args);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Vytvoří debounce funkci pro odložení volání
|
|
192
|
+
* @param {Function} func - Funkce k debounce
|
|
193
|
+
* @param {number} wait - Čekací doba v ms
|
|
194
|
+
* @returns {Function} Debounced funkce
|
|
195
|
+
*/
|
|
196
|
+
export const debounce = (func, wait) => {
|
|
197
|
+
let timeout = null;
|
|
198
|
+
|
|
199
|
+
return function debounced(...args) {
|
|
200
|
+
clearTimeout(timeout);
|
|
201
|
+
timeout = setTimeout(() => {
|
|
202
|
+
func.apply(this, args);
|
|
203
|
+
}, wait);
|
|
204
|
+
};
|
|
205
|
+
};
|
package/index.jsx
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
|
-
import React, { useState, useCallback } from 'react';
|
|
2
|
+
import React, { useState, useCallback, useMemo } from 'react';
|
|
3
3
|
import { Tag, Space, Button, Spin, Pagination, Row, Col, Input, Select, Radio } from 'antd';
|
|
4
4
|
import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled } from '@ant-design/icons';
|
|
5
5
|
import { filterCondition } from '@bit.rhplus/ui2.filter';
|
|
6
|
+
import { formatFilterValue } from './filterHelpers';
|
|
6
7
|
|
|
8
|
+
// Konstanty extrahované mimo komponentu pro stabilní references
|
|
7
9
|
const conditionLabels = {
|
|
8
10
|
[filterCondition.equals]: 'je',
|
|
9
11
|
[filterCondition.notEquals]: 'není',
|
|
@@ -20,33 +22,11 @@ const conditionLabels = {
|
|
|
20
22
|
[filterCondition.notIn]: 'neobsahuje',
|
|
21
23
|
};
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (valueLabelsMap[fieldName]) {
|
|
26
|
-
return value.map(v => valueLabelsMap[fieldName][v] || v).join(', ');
|
|
27
|
-
}
|
|
28
|
-
return value.join(', ');
|
|
29
|
-
}
|
|
30
|
-
if (typeof value === 'boolean') {
|
|
31
|
-
return value ? 'Ano' : 'Ne';
|
|
32
|
-
}
|
|
33
|
-
if (value === null || value === undefined) {
|
|
34
|
-
return '';
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (fieldKey && moduleLabels[fieldKey]) {
|
|
38
|
-
return moduleLabels[fieldKey];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (valueLabelsMap[fieldName] && valueLabelsMap[fieldName][value]) {
|
|
42
|
-
return valueLabelsMap[fieldName][value];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return String(value);
|
|
46
|
-
};
|
|
25
|
+
// Konstantní loading ikona
|
|
26
|
+
const LOADING_ICON = <LoadingOutlined style={{ fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }} spin />;
|
|
47
27
|
|
|
48
|
-
const FilterPanel = ({
|
|
49
|
-
filters = [],
|
|
28
|
+
const FilterPanel = ({
|
|
29
|
+
filters = [],
|
|
50
30
|
onRemoveFilter,
|
|
51
31
|
onClearAll,
|
|
52
32
|
onRefresh,
|
|
@@ -69,20 +49,22 @@ const FilterPanel = ({
|
|
|
69
49
|
const [expanded, setExpanded] = useState(false);
|
|
70
50
|
const [filterValues, setFilterValues] = useState(initialFilterValues);
|
|
71
51
|
const [moduleLabels, setModuleLabels] = useState({});
|
|
72
|
-
|
|
52
|
+
|
|
53
|
+
// Memoizované hodnoty pro optimalizaci
|
|
54
|
+
const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
|
|
55
|
+
const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
|
|
56
|
+
|
|
57
|
+
// Early return pokud není co zobrazit
|
|
58
|
+
if (!alwaysVisible && !hasFilters) {
|
|
73
59
|
return null;
|
|
74
60
|
}
|
|
75
61
|
|
|
76
|
-
const hasFilters = filters && filters.length > 0;
|
|
77
|
-
|
|
78
|
-
const loadingIcon = <LoadingOutlined style={{ fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }} spin />;
|
|
79
|
-
|
|
80
62
|
const handleFieldChange = useCallback((fieldKey, value, displayValue) => {
|
|
81
63
|
setFilterValues(prev => ({
|
|
82
64
|
...prev,
|
|
83
65
|
[fieldKey]: value
|
|
84
66
|
}));
|
|
85
|
-
|
|
67
|
+
|
|
86
68
|
if (displayValue !== undefined) {
|
|
87
69
|
setModuleLabels(prev => ({
|
|
88
70
|
...prev,
|
|
@@ -115,7 +97,7 @@ const FilterPanel = ({
|
|
|
115
97
|
if (onApplyFilters) {
|
|
116
98
|
onApplyFilters(appliedFilters);
|
|
117
99
|
}
|
|
118
|
-
|
|
100
|
+
|
|
119
101
|
setExpanded(false);
|
|
120
102
|
}, [filterFields, filterValues, onApplyFilters]);
|
|
121
103
|
|
|
@@ -129,7 +111,7 @@ const FilterPanel = ({
|
|
|
129
111
|
|
|
130
112
|
const renderField = useCallback((field) => {
|
|
131
113
|
const fieldKey = `${field.field}_${field.condition}`;
|
|
132
|
-
|
|
114
|
+
|
|
133
115
|
if (field.type === 'select') {
|
|
134
116
|
return (
|
|
135
117
|
<Select
|
|
@@ -144,7 +126,7 @@ const FilterPanel = ({
|
|
|
144
126
|
/>
|
|
145
127
|
);
|
|
146
128
|
}
|
|
147
|
-
|
|
129
|
+
|
|
148
130
|
if (field.type === 'date') {
|
|
149
131
|
return (
|
|
150
132
|
<Input
|
|
@@ -193,9 +175,7 @@ const FilterPanel = ({
|
|
|
193
175
|
onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
|
|
194
176
|
/>
|
|
195
177
|
);
|
|
196
|
-
}, [filterValues, handleFieldChange]);
|
|
197
|
-
|
|
198
|
-
const hasFilterFields = filterFields && filterFields.length > 0;
|
|
178
|
+
}, [filterValues, handleFieldChange, accessToken]);
|
|
199
179
|
|
|
200
180
|
return (
|
|
201
181
|
<div style={{ position: 'relative', zIndex: 10 }}>
|
|
@@ -216,15 +196,15 @@ const FilterPanel = ({
|
|
|
216
196
|
type="text"
|
|
217
197
|
size="small"
|
|
218
198
|
icon={
|
|
219
|
-
<DownOutlined
|
|
220
|
-
style={{
|
|
199
|
+
<DownOutlined
|
|
200
|
+
style={{
|
|
221
201
|
transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
|
|
222
202
|
transition: 'transform 0.3s ease'
|
|
223
|
-
}}
|
|
203
|
+
}}
|
|
224
204
|
/>
|
|
225
205
|
}
|
|
226
206
|
onClick={() => setExpanded(!expanded)}
|
|
227
|
-
style={{
|
|
207
|
+
style={{
|
|
228
208
|
color: '#1890ff',
|
|
229
209
|
padding: '0 4px',
|
|
230
210
|
height: '22px',
|
|
@@ -235,10 +215,10 @@ const FilterPanel = ({
|
|
|
235
215
|
<Button
|
|
236
216
|
type="text"
|
|
237
217
|
size="small"
|
|
238
|
-
icon={isLoading ? <Spin indicator={
|
|
218
|
+
icon={isLoading ? <Spin indicator={LOADING_ICON} /> : (expanded ? <FilterFilled /> : <ReloadOutlined />)}
|
|
239
219
|
onClick={handleRefreshOrFilter}
|
|
240
220
|
disabled={isLoading}
|
|
241
|
-
style={{
|
|
221
|
+
style={{
|
|
242
222
|
color: '#1890ff',
|
|
243
223
|
padding: '0 4px',
|
|
244
224
|
height: '22px',
|
|
@@ -250,9 +230,9 @@ const FilterPanel = ({
|
|
|
250
230
|
const fieldLabel = filter.label || fieldLabels[filter.field] || filter.field;
|
|
251
231
|
const conditionLabel = conditionLabels[filter.condition] || 'filtr';
|
|
252
232
|
const fieldKey = `${filter.field}_${filter.condition}`;
|
|
253
|
-
const valueLabel =
|
|
254
|
-
|
|
255
|
-
const displayText = filter.text || (valueLabel
|
|
233
|
+
const valueLabel = formatFilterValue(filter.value, filter.field, valueLabelsMap, moduleLabels, fieldKey);
|
|
234
|
+
|
|
235
|
+
const displayText = filter.text || (valueLabel
|
|
256
236
|
? `${fieldLabel} ${conditionLabel} (${valueLabel})`
|
|
257
237
|
: `${fieldLabel} ${conditionLabel}`);
|
|
258
238
|
|
|
@@ -283,7 +263,7 @@ const FilterPanel = ({
|
|
|
283
263
|
<span style={{ color: '#999', fontSize: '13px' }}>Žádné aktivní filtry</span>
|
|
284
264
|
)}
|
|
285
265
|
</Space>
|
|
286
|
-
|
|
266
|
+
|
|
287
267
|
<Space style={{ lineHeight: 'normal', paddingRight: '7px' }} size={[16, 8]}>
|
|
288
268
|
{hasFilters && onClearAll && (
|
|
289
269
|
<Button
|
|
@@ -316,7 +296,7 @@ const FilterPanel = ({
|
|
|
316
296
|
)}
|
|
317
297
|
</Space>
|
|
318
298
|
</div>
|
|
319
|
-
|
|
299
|
+
|
|
320
300
|
<div
|
|
321
301
|
style={{
|
|
322
302
|
maxHeight: expanded ? '500px' : '0px',
|
|
@@ -334,9 +314,9 @@ const FilterPanel = ({
|
|
|
334
314
|
borderBottom: '1px solid #f0f0f0',
|
|
335
315
|
}}
|
|
336
316
|
>
|
|
337
|
-
<div style={{
|
|
338
|
-
display: 'flex',
|
|
339
|
-
flexDirection: 'row',
|
|
317
|
+
<div style={{
|
|
318
|
+
display: 'flex',
|
|
319
|
+
flexDirection: 'row',
|
|
340
320
|
flexWrap: 'wrap',
|
|
341
321
|
gap: '16px',
|
|
342
322
|
alignItems: 'flex-start'
|
|
@@ -345,7 +325,7 @@ const FilterPanel = ({
|
|
|
345
325
|
const fieldKey = `${field.field}_${field.condition}`;
|
|
346
326
|
return (
|
|
347
327
|
<div key={fieldKey} style={{ display: 'flex', alignItems: 'center', gap: '12px', width: '287px' }}>
|
|
348
|
-
<div style={{
|
|
328
|
+
<div style={{
|
|
349
329
|
width: '100px',
|
|
350
330
|
fontWeight: '500',
|
|
351
331
|
fontSize: '13px',
|
|
@@ -368,4 +348,40 @@ const FilterPanel = ({
|
|
|
368
348
|
);
|
|
369
349
|
};
|
|
370
350
|
|
|
371
|
-
|
|
351
|
+
// Custom comparison funkce pro React.memo
|
|
352
|
+
const areEqual = (prevProps, nextProps) => {
|
|
353
|
+
return (
|
|
354
|
+
prevProps.filters === nextProps.filters &&
|
|
355
|
+
prevProps.isLoading === nextProps.isLoading &&
|
|
356
|
+
prevProps.current === nextProps.current &&
|
|
357
|
+
prevProps.pageSize === nextProps.pageSize &&
|
|
358
|
+
prevProps.total === nextProps.total &&
|
|
359
|
+
prevProps.alwaysVisible === nextProps.alwaysVisible &&
|
|
360
|
+
prevProps.showPagination === nextProps.showPagination &&
|
|
361
|
+
prevProps.fieldLabels === nextProps.fieldLabels &&
|
|
362
|
+
prevProps.valueLabelsMap === nextProps.valueLabelsMap &&
|
|
363
|
+
prevProps.filterFields === nextProps.filterFields &&
|
|
364
|
+
prevProps.initialFilterValues === nextProps.initialFilterValues &&
|
|
365
|
+
prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
|
|
366
|
+
prevProps.accessToken === nextProps.accessToken &&
|
|
367
|
+
// Callback props
|
|
368
|
+
prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
|
|
369
|
+
prevProps.onClearAll === nextProps.onClearAll &&
|
|
370
|
+
prevProps.onRefresh === nextProps.onRefresh &&
|
|
371
|
+
prevProps.onPageChange === nextProps.onPageChange &&
|
|
372
|
+
prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
|
|
373
|
+
prevProps.onApplyFilters === nextProps.onApplyFilters
|
|
374
|
+
);
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
// Export s React.memo pro optimalizaci re-renderů
|
|
378
|
+
export default React.memo(FilterPanel, areEqual);
|
|
379
|
+
export {
|
|
380
|
+
buildValueLabelsMap,
|
|
381
|
+
buildFieldLabelsMap,
|
|
382
|
+
normalizeFilterValueForBackend,
|
|
383
|
+
throttle,
|
|
384
|
+
debounce
|
|
385
|
+
} from './filterHelpers';
|
|
386
|
+
|
|
387
|
+
export {formatFilterValue};
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bit.rhplus/ui2.filter-panel",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"homepage": "https://bit.cloud/remote-scope/ui2/filter-panel",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "remote-scope",
|
|
8
8
|
"name": "ui2/filter-panel",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.8"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@ant-design/icons": "^5.4.0",
|
|
File without changes
|