@bit.rhplus/ui2.filter-panel 0.0.9 → 0.0.11

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/index.d.ts CHANGED
@@ -1,4 +1,4 @@
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, }: {
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, searchValue, onSearchChange, searchPlaceholder, showAIButton, }: {
2
2
  filters?: any[] | undefined;
3
3
  onRemoveFilter: any;
4
4
  onClearAll: any;
@@ -18,6 +18,10 @@ declare const _default: React.MemoExoticComponent<({ filters, onRemoveFilter, on
18
18
  onApplyFilters: any;
19
19
  initialFilterValues?: {} | undefined;
20
20
  accessToken: any;
21
+ searchValue?: string | undefined;
22
+ onSearchChange: any;
23
+ searchPlaceholder?: string | undefined;
24
+ showAIButton?: boolean | undefined;
21
25
  }) => import("react/jsx-runtime").JSX.Element | null>;
22
26
  export default _default;
23
27
  import React from 'react';
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, useMemo } from 'react';
3
+ import React, { useState, useCallback, useMemo, useRef } from 'react';
4
4
  import { Tag, Space, Button, Spin, Pagination, Row, Col, Input, Select, Radio } from 'antd';
5
- import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled } from '@ant-design/icons';
5
+ import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled, SearchOutlined } from '@ant-design/icons';
6
6
  import { filterCondition } from '@bit.rhplus/ui2.filter';
7
+ import AIButton from '@bit.rhplus/ui2.ai-button';
8
+ import AIChatWindow from '@bit.rhplus/ui2.ai-chat-window';
7
9
  import { buildValueLabelsMap, buildFieldLabelsMap, normalizeFilterValueForBackend, throttle, formatFilterValue, debounce } from './filterHelpers';
8
10
  // Re-export pro externí použití
9
11
  export { buildValueLabelsMap, buildFieldLabelsMap, normalizeFilterValueForBackend, throttle, formatFilterValue, debounce } from './filterHelpers';
@@ -25,10 +27,14 @@ const conditionLabels = {
25
27
  };
26
28
  // Konstantní loading ikona
27
29
  const LOADING_ICON = _jsx(LoadingOutlined, { style: { fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }, spin: true });
28
- 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, }) => {
30
+ 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, searchValue = '', onSearchChange, searchPlaceholder = 'Vyhledat...', showAIButton = false, }) => {
29
31
  const [expanded, setExpanded] = useState(false);
30
32
  const [filterValues, setFilterValues] = useState(initialFilterValues);
31
33
  const [moduleLabels, setModuleLabels] = useState({});
34
+ const [chatOpen, setChatOpen] = useState(false);
35
+ const [chatMessages, setChatMessages] = useState([]);
36
+ const [isAITyping, setIsAITyping] = useState(false);
37
+ const aiButtonRef = useRef(null);
32
38
  // Memoizované hodnoty pro optimalizaci
33
39
  const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
34
40
  const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
@@ -81,6 +87,33 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
81
87
  onRefresh();
82
88
  }
83
89
  }, [expanded, handleApplyFilters, onRefresh]);
