@bit.rhplus/ui2.module-dropdown-list 0.1.108 → 0.1.109

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,259 @@
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: visible;
13
+ }
14
+
15
+ /* Stylování select komponenty */
16
+ .module-input-container .simple-select {
17
+ flex: 1;
18
+ min-width: 0;
19
+ max-width: calc(100% - 40px);
20
+ }
21
+
22
+ /* Odstraňuje výchozí okraje antd select */
23
+ .module-input-container .simple-select .ant-select-selector {
24
+ border-right: none !important;
25
+ border-top-right-radius: 0 !important;
26
+ border-bottom-right-radius: 0 !important;
27
+ }
28
+
29
+ /* Stylování tlačítka vyhledávání */
30
+ .module-input-container .search-button {
31
+ min-width: 40px;
32
+ height: 32px;
33
+ display: flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ border-radius: 0 4px 4px 0;
37
+ margin-left: -1px; /* Překrytí hranice selectu */
38
+ }
39
+
40
+ /* Vlastní styl pro šipku dolů */
41
+ .module-input-container .ant-select-arrow {
42
+ color: #bfbfbf;
43
+ right: 11px;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ }
48
+
49
+ /* Přidána specifická třída pro naši šipku */
50
+ .select-arrow-icon {
51
+ transition: transform 0.3s ease;
52
+ width: 12px;
53
+ height: 12px;
54
+ }
55
+
56
+ /* Rotace šipky při otevření selectu - přímější cílení na naši konkrétní ikonu */
57
+ .module-input-container .ant-select.ant-select-open .select-arrow-icon {
58
+ transform: rotate(180deg);
59
+ }
60
+
61
+ /* Přidání explicitní polohy pro zavřený stav pro lepší kompatibilitu */
62
+ .module-input-container .ant-select:not(.ant-select-open) .select-arrow-icon {
63
+ transform: rotate(0deg);
64
+ }
65
+
66
+ /* Styly pro dropdown */
67
+ .select-dropdown-container {
68
+ padding-bottom: 8px;
69
+ font-size: 13px;
70
+ }
71
+
72
+ .search-box {
73
+ padding: 8px;
74
+ border-bottom: 1px solid #f0f0f0;
75
+ }
76
+
77
+ .dropdown-search-input {
78
+ border-radius: 4px;
79
+ font-size: 13px;
80
+ }
81
+
82
+ /* Styl pro položky v dropdownu */
83
+ .option-item {
84
+ display: flex;
85
+ align-items: center;
86
+ padding: 4px 0;
87
+ font-size: 13px;
88
+ }
89
+
90
+ .option-avatar {
91
+ width: 48px;
92
+ height: 48px;
93
+ background-color: #e9ebf3;
94
+ color: #9da1ba;
95
+ border-radius: 50%;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ font-weight: bold;
100
+ margin-right: 12px;
101
+ font-size: 13px;
102
+ }
103
+
104
+ .option-content {
105
+ display: flex;
106
+ flex-direction: column;
107
+ }
108
+
109
+ .option-name {
110
+ font-weight: 500;
111
+ font-size: 13px;
112
+ }
113
+
114
+ .option-email {
115
+ font-size: 12px;
116
+ color: #666;
117
+ }
118
+
119
+ /* New Customer položka */
120
+ .new-customer-item {
121
+ display: flex;
122
+ align-items: center;
123
+ padding-left: 8px;
124
+ padding-top: 7px;
125
+ padding-bottom: 0px;
126
+ cursor: pointer;
127
+ border-top: 1px solid #f0f0f0;
128
+ color: #1890ff;
129
+ font-size: 13px;
130
+ }
131
+
132
+ .new-customer-item:hover {
133
+ background-color: #f5f5f5;
134
+ }
135
+
136
+ .plus-icon {
137
+ margin-right: 8px;
138
+ font-weight: bold;
139
+ font-size: 16px;
140
+ }
141
+
142
+ /* Ant Form styly - necháváme je globální, protože jsou součástí Ant Design */
143
+ .ant-form-item-label {
144
+ text-align: left;
145
+ margin-bottom: 4px;
146
+ }
147
+
148
+ /* Styling for ag-grid - necháváme je globální, protože jsou součástí ag-grid */
149
+ .ag-theme-alpine {
150
+ --ag-header-height: 40px;
151
+ --ag-header-foreground-color: #333;
152
+ --ag-header-background-color: #f5f5f5;
153
+ --ag-row-hover-color: #f0f8ff;
154
+ --ag-selected-row-background-color: rgba(24, 144, 255, 0.1);
155
+ }
156
+
157
+ .ag-theme-alpine .ag-header-cell {
158
+ font-weight: 600;
159
+ }
160
+
161
+ .ag-theme-alpine .ag-row-hover {
162
+ cursor: pointer;
163
+ }
164
+
165
+ /* Nastavení globální velikosti písma pro Ant Design komponenty v rámci našeho kontejneru */
166
+ .module-input-container .ant-select-dropdown {
167
+ font-size: 13px;
168
+ }
169
+
170
+ /* Aplikace velikosti písma 13px na všechny Ant Select komponenty */
171
+ .module-input-container .ant-select,
172
+ .module-input-container .ant-select-dropdown,
173
+ .module-input-container .ant-select-item,
174
+ .module-input-container .ant-select-item-option-content {
175
+ font-size: 13px;
176
+ }
177
+
178
+ /* Obecné pomocné třídy */
179
+ .module-input-container .text-align-center {
180
+ text-align: center;
181
+ }
182
+
183
+ .module-input-container .padding {
184
+ padding: 16px;
185
+ }
186
+
187
+ .module-input-container .ant-select-selection-item {
188
+ white-space: nowrap;
189
+ overflow: hidden;
190
+ text-overflow: ellipsis;
191
+ display: inline-block !important;
192
+ line-height: 30px !important;
193
+ max-width: 100% !important;
194
+ }
195
+
196
+ .module-input-container .ant-select-selector {
197
+ overflow: hidden !important;
198
+ }
199
+
200
+ .module-input-container .simple-select {
201
+ width: 100% !important;
202
+ max-width: 100% !important;
203
+ }
204
+
205
+ /* Zajištění, že text v Select se zkrátí s ellipsis */
206
+ .module-input-container .ant-select-single .ant-select-selector .ant-select-selection-item {
207
+ white-space: nowrap !important;
208
+ overflow: hidden !important;
209
+ text-overflow: ellipsis !important;
210
+ max-width: 100% !important;
211
+ display: block !important;
212
+ }
213
+
214
+ /* Zajištění, že celý selector má fixní šířku */
215
+ .module-input-container .ant-select-single .ant-select-selector {
216
+ width: 100% !important;
217
+ overflow: hidden !important;
218
+ }
219
+
220
+ .module-input-container .ant-select-selection-item,
221
+ .ant-select-selection-item,
222
+ .ant-select .ant-select-selection-item,
223
+ .ant-select-single .ant-select-selection-item,
224
+ .ant-select-single:not(.ant-select-customize-input) .ant-select-selection-item {
225
+ font-size: 13px !important;
226
+ }
227
+
228
+ /* Nastavení barvy pozadí pro vybranou položku v dropdown menu */
229
+ .module-input-container .ant-select-item-option-selected,
230
+ .ant-select-dropdown .ant-select-item-option-selected {
231
+ background-color: #e9ebf3 !important;
232
+ }
233
+
234
+ /* Může být potřeba upravit barvu textu pro lepší čitelnost */
235
+ .module-input-container .ant-select-item-option-selected .option-name,
236
+ .module-input-container .ant-select-item-option-selected .option-email {
237
+ color: #333; /* nebo jiná barva dle vašeho designu */
238
+ }
239
+
240
+ /* Nastavení barvy pozadí při najetí myší na položku v dropdown menu */
241
+ .module-input-container .ant-select-item-option:hover,
242
+ .ant-select-dropdown .ant-select-item-option:hover {
243
+ background-color: #408dfb !important;
244
+ }
245
+
246
+ /* Pro lepší čitelnost textu na modrém pozadí můžete změnit barvu textu na bílou */
247
+ .module-input-container .ant-select-item-option:hover .option-name,
248
+ .module-input-container .ant-select-item-option:hover .option-email,
249
+ .ant-select-dropdown .ant-select-item-option:hover .option-name,
250
+ .ant-select-dropdown .ant-select-item-option:hover .option-email {
251
+ color: white !important;
252
+ }
253
+
254
+ /* Případně i barvu avataru můžete upravit pro lepší kontrast */
255
+ .module-input-container .ant-select-item-option:hover .option-avatar,
256
+ .ant-select-dropdown .ant-select-item-option:hover .option-avatar {
257
+ background-color: rgba(255, 255, 255, 0.2) !important;
258
+ color: white !important;
259
+ }
@@ -0,0 +1,2 @@
1
+ export default ModuleDropdownList;
2
+ declare function ModuleDropdownList(props: any): import("react/jsx-runtime").JSX.Element;
package/dist/index.js ADDED
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable */
3
+ import React, { useEffect, useRef, useCallback } from 'react';
4
+ import Input from 'antd/es/input';
5
+ import Select from 'antd/es/select';
6
+ import Button from 'antd/es/button';
7
+ import { SearchOutlined } from '@ant-design/icons';
8
+ import AgGrid from '@bit.rhplus/ag-grid';
9
+ import { useAtom } from 'jotai';
10
+ import DraggableModal from '@bit.rhplus/draggable-modal';
11
+ import { recentItemsAtomFamily } from './store/recentItemsStore';
12
+ import { useModuleDropdownList } from './useModuleDropdownList';
13
+ import './ModuleInput.css';
14
+ const { Option } = Select;
15
+ const ModuleDropdownList = (props) => {
16
+ const { value, onChange, placeholder = 'Vyberte', disabled = false, readOnly = false, style = {}, width, maxRecentItems = 5, moduleDefinition, displayMode = 'recent', getContainer = () => document.body, // Vlastnost pro nastavení kontejneru modálu
17
+ } = props;
18
+ // zmena
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 - obaleno v useCallback
32
+ const addToRecentItems = useCallback((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
+ }, [recentItems, moduleDefinition, maxRecentItems, setRecentItems]);
42
+ // Použití custom hooku pro veškerou logiku ModuleInput
43
+ const { modalOpen, searchQuery, dropdownSearchQuery, rowData, fullListData, isLoading, isFullListLoading, selectedItem, isDetailLoading, moduleDetailQuery, openModal, closeModal, handleSearchChange, handleDropdownSearchChange, handleItemSelect, clearSelection, getDisplayValue, } = useModuleDropdownList({ moduleDefinition, value, displayMode });
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 a celým objektem
51
+ if (typeof onChange === 'function' && moduleDefinition) {
52
+ const id = selectedItemData[moduleDefinition.valueField || 'id'];
53
+ onChange(id, selectedItemData);
54
+ }
55
+ };
56
+ // Přidání vybrané položky do nedávných položek při načtení
57
+ useEffect(() => {
58
+ if (selectedItem && moduleDefinition) {
59
+ addToRecentItems(selectedItem);
60
+ }
61
+ }, [selectedItem, moduleDefinition, addToRecentItems]);
62
+ // Výběr položky přímo ze Select dropdown
63
+ const handleSelectChange = (selectedId) => {
64
+ if (!selectedId) {
65
+ clearSelection();
66
+ if (typeof onChange === 'function') {
67
+ onChange(null, null);
68
+ }
69
+ }
70
+ else {
71
+ // Pokud je v nedávných položkách nebo fullListData, nastavte ji jako vybranou
72
+ const allOptions = displayMode === 'full' ? fullListData : recentItems;
73
+ const selectedItem = allOptions.find((item) => item[moduleDefinition?.valueField || 'id'] === selectedId);
74
+ if (selectedItem) {
75
+ handleItemSelect(selectedItem);
76
+ // Přímé volání onChange s ID a celým objektem
77
+ if (typeof onChange === 'function') {
78
+ onChange(selectedId, selectedItem);
79
+ }
80
+ }
81
+ }
82
+ };
83
+ // Formátování nedávných položek pro zobrazení v Select
84
+ const recentItemsOptions = recentItems.map((item) => ({
85
+ id: item[moduleDefinition.valueField || 'id'],
86
+ name: moduleDefinition?.getDisplayValue?.(item) || item.name || item.id,
87
+ fullItem: item, // Uchování celé položky pro snadné získání později
88
+ }));
89
+ // Formátování kompletního seznamu pro zobrazení v Select (full mode)
90
+ const fullListOptions = fullListData.map((item) => ({
91
+ id: item[moduleDefinition.valueField || 'id'],
92
+ name: moduleDefinition?.getDisplayValue?.(item) || item.name || item.id,
93
+ fullItem: item,
94
+ }));
95
+ // Výběr správného seznamu podle displayMode
96
+ const selectOptions = displayMode === 'full' ? fullListOptions : recentItemsOptions;
97
+ // Pokud nemáme definici modulu, zobrazíme prázdné pole
98
+ if (!moduleDefinition)
99
+ return _jsx("div", {});
100
+ // Funkce pro výběr položky a zavření modálu
101
+ const handleModalItemSelect = (event) => {
102
+ selectItem(event.data);
103
+ closeModal();
104
+ };
105
+ // Získání aktuální zobrazované hodnoty pro Select
106
+ const displayValueText = getDisplayValue();
107
+ // Funkce pro vykreslení obsahu Option při detailním načítání
108
+ const renderDetailOption = () => {
109
+ if (isDetailLoading) {
110
+ return 'Načítání...';
111
+ }
112
+ if (moduleDetailQuery?.data) {
113
+ return (_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 || '-' })] })] }));
114
+ }
115
+ return `${value} (nenačteno)`;
116
+ };
117
+ 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: false, getPopupContainer: () => document.body, dropdownStyle: { zIndex: 9999 }, loading: displayMode === 'full' && isFullListLoading, style: { width: '100%', fontSize: '13px' }, maxTagTextLength: 20,
118
+ // Vlastní tučná šipka s rotací
119
+ 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" }) }),
120
+ // Zde definujeme, jak bude vypadat vybraná hodnota v selectu (pouze název)
121
+ optionLabelProp: "label", listItemHeight: 32, listHeight: 256, dropdownRender: (menu) => (_jsxs("div", { className: "select-dropdown-container", children: [displayMode === 'full' && (_jsx("div", { className: "search-box", children: _jsx(Input, { placeholder: "Search", value: dropdownSearchQuery, onChange: (e) => handleDropdownSearchChange(e.target.value), 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" })] })] })), children: [selectOptions.map((option) => {
122
+ const nameStr = String(option.name || '');
123
+ const firstChar = nameStr.charAt(0) || '?';
124
+ return (_jsx(Option, { value: option.id,
125
+ // Zde přidáváme label pro zobrazení jen názvu při vybrání položky
126
+ label: option.name, children: option.name }, option.id));
127
+ }), value &&
128
+ !selectOptions.some((option) => option.id === value) && (_jsx(Option, { value: value, label: displayValueText, children: renderDetailOption() }, value))] }), _jsx(Button, { icon: _jsx(SearchOutlined, {}), className: "search-button", onClick: openModal, type: "primary" })] }), _jsxs(DraggableModal, { width: moduleDefinition.modalWidth || 800, open: modalOpen, getContainer: getContainer, onCancel: closeModal, maskClosable: false, zIndex: 99999999, title: moduleDefinition.modalTitle ||
129
+ `Vybrat z modulu: ${moduleDefinition.moduleName}`, footer: () => {
130
+ return [
131
+ _jsx(Button, { onClick: closeModal, style: { marginRight: '10px', width: 'auto' }, children: "Zav\u0159\u00EDt" }, "cancel"),
132
+ ];
133
+ }, children: [_jsx(Input, { placeholder: "Filtrovat...", 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", { style: { height: 400, width: '100%' }, children: _jsx(AgGrid, { theme: "themeAlpine", rowData: rowData, columnDefs: moduleDefinition.columnDefs, defaultColDef: {
134
+ sortable: true,
135
+ filter: true,
136
+ resizable: true,
137
+ }, onCellDoubleClicked: handleModalItemSelect, rowSelection: "single", enableCellChangeFlash: false }) }))] })] }));
138
+ };
139
+ export default ModuleDropdownList;
140
+ //# 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<any[], [any[] | typeof import("jotai/utils").RESET | ((prev: any[]) => any[] | 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,26 @@
1
+ export function useModuleDropdownList({ moduleDefinition, value, displayMode }: {
2
+ moduleDefinition: any;
3
+ value: any;
4
+ displayMode?: string;
5
+ }): {
6
+ moduleDefinition: any;
7
+ modalOpen: boolean;
8
+ searchQuery: string;
9
+ dropdownSearchQuery: string;
10
+ selectedItem: any;
11
+ rowData: any;
12
+ fullListData: any;
13
+ isLoading: false;
14
+ isFullListLoading: false;
15
+ isDetailLoading: false;
16
+ openModal: () => void;
17
+ closeModal: () => void;
18
+ handleSearchChange: (query: any) => void;
19
+ handleDropdownSearchChange: (query: any) => void;
20
+ handleItemSelect: (item: any) => any;
21
+ clearSelection: () => void;
22
+ getDisplayValue: () => any;
23
+ moduleListQuery: import("@tanstack/react-query").DefinedUseQueryResult<unknown, Error>;
24
+ moduleFullListQuery: import("@tanstack/react-query").DefinedUseQueryResult<unknown, Error>;
25
+ moduleDetailQuery: import("@tanstack/react-query").DefinedUseQueryResult<unknown, Error>;
26
+ };
@@ -0,0 +1,171 @@
1
+ // shared/hooks/useModuleInput.js
2
+ import React, { useState, useEffect, useCallback } from 'react';
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import message from 'antd/es/message';
5
+ import useData from '@bit.rhplus/data'; // Upravte cestu podle skutečného umístění
6
+ export const useModuleDropdownList = ({ moduleDefinition, value, displayMode = 'recent' }) => {
7
+ const [modalOpen, setModalOpen] = useState(false);
8
+ const [searchQuery, setSearchQuery] = useState('');
9
+ const [dropdownSearchQuery, setDropdownSearchQuery] = useState('');
10
+ const [selectedItem, setSelectedItem] = useState(null);
11
+ // const [moduleDefinition, setModuleDefinition] = useState(null);
12
+ // Získání fetchDataUIAsync z vašeho custom hooku
13
+ const { fetchDataUIAsync } = useData();
14
+ // Vytvoření stabilních verzí funkcí pro načítání dat pomocí useCallback
15
+ const fetchData = useCallback(async (query) => {
16
+ if (moduleDefinition?.fetchData) {
17
+ return moduleDefinition.fetchData(query, fetchDataUIAsync);
18
+ }
19
+ return [];
20
+ }, [moduleDefinition, fetchDataUIAsync]);
21
+ const fetchById = useCallback(async (id) => {
22
+ if (moduleDefinition?.fetchById) {
23
+ return moduleDefinition.fetchById(id, fetchDataUIAsync);
24
+ }
25
+ return null;
26
+ }, [moduleDefinition, fetchDataUIAsync]);
27
+ // Použití React Query pro načtení dat seznamu v modálním okně (načte všechna data jednou)
28
+ const moduleListQuery = useQuery({
29
+ queryKey: [moduleDefinition.moduleName, 'list'],
30
+ queryFn: () => fetchData(''),
31
+ enabled: !!moduleDefinition && modalOpen,
32
+ staleTime: 1000 * 60 * 5, // 5 minut
33
+ onError: (error) => {
34
+ message.error(`Chyba při načítání dat: ${error.message}`);
35
+ }
36
+ });
37
+ // Použití React Query pro načtení kompletního seznamu v dropdown (full mode)
38
+ // Nenačítá data podle dropdownSearchQuery - to je pouze pro client-side filtraci
39
+ const moduleFullListQuery = useQuery({
40
+ queryKey: [moduleDefinition.moduleName, 'fullList'],
41
+ queryFn: () => fetchData(''),
42
+ enabled: !!moduleDefinition && displayMode === 'full',
43
+ staleTime: 1000 * 60 * 5, // 5 minut
44
+ onError: (error) => {
45
+ message.error(`Chyba při načítání dat: ${error.message}`);
46
+ }
47
+ });
48
+ // Použití React Query pro načtení jednoho záznamu podle ID
49
+ const moduleDetailQuery = useQuery({
50
+ queryKey: [moduleDefinition.moduleName, 'detail', value],
51
+ queryFn: () => fetchById(value),
52
+ // Opraveno: načítat jen když máme ID a definici modulu, bez ohledu na selectedItem
53
+ enabled: !!moduleDefinition && !!value && value !== '',
54
+ staleTime: 1000 * 60 * 5, // 5 minut
55
+ onSuccess: (data) => {
56
+ if (data)
57
+ setSelectedItem(data);
58
+ },
59
+ onError: (error) => {
60
+ message.error(`Chyba při načítání detailu: ${error.message}`);
61
+ }
62
+ });
63
+ // Funkce pro otevření modálního okna
64
+ const openModal = () => {
65
+ setModalOpen(true);
66
+ };
67
+ // Funkce pro zavření modálního okna
68
+ const closeModal = () => setModalOpen(false);
69
+ // Funkce pro změnu vyhledávacího dotazu v modálním okně
70
+ const handleSearchChange = (query) => setSearchQuery(query);
71
+ // Funkce pro změnu vyhledávacího dotazu v dropdownu
72
+ const handleDropdownSearchChange = (query) => setDropdownSearchQuery(query);
73
+ // Funkce pro výběr položky
74
+ const handleItemSelect = (item) => {
75
+ if (item) {
76
+ setSelectedItem(item);
77
+ closeModal();
78
+ return item;
79
+ }
80
+ return null;
81
+ };
82
+ // Funkce pro vymazání výběru
83
+ const clearSelection = () => {
84
+ setSelectedItem(null);
85
+ };
86
+ // Vylepšená funkce pro získání zobrazované hodnoty
87
+ const getDisplayValue = () => {
88
+ if (!value || !moduleDefinition)
89
+ return '';
90
+ // Pokud máme vybranou položku, použijeme ji
91
+ if (selectedItem && selectedItem[moduleDefinition.valueField] === value) {
92
+ return moduleDefinition.getDisplayValue(selectedItem);
93
+ }
94
+ // Pokud nemáme vybranou položku, ale máme načtenou položku z React Query
95
+ if (moduleDetailQuery.data) {
96
+ return moduleDefinition.getDisplayValue(moduleDetailQuery.data);
97
+ }
98
+ // Pokud se data načítají
99
+ if (moduleDetailQuery.isLoading) {
100
+ return "Načítání...";
101
+ }
102
+ // Pokud došlo k chybě nebo data nejsou dostupná
103
+ return `${value} (nenačteno)`;
104
+ };
105
+ // Reset selectedItem když se změní value prop
106
+ useEffect(() => {
107
+ if (value !== selectedItem?.[moduleDefinition?.valueField]) {
108
+ // Pokud selectedItem neodpovídá aktuálnímu value, resetujeme ho
109
+ setSelectedItem(null);
110
+ }
111
+ }, [value, selectedItem, moduleDefinition]);
112
+ // Při otevření modálního okna zajistíme načerstvení dat
113
+ useEffect(() => {
114
+ if (modalOpen && moduleDefinition) {
115
+ moduleListQuery.refetch();
116
+ }
117
+ }, [modalOpen, searchQuery, moduleDefinition, moduleListQuery]);
118
+ // Client-side filtrace fullListData podle dropdownSearchQuery
119
+ const filteredFullListData = React.useMemo(() => {
120
+ const rawData = moduleFullListQuery.data || [];
121
+ if (!dropdownSearchQuery || dropdownSearchQuery.trim() === '') {
122
+ return rawData;
123
+ }
124
+ const searchLower = dropdownSearchQuery.toLowerCase();
125
+ return rawData.filter(item => {
126
+ // Filtrujeme podle zobrazené hodnoty
127
+ const displayValue = moduleDefinition?.getDisplayValue?.(item) || item.name || String(item.id || '');
128
+ return displayValue.toLowerCase().includes(searchLower);
129
+ });
130
+ }, [moduleFullListQuery.data, dropdownSearchQuery, moduleDefinition]);
131
+ // Client-side filtrace rowData (modální okno) podle searchQuery
132
+ const filteredRowData = React.useMemo(() => {
133
+ const rawData = moduleListQuery.data || [];
134
+ if (!searchQuery || searchQuery.trim() === '') {
135
+ return rawData;
136
+ }
137
+ const searchLower = searchQuery.toLowerCase();
138
+ return rawData.filter(item => {
139
+ // Filtrujeme podle zobrazené hodnoty
140
+ const displayValue = moduleDefinition?.getDisplayValue?.(item) || item.name || String(item.id || '');
141
+ return displayValue.toLowerCase().includes(searchLower);
142
+ });
143
+ }, [moduleListQuery.data, searchQuery, moduleDefinition]);
144
+ // Vrácení všech potřebných stavů a funkcí
145
+ return {
146
+ // Stavy
147
+ moduleDefinition,
148
+ modalOpen,
149
+ searchQuery,
150
+ dropdownSearchQuery,
151
+ selectedItem,
152
+ rowData: filteredRowData,
153
+ fullListData: filteredFullListData,
154
+ isLoading: moduleListQuery.isLoading,
155
+ isFullListLoading: moduleFullListQuery.isLoading,
156
+ isDetailLoading: moduleDetailQuery.isLoading,
157
+ // Funkce
158
+ openModal,
159
+ closeModal,
160
+ handleSearchChange,
161
+ handleDropdownSearchChange,
162
+ handleItemSelect,
163
+ clearSelection,
164
+ getDisplayValue,
165
+ // Query objekty pro pokročilé použití
166
+ moduleListQuery,
167
+ moduleFullListQuery,
168
+ moduleDetailQuery
169
+ };
170
+ };
171
+ //# sourceMappingURL=useModuleDropdownList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModuleDropdownList.js","sourceRoot":"","sources":["../useModuleDropdownList.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@bit.rhplus/ui2.module-dropdown-list",
3
- "version": "0.1.108",
3
+ "version": "0.1.109",
4
4
  "homepage": "https://bit.cloud/remote-scope/ui2/module-dropdown-list",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "remote-scope",
