@bit.rhplus/ui2.module-dropdown-list 0.0.1

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.
@@ -0,0 +1,232 @@
1
+ /* Obaluji všechny styly do .module-input-container pro lokální scope */
2
+ .module-input-container {
3
+ width: 100%;
4
+ position: relative;
5
+ }
6
+
7
+ /* Nový základní styl pro kontejner */
8
+ .module-input-container .simple-select-container {
9
+ display: flex;
10
+ width: 100%;
11
+ border-radius: 4px;
12
+ overflow: hidden;
13
+ }
14
+
15
+ /* Stylování select komponenty */
16
+ .module-input-container .simple-select {
17
+ flex: 1;
18
+ }
19
+
20
+ /* Odstraňuje výchozí okraje antd select */
21
+ .module-input-container .simple-select .ant-select-selector {
22
+ border-right: none !important;
23
+ border-top-right-radius: 0 !important;
24
+ border-bottom-right-radius: 0 !important;
25
+ }
26
+
27
+ /* Stylování tlačítka vyhledávání */
28
+ .module-input-container .search-button {
29
+ min-width: 40px;
30
+ height: 32px;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ border-radius: 0 4px 4px 0;
35
+ margin-left: -1px; /* Překrytí hranice selectu */
36
+ }
37
+
38
+ /* Vlastní styl pro šipku dolů */
39
+ .module-input-container .ant-select-arrow {
40
+ color: #bfbfbf;
41
+ right: 11px;
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ }
46
+
47
+ /* Přidána specifická třída pro naši šipku */
48
+ .select-arrow-icon {
49
+ transition: transform 0.3s ease;
50
+ width: 12px;
51
+ height: 12px;
52
+ }
53
+
54
+ /* Rotace šipky při otevření selectu - přímější cílení na naši konkrétní ikonu */
55
+ .module-input-container .ant-select.ant-select-open .select-arrow-icon {
56
+ transform: rotate(180deg);
57
+ }
58
+
59
+ /* Přidání explicitní polohy pro zavřený stav pro lepší kompatibilitu */
60
+ .module-input-container .ant-select:not(.ant-select-open) .select-arrow-icon {
61
+ transform: rotate(0deg);
62
+ }
63
+
64
+ /* Styly pro dropdown */
65
+ .select-dropdown-container {
66
+ padding-bottom: 8px;
67
+ font-size: 13px;
68
+ }
69
+
70
+ .search-box {
71
+ padding: 8px;
72
+ border-bottom: 1px solid #f0f0f0;
73
+ }
74
+
75
+ .dropdown-search-input {
76
+ border-radius: 4px;
77
+ font-size: 13px;
78
+ }
79
+
80
+ /* Styl pro položky v dropdownu */
81
+ .option-item {
82
+ display: flex;
83
+ align-items: center;
84
+ padding: 4px 0;
85
+ font-size: 13px;
86
+ }
87
+
88
+ .option-avatar {
89
+ width: 48px;
90
+ height: 48px;
91
+ background-color: #e9ebf3;
92
+ color: #9da1ba;
93
+ border-radius: 50%;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ font-weight: bold;
98
+ margin-right: 12px;
99
+ font-size: 13px;
100
+ }
101
+
102
+ .option-content {
103
+ display: flex;
104
+ flex-direction: column;
105
+ }
106
+
107
+ .option-name {
108
+ font-weight: 500;
109
+ font-size: 13px;
110
+ }
111
+
112
+ .option-email {
113
+ font-size: 12px;
114
+ color: #666;
115
+ }
116
+
117
+ /* New Customer položka */
118
+ .new-customer-item {
119
+ display: flex;
120
+ align-items: center;
121
+ padding-left: 8px;
122
+ padding-top: 7px;
123
+ padding-bottom: 0px;
124
+ cursor: pointer;
125
+ border-top: 1px solid #f0f0f0;
126
+ color: #1890ff;
127
+ font-size: 13px;
128
+ }
129
+
130
+ .new-customer-item:hover {
131
+ background-color: #f5f5f5;
132
+ }
133
+
134
+ .plus-icon {
135
+ margin-right: 8px;
136
+ font-weight: bold;
137
+ font-size: 16px;
138
+ }
139
+
140
+ /* Ant Form styly - necháváme je globální, protože jsou součástí Ant Design */
141
+ .ant-form-item-label {
142
+ text-align: left;
143
+ margin-bottom: 4px;
144
+ }
145
+
146
+ /* Styling for ag-grid - necháváme je globální, protože jsou součástí ag-grid */
147
+ .ag-theme-alpine {
148
+ --ag-header-height: 40px;
149
+ --ag-header-foreground-color: #333;
150
+ --ag-header-background-color: #f5f5f5;
151
+ --ag-row-hover-color: #f0f8ff;
152
+ --ag-selected-row-background-color: rgba(24, 144, 255, 0.1);
153
+ }
154
+
155
+ .ag-theme-alpine .ag-header-cell {
156
+ font-weight: 600;
157
+ }
158
+
159
+ .ag-theme-alpine .ag-row-hover {
160
+ cursor: pointer;
161
+ }
162
+
163
+ /* Nastavení globální velikosti písma pro Ant Design komponenty v rámci našeho kontejneru */
164
+ .module-input-container .ant-select-dropdown {
165
+ font-size: 13px;
166
+ }
167
+
168
+ /* Aplikace velikosti písma 13px na všechny Ant Select komponenty */
169
+ .module-input-container .ant-select,
170
+ .module-input-container .ant-select-dropdown,
171
+ .module-input-container .ant-select-item,
172
+ .module-input-container .ant-select-item-option-content {
173
+ font-size: 13px;
174
+ }
175
+
176
+ /* Obecné pomocné třídy */
177
+ .module-input-container .text-align-center {
178
+ text-align: center;
179
+ }
180
+
181
+ .module-input-container .padding {
182
+ padding: 16px;
183
+ }
184
+
185
+ .module-input-container .ant-select-selection-item {
186
+ white-space: nowrap;
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ display: inline-block !important;
190
+ line-height: 30px !important;
191
+ }
192
+
193
+ .module-input-container .ant-select-selection-item,
194
+ .ant-select-selection-item,
195
+ .ant-select .ant-select-selection-item,
196
+ .ant-select-single .ant-select-selection-item,
197
+ .ant-select-single:not(.ant-select-customize-input) .ant-select-selection-item {
198
+ font-size: 13px !important;
199
+ }
200
+
201
+ /* Nastavení barvy pozadí pro vybranou položku v dropdown menu */
202
+ .module-input-container .ant-select-item-option-selected,
203
+ .ant-select-dropdown .ant-select-item-option-selected {
204
+ background-color: #e9ebf3 !important;
205
+ }
206
+
207
+ /* Může být potřeba upravit barvu textu pro lepší čitelnost */
208
+ .module-input-container .ant-select-item-option-selected .option-name,
209
+ .module-input-container .ant-select-item-option-selected .option-email {
210
+ color: #333; /* nebo jiná barva dle vašeho designu */
211
+ }
212
+
213
+ /* Nastavení barvy pozadí při najetí myší na položku v dropdown menu */
214
+ .module-input-container .ant-select-item-option:hover,
215
+ .ant-select-dropdown .ant-select-item-option:hover {
216
+ background-color: #408dfb !important;
217
+ }
218
+
219
+ /* Pro lepší čitelnost textu na modrém pozadí můžete změnit barvu textu na bílou */
220
+ .module-input-container .ant-select-item-option:hover .option-name,
221
+ .module-input-container .ant-select-item-option:hover .option-email,
222
+ .ant-select-dropdown .ant-select-item-option:hover .option-name,
223
+ .ant-select-dropdown .ant-select-item-option:hover .option-email {
224
+ color: white !important;
225
+ }
226
+
227
+ /* Případně i barvu avataru můžete upravit pro lepší kontrast */
228
+ .module-input-container .ant-select-item-option:hover .option-avatar,
229
+ .ant-select-dropdown .ant-select-item-option:hover .option-avatar {
230
+ background-color: rgba(255, 255, 255, 0.2) !important;
231
+ color: white !important;
232
+ }
@@ -0,0 +1,232 @@
1
+ /* Obaluji všechny styly do .module-input-container pro lokální scope */
2
+ .module-input-container {
3
+ width: 100%;
4
+ position: relative;
5
+ }
6
+
7
+ /* Nový základní styl pro kontejner */
8
+ .module-input-container .simple-select-container {
9
+ display: flex;
10
+ width: 100%;
11
+ border-radius: 4px;
12
+ overflow: hidden;
13
+ }
14
+
15
+ /* Stylování select komponenty */
16
+ .module-input-container .simple-select {
17
+ flex: 1;
18
+ }
19
+
20
+ /* Odstraňuje výchozí okraje antd select */
21
+ .module-input-container .simple-select .ant-select-selector {
22
+ border-right: none !important;
23
+ border-top-right-radius: 0 !important;
24
+ border-bottom-right-radius: 0 !important;
25
+ }
26
+
27
+ /* Stylování tlačítka vyhledávání */
28
+ .module-input-container .search-button {
29
+ min-width: 40px;
30
+ height: 32px;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ border-radius: 0 4px 4px 0;
35
+ margin-left: -1px; /* Překrytí hranice selectu */
36
+ }
37
+
38
+ /* Vlastní styl pro šipku dolů */
39
+ .module-input-container .ant-select-arrow {
40
+ color: #bfbfbf;
41
+ right: 11px;
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ }
46
+
47
+ /* Přidána specifická třída pro naši šipku */
48
+ .select-arrow-icon {
49
+ transition: transform 0.3s ease;
50
+ width: 12px;
51
+ height: 12px;
52
+ }
53
+
54
+ /* Rotace šipky při otevření selectu - přímější cílení na naši konkrétní ikonu */
55
+ .module-input-container .ant-select.ant-select-open .select-arrow-icon {
56
+ transform: rotate(180deg);
57
+ }
58
+
59
+ /* Přidání explicitní polohy pro zavřený stav pro lepší kompatibilitu */
60
+ .module-input-container .ant-select:not(.ant-select-open) .select-arrow-icon {
61
+ transform: rotate(0deg);
62
+ }
63
+
64
+ /* Styly pro dropdown */
65
+ .select-dropdown-container {
66
+ padding-bottom: 8px;
67
+ font-size: 13px;
68
+ }
69
+
70
+ .search-box {
71
+ padding: 8px;
72
+ border-bottom: 1px solid #f0f0f0;
73
+ }
74
+
75
+ .dropdown-search-input {
76
+ border-radius: 4px;
77
+ font-size: 13px;
78
+ }
79
+
80
+ /* Styl pro položky v dropdownu */
81
+ .option-item {
82
+ display: flex;
83
+ align-items: center;
84
+ padding: 4px 0;
85
+ font-size: 13px;
86
+ }
87
+
88
+ .option-avatar {
89
+ width: 48px;
90
+ height: 48px;
91
+ background-color: #e9ebf3;
92
+ color: #9da1ba;
93
+ border-radius: 50%;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ font-weight: bold;
98
+ margin-right: 12px;
99
+ font-size: 13px;
100
+ }
101
+
102
+ .option-content {
103
+ display: flex;
104
+ flex-direction: column;
105
+ }
106
+
107
+ .option-name {
108
+ font-weight: 500;
109
+ font-size: 13px;
110
+ }
111
+
112
+ .option-email {
113
+ font-size: 12px;
114
+ color: #666;
115
+ }
116
+
117
+ /* New Customer položka */
118
+ .new-customer-item {
119
+ display: flex;
120
+ align-items: center;
121
+ padding-left: 8px;
122
+ padding-top: 7px;
123
+ padding-bottom: 0px;
124
+ cursor: pointer;
125
+ border-top: 1px solid #f0f0f0;
126
+ color: #1890ff;
127
+ font-size: 13px;
128
+ }
129
+
130
+ .new-customer-item:hover {
131
+ background-color: #f5f5f5;
132
+ }
133
+
134
+ .plus-icon {
135
+ margin-right: 8px;
136
+ font-weight: bold;
137
+ font-size: 16px;
138
+ }
139
+
140
+ /* Ant Form styly - necháváme je globální, protože jsou součástí Ant Design */
141
+ .ant-form-item-label {
142
+ text-align: left;
143
+ margin-bottom: 4px;
144
+ }
145
+
146
+ /* Styling for ag-grid - necháváme je globální, protože jsou součástí ag-grid */
147
+ .ag-theme-alpine {
148
+ --ag-header-height: 40px;
149
+ --ag-header-foreground-color: #333;
150
+ --ag-header-background-color: #f5f5f5;
151
+ --ag-row-hover-color: #f0f8ff;
152
+ --ag-selected-row-background-color: rgba(24, 144, 255, 0.1);
153
+ }
154
+
155
+ .ag-theme-alpine .ag-header-cell {
156
+ font-weight: 600;
157
+ }
158
+
159
+ .ag-theme-alpine .ag-row-hover {
160
+ cursor: pointer;
161
+ }
162
+
163
+ /* Nastavení globální velikosti písma pro Ant Design komponenty v rámci našeho kontejneru */
164
+ .module-input-container .ant-select-dropdown {
165
+ font-size: 13px;
166
+ }
167
+
168
+ /* Aplikace velikosti písma 13px na všechny Ant Select komponenty */
169
+ .module-input-container .ant-select,
170
+ .module-input-container .ant-select-dropdown,
171
+ .module-input-container .ant-select-item,
172
+ .module-input-container .ant-select-item-option-content {
173
+ font-size: 13px;
174
+ }
175
+
176
+ /* Obecné pomocné třídy */
177
+ .module-input-container .text-align-center {
178
+ text-align: center;
179
+ }
180
+
181
+ .module-input-container .padding {
182
+ padding: 16px;
183
+ }
184
+
185
+ .module-input-container .ant-select-selection-item {
186
+ white-space: nowrap;
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ display: inline-block !important;
190
+ line-height: 30px !important;
191
+ }
192
+
193
+ .module-input-container .ant-select-selection-item,
194
+ .ant-select-selection-item,
195
+ .ant-select .ant-select-selection-item,
196
+ .ant-select-single .ant-select-selection-item,
197
+ .ant-select-single:not(.ant-select-customize-input) .ant-select-selection-item {
198
+ font-size: 13px !important;
199
+ }
200
+
201
+ /* Nastavení barvy pozadí pro vybranou položku v dropdown menu */
202
+ .module-input-container .ant-select-item-option-selected,
203
+ .ant-select-dropdown .ant-select-item-option-selected {
204
+ background-color: #e9ebf3 !important;
205
+ }
206
+
207
+ /* Může být potřeba upravit barvu textu pro lepší čitelnost */
208
+ .module-input-container .ant-select-item-option-selected .option-name,
209
+ .module-input-container .ant-select-item-option-selected .option-email {
210
+ color: #333; /* nebo jiná barva dle vašeho designu */
211
+ }
212
+
213
+ /* Nastavení barvy pozadí při najetí myší na položku v dropdown menu */
214
+ .module-input-container .ant-select-item-option:hover,
215
+ .ant-select-dropdown .ant-select-item-option:hover {
216
+ background-color: #408dfb !important;
217
+ }
218
+
219
+ /* Pro lepší čitelnost textu na modrém pozadí můžete změnit barvu textu na bílou */
220
+ .module-input-container .ant-select-item-option:hover .option-name,
221
+ .module-input-container .ant-select-item-option:hover .option-email,
222
+ .ant-select-dropdown .ant-select-item-option:hover .option-name,
223
+ .ant-select-dropdown .ant-select-item-option:hover .option-email {
224
+ color: white !important;
225
+ }
226
+
227
+ /* Případně i barvu avataru můžete upravit pro lepší kontrast */
228
+ .module-input-container .ant-select-item-option:hover .option-avatar,
229
+ .ant-select-dropdown .ant-select-item-option:hover .option-avatar {
230
+ background-color: rgba(255, 255, 255, 0.2) !important;
231
+ color: white !important;
232
+ }
@@ -0,0 +1,5 @@
1
+ export default ModuleDropdownList;
2
+ /**
3
+ * ModuleDropdownList komponenta pro výběr položek z různých modulů
4
+ */
5
+ declare function ModuleDropdownList(props: any): import("react/jsx-runtime").JSX.Element;
package/dist/index.js ADDED
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useEffect, useRef } from 'react';
3
+ import { Input, Select, Button } from 'antd';
4
+ import { SearchOutlined } from '@ant-design/icons';
5
+ import { AgGridReact } from 'ag-grid-react';
6
+ import 'ag-grid-community/styles/ag-grid.css';
7
+ import 'ag-grid-community/styles/ag-theme-alpine.css';
8
+ import { useAtom } from 'jotai';
9
+ import DraggableModal from '@bit.rhplus/draggable-modal';
10
+ import { recentItemsAtomFamily } from './store/recentItemsStore';
11
+ import { useModuleDropdownList } from './useModuleDropdownList';
12
+ import './ModuleInput.css';
13
+ const { Option } = Select;
14
+ /**
15
+ * ModuleDropdownList komponenta pro výběr položek z různých modulů
16
+ */
17
+ const ModuleDropdownList = (props) => {
18
+ const { value, onChange, placeholder = 'Vyberte...', disabled = false, readOnly = false, style = {}, width, maxRecentItems = 5, moduleDefinition, } = props;
19
+ // Interní stavy pro Select
20
+ const containerRef = useRef(null);
21
+ const processedStyle = typeof style === 'string' ? { width: style } : { ...style };
22
+ // Priorita nastavení šířky: 1. prop width, 2. style.width, 3. defaultní 100%
23
+ if (width) {
24
+ processedStyle.width = width;
25
+ }
26
+ else if (!processedStyle.width) {
27
+ processedStyle.width = '100%';
28
+ }
29
+ // Použití Jotai atom pro poslední vybrané položky daného typu modulu
30
+ const [recentItems, setRecentItems] = useAtom(recentItemsAtomFamily(moduleDefinition?.moduleName || ''));
31
+ // Přidání položky do seznamu nedávných položek
32
+ const addToRecentItems = (item) => {
33
+ if (!item || !moduleDefinition)
34
+ return;
35
+ // Vytvoření nového seznamu bez aktuální položky (pokud existuje)
36
+ const filteredItems = recentItems.filter((existingItem) => existingItem[moduleDefinition.valueField || 'id'] !==
37
+ item[moduleDefinition.valueField || 'id']);
38
+ // Přidání nové položky na začátek a omezení počtu položek
39
+ const updatedItems = [item, ...filteredItems].slice(0, maxRecentItems);
40
+ setRecentItems(updatedItems);
41
+ };
42
+ // Použití custom hooku pro veškerou logiku ModuleInput
43
+ const { modalOpen, searchQuery, rowData, isLoading, selectedItem, isDetailLoading, moduleDetailQuery, openModal, closeModal, handleSearchChange, handleItemSelect, clearSelection, getDisplayValue, } = useModuleDropdownList({ moduleDefinition, value });
44
+ const selectItem = (item) => {
45
+ const selectedItemData = handleItemSelect(item);
46
+ // Uložení vybrané položky do nedávných položek
47
+ if (selectedItemData) {
48
+ addToRecentItems(selectedItemData);
49
+ }
50
+ // Přímé volání onChange s novou hodnotou
51
+ if (typeof onChange === 'function' && moduleDefinition) {
52
+ onChange(selectedItemData[moduleDefinition.valueField || 'id']);
53
+ }
54
+ };
55
+ // Přidání vybrané položky do nedávných položek při načtení
56
+ useEffect(() => {
57
+ if (selectedItem && moduleDefinition) {
58
+ addToRecentItems(selectedItem);
59
+ }
60
+ }, [selectedItem, moduleDefinition, addToRecentItems]);
61
+ // Výběr položky přímo ze Select dropdown
62
+ const handleSelectChange = (selectedId) => {
63
+ // Přímé volání onChange
64
+ if (typeof onChange === 'function') {
65
+ onChange(selectedId);
66
+ }
67
+ if (!selectedId) {
68
+ clearSelection();
69
+ }
70
+ else {
71
+ // Pokud je v nedávných položkách, nastavte ji jako vybranou
72
+ const selectedRecentItem = recentItems.find((item) => item[moduleDefinition?.valueField || 'id'] === selectedId);
73
+ if (selectedRecentItem) {
74
+ handleItemSelect(selectedRecentItem);
75
+ }
76
+ }
77
+ };
78
+ // Formátování nedávných položek pro zobrazení v Select
79
+ const recentItemsOptions = recentItems.map((item) => ({
80
+ id: item[moduleDefinition.valueField || 'id'],
81
+ name: moduleDefinition?.getDisplayValue?.(item) || item.name || item.id,
82
+ fullItem: item, // Uchování celé položky pro snadné získání později
83
+ }));
84
+ // Pokud nemáme definici modulu, zobrazíme prázdné pole
85
+ if (!moduleDefinition)
86
+ return _jsx("div", {});
87
+ // Funkce pro výběr položky a zavření modálu
88
+ const handleModalItemSelect = (event) => {
89
+ selectItem(event.data);
90
+ closeModal();
91
+ };
92
+ // Získání aktuální zobrazované hodnoty pro Select
93
+ const displayValueText = getDisplayValue();
94
+ return (_jsxs("div", { className: "module-input-container", style: processedStyle, ref: containerRef, children: [_jsxs("div", { className: "simple-select-container", children: [_jsxs(Select, { value: value, onChange: handleSelectChange, className: "simple-select", placeholder: placeholder, disabled: disabled || readOnly, dropdownMatchSelectWidth: true, getPopupContainer: () => containerRef.current,
95
+ // Vlastní tučná šipka s rotací
96
+ suffixIcon: _jsx("svg", { className: "select-arrow-icon", width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M2 4L6 8L10 4", stroke: "#bfbfbf", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }) }),
97
+ // Zde definujeme, jak bude vypadat vybraná hodnota v selectu (pouze název)
98
+ optionLabelProp: "label", style: { fontSize: '13px' }, listItemHeight: 32, listHeight: 256, dropdownRender: (menu) => (_jsxs("div", { className: "select-dropdown-container", children: [_jsx("div", { className: "search-box", children: _jsx(Input, { placeholder: "Search", prefix: _jsx(SearchOutlined, {}), className: "dropdown-search-input" }) }), menu, _jsxs("div", { className: "new-customer-item", children: [_jsx("div", { className: "plus-icon", children: "+" }), _jsx("span", { children: "New Customer" })] })] })), children: [recentItemsOptions.map((option) => (_jsx(Option, { value: option.id,
99
+ // Zde přidáváme label pro zobrazení jen názvu při vybrání položky
100
+ label: option.name, children: _jsxs("div", { className: "option-item", children: [_jsx("div", { className: "option-avatar", children: option.name.charAt(0) }), _jsxs("div", { className: "option-content", children: [_jsx("div", { className: "option-name", children: option.name }), _jsx("div", { className: "option-email", children: option.fullItem.email || '-' })] })] }) }, option.id))), value &&
101
+ !recentItemsOptions.some((option) => option.id === value) && (_jsx(Option, { value: value, label: displayValueText, children: isDetailLoading
102
+ ? 'Načítání...'
103
+ : moduleDetailQuery?.data
104
+ ? (_jsxs("div", { className: "option-item", children: [_jsx("div", { className: "option-avatar", children: displayValueText.charAt(0) }), _jsxs("div", { className: "option-content", children: [_jsx("div", { className: "option-name", children: displayValueText }), _jsx("div", { className: "option-email", children: moduleDetailQuery.data.email || '-' })] })] })) : (`${value} (nenačteno)`) }, value))] }), _jsx(Button, { icon: _jsx(SearchOutlined, {}), className: "search-button", onClick: openModal, type: "primary" })] }), _jsx("div", { id: "modal-root" }), _jsxs(DraggableModal, { width: moduleDefinition.modalWidth || 800, open: modalOpen, getContainer: () => document.getElementById('modal-root'), onCancel: closeModal, maskClosable: false, title: moduleDefinition.modalTitle ||
105
+ `Vybrat z modulu: ${moduleDefinition.moduleName}`, footer: () => {
106
+ return [
107
+ _jsx(Button, { onClick: closeModal, style: { marginRight: '10px', width: 'auto' }, children: "Zav\u0159\u00EDt" }, "cancel"),
108
+ ];
109
+ }, children: [_jsx(Input, { placeholder: "Vyhledat...", value: searchQuery, onChange: (e) => handleSearchChange(e.target.value), prefix: _jsx(SearchOutlined, {}), allowClear: true }), isLoading ? (_jsx("div", { className: "text-align-center padding", children: "Na\u010D\u00EDt\u00E1n\u00ED..." })) : (_jsx("div", { className: "ag-theme-alpine", style: { height: 400, width: '100%' }, children: _jsx(AgGridReact, { rowData: rowData, columnDefs: moduleDefinition.columnDefs, defaultColDef: {
110
+ sortable: true,
111
+ filter: true,
112
+ resizable: true,
113
+ }, pagination: true, paginationPageSize: 10, onRowClicked: handleModalItemSelect, rowSelection: "single" }) }))] })] }));
114
+ };
115
+ export default ModuleDropdownList;
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ ;
2
+ ;
3
+
4
+ export const compositions = [];
5
+ export const overview = [];
6
+
7
+ export const compositions_metadata = {"compositions":[]};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Atom family pro uchovávání posledních vybraných položek pro každý typ modulu
3
+ * Používá localStorage pro persistenci dat mezi reloady stránky
4
+ */
5
+ export const recentItemsAtomFamily: import("jotai/vanilla/utils/atomFamily").AtomFamily<any, import("jotai").WritableAtom<never[], [typeof import("jotai/utils").RESET | never[] | ((prev: never[]) => never[] | typeof import("jotai/utils").RESET)], void>>;
6
+ export function clearRecentItems(moduleType: string, setAtom: Function): void;
7
+ /**
8
+ * Helper atom pro vývojářské účely - seznam všech typů modulů,
9
+ * které mají uložené nedávné položky
10
+ */
11
+ export const moduleTypesWithRecentItemsAtom: import("jotai").Atom<string[]>;
@@ -0,0 +1,29 @@
1
+ import { atom } from 'jotai';
2
+ import { atomFamily, atomWithStorage } from 'jotai/utils';
3
+ /**
4
+ * Atom family pro uchovávání posledních vybraných položek pro každý typ modulu
5
+ * Používá localStorage pro persistenci dat mezi reloady stránky
6
+ */
7
+ export const recentItemsAtomFamily = atomFamily((moduleType) => atomWithStorage(`recent-items-${moduleType}`, []), (a, b) => a === b);
8
+ /**
9
+ * Helper funkce pro vymazání všech uložených posledních položek
10
+ * pro konkrétní modul
11
+ *
12
+ * @param {string} moduleType - Typ modulu
13
+ * @param {Function} setAtom - Setter funkce pro daný atom
14
+ */
15
+ export const clearRecentItems = (moduleType, setAtom) => {
16
+ setAtom(recentItemsAtomFamily(moduleType), []);
17
+ };
18
+ /**
19
+ * Helper atom pro vývojářské účely - seznam všech typů modulů,
20
+ * které mají uložené nedávné položky
21
+ */
22
+ export const moduleTypesWithRecentItemsAtom = atom((get) => {
23
+ // Tato funkce by v produkční verzi potřebovala skutečný seznam
24
+ // všech modulů, což by bylo potřeba implementovat dle
25
+ // konkrétních požadavků aplikace
26
+ const moduleTypes = ['products', 'contracts'];
27
+ return moduleTypes.filter(moduleType => get(recentItemsAtomFamily(moduleType)).length > 0);
28
+ });
29
+ //# sourceMappingURL=recentItemsStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recentItemsStore.js","sourceRoot":"","sources":["../../store/recentItemsStore.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAC7C,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,gBAAgB,UAAU,EAAE,EAAE,EAAE,CAAC,EACjE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE;IACtD,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;IACzD,+DAA+D;IAC/D,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAE9C,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACrC,GAAG,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAClD,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export function useModuleDropdownList({ moduleDefinition, value }: {
2
+ moduleDefinition: any;
3
+ value: any;
4
+ }): {
5
+ moduleDefinition: any;
6
+ modalOpen: boolean;
7
+ searchQuery: string;
8
+ selectedItem: null;
9
+ rowData: {};
10
+ isLoading: false;
11
+ isDetailLoading: false;
12
+ openModal: () => void;
13
+ closeModal: () => void;
14
+ handleSearchChange: (query: any) => void;
15
+ handleItemSelect: (item: any) => any;
16
+ clearSelection: () => void;
17
+ getDisplayValue: () => any;
18
+ moduleListQuery: import("@tanstack/react-query").DefinedUseQueryResult<unknown, Error>;
19
+ moduleDetailQuery: import("@tanstack/react-query").DefinedUseQueryResult<unknown, Error>;
20
+ };