90
+ const handleAIButtonClick = useCallback(() => {
91
+ setChatOpen(prev => !prev);
92
+ }, []);
93
+ const handleSendMessage = useCallback((text) => {
94
+ // Přidat user zprávu
95
+ const userMessage = {
96
+ text,
97
+ sender: 'user',
98
+ timestamp: new Date(),
99
+ userName: 'User', // TODO: získat z context/auth
100
+ };
101
+ setChatMessages(prev => [...prev, userMessage]);
102
+ // Simulovat AI odpověď (TODO: připojit backend API)
103
+ setIsAITyping(true);
104
+ setTimeout(() => {
105
+ const aiMessage = {
106
+ text: `Obdržel jsem vaši zprávu: "${text}". Toto je testovací odpověď. V budoucnu zde bude AI asistent.`,
107
+ sender: 'ai',
108
+ timestamp: new Date(),
109
+ };
110
+ setChatMessages(prev => [...prev, aiMessage]);
111
+ setIsAITyping(false);
112
+ }, 1500);
113
+ }, []);
114
+ const handleCloseChat = useCallback(() => {
115
+ setChatOpen(false);
116
+ }, []);
84
117
  const renderField = useCallback((field) => {
85
118
  const fieldKey = `${field.field}_${field.condition}`;
86
119
  if (field.type === 'select') {
@@ -111,9 +144,9 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
111
144
  alignItems: 'center',
112
145
  padding: '7px 0px 7px 7px',
113
146
  borderRadius: '4px',
114
- backgroundColor: '#fafafa',
147
+ backgroundColor: '#f5f7fb',
115
148
  borderTop: '1px solid #f0f0f0',
116
- }, children: [_jsxs(Space, { style: { lineHeight: 'normal', flexWrap: 'wrap' }, size: [8, 8], children: [hasFilterFields && (_jsx(Button, { type: "text", size: "small", icon: _jsx(DownOutlined, { style: {
149
+ }, children: [_jsxs(Space, { style: { lineHeight: 'normal', flexWrap: 'wrap' }, size: [8, 8], children: [onSearchChange && (_jsx(Input, { prefix: _jsx(SearchOutlined, { style: { color: '#999' } }), placeholder: searchPlaceholder, value: searchValue, onChange: (e) => onSearchChange(e.target.value), allowClear: true, style: { width: '250px', height: '28px' } })), hasFilterFields && (_jsx(Button, { type: "text", size: "small", icon: _jsx(DownOutlined, { style: {
117
150
  transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
118
151
  transition: 'transform 0.3s ease'
119
152
  } }), onClick: () => setExpanded(!expanded), style: {
@@ -147,7 +180,7 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
147
180
  padding: '2px 8px',
148
181
  margin: 0,
149
182
  }, children: displayText }, `${filter.field}-${index}`));
150
- })) : (_jsx("span", { style: { color: '#999', fontSize: '13px' }, children: "\u017D\u00E1dn\u00E9 aktivn\u00ED filtry" }))] }), _jsxs(Space, { style: { lineHeight: 'normal', paddingRight: '7px' }, size: [16, 8], children: [hasFilters && onClearAll && (_jsx(Button, { type: "link", size: "small", onClick: onClearAll, style: { color: '#999' }, children: "Vymazat v\u0161e" })), showPagination && (_jsx(Pagination, { size: "small", current: current, pageSize: pageSize, total: total, pageSizeOptions: pageSizeOptions, showSizeChanger: true, showQuickJumper: true, showTotal: (total, range) => `${range[0]}-${range[1]} z ${total}`, onChange: onPageChange, onShowSizeChange: (current, size) => {
183
+ })) : (_jsx("span", { style: { color: '#999', fontSize: '13px' }, children: "\u017D\u00E1dn\u00E9 aktivn\u00ED filtry" }))] }), _jsxs(Space, { style: { lineHeight: 'normal', paddingRight: '7px' }, size: [16, 8], children: [hasFilters && onClearAll && (_jsx(Button, { type: "link", size: "small", onClick: onClearAll, style: { color: '#999' }, children: "Vymazat v\u0161e" })), showAIButton && (_jsx(AIButton, { ref: aiButtonRef, label: "AI", onClick: handleAIButtonClick, size: "32px", ring: "5px", style: { flexShrink: 0 } })), showPagination && (_jsx(Pagination, { size: "small", current: current, pageSize: pageSize, total: total, pageSizeOptions: pageSizeOptions, showSizeChanger: true, showQuickJumper: true, showTotal: (total, range) => `${range[0]}-${range[1]} z ${total}`, onChange: onPageChange, onShowSizeChange: (current, size) => {
151
184
  if (onPageSizeChange) {
152
185
  onPageSizeChange(current, size);
153
186
  }
@@ -178,7 +211,7 @@ const FilterPanel = ({ filters = [], onRemoveFilter, onClearAll, onRefresh, fiel
178
211
  textAlign: 'right',
179
212
  flexShrink: 0
180
213
  }, children: [field.label, ":"] }), _jsx("div", { style: { width: '175px' }, children: renderField(field) })] }, fieldKey));
181
- }) }) }) })] }));
214
+ }) }) }) }), showAIButton && (_jsx(AIChatWindow, { open: chatOpen, onClose: handleCloseChat, buttonRef: aiButtonRef, onSendMessage: handleSendMessage, messages: chatMessages, isTyping: isAITyping }))] }));
182
215
  };
183
216
  // Custom comparison funkce pro React.memo
184
217
  const areEqual = (prevProps, nextProps) => {
@@ -195,13 +228,17 @@ const areEqual = (prevProps, nextProps) => {
195
228
  prevProps.initialFilterValues === nextProps.initialFilterValues &&
196
229
  prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
197
230
  prevProps.accessToken === nextProps.accessToken &&
231
+ prevProps.searchValue === nextProps.searchValue &&
232
+ prevProps.searchPlaceholder === nextProps.searchPlaceholder &&
233
+ prevProps.showAIButton === nextProps.showAIButton &&
198
234
  // Callback props
199
235
  prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
200
236
  prevProps.onClearAll === nextProps.onClearAll &&
201
237
  prevProps.onRefresh === nextProps.onRefresh &&
202
238
  prevProps.onPageChange === nextProps.onPageChange &&
203
239
  prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
204
- prevProps.onApplyFilters === nextProps.onApplyFilters);
240
+ prevProps.onApplyFilters === nextProps.onApplyFilters &&
241
+ prevProps.onSearchChange === nextProps.onSearchChange);
205
242
  };
206
243
  // Export s React.memo pro optimalizaci re-renderů