8
8
  "name": "ui2/module-dropdown-list",
9
- "version": "0.1.108"
9
+ "version": "0.1.109"
10
10
  },
11
11
  "dependencies": {
12
12
  "@ant-design/icons": "^5.4.0",
13
13
  "antd": "^5.20.6",
14
14
  "jotai": "^2.11.1",
15
15
  "@tanstack/react-query": "^5.66.9",
16
- "@bit.rhplus/ag-grid": "0.0.114",
16
+ "@bit.rhplus/ag-grid": "0.0.115",
17
17
  "@bit.rhplus/draggable-modal": "0.0.16",
18
- "@bit.rhplus/data": "0.0.86"
18
+ "@bit.rhplus/data": "0.0.87"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@bitdev/react.react-env": "4.0.14"
@@ -0,0 +1,43 @@
1
+ declare module '*.png' {
2
+ const value: any;
3
+ export = value;
4
+ }
5
+ declare module '*.svg' {
6
+ import type { FunctionComponent, SVGProps } from 'react';
7
+
8
+ export const ReactComponent: FunctionComponent<
9
+ SVGProps<SVGSVGElement> & { title?: string }
10
+ >;
11
+ const src: string;
12
+ export default src;
13
+ }
14
+
15
+ // @TODO Gilad
16
+ declare module '*.jpg' {
17
+ const value: any;
18
+ export = value;
19
+ }
20
+ declare module '*.jpeg' {
21
+ const value: any;
22
+ export = value;
23
+ }
24
+ declare module '*.gif' {
25
+ const value: any;
26
+ export = value;
27
+ }
28
+ declare module '*.bmp' {
29
+ const value: any;
30
+ export = value;
31
+ }
32
+ declare module '*.otf' {
33
+ const value: any;
34
+ export = value;
35
+ }
36
+ declare module '*.woff' {
37
+ const value: any;
38
+ export = value;
39
+ }
40
+ declare module '*.woff2' {
41
+ const value: any;
42
+ export = value;
43
+ }
package/types/env.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ export type ImportMetaEnv = Record<string, string>;
4
+
5
+ interface ImportMeta {
6
+ readonly env: ImportMetaEnv
7
+ }
8
+
9
+ declare global {
10
+ namespace NodeJS {
11
+ interface ProcessEnv {
12
+ [key: string]: string;
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,42 @@
1
+ declare module '*.module.css' {
2
+ const classes: { readonly [key: string]: string };
3
+ export default classes;
4
+ }
5
+ declare module '*.module.scss' {
6
+ const classes: { readonly [key: string]: string };
7
+ export default classes;
8
+ }
9
+ declare module '*.module.sass' {
10
+ const classes: { readonly [key: string]: string };
11
+ export default classes;
12
+ }
13
+
14
+ declare module '*.module.less' {
15
+ const classes: { readonly [key: string]: string };
16
+ export default classes;
17
+ }
18
+
19
+ declare module '*.less' {
20
+ const classes: { readonly [key: string]: string };
21
+ export default classes;
22
+ }
23
+
24
+ declare module '*.css' {
25
+ const classes: { readonly [key: string]: string };
26
+ export default classes;
27
+ }
28
+
29
+ declare module '*.sass' {
30
+ const classes: { readonly [key: string]: string };
31
+ export default classes;
32
+ }
33
+
34
+ declare module '*.scss' {
35
+ const classes: { readonly [key: string]: string };
36
+ export default classes;
37
+ }
38
+
39
+ declare module '*.mdx' {
40
+ const component: any;
41
+ export default component;
42
+ }