@bit.rhplus/ui2.filter-panel 0.0.10 → 0.0.12

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, searchValue, onSearchChange, searchPlaceholder, }: {
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;
@@ -21,6 +21,7 @@ declare const _default: React.MemoExoticComponent<({ filters, onRemoveFilter, on
21
21
  searchValue?: string | undefined;
22
22
  onSearchChange: any;
23
23
  searchPlaceholder?: string | undefined;
24
+ showAIButton?: boolean | undefined;
24
25
  }) => import("react/jsx-runtime").JSX.Element | null>;
25
26
  export default _default;
26
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
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, searchValue = '', onSearchChange, searchPlaceholder = 'Vyhledat...', }) => {
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') {
@@ -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) => {
@@ -197,6 +230,7 @@ const areEqual = (prevProps, nextProps) => {
197
230
  prevProps.accessToken === nextProps.accessToken &&
198
231
  prevProps.searchValue === nextProps.searchValue &&
199
232
  prevProps.searchPlaceholder === nextProps.searchPlaceholder &&
233
+ prevProps.showAIButton === nextProps.showAIButton &&
200
234
  // Callback props
201
235
  prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
202
236
  prevProps.onClearAll === nextProps.onClearAll &&
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/I,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,8BAA8B,EAC9B,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACT,MAAM,iBAAiB,CAAC;AAEzB,gCAAgC;AAChC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,8BAA8B,EAC9B,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACT,MAAM,iBAAiB,CAAC;AAEzB,gEAAgE;AAChE,MAAM,eAAe,GAAG;IACtB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI;IAC9B,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM;IACnC,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,OAAO;IACtC,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,kBAAkB;IACxD,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO;IACnC,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,kBAAkB;IACrD,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,UAAU;IACtC,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,WAAW;IACzC,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,UAAU;IACtC,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY;IACtC,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,cAAc;IAC3C,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,UAAU;IAChC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,YAAY;CACtC,CAAC;AAEF,2BAA2B;AAC3B,MAAM,YAAY,GAAG,KAAC,eAAe,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,IAAI,SAAG,CAAC;AAE1H,MAAM,WAAW,GAAG,CAAC,EACnB,OAAO,GAAG,EAAE,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,GAAG,EAAE,EAChB,cAAc,GAAG,EAAE,EACnB,aAAa,GAAG,KAAK,EACrB,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,GAAG,EACd,KAAK,GAAG,CAAC,EACT,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EACtD,YAAY,EACZ,gBAAgB,EAChB,cAAc,GAAG,IAAI,EACrB,YAAY,GAAG,EAAE,EACjB,cAAc,EACd,mBAAmB,GAAG,EAAE,EACxB,WAAW,EACX,WAAW,GAAG,EAAE,EAChB,cAAc,EACd,iBAAiB,GAAG,aAAa,GAClC,EAAE,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAErD,uCAAuC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAE/F,sCAAsC;IACtC,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;QACtE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,GAAG,IAAI;YACP,CAAC,QAAQ,CAAC,EAAE,KAAK;SAClB,CAAC,CAAC,CAAC;QAEJ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,GAAG,IAAI;gBACP,CAAC,QAAQ,CAAC,EAAE,YAAY;aACzB,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,MAAM,cAAc,GAAG,YAAY;aAChC,MAAM,CAAC,KAAK,CAAC,EAAE;YACd,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC;QAC/D,CAAC,CAAC;aACD,GAAG,CAAC,KAAK,CAAC,EAAE;YACX,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjD,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,kBAAkB,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAErD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CACL,KAAC,MAAM,IACL,WAAW,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,EACnC,UAAU,QACV,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EACvD,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,iBAAiB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EACtC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAC/B,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CACL,KAAC,KAAK,IACJ,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,KAAK,CAAC,KAAK,EACxB,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5D,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,CACL,KAAC,KAAK,CAAC,KAAK,IACV,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5D,OAAO,EAAE,KAAK,CAAC,OAAO,GACtB,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;YACxC,OAAO,CACL,KAAC,eAAe,IACd,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;oBAChC,IAAI,YAAY,GAAG,KAAK,CAAC;oBACzB,IAAI,YAAY,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;wBAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,IAAI,MAAM,CAAC;wBAC/D,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;oBAC7G,CAAC;oBACD,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;gBACnD,CAAC,EACD,WAAW,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,EACnC,WAAW,EAAE,WAAW,GACxB,CACH,CAAC;QACJ,CAAC;QAED,OAAO,CACL,KAAC,KAAK,IACJ,WAAW,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,EACnC,UAAU,QACV,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5D,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnD,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,aAC9C,eACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,cAAc,EAAE,eAAe;oBAC/B,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,iBAAiB;oBAC1B,YAAY,EAAE,KAAK;oBACnB,eAAe,EAAE,SAAS;oBAC1B,SAAS,EAAE,mBAAmB;iBAC/B,aAED,MAAC,KAAK,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,aACnE,cAAc,IAAI,CACjB,KAAC,KAAK,IACJ,MAAM,EAAE,KAAC,cAAc,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAI,EACpD,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,UAAU,QACV,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GACzC,CACH,EACA,eAAe,IAAI,CAClB,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,IAAI,EACF,KAAC,YAAY,IACX,KAAK,EAAE;wCACL,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc;wCACvD,UAAU,EAAE,qBAAqB;qCAClC,GACD,EAEJ,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EACrC,KAAK,EAAE;oCACL,KAAK,EAAE,SAAS;oCAChB,OAAO,EAAE,OAAO;oCAChB,MAAM,EAAE,MAAM;oCACd,QAAQ,EAAE,MAAM;iCACjB,GACD,CACH,EACD,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAE,YAAY,GAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,KAAC,cAAc,KAAG,CAAC,EACxG,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE;oCACL,KAAK,EAAE,SAAS;oCAChB,OAAO,EAAE,OAAO;oCAChB,MAAM,EAAE,MAAM;oCACd,QAAQ,EAAE,MAAM;iCACjB,GACD,EACH,UAAU,CAAC,CAAC,CAAC,CACZ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gCAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;gCAC7E,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC;gCACpE,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gCACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gCAEzG,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;oCAC5C,CAAC,CAAC,GAAG,UAAU,IAAI,cAAc,KAAK,UAAU,GAAG;oCACnD,CAAC,CAAC,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC,CAAC;gCAEvC,OAAO,CACL,KAAC,GAAG,IAEF,QAAQ,QACR,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wCACb,CAAC,CAAC,cAAc,EAAE,CAAC;wCACnB,IAAI,cAAc,EAAE,CAAC;4CACnB,cAAc,CAAC,KAAK,CAAC,CAAC;wCACxB,CAAC;oCACH,CAAC,EACD,KAAK,EAAE;wCACL,eAAe,EAAE,SAAS;wCAC1B,WAAW,EAAE,SAAS;wCACtB,KAAK,EAAE,SAAS;wCAChB,QAAQ,EAAE,MAAM;wCAChB,OAAO,EAAE,SAAS;wCAClB,MAAM,EAAE,CAAC;qCACV,YAEA,WAAW,IAjBP,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE,CAkB3B,CACP,CAAC;4BACJ,CAAC,CAAC,CACD,CAAC,CAAC,CAAC,CACF,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,yDAA6B,CAC9E,IACK,EAER,MAAC,KAAK,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,aACvE,UAAU,IAAI,UAAU,IAAI,CAC3B,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iCAGjB,CACV,EACA,cAAc,IAAI,CACjB,KAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,eAAe,EAChC,eAAe,QACf,eAAe,QACf,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,EACjE,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;oCAClC,IAAI,gBAAgB,EAAE,CAAC;wCACrB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oCAClC,CAAC;gCACH,CAAC,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,GAC1B,CACH,IACK,IACF,EAEN,cACE,KAAK,EAAE;oBACL,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;oBACrC,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,6BAA6B;oBACzC,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,GAAG;iBACZ,YAED,cACE,KAAK,EAAE;wBACL,OAAO,EAAE,MAAM;wBACf,eAAe,EAAE,SAAS;wBAC1B,SAAS,EAAE,mBAAmB;wBAC9B,YAAY,EAAE,mBAAmB;qBAClC,YAED,cAAK,KAAK,EAAE;4BACV,OAAO,EAAE,MAAM;4BACf,aAAa,EAAE,KAAK;4BACpB,QAAQ,EAAE,MAAM;4BAChB,GAAG,EAAE,MAAM;4BACX,UAAU,EAAE,YAAY;yBACzB,YACE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;4BAC1B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACrD,OAAO,CACL,eAAoB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,aAC/F,eAAK,KAAK,EAAE;4CACV,KAAK,EAAE,OAAO;4CACd,UAAU,EAAE,KAAK;4CACjB,QAAQ,EAAE,MAAM;4CAChB,KAAK,EAAE,MAAM;4CACb,SAAS,EAAE,OAAO;4CAClB,UAAU,EAAE,CAAC;yCACd,aACE,KAAK,CAAC,KAAK,SACR,EACN,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAC3B,WAAW,CAAC,KAAK,CAAC,GACf,KAbE,QAAQ,CAcZ,CACP,CAAC;wBACJ,CAAC,CAAC,GACE,GACF,GACF,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IACxC,OAAO,CACL,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO;QACvC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO;QACvC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QACzC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;QACnC,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa;QACnD,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc;QACrD,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc;QACrD,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY;QACjD,SAAS,CAAC,mBAAmB,KAAK,SAAS,CAAC,mBAAmB;QAC/D,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,eAAe;QACvD,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,iBAAiB,KAAK,SAAS,CAAC,iBAAiB;QAC3D,iBAAiB;QACjB,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc;QACrD,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU;QAC7C,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY;QACjD,SAAS,CAAC,gBAAgB,KAAK,SAAS,CAAC,gBAAgB;QACzD,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc;QACrD,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc,CACtD,CAAC;AACJ,CAAC,CAAC;AAEF,kDAAkD;AAClD,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
package/index.jsx CHANGED
@@ -1,411 +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, SearchOutlined } 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
- searchValue = '',
66
- onSearchChange,
67
- searchPlaceholder = 'Vyhledat...',
68
- }) => {
69
- const [expanded, setExpanded] = useState(false);
70
- const [filterValues, setFilterValues] = useState(initialFilterValues);
71
- const [moduleLabels, setModuleLabels] = useState({});
72
-
73
- // Memoizované hodnoty pro optimalizaci
74
- const hasFilters = useMemo(() => filters && filters.length > 0, [filters]);
75
- const hasFilterFields = useMemo(() => filterFields && filterFields.length > 0, [filterFields]);
76
-
77
- // Early return pokud není co zobrazit
78
- if (!alwaysVisible && !hasFilters) {
79
- return null;
80
- }
81
-
82
- const handleFieldChange = useCallback((fieldKey, value, displayValue) => {
83
- setFilterValues(prev => ({
84
- ...prev,
85
- [fieldKey]: value
86
- }));
87
-
88
- if (displayValue !== undefined) {
89
- setModuleLabels(prev => ({
90
- ...prev,
91
- [fieldKey]: displayValue
92
- }));
93
- }
94
- }, []);
95
-
96
- const handleApplyFilters = useCallback(() => {
97
- const appliedFilters = filterFields
98
- .filter(field => {
99
- const fieldKey = `${field.field}_${field.condition}`;
100
- const value = filterValues[fieldKey];
101
- if (Array.isArray(value)) {
102
- return value.length > 0;
103
- }
104
- return value !== undefined && value !== '' && value !== null;
105
- })
106
- .map(field => {
107
- const fieldKey = `${field.field}_${field.condition}`;
108
- const value = filterValues[fieldKey];
109
- return {
110
- field: field.field,
111
- condition: field.condition,
112
- value: value,
113
- label: field.label
114
- };
115
- });
116
-
117
- if (onApplyFilters) {
118
- onApplyFilters(appliedFilters);
119
- }
120
-
121
- setExpanded(false);
122
- }, [filterFields, filterValues, onApplyFilters]);
123
-
124
- const handleRefreshOrFilter = useCallback(() => {
125
- if (expanded) {
126
- handleApplyFilters();
127
- } else {
128
- onRefresh();
129
- }
130
- }, [expanded, handleApplyFilters, onRefresh]);
131
-
132
- const renderField = useCallback((field) => {
133
- const fieldKey = `${field.field}_${field.condition}`;
134
-
135
- if (field.type === 'select') {
136
- return (
137
- <Select
138
- placeholder={`Vyber ${field.label}`}
139
- allowClear
140
- value={filterValues[fieldKey]}
141
- onChange={(value) => handleFieldChange(fieldKey, value)}
142
- options={field.options}
143
- style={{ width: '100%' }}
144
- getPopupContainer={() => document.body}
145
- dropdownStyle={{ zIndex: 9999 }}
146
- />
147
- );
148
- }
149
-
150
- if (field.type === 'date') {
151
- return (
152
- <Input
153
- type="date"
154
- placeholder={field.label}
155
- value={filterValues[fieldKey] || ''}
156
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
157
- />
158
- );
159
- }
160
-
161
- if (field.type === 'radio') {
162
- return (
163
- <Radio.Group
164
- value={filterValues[fieldKey]}
165
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
166
- options={field.options}
167
- />
168
- );
169
- }
170
-
171
- if (field.type === 'module' && field.component) {
172
- const ModuleComponent = field.component;
173
- return (
174
- <ModuleComponent
175
- value={filterValues[fieldKey]}
176
- onChange={(value, selectedItem) => {
177
- let displayValue = value;
178
- if (selectedItem && field.moduleDefinition) {
179
- const labelField = field.moduleDefinition.labelField || 'name';
180
- displayValue = selectedItem[labelField] || field.moduleDefinition.getDisplayValue?.(selectedItem) || value;
181
- }
182
- handleFieldChange(fieldKey, value, displayValue);
183
- }}
184
- placeholder={`Vyber ${field.label}`}
185
- accessToken={accessToken}
186
- />
187
- );
188
- }
189
-
190
- return (
191
- <Input
192
- placeholder={`Zadej ${field.label}`}
193
- allowClear
194
- value={filterValues[fieldKey] || ''}
195
- onChange={(e) => handleFieldChange(fieldKey, e.target.value)}
196
- />
197
- );
198
- }, [filterValues, handleFieldChange, accessToken]);
199
-
200
- return (
201
- <div style={{ position: 'relative', zIndex: 10 }}>
202
- <div
203
- style={{
204
- display: 'flex',
205
- justifyContent: 'space-between',
206
- alignItems: 'center',
207
- padding: '7px 0px 7px 7px',
208
- borderRadius: '4px',
209
- backgroundColor: '#f5f7fb',
210
- borderTop: '1px solid #f0f0f0',
211
- }}
212
- >
213
- <Space style={{ lineHeight: 'normal', flexWrap: 'wrap' }} size={[8, 8]}>
214
- {onSearchChange && (
215
- <Input
216
- prefix={<SearchOutlined style={{ color: '#999' }} />}
217
- placeholder={searchPlaceholder}
218
- value={searchValue}
219
- onChange={(e) => onSearchChange(e.target.value)}
220
- allowClear
221
- style={{ width: '250px', height: '28px' }}
222
- />
223
- )}
224
- {hasFilterFields && (
225
- <Button
226
- type="text"
227
- size="small"
228
- icon={
229
- <DownOutlined
230
- style={{
231
- transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
232
- transition: 'transform 0.3s ease'
233
- }}
234
- />
235
- }
236
- onClick={() => setExpanded(!expanded)}
237
- style={{
238
- color: '#1890ff',
239
- padding: '0 4px',
240
- height: '22px',
241
- minWidth: '22px'
242
- }}
243
- />
244
- )}
245
- <Button
246
- type="text"
247
- size="small"
248
- icon={isLoading ? <Spin indicator={LOADING_ICON} /> : (expanded ? <FilterFilled /> : <ReloadOutlined />)}
249
- onClick={handleRefreshOrFilter}
250
- disabled={isLoading}
251
- style={{
252
- color: '#1890ff',
253
- padding: '0 4px',
254
- height: '22px',
255
- minWidth: '22px'
256
- }}
257
- />
258
- {hasFilters ? (
259
- filters.map((filter, index) => {
260
- const fieldLabel = filter.label || fieldLabels[filter.field] || filter.field;
261
- const conditionLabel = conditionLabels[filter.condition] || 'filtr';
262
- const fieldKey = `${filter.field}_${filter.condition}`;
263
- const valueLabel = formatFilterValue(filter.value, filter.field, valueLabelsMap, moduleLabels, fieldKey);
264
-
265
- const displayText = filter.text || (valueLabel
266
- ? `${fieldLabel} ${conditionLabel} (${valueLabel})`
267
- : `${fieldLabel} ${conditionLabel}`);
268
-
269
- return (
270
- <Tag
271
- key={`${filter.field}-${index}`}
272
- closable
273
- onClose={(e) => {
274
- e.preventDefault();
275
- if (onRemoveFilter) {
276
- onRemoveFilter(index);
277
- }
278
- }}
279
- style={{
280
- backgroundColor: '#e6f7ff',
281
- borderColor: '#91d5ff',
282
- color: '#0050b3',
283
- fontSize: '13px',
284
- padding: '2px 8px',
285
- margin: 0,
286
- }}
287
- >
288
- {displayText}
289
- </Tag>
290
- );
291
- })
292
- ) : (
293
- <span style={{ color: '#999', fontSize: '13px' }}>Žádné aktivní filtry</span>
294
- )}
295
- </Space>
296
-
297
- <Space style={{ lineHeight: 'normal', paddingRight: '7px' }} size={[16, 8]}>
298
- {hasFilters && onClearAll && (
299
- <Button
300
- type="link"
301
- size="small"
302
- onClick={onClearAll}
303
- style={{ color: '#999' }}
304
- >
305
- Vymazat vše
306
- </Button>
307
- )}
308
- {showPagination && (
309
- <Pagination
310
- size="small"
311
- current={current}
312
- pageSize={pageSize}
313
- total={total}
314
- pageSizeOptions={pageSizeOptions}
315
- showSizeChanger
316
- showQuickJumper
317
- showTotal={(total, range) => `${range[0]}-${range[1]} z ${total}`}
318
- onChange={onPageChange}
319
- onShowSizeChange={(current, size) => {
320
- if (onPageSizeChange) {
321
- onPageSizeChange(current, size);
322
- }
323
- }}
324
- style={{ marginBottom: 0 }}
325
- />
326
- )}
327
- </Space>
328
- </div>
329
-
330
- <div
331
- style={{
332
- maxHeight: expanded ? '500px' : '0px',
333
- overflow: 'hidden',
334
- transition: 'max-height 0.3s ease-in-out',
335
- position: 'relative',
336
- zIndex: 100,
337
- }}
338
- >
339
- <div
340
- style={{
341
- padding: '16px',
342
- backgroundColor: '#f5f5f5',
343
- borderTop: '1px solid #f0f0f0',
344
- borderBottom: '1px solid #f0f0f0',
345
- }}
346
- >
347
- <div style={{
348
- display: 'flex',
349
- flexDirection: 'row',
350
- flexWrap: 'wrap',
351
- gap: '16px',
352
- alignItems: 'flex-start'
353
- }}>
354
- {filterFields.map((field) => {
355
- const fieldKey = `${field.field}_${field.condition}`;
356
- return (
357
- <div key={fieldKey} style={{ display: 'flex', alignItems: 'center', gap: '12px', width: '287px' }}>
358
- <div style={{
359
- width: '100px',
360
- fontWeight: '500',
361
- fontSize: '13px',
362
- color: '#333',
363
- textAlign: 'right',
364
- flexShrink: 0
365
- }}>
366
- {field.label}:
367
- </div>
368
- <div style={{ width: '175px' }}>
369
- {renderField(field)}
370
- </div>
371
- </div>
372
- );
373
- })}
374
- </div>
375
- </div>
376
- </div>
377
- </div>
378
- );
379
- };
380
-
381
- // Custom comparison funkce pro React.memo
382
- const areEqual = (prevProps, nextProps) => {
383
- return (
384
- prevProps.filters === nextProps.filters &&
385
- prevProps.isLoading === nextProps.isLoading &&
386
- prevProps.current === nextProps.current &&
387
- prevProps.pageSize === nextProps.pageSize &&
388
- prevProps.total === nextProps.total &&
389
- prevProps.alwaysVisible === nextProps.alwaysVisible &&
390
- prevProps.showPagination === nextProps.showPagination &&
391
- prevProps.fieldLabels === nextProps.fieldLabels &&
392
- prevProps.valueLabelsMap === nextProps.valueLabelsMap &&
393
- prevProps.filterFields === nextProps.filterFields &&
394
- prevProps.initialFilterValues === nextProps.initialFilterValues &&
395
- prevProps.pageSizeOptions === nextProps.pageSizeOptions &&
396
- prevProps.accessToken === nextProps.accessToken &&
397
- prevProps.searchValue === nextProps.searchValue &&
398
- prevProps.searchPlaceholder === nextProps.searchPlaceholder &&
399
- // Callback props
400
- prevProps.onRemoveFilter === nextProps.onRemoveFilter &&
401
- prevProps.onClearAll === nextProps.onClearAll &&
402
- prevProps.onRefresh === nextProps.onRefresh &&
403
- prevProps.onPageChange === nextProps.onPageChange &&
404
- prevProps.onPageSizeChange === nextProps.onPageSizeChange &&
405
- prevProps.onApplyFilters === nextProps.onApplyFilters &&
406
- prevProps.onSearchChange === nextProps.onSearchChange
407
- );
408
- };
409
-
410
- // Export s React.memo pro optimalizaci re-renderů
411
- 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.10",
3
+ "version": "0.0.12",
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.10"
9
+ "version": "0.0.12"
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.2",
15
+ "@bit.rhplus/ui2.ai-chat-window": "0.0.1",
14
16
  "@bit.rhplus/ui2.filter": "0.0.2"
15
17
  },
16
18
  "devDependencies": {