207
244
  export default React.memo(FilterPanel, areEqual);
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/index.jsx CHANGED
@@ -1,395 +1,473 @@
1
- /* eslint-disable */
2
- import React, { useState, useCallback, useMemo } from 'react';
3
- import { Tag, Space, Button, Spin, Pagination, Row, Col, Input, Select, Radio } from 'antd';
4
- import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled } from '@ant-design/icons';
5
- import { filterCondition } from '@bit.rhplus/ui2.filter';
6
- import {
7
- buildValueLabelsMap,
8
- buildFieldLabelsMap,
9
- normalizeFilterValueForBackend,
10
- throttle,
11
- formatFilterValue,
12
- debounce
13
- } from './filterHelpers';
14
-
15
- // Re-export pro externí použití
16
- export {
17
- buildValueLabelsMap,
18
- buildFieldLabelsMap,
19
- normalizeFilterValueForBackend,
20
- throttle,
21
- formatFilterValue,
22
- debounce
23
- } from './filterHelpers';
24
-
25
- // Konstanty extrahované mimo komponentu pro stabilní references
26
- const conditionLabels = {
27
- [filterCondition.equals]: 'je',
28
- [filterCondition.notEquals]: 'není',
29
- [filterCondition.greaterThan]: 'větší',
30
- [filterCondition.greaterThanOrEqual]: 'větší nebo rovno',
31
- [filterCondition.lessThan]: 'menší',
32
- [filterCondition.lessThanOrEqual]: 'menší nebo rovno',
33
- [filterCondition.contains]: 'obsahuje',
34
- [filterCondition.startsWith]: 'začíná na',
35
- [filterCondition.endsWith]: 'končí na',
36
- [filterCondition.isNull]: 'je prázdné',
37
- [filterCondition.isNotNull]: 'není prázdné',
38
- [filterCondition.in]: 'obsahuje',
39
- [filterCondition.notIn]: 'neobsahuje',
40
- };
41
-
42
- // Konstantní loading ikona
43
- const LOADING_ICON = <LoadingOutlined style={{ fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }} spin />;
44
-
45
- const FilterPanel = ({
46
- filters = [],
47
- onRemoveFilter,
48
- onClearAll,
49
- onRefresh,
50
- fieldLabels = {},
51
- valueLabelsMap = {},
52
- alwaysVisible = false,
53
- isLoading = false,
54
- current = 1,
55
- pageSize = 100,
56
- total = 0,
57
- pageSizeOptions = ['100', '200', '300', '500', '1000'],
58
- onPageChange,
59
- onPageSizeChange,
60
- showPagination = true,
61
- filterFields = [],
62
- onApplyFilters,
63
- initialFilterValues = {},
64
- accessToken,
65
- }) => {
66
- const [expanded, setExpanded] = useState(false);
67
- const [filterValues, setFilterValues] = useState(initialFilterValues);
68
- const [moduleLabels, setModuleLabels] = useState({});
69
-
70
- // Memoizované hodnoty pro optimalizaci
71
- const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
72
- const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
73
-
74
- // Early return pokud není co zobrazit
75
- if (!alwaysVisible && !hasFilters) {
76
- return null;
77
- }
78
-
79
- const handleFieldChange = useCallback((fieldKey, value, displayValue) => {
80
- setFilterValues(prev => ({
81
- ...prev,
82
- [fieldKey]: value
83
- }));
84
-
85
- if (displayValue !== undefined) {
86
- setModuleLabels(prev => ({
87
- ...prev,
88
- [fieldKey]: displayValue
89
- }));
90
- }
91
- }, []);
92
-
93
- const handleApplyFilters = useCallback(() => {
94
- const appliedFilters = filterFields
95
- .filter(field => {
96
- const fieldKey = `${field.field}_${field.condition}`;
97
- const value = filterValues[fieldKey];
98
- if (Array.isArray(value)) {
99
- return value.length > 0;
100
- }
101
- return value !== undefined && value !== '' && value !== null;
102
- })
103
- .map(field => {
104
- const fieldKey = `${field.field}_${field.condition}`;
105
- const value = filterValues[fieldKey];
106
- return {
107
- field: field.field,
108
- condition: field.condition,
109
- value: value,
110
- label: field.label
111
- };
112
- });
113
-
114
- if (onApplyFilters) {
115
- onApplyFilters(appliedFilters);
116
- }
117
-
118
- setExpanded(false);
119
- }, [filterFields, filterValues, onApplyFilters]);
120
-
121
- const handleRefreshOrFilter = useCallback(() => {
122
- if (expanded) {
123
- handleApplyFilters();
124
- } else {
125
- onRefresh();
126
- }
127
- }, [expanded, handleApplyFilters, onRefresh]);
128
-
129
- const renderField = useCallback((field) => {
130
- const fieldKey = `${field.field}_${field.condition}`;
131
-
132
- if (field.type === 'select') {
133
- return (
134
- <Select
135
- placeholder={`Vyber ${field.label}`}
136
- allowClear
137
- value={filterValues[fieldKey]}
138
- onChange={(value) => handleFieldChange(fieldKey, value)}
139
- options={field.options}
140
- style={{ width: '100%' }}
141
- getPopupContainer={() => document.body}
142
- dropdownStyle={{ zIndex: 9999 }}
143
- />
144
- );
145
- }
146
-
147
- if (field.type === 'date') {
148
- return (
149
- <Input
150
- type="date"
151
- placeholder={field.label}
152
- value={filterValues[fieldKey] || ''}
153
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
154
- />
155
- );
156
- }
157
-
158
- if (field.type === 'radio') {
159
- return (
160
- <Radio.Group
161
- value={filterValues[fieldKey]}
162
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
163
- options={field.options}
164
- />
165
- );
166
- }
167
-
168
- if (field.type === 'module' && field.component) {
169
- const ModuleComponent = field.component;
170
- return (
171
- <ModuleComponent
172
- value={filterValues[fieldKey]}
173
- onChange={(value, selectedItem) => {
174
- let displayValue = value;
175
- if (selectedItem && field.moduleDefinition) {
176
- const labelField = field.moduleDefinition.labelField || 'name';
177
- displayValue = selectedItem[labelField] || field.moduleDefinition.getDisplayValue?.(selectedItem) || value;
178
- }
179
- handleFieldChange(fieldKey, value, displayValue);
180
- }}
181
- placeholder={`Vyber ${field.label}`}
182
- accessToken={accessToken}
183
- />
184
- );
185
- }
186
-
187
- return (
188
- <Input
189
- placeholder={`Zadej ${field.label}`}
190
- allowClear
191
- value={filterValues[fieldKey] || ''}
192
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
193
- />
194
- );
195
- }, [filterValues, handleFieldChange, accessToken]);
196
-
197
- return (
198
- <div style={{ position: 'relative', zIndex: 10 }}>
199
- <div
200
- style={{
201
- display: 'flex',
202
- justifyContent: 'space-between',
203
- alignItems: 'center',
204
- padding: '7px 0px 7px 7px',
205
- borderRadius: '4px',
206
- backgroundColor: '#fafafa',
207
- borderTop: '1px solid #f0f0f0',
208
- }}
209
- >
210
- <Space style={{ lineHeight: 'normal', flexWrap: 'wrap' }} size={[8, 8]}>
211
- {hasFilterFields && (
212
- <Button
213
- type="text"
214
- size="small"
215
- icon={
216
- <DownOutlined
217
- style={{
218
- transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
219
- transition: 'transform 0.3s ease'
220
- }}
221
- />
222
- }
223
- onClick={() => setExpanded(!expanded)}
224
- style={{
225
- color: '#1890ff',
226
- padding: '0 4px',
227
- height: '22px',
228
- minWidth: '22px'
229
- }}
230
- />
231
- )}
232
- <Button
233
- type="text"
234
- size="small"
235
- icon={isLoading ? <Spin indicator={LOADING_ICON} /> : (expanded ? <FilterFilled /> : <ReloadOutlined />)}
236
- onClick={handleRefreshOrFilter}
237
- disabled={isLoading}
238
- style={{
239
- color: '#1890ff',
240
- padding: '0 4px',
241
- height: '22px',
242
- minWidth: '22px'
243
- }}
244
- />
245
- {hasFilters ? (
246
- filters.map((filter, index) => {
247
- const fieldLabel = filter.label || fieldLabels[filter.field] || filter.field;
248
- const conditionLabel = conditionLabels[filter.condition] || 'filtr';
249
- const fieldKey = `${filter.field}_${filter.condition}`;
250
- const valueLabel = formatFilterValue(filter.value, filter.field, valueLabelsMap, moduleLabels, fieldKey);
251
-
252
- const displayText = filter.text || (valueLabel
253
- ? `${fieldLabel} ${conditionLabel} (${valueLabel})`
254
- : `${fieldLabel} ${conditionLabel}`);
255
-
256
- return (
257
- <Tag
258
- key={`${filter.field}-${index}`}
259
- closable
260
- onClose={(e) => {
261
- e.preventDefault();
262
- if (onRemoveFilter) {
263
- onRemoveFilter(index);
264
- }
265
- }}
266
- style={{
267
- backgroundColor: '#e6f7ff',
268
- borderColor: '#91d5ff',
269
- color: '#0050b3',
270
- fontSize: '13px',
271
- padding: '2px 8px',
272
- margin: 0,
273
- }}
274
- >
275
- {displayText}
276
- </Tag>
277
- );
278
- })
279
- ) : (
280
- <span style={{ color: '#999', fontSize: '13px' }}>Žádné aktivní filtry</span>
281
- )}
282
- </Space>
283
-
284
- <Space style={{ lineHeight: 'normal', paddingRight: '7px' }} size={[16, 8]}>
285
- {hasFilters && onClearAll && (
286
- <Button
287
- type="link"
288
- size="small"
289
- onClick={onClearAll}
290
- style={{ color: '#999' }}
291
- >
292
- Vymazat vše
293
- </Button>
294
- )}
295
- {showPagination && (
296
- <Pagination
297
- size="small"
298
- current={current}
299
- pageSize={pageSize}
300
- total={total}
301
- pageSizeOptions={pageSizeOptions}
302
- showSizeChanger
303
- showQuickJumper
304
- showTotal={(total, range) => `${range[0]}-${range[1]} z ${total}`}
305
- onChange={onPageChange}
306
- onShowSizeChange={(current, size) => {
307
- if (onPageSizeChange) {
308
- onPageSizeChange(current, size);
309
- }
310
- }}
311
- style={{ marginBottom: 0 }}
312
- />
313
- )}
314
- </Space>
315
- </div>
316
-
317
- <div
318
- style={{
319
- maxHeight: expanded ? '500px' : '0px',
320
- overflow: 'hidden',
321
- transition: 'max-height 0.3s ease-in-out',
322
- position: 'relative',
323
- zIndex: 100,
324
- }}
325
- >
326
- <div
327
- style={{
328
- padding: '16px',
329
- backgroundColor: '#f5f5f5',
330
- borderTop: '1px solid #f0f0f0',
331
- borderBottom: '1px solid #f0f0f0',
332
- }}
333
- >
334
- <div style={{
335
- display: 'flex',
336
- flexDirection: 'row',
337
- flexWrap: 'wrap',
338
- gap: '16px',
339
- alignItems: 'flex-start'
340
- }}>
341
- {filterFields.map((field) => {
342
- const fieldKey = `${field.field}_${field.condition}`;
343
- return (
344
- <div key={fieldKey} style={{ display: 'flex', alignItems: 'center', gap: '12px', width: '287px' }}>
345
- <div style={{
346
- width: '100px',
347
- fontWeight: '500',
348
- fontSize: '13px',
349
- color: '#333',
350
- textAlign: 'right',
351
- flexShrink: 0
352
- }}>
353
- {field.label}:
354
- </div>
355
- <div style={{ width: '175px' }}>
356
- {renderField(field)}
357
- </div>
358
- </div>
359
- );
360
- })}
361
- </div>
362
- </div>
363
- </div>
364
- </div>
365
- );
366
- };
367
-
368
- // Custom comparison funkce pro React.memo
369
- const areEqual = (prevProps, nextProps) => {
370
- return (
371
- prevProps.filters === nextProps.filters &&
372
- prevProps.isLoading === nextProps.isLoading &&
373
- prevProps.current === nextProps.current &&
374
- prevProps.pageSize === nextProps.pageSize &&
375
- prevProps.total === nextProps.total &&
376
- prevProps.alwaysVisible === nextProps.alwaysVisible &&
377
- prevProps.showPagination === nextProps.showPagination &&
378
- prevProps.fieldLabels === nextProps.fieldLabels &&
379
- prevProps.valueLabelsMap === nextProps.valueLabelsMap &&
380
- prevProps.filterFields === nextProps.filterFields &&
381
- prevProps.initialFilterValues === nextProps.initialFilterValues &&
382
- prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
383
- prevProps.accessToken === nextProps.accessToken &&
384
- // Callback props
385
- prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
386
- prevProps.onClearAll === nextProps.onClearAll &&
387
- prevProps.onRefresh === nextProps.onRefresh &&
388
- prevProps.onPageChange === nextProps.onPageChange &&
389
- prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
390
- prevProps.onApplyFilters === nextProps.onApplyFilters
391
- );
392
- };
393
-
394
- // Export s React.memo pro optimalizaci re-renderů
395
- export default React.memo(FilterPanel, areEqual);
1
+ /* eslint-disable */
2
+ import React, { useState, useCallback, useMemo, useRef } from 'react';
3
+ import { Tag, Space, Button, Spin, Pagination, Row, Col, Input, Select, Radio } from 'antd';
4
+ import { CloseOutlined, FilterOutlined, LoadingOutlined, ReloadOutlined, DownOutlined, FilterFilled, SearchOutlined } from '@ant-design/icons';
5
+ import { filterCondition } from '@bit.rhplus/ui2.filter';
6
+ import AIButton from '@bit.rhplus/ui2.ai-button';
7
+ import AIChatWindow from '@bit.rhplus/ui2.ai-chat-window';
8
+ import {
9
+ buildValueLabelsMap,
10
+ buildFieldLabelsMap,
11
+ normalizeFilterValueForBackend,
12
+ throttle,
13
+ formatFilterValue,
14
+ debounce
15
+ } from './filterHelpers';
16
+
17
+ // Re-export pro externí použití
18
+ export {
19
+ buildValueLabelsMap,
20
+ buildFieldLabelsMap,
21
+ normalizeFilterValueForBackend,
22
+ throttle,
23
+ formatFilterValue,
24
+ debounce
25
+ } from './filterHelpers';
26
+
27
+ // Konstanty extrahované mimo komponentu pro stabilní references
28
+ const conditionLabels = {
29
+ [filterCondition.equals]: 'je',
30
+ [filterCondition.notEquals]: 'není',
31
+ [filterCondition.greaterThan]: 'větší',
32
+ [filterCondition.greaterThanOrEqual]: 'větší nebo rovno',
33
+ [filterCondition.lessThan]: 'menší',
34
+ [filterCondition.lessThanOrEqual]: 'menší nebo rovno',
35
+ [filterCondition.contains]: 'obsahuje',
36
+ [filterCondition.startsWith]: 'začíná na',
37
+ [filterCondition.endsWith]: 'končí na',
38
+ [filterCondition.isNull]: 'je prázdné',
39
+ [filterCondition.isNotNull]: 'není prázdné',
40
+ [filterCondition.in]: 'obsahuje',
41
+ [filterCondition.notIn]: 'neobsahuje',
42
+ };
43
+
44
+ // Konstantní loading ikona
45
+ const LOADING_ICON = <LoadingOutlined style={{ fontSize: 18, color: '#1890ff', fontWeight: 900, strokeWidth: 4 }} spin />;
46
+
47
+ const FilterPanel = ({
48
+ filters = [],
49
+ onRemoveFilter,
50
+ onClearAll,
51
+ onRefresh,
52
+ fieldLabels = {},
53
+ valueLabelsMap = {},
54
+ alwaysVisible = false,
55
+ isLoading = false,
56
+ current = 1,
57
+ pageSize = 100,
58
+ total = 0,
59
+ pageSizeOptions = ['100', '200', '300', '500', '1000'],
60
+ onPageChange,
61
+ onPageSizeChange,
62
+ showPagination = true,
63
+ filterFields = [],
64
+ onApplyFilters,
65
+ initialFilterValues = {},
66
+ accessToken,
67
+ searchValue = '',
68
+ onSearchChange,
69
+ searchPlaceholder = 'Vyhledat...',
70
+ showAIButton = false,
71
+ }) => {
72
+ const [expanded, setExpanded] = useState(false);
73
+ const [filterValues, setFilterValues] = useState(initialFilterValues);
74
+ const [moduleLabels, setModuleLabels] = useState({});
75
+ const [chatOpen, setChatOpen] = useState(false);
76
+ const [chatMessages, setChatMessages] = useState([]);
77
+ const [isAITyping, setIsAITyping] = useState(false);
78
+ const aiButtonRef = useRef(null);
79
+
80
+ // Memoizované hodnoty pro optimalizaci
81
+ const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
82
+ const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
83
+
84
+ // Early return pokud není co zobrazit
85
+ if (!alwaysVisible && !hasFilters) {
86
+ return null;
87
+ }
88
+
89
+ const handleFieldChange = useCallback((fieldKey, value, displayValue) => {
90
+ setFilterValues(prev => ({
91
+ ...prev,
92
+ [fieldKey]: value
93
+ }));
94
+
95
+ if (displayValue !== undefined) {
96
+ setModuleLabels(prev => ({
97
+ ...prev,
98
+ [fieldKey]: displayValue
99
+ }));
100
+ }
101
+ }, []);
102
+
103
+ const handleApplyFilters = useCallback(() => {
104
+ const appliedFilters = filterFields
105
+ .filter(field => {
106
+ const fieldKey = `${field.field}_${field.condition}`;
107
+ const value = filterValues[fieldKey];
108
+ if (Array.isArray(value)) {
109
+ return value.length > 0;
110
+ }
111
+ return value !== undefined && value !== '' && value !== null;
112
+ })
113
+ .map(field => {
114
+ const fieldKey = `${field.field}_${field.condition}`;
115
+ const value = filterValues[fieldKey];
116
+ return {
117
+ field: field.field,
118
+ condition: field.condition,
119
+ value: value,
120
+ label: field.label
121
+ };
122
+ });
123
+
124
+ if (onApplyFilters) {
125
+ onApplyFilters(appliedFilters);
126
+ }
127
+
128
+ setExpanded(false);
129
+ }, [filterFields, filterValues, onApplyFilters]);
130
+
131
+ const handleRefreshOrFilter = useCallback(() => {
132
+ if (expanded) {
133
+ handleApplyFilters();
134
+ } else {
135
+ onRefresh();
136
+ }
137
+ }, [expanded, handleApplyFilters, onRefresh]);
138
+
139
+ const handleAIButtonClick = useCallback(() => {
140
+ setChatOpen(prev => !prev);
141
+ }, []);
142
+
143
+ const handleSendMessage = useCallback((text) => {
144
+ // Přidat user zprávu
145
+ const userMessage = {
146
+ text,
147
+ sender: 'user',
148
+ timestamp: new Date(),
149
+ userName: 'User', // TODO: získat z context/auth
150
+ };
151
+
152
+ setChatMessages(prev => [...prev, userMessage]);
153
+
154
+ // Simulovat AI odpověď (TODO: připojit backend API)
155
+ setIsAITyping(true);
156
+ setTimeout(() => {
157
+ const aiMessage = {
158
+ text: `Obdržel jsem vaši zprávu: "${text}". Toto je testovací odpověď. V budoucnu zde bude AI asistent.`,
159
+ sender: 'ai',
160
+ timestamp: new Date(),
161
+ };
162
+ setChatMessages(prev => [...prev, aiMessage]);
163
+ setIsAITyping(false);
164
+ }, 1500);
165
+ }, []);
166
+
167
+ const handleCloseChat = useCallback(() => {
168
+ setChatOpen(false);
169
+ }, []);
170
+
171
+ const renderField = useCallback((field) => {
172
+ const fieldKey = `${field.field}_${field.condition}`;
173
+
174
+ if (field.type === 'select') {
175
+ return (
176
+ <Select
177
+ placeholder={`Vyber ${field.label}`}
178
+ allowClear
179
+ value={filterValues[fieldKey]}
180
+ onChange={(value) => handleFieldChange(fieldKey, value)}
181
+ options={field.options}
182
+ style={{ width: '100%' }}
183
+ getPopupContainer={() => document.body}
184
+ dropdownStyle={{ zIndex: 9999 }}
185
+ />
186
+ );
187
+ }
188
+
189
+ if (field.type === 'date') {
190
+ return (
191
+ <Input
192
+ type="date"
193
+ placeholder={field.label}
194
+ value={filterValues[fieldKey] || ''}
195
+ onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
196
+ />
197
+ );
198
+ }
199
+
200
+ if (field.type === 'radio') {
201
+ return (
202
+ <Radio.Group
203
+ value={filterValues[fieldKey]}
204
+ onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
205
+ options={field.options}
206
+ />
207
+ );
208
+ }
209
+
210
+ if (field.type === 'module' && field.component) {
211
+ const ModuleComponent = field.component;
212
+ return (
213
+ <ModuleComponent
214
+ value={filterValues[fieldKey]}
215
+ onChange={(value, selectedItem) => {
216
+ let displayValue = value;
217
+ if (selectedItem && field.moduleDefinition) {
218
+ const labelField = field.moduleDefinition.labelField || 'name';
219
+ displayValue = selectedItem[labelField] || field.moduleDefinition.getDisplayValue?.(selectedItem) || value;
220
+ }
221
+ handleFieldChange(fieldKey, value, displayValue);
222
+ }}
223
+ placeholder={`Vyber ${field.label}`}
224
+ accessToken={accessToken}
225
+ />
226
+ );
227
+ }
228
+
229
+ return (
230
+ <Input
231
+ placeholder={`Zadej ${field.label}`}
232
+ allowClear
233
+ value={filterValues[fieldKey] || ''}
234
+ onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
235
+ />
236
+ );
237
+ }, [filterValues, handleFieldChange, accessToken]);
238
+
239
+ return (
240
+ <div style={{ position: 'relative', zIndex: 10 }}>
241
+ <div
242
+ style={{
243
+ display: 'flex',
244
+ justifyContent: 'space-between',
245
+ alignItems: 'center',
246
+ padding: '7px 0px 7px 7px',
247
+ borderRadius: '4px',
248
+ backgroundColor: '#f5f7fb',
249
+ borderTop: '1px solid #f0f0f0',
250
+ }}
251
+ >
252
+ <Space style={{ lineHeight: 'normal', flexWrap: 'wrap' }} size={[8, 8]}>
253
+ {onSearchChange && (
254
+ <Input
255
+ prefix={<SearchOutlined style={{ color: '#999' }} />}
256
+ placeholder={searchPlaceholder}
257
+ value={searchValue}
258
+ onChange={(e) => onSearchChange(e.target.value)}
259
+ allowClear
260
+ style={{ width: '250px', height: '28px' }}
261
+ />
262
+ )}
263
+ {hasFilterFields && (
264
+ <Button
265
+ type="text"
266
+ size="small"
267
+ icon={
268
+ <DownOutlined
269
+ style={{
270
+ transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
271
+ transition: 'transform 0.3s ease'
272
+ }}
273
+ />
274
+ }
275
+ onClick={() => setExpanded(!expanded)}
276
+ style={{
277
+ color: '#1890ff',
278
+ padding: '0 4px',
279
+ height: '22px',
280
+ minWidth: '22px'
281
+ }}
282
+ />
283
+ )}
284
+ <Button
285
+ type="text"
286
+ size="small"
287
+ icon={isLoading ? <Spin indicator={LOADING_ICON} /> : (expanded ? <FilterFilled /> : <ReloadOutlined />)}
288
+ onClick={handleRefreshOrFilter}
289
+ disabled={isLoading}
290
+ style={{
291
+ color: '#1890ff',
292
+ padding: '0 4px',
293
+ height: '22px',
294
+ minWidth: '22px'
295
+ }}
296
+ />
297
+ {hasFilters ? (
298
+ filters.map((filter, index) => {
299
+ const fieldLabel = filter.label || fieldLabels[filter.field] || filter.field;
300
+ const conditionLabel = conditionLabels[filter.condition] || 'filtr';
301
+ const fieldKey = `${filter.field}_${filter.condition}`;
302
+ const valueLabel = formatFilterValue(filter.value, filter.field, valueLabelsMap, moduleLabels, fieldKey);
303
+
304
+ const displayText = filter.text || (valueLabel
305
+ ? `${fieldLabel} ${conditionLabel} (${valueLabel})`
306
+ : `${fieldLabel} ${conditionLabel}`);
307
+
308
+ return (
309
+ <Tag
310
+ key={`${filter.field}-${index}`}
311
+ closable
312
+ onClose={(e) => {
313
+ e.preventDefault();
314
+ if (onRemoveFilter) {
315
+ onRemoveFilter(index);
316
+ }
317
+ }}
318
+ style={{
319
+ backgroundColor: '#e6f7ff',
320
+ borderColor: '#91d5ff',
321
+ color: '#0050b3',
322
+ fontSize: '13px',
323
+ padding: '2px 8px',
324
+ margin: 0,
325
+ }}
326
+ >
327
+ {displayText}
328
+ </Tag>
329
+ );
330
+ })
331
+ ) : (
332
+ <span style={{ color: '#999', fontSize: '13px' }}>Žádné aktivní filtry</span>
333
+ )}
334
+ </Space>
335
+
336
+ <Space style={{ lineHeight: 'normal', paddingRight: '7px' }} size={[16, 8]}>
337
+ {hasFilters && onClearAll && (
338
+ <Button
339
+ type="link"
340
+ size="small"
341
+ onClick={onClearAll}
342
+ style={{ color: '#999' }}
343
+ >
344
+ Vymazat vše
345
+ </Button>
346
+ )}
347
+ {showAIButton && (
348
+ <AIButton
349
+ ref={aiButtonRef}
350
+ label="AI"
351
+ onClick={handleAIButtonClick}
352
+ size="32px"
353
+ ring="5px"
354
+ style={{ flexShrink: 0 }}
355
+ />
356
+ )}
357
+ {showPagination && (
358
+ <Pagination
359
+ size="small"
360
+ current={current}
361
+ pageSize={pageSize}
362
+ total={total}
363
+ pageSizeOptions={pageSizeOptions}
364
+ showSizeChanger
365
+ showQuickJumper
366
+ showTotal={(total, range) => `${range[0]}-${range[1]} z ${total}`}
367
+ onChange={onPageChange}
368
+ onShowSizeChange={(current, size) => {
369
+ if (onPageSizeChange) {
370
+ onPageSizeChange(current, size);
371
+ }
372
+ }}
373
+ style={{ marginBottom: 0 }}
374
+ />
375
+ )}
376
+ </Space>
377
+ </div>
378
+
379
+ <div
380
+ style={{
381
+ maxHeight: expanded ? '500px' : '0px',
382
+ overflow: 'hidden',
383
+ transition: 'max-height 0.3s ease-in-out',
384
+ position: 'relative',
385
+ zIndex: 100,
386
+ }}
387
+ >
388
+ <div
389
+ style={{
390
+ padding: '16px',
391
+ backgroundColor: '#f5f5f5',
392
+ borderTop: '1px solid #f0f0f0',
393
+ borderBottom: '1px solid #f0f0f0',
394
+ }}
395
+ >
396
+ <div style={{
397
+ display: 'flex',
398
+ flexDirection: 'row',
399
+ flexWrap: 'wrap',
400
+ gap: '16px',
401
+ alignItems: 'flex-start'
402
+ }}>
403
+ {filterFields.map((field) => {
404
+ const fieldKey = `${field.field}_${field.condition}`;
405
+ return (
406
+ <div key={fieldKey} style={{ display: 'flex', alignItems: 'center', gap: '12px', width: '287px' }}>
407
+ <div style={{
408
+ width: '100px',
409
+ fontWeight: '500',
410
+ fontSize: '13px',
411
+ color: '#333',
412
+ textAlign: 'right',
413
+ flexShrink: 0
414
+ }}>
415
+ {field.label}:
416
+ </div>
417
+ <div style={{ width: '175px' }}>
418
+ {renderField(field)}
419
+ </div>
420
+ </div>
421
+ );
422
+ })}
423
+ </div>
424
+ </div>
425
+ </div>
426
+
427
+ {/* AI Chat Window */}
428
+ {showAIButton && (
429
+ <AIChatWindow
430
+ open={chatOpen}
431
+ onClose={handleCloseChat}
432
+ buttonRef={aiButtonRef}
433
+ onSendMessage={handleSendMessage}
434
+ messages={chatMessages}
435
+ isTyping={isAITyping}
436
+ />
437
+ )}
438
+ </div>
439
+ );
440
+ };
441
+
442
+ // Custom comparison funkce pro React.memo
443
+ const areEqual = (prevProps, nextProps) => {
444
+ return (
445
+ prevProps.filters === nextProps.filters &&
446
+ prevProps.isLoading === nextProps.isLoading &&
447
+ prevProps.current === nextProps.current &&
448
+ prevProps.pageSize === nextProps.pageSize &&
449
+ prevProps.total === nextProps.total &&
450
+ prevProps.alwaysVisible === nextProps.alwaysVisible &&
451
+ prevProps.showPagination === nextProps.showPagination &&
452
+ prevProps.fieldLabels === nextProps.fieldLabels &&
453
+ prevProps.valueLabelsMap === nextProps.valueLabelsMap &&
454
+ prevProps.filterFields === nextProps.filterFields &&
455
+ prevProps.initialFilterValues === nextProps.initialFilterValues &&
456
+ prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
457
+ prevProps.accessToken === nextProps.accessToken &&
458
+ prevProps.searchValue === nextProps.searchValue &&
459
+ prevProps.searchPlaceholder === nextProps.searchPlaceholder &&
460
+ prevProps.showAIButton === nextProps.showAIButton &&
461
+ // Callback props
462
+ prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
463
+ prevProps.onClearAll === nextProps.onClearAll &&
464
+ prevProps.onRefresh === nextProps.onRefresh &&
465
+ prevProps.onPageChange === nextProps.onPageChange &&
466
+ prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
467
+ prevProps.onApplyFilters === nextProps.onApplyFilters &&
468
+ prevProps.onSearchChange === nextProps.onSearchChange
469
+ );
470
+ };
471
+
472
+ // Export s React.memo pro optimalizaci re-renderů
473
+ export default React.memo(FilterPanel, areEqual);
package/package.json CHANGED
@@ -1,16 +1,18 @@
1
1
  {
2
2
  "name": "@bit.rhplus/ui2.filter-panel",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
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"
9
+ "version": "0.0.11"
10
10
  },
11
11
  "dependencies": {
12
12
  "@ant-design/icons": "^5.4.0",
13
13
  "antd": "^5.20.6",
14
+ "@bit.rhplus/ui2.ai-button": "0.0.1",
15
+ "@bit.rhplus/ui2.ai-chat-window": "0.0.1",
14
16
  "@bit.rhplus/ui2.filter": "0.0.2"
15
17
  },
16
18
  "devDependencies": {