@addsign/moje-agenda-shared-lib 0.0.53 → 0.0.57
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/assets/tailwind.css +40 -2
- package/dist/components/Calendar.js +9 -4
- package/dist/components/Calendar.js.map +1 -1
- package/dist/components/ConfirmationModalDialog.js +2 -2
- package/dist/components/datatable/DataTable.js +1 -1
- package/dist/components/datatable/DataTableServer.js +198 -186
- package/dist/components/datatable/DataTableServer.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBar.js +5 -48
- package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
- package/dist/components/form/FileInput.js +3 -3
- package/dist/components/form/FileInput.js.map +1 -1
- package/dist/components/form/FormField.js +1 -1
- package/dist/components/form/InputField.d.ts +6 -0
- package/dist/components/form/InputField.js +144 -0
- package/dist/components/form/InputField.js.map +1 -0
- package/dist/components/form/PositionsSelectorSingle.js +15 -9
- package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
- package/dist/components/form/SelectField.d.ts +8 -0
- package/dist/components/form/SelectField.js +142 -0
- package/dist/components/form/SelectField.js.map +1 -0
- package/dist/{iconBase-BY_L6Cb_.js → iconBase-B8_TsgYI.js} +8 -8
- package/dist/{iconBase-BY_L6Cb_.js.map → iconBase-B8_TsgYI.js.map} +1 -1
- package/dist/{index-ZA1ctELQ.js → index-BDqNIr_C.js} +13 -13
- package/dist/{index-ZA1ctELQ.js.map → index-BDqNIr_C.js.map} +1 -1
- package/dist/{index-DPrqKh-7.js → index-DUTU8Jwr.js} +2 -2
- package/dist/{index-DPrqKh-7.js.map → index-DUTU8Jwr.js.map} +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/useClickAway-CH9ykBsx.js +49 -0
- package/dist/useClickAway-CH9ykBsx.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,11 +2,14 @@ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
3
|
import '../../assets/tailwind.css';/* empty css */
|
|
4
4
|
import Button from "../Button.js";
|
|
5
|
-
import {
|
|
5
|
+
import { c as MdOutlineFilterAlt, d as MdOutlineFilterAltOff, e as MdSearch, b as MdClose, f as MdArrowBack, g as MdArrowForward, h as MdArrowUpward, i as MdArrowDownward } from "../../index-BDqNIr_C.js";
|
|
6
6
|
import FormField from "../form/FormField.js";
|
|
7
|
+
import Spinner from "../Spinner.js";
|
|
7
8
|
import "../../contexts/FederationContext.js";
|
|
8
9
|
import { useFederationContext } from "../../contexts/useFederationContext.js";
|
|
9
10
|
import { handleErrors } from "../../utils/handleErrors.js";
|
|
11
|
+
import SelectField from "../form/SelectField.js";
|
|
12
|
+
import InputField from "../form/InputField.js";
|
|
10
13
|
function DataTableServer({
|
|
11
14
|
url,
|
|
12
15
|
columns,
|
|
@@ -79,18 +82,8 @@ function DataTableServer({
|
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
|
-
console.log(
|
|
83
|
-
"%clibcomponentsdatatableDataTable.tsx:142 newFilterOptions",
|
|
84
|
-
"color: #007acc;",
|
|
85
|
-
newFilterOptions
|
|
86
|
-
);
|
|
87
85
|
setFilterOptions(newFilterOptions);
|
|
88
86
|
};
|
|
89
|
-
console.log(
|
|
90
|
-
"%clibcomponentsDataTable.tsx:162 items, columns",
|
|
91
|
-
"color: #007acc;",
|
|
92
|
-
columns
|
|
93
|
-
);
|
|
94
87
|
updateFilterOptions();
|
|
95
88
|
}, [columns]);
|
|
96
89
|
const requestSort = (sortParam) => {
|
|
@@ -138,194 +131,213 @@ function DataTableServer({
|
|
|
138
131
|
};
|
|
139
132
|
const paginationDisplay = `Strana ${currentPage + 1} z ${data == null ? void 0 : data.totalPages}`;
|
|
140
133
|
const filterHandler = (filterParam, value) => {
|
|
141
|
-
console.log(
|
|
142
|
-
"%clibcomponentsdatatableDataTable.tsx:223 object filterParam, value, columnFilters ",
|
|
143
|
-
"color: #007acc;",
|
|
144
|
-
filterParam,
|
|
145
|
-
value,
|
|
146
|
-
columnFilters
|
|
147
|
-
);
|
|
148
134
|
setColumnFilters((prev) => ({ ...prev, [filterParam]: value }));
|
|
149
135
|
setCurrentPage(0);
|
|
150
136
|
};
|
|
151
137
|
const handleToggleShowColFilters = () => {
|
|
152
|
-
|
|
153
|
-
if (!showColFilters) {
|
|
138
|
+
if (showColFilters) {
|
|
154
139
|
setColumnFilters({});
|
|
155
140
|
}
|
|
141
|
+
setShowColFilters(!showColFilters);
|
|
156
142
|
};
|
|
157
|
-
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
fulltextSearch
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
{
|
|
202
|
-
label: header,
|
|
203
|
-
name: String(key) + "_filter",
|
|
204
|
-
onInputChange: (e) => filterHandler(
|
|
205
|
-
filterParam,
|
|
206
|
-
e.target.value
|
|
207
|
-
),
|
|
208
|
-
type: filterType,
|
|
209
|
-
options: filterOptions[String(filterParam)] || [],
|
|
210
|
-
value: columnFilters[String(filterParam)],
|
|
211
|
-
clearable: true,
|
|
212
|
-
className: "max-w-[300px] min-w-[100px]"
|
|
213
|
-
}
|
|
214
|
-
) })
|
|
215
|
-
},
|
|
216
|
-
String(key) + "_filter"
|
|
217
|
-
)) }),
|
|
218
|
-
/* @__PURE__ */ jsx("tr", { children: columns.map(({ key, header, actions, sortParam }) => /* @__PURE__ */ jsx(
|
|
219
|
-
"th",
|
|
220
|
-
{
|
|
221
|
-
className: `group font-medium leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${!title && !subtitle ? "border-t-0" : ""} ${sortParam ? " cursor-pointer " : ""}`,
|
|
222
|
-
onClick: () => sortParam ? requestSort(sortParam) : () => {
|
|
223
|
-
},
|
|
224
|
-
children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
225
|
-
header,
|
|
226
|
-
" ",
|
|
227
|
-
!actions && sortParam ? getSortIcon(sortParam) : ""
|
|
228
|
-
] })
|
|
229
|
-
},
|
|
230
|
-
String(key)
|
|
231
|
-
)) })
|
|
232
|
-
] }),
|
|
233
|
-
!isLoading && /* @__PURE__ */ jsxs("tbody", { children: [
|
|
234
|
-
data && data.content && data.content.map((item, rowIndex) => /* @__PURE__ */ jsx(
|
|
235
|
-
"tr",
|
|
236
|
-
{
|
|
237
|
-
className: `${item._isHighlighted ? " bg-gray-200 " : " "} hover:bg-gray-50 border-gray-200 border-b text-sm `,
|
|
238
|
-
children: columns.map(({ render, actions, classes }, colIndex) => /* @__PURE__ */ jsxs(
|
|
239
|
-
"td",
|
|
143
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
className: "shadow-lg border border-gray-200 rounded-xl overflow-x-auto",
|
|
147
|
+
style: { overflowY: "visible" },
|
|
148
|
+
children: [
|
|
149
|
+
(title || subtitle || allowSearch) && /* @__PURE__ */ jsxs("div", { className: "p-5 leading-9 flex ", children: [
|
|
150
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-grow", children: [
|
|
151
|
+
title && /* @__PURE__ */ jsx("h1", { className: "font-semibold text-xl leading-[42px] ", children: title }),
|
|
152
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "font-normal text-gray-600", children: subtitle })
|
|
153
|
+
] }),
|
|
154
|
+
/* @__PURE__ */ jsxs(
|
|
155
|
+
"div",
|
|
156
|
+
{
|
|
157
|
+
className: "flex items-center text-xl h-full p-3 cursor-pointer text-gray-500 ",
|
|
158
|
+
onClick: handleToggleShowColFilters,
|
|
159
|
+
children: [
|
|
160
|
+
!showColFilters && /* @__PURE__ */ jsx(MdOutlineFilterAlt, {}),
|
|
161
|
+
showColFilters && /* @__PURE__ */ jsx(MdOutlineFilterAltOff, {})
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
),
|
|
165
|
+
allowSearch && /* @__PURE__ */ jsx("div", { className: "ml-5", children: /* @__PURE__ */ jsxs(
|
|
166
|
+
FormField,
|
|
167
|
+
{
|
|
168
|
+
placeholder: "Vyhledávání",
|
|
169
|
+
name: "search",
|
|
170
|
+
onInputChange: handleSearchChanged,
|
|
171
|
+
type: "text",
|
|
172
|
+
value: fulltextSearch,
|
|
173
|
+
children: [
|
|
174
|
+
" ",
|
|
175
|
+
/* @__PURE__ */ jsxs("div", { className: " text-gray-500 leading-5 flex items-center h-full", children: [
|
|
176
|
+
!fulltextSearch && /* @__PURE__ */ jsx(MdSearch, {}),
|
|
177
|
+
fulltextSearch && /* @__PURE__ */ jsx(MdClose, { onClick: () => setFulltextSearch("") })
|
|
178
|
+
] })
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
) })
|
|
182
|
+
] }),
|
|
183
|
+
/* @__PURE__ */ jsx("div", { className: "", children: /* @__PURE__ */ jsxs("table", { className: "w-full leading-normal ", children: [
|
|
184
|
+
/* @__PURE__ */ jsxs("thead", { children: [
|
|
185
|
+
showColFilters && columns.findIndex((it) => it.filterType) > -1 && /* @__PURE__ */ jsx("tr", { children: columns.map(({ key, header, filterType, filterParam }) => /* @__PURE__ */ jsxs(
|
|
186
|
+
"th",
|
|
240
187
|
{
|
|
241
|
-
|
|
242
|
-
|
|
188
|
+
id: String(key) + "_filter",
|
|
189
|
+
className: ` font-medium leading-9 text-xs text-left p-0 pb-5 text-gray-600 overflow-ellipsis
|
|
190
|
+
whitespace-nowrap ${!title && !subtitle ? "border-t-0" : ""}`,
|
|
243
191
|
children: [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
192
|
+
filterType && filterType === "select" && /* @__PURE__ */ jsx(
|
|
193
|
+
SelectField,
|
|
194
|
+
{
|
|
195
|
+
label: header,
|
|
196
|
+
name: String(key) + "_filter",
|
|
197
|
+
onInputChange: (e) => filterHandler(
|
|
198
|
+
filterParam,
|
|
199
|
+
e.target.value
|
|
200
|
+
),
|
|
201
|
+
type: filterType,
|
|
202
|
+
options: filterOptions[String(filterParam)] || [],
|
|
203
|
+
value: columnFilters[String(filterParam)],
|
|
204
|
+
clearable: true,
|
|
205
|
+
className: "pl-5"
|
|
248
206
|
}
|
|
249
|
-
|
|
250
|
-
|
|
207
|
+
),
|
|
208
|
+
filterType && filterType !== "select" && /* @__PURE__ */ jsx(
|
|
209
|
+
InputField,
|
|
251
210
|
{
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
),
|
|
265
|
-
!action.icon && /* @__PURE__ */ jsxs(
|
|
266
|
-
Button,
|
|
267
|
-
{
|
|
268
|
-
variant: "transparent",
|
|
269
|
-
onClick: () => action.onClick(item),
|
|
270
|
-
children: [
|
|
271
|
-
" ",
|
|
272
|
-
action.label
|
|
273
|
-
]
|
|
274
|
-
}
|
|
275
|
-
)
|
|
276
|
-
]
|
|
277
|
-
},
|
|
278
|
-
`${rowIndex}-${colIndex}-${actionIndex}`
|
|
279
|
-
))
|
|
211
|
+
label: header,
|
|
212
|
+
name: String(key) + "_filter",
|
|
213
|
+
onInputChange: (e) => filterHandler(
|
|
214
|
+
filterParam,
|
|
215
|
+
e.target.value
|
|
216
|
+
),
|
|
217
|
+
type: filterType,
|
|
218
|
+
value: columnFilters[String(filterParam)],
|
|
219
|
+
clearable: true,
|
|
220
|
+
className: "max-w-[300px] min-w-[100px] pl-5"
|
|
221
|
+
}
|
|
222
|
+
)
|
|
280
223
|
]
|
|
281
224
|
},
|
|
282
|
-
|
|
283
|
-
))
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
225
|
+
String(key) + "_filter"
|
|
226
|
+
)) }),
|
|
227
|
+
/* @__PURE__ */ jsx("tr", { children: columns.map(({ key, header, actions, sortParam }) => /* @__PURE__ */ jsx(
|
|
228
|
+
"th",
|
|
229
|
+
{
|
|
230
|
+
className: `group font-medium leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${!title && !subtitle ? "border-t-0" : ""} ${sortParam ? " cursor-pointer " : ""}`,
|
|
231
|
+
onClick: () => sortParam ? requestSort(sortParam) : () => {
|
|
232
|
+
},
|
|
233
|
+
children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
234
|
+
header,
|
|
235
|
+
" ",
|
|
236
|
+
!actions && sortParam ? getSortIcon(sortParam) : ""
|
|
237
|
+
] })
|
|
238
|
+
},
|
|
239
|
+
String(key)
|
|
240
|
+
)) })
|
|
241
|
+
] }),
|
|
242
|
+
data && (data == null ? void 0 : data.content) && (data == null ? void 0 : data.content.length) > 0 && /* @__PURE__ */ jsxs("tbody", { className: "relative", children: [
|
|
243
|
+
isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gray-300 opacity-50 z-50", children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx(Spinner, {}) }) }),
|
|
244
|
+
data.content.map((item, rowIndex) => /* @__PURE__ */ jsx(
|
|
245
|
+
"tr",
|
|
246
|
+
{
|
|
247
|
+
className: `${item._isHighlighted ? " bg-gray-200 " : " "} hover:bg-gray-50 border-gray-200 border-b text-sm `,
|
|
248
|
+
children: columns.map(({ render, actions, classes }, colIndex) => /* @__PURE__ */ jsxs(
|
|
249
|
+
"td",
|
|
250
|
+
{
|
|
251
|
+
className: `px-5 py-2
|
|
252
|
+
${colIndex == 0 ? " font-medium text-gray-900" : " text-gray-700"} ${classes || ""}`,
|
|
253
|
+
children: [
|
|
254
|
+
render ? render(item) : "",
|
|
255
|
+
actions && actions.filter((it) => {
|
|
256
|
+
if (it.visible) {
|
|
257
|
+
return it.visible(item);
|
|
258
|
+
}
|
|
259
|
+
}).map((action, actionIndex) => /* @__PURE__ */ jsxs(
|
|
260
|
+
"div",
|
|
261
|
+
{
|
|
262
|
+
className: "flex inline-flex align-middle",
|
|
263
|
+
children: [
|
|
264
|
+
action.icon && /* @__PURE__ */ jsxs(
|
|
265
|
+
Button,
|
|
266
|
+
{
|
|
267
|
+
variant: "icon",
|
|
268
|
+
onClick: () => action.onClick(item),
|
|
269
|
+
children: [
|
|
270
|
+
" ",
|
|
271
|
+
action.icon
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
),
|
|
275
|
+
!action.icon && /* @__PURE__ */ jsxs(
|
|
276
|
+
Button,
|
|
277
|
+
{
|
|
278
|
+
variant: "transparent",
|
|
279
|
+
onClick: () => action.onClick(item),
|
|
280
|
+
children: [
|
|
281
|
+
" ",
|
|
282
|
+
action.label
|
|
283
|
+
]
|
|
284
|
+
}
|
|
285
|
+
)
|
|
286
|
+
]
|
|
287
|
+
},
|
|
288
|
+
`${rowIndex}-${colIndex}-${actionIndex}`
|
|
289
|
+
))
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
`${rowIndex}-${colIndex}`
|
|
293
|
+
))
|
|
294
|
+
},
|
|
295
|
+
rowIndex
|
|
296
|
+
)),
|
|
297
|
+
((_a = data == null ? void 0 : data.content) == null ? void 0 : _a.length) == 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
298
|
+
"td",
|
|
299
|
+
{
|
|
300
|
+
className: "px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle",
|
|
301
|
+
colSpan: columns.length,
|
|
302
|
+
children: "Žádná data"
|
|
303
|
+
},
|
|
304
|
+
"td-nodata"
|
|
305
|
+
) }, "tr-nodata ")
|
|
306
|
+
] })
|
|
307
|
+
] }) }),
|
|
308
|
+
/* @__PURE__ */ jsxs("div", { className: "w-full p-5 grid grid-cols-3", children: [
|
|
309
|
+
/* @__PURE__ */ jsx("div", { className: "text-left items-start justify-start", children: data && !data.first && /* @__PURE__ */ jsxs(
|
|
310
|
+
Button,
|
|
311
|
+
{
|
|
312
|
+
variant: "secondary",
|
|
313
|
+
onClick: prevPage,
|
|
314
|
+
className: "flex items-center float-left",
|
|
315
|
+
children: [
|
|
316
|
+
/* @__PURE__ */ jsx(MdArrowBack, { className: "mr-1.5" }),
|
|
317
|
+
" Předchozí"
|
|
318
|
+
]
|
|
319
|
+
}
|
|
320
|
+
) }),
|
|
321
|
+
/* @__PURE__ */ jsxs("div", { className: " text-center text-xs text-gray-800", children: [
|
|
322
|
+
paginationDisplay,
|
|
323
|
+
" "
|
|
324
|
+
] }),
|
|
325
|
+
/* @__PURE__ */ jsx("div", { className: "text-right items-end justify-end", children: data && !data.last && /* @__PURE__ */ jsxs(
|
|
326
|
+
Button,
|
|
327
|
+
{
|
|
328
|
+
variant: "secondary",
|
|
329
|
+
onClick: nextPage,
|
|
330
|
+
className: "flex items-center float-right",
|
|
331
|
+
children: [
|
|
332
|
+
"Následující ",
|
|
333
|
+
/* @__PURE__ */ jsx(MdArrowForward, { className: "ml-2", size: 20 })
|
|
334
|
+
]
|
|
335
|
+
}
|
|
336
|
+
) })
|
|
337
|
+
] })
|
|
338
|
+
]
|
|
339
|
+
}
|
|
340
|
+
) });
|
|
329
341
|
}
|
|
330
342
|
export {
|
|
331
343
|
DataTableServer as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableServer.js","sources":["../../../lib/components/datatable/DataTableServer.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\n\r\nimport {\r\n Button,\r\n DataTableColumn,\r\n FormField,\r\n IPageable,\r\n handleErrors,\r\n useFederationContext,\r\n} from \"../../main\";\r\nimport {\r\n MdArrowBack,\r\n MdArrowDownward,\r\n MdArrowForward,\r\n MdArrowUpward,\r\n MdClose,\r\n MdOutlineFilterAlt,\r\n MdOutlineFilterAltOff,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\n\r\ninterface DataTableServerProps<T> {\r\n url: string;\r\n columns: DataTableColumn<T | \"actions\">[];\r\n itemsPerPage?: number;\r\n title?: string;\r\n subtitle?: string;\r\n allowSearch?: boolean;\r\n}\r\n\r\ntype DataTableInternalItems = {\r\n _isHighlighted?: boolean;\r\n};\r\n\r\nfunction DataTableServer<T extends DataTableInternalItems>({\r\n url,\r\n columns,\r\n itemsPerPage = 10,\r\n title,\r\n subtitle,\r\n allowSearch = true,\r\n}: DataTableServerProps<T>) {\r\n const federationContext = useFederationContext();\r\n const [data, setData] = useState<IPageable<T>>();\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const [fulltextSearch, setFulltextSearch] = useState(\"\");\r\n const [filterOptions, setFilterOptions] = useState<Record<string, any[]>>({});\r\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>(\r\n {}\r\n );\r\n\r\n const [showColFilters, setShowColFilters] = useState(false);\r\n\r\n const [sortConfig, setSortConfig] = useState<{\r\n sortParam: string;\r\n direction: \"ascending\" | \"descending\" | null;\r\n } | null>(null);\r\n useEffect(() => {\r\n setIsLoading(true);\r\n\r\n federationContext.apiClient\r\n .get(url, {\r\n params: {\r\n ...columnFilters,\r\n pageSize: itemsPerPage,\r\n page: currentPage,\r\n sortBy: sortConfig?.sortParam,\r\n sortDirection: sortConfig?.direction,\r\n },\r\n })\r\n .then((response) => {\r\n setData(response.data);\r\n setIsLoading(false);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error fetching data:\", error);\r\n handleErrors(error, federationContext.emitter);\r\n setIsLoading(false);\r\n });\r\n }, [url, columnFilters, itemsPerPage, currentPage, sortConfig]);\r\n\r\n useEffect(() => {\r\n const fetchFilterOptions = async (column: DataTableColumn<T>) => {\r\n if (!column.filterSource) {\r\n } else {\r\n try {\r\n const response = await federationContext.apiClient.get(\r\n column.filterSource\r\n );\r\n\r\n const options = response.data.map((item: any) => ({\r\n value: item[column.filterValueKey as keyof typeof item],\r\n label: item[column.filterLabelKey as keyof typeof item],\r\n }));\r\n return options;\r\n } catch (error) {\r\n console.error(\"Error fetching filter options:\", error);\r\n return [];\r\n }\r\n }\r\n };\r\n\r\n const updateFilterOptions = async () => {\r\n const newFilterOptions: Record<string, any[]> = {};\r\n\r\n for (const column of columns) {\r\n if (\r\n column.filterType &&\r\n column.filterSource &&\r\n column.filterValueKey &&\r\n column.filterLabelKey &&\r\n column.filterParam\r\n ) {\r\n const options = await fetchFilterOptions(column);\r\n\r\n if (options) {\r\n newFilterOptions[column.filterParam as string] = [\r\n { value: \"\", label: \"\" },\r\n ...options,\r\n ];\r\n }\r\n }\r\n }\r\n console.log(\r\n \"%clibcomponentsdatatableDataTable.tsx:142 newFilterOptions\",\r\n \"color: #007acc;\",\r\n newFilterOptions\r\n );\r\n setFilterOptions(newFilterOptions);\r\n };\r\n console.log(\r\n \"%clibcomponentsDataTable.tsx:162 items, columns\",\r\n \"color: #007acc;\",\r\n columns\r\n );\r\n updateFilterOptions();\r\n }, [columns]);\r\n\r\n const requestSort = (sortParam: string) => {\r\n setSortConfig((prevSortConfig) => {\r\n if (\r\n prevSortConfig?.sortParam === sortParam &&\r\n prevSortConfig.direction !== null\r\n ) {\r\n return prevSortConfig.direction === \"ascending\"\r\n ? { sortParam, direction: \"descending\" }\r\n : null;\r\n } else {\r\n return { sortParam, direction: \"ascending\" };\r\n }\r\n });\r\n };\r\n\r\n const getSortIcon = (sortParam: string) => {\r\n if (sortConfig?.sortParam === sortParam) {\r\n return sortConfig.direction === \"ascending\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"descending\" ? (\r\n <MdArrowDownward fontSize=\"small\" />\r\n ) : (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n }\r\n return (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n };\r\n\r\n const nextPage = () => {\r\n setCurrentPage(currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n setCurrentPage(currentPage - 1);\r\n };\r\n const handleSearchChanged = (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >\r\n ) => {\r\n console.log(\r\n \"%clibcomponentsdatatableDataTable.tsx:238 e\",\r\n \"color: #007acc;\",\r\n e\r\n );\r\n setFulltextSearch(e.target?.value);\r\n setCurrentPage(0);\r\n };\r\n\r\n // Pagination display logic\r\n const paginationDisplay = `Strana ${currentPage + 1} z ${data?.totalPages}`;\r\n\r\n const filterHandler = (filterParam: keyof T, value: string) => {\r\n console.log(\r\n \"%clibcomponentsdatatableDataTable.tsx:223 object filterParam, value, columnFilters \",\r\n \"color: #007acc;\",\r\n filterParam,\r\n value,\r\n columnFilters\r\n );\r\n setColumnFilters((prev) => ({ ...prev, [filterParam]: value }));\r\n setCurrentPage(0);\r\n };\r\n const handleToggleShowColFilters = () => {\r\n setShowColFilters(!showColFilters);\r\n if (!showColFilters) {\r\n setColumnFilters({});\r\n }\r\n };\r\n\r\n //if (isLoading) return <Spinner />;\r\n return (\r\n <>\r\n <div className=\"container shadow-lg border border-gray-200 rounded-xl overflow-hidden \">\r\n {(title || subtitle || allowSearch) && (\r\n <div className=\"p-5 leading-9 flex \">\r\n <div className=\"flex-grow\">\r\n {title && (\r\n <h1 className=\"font-semibold text-xl leading-[42px] \">\r\n {title}\r\n </h1>\r\n )}\r\n {subtitle && (\r\n <p className=\"font-normal text-gray-600\">{subtitle}</p>\r\n )}\r\n </div>\r\n\r\n <div\r\n className=\"flex items-center text-xl h-full p-3 cursor-pointer text-gray-500 \"\r\n onClick={handleToggleShowColFilters}\r\n >\r\n {!showColFilters && <MdOutlineFilterAlt />}\r\n {showColFilters && <MdOutlineFilterAltOff />}\r\n </div>\r\n {allowSearch && (\r\n <div className=\"ml-5\">\r\n <FormField\r\n placeholder=\"Vyhledávání\"\r\n name=\"search\"\r\n onInputChange={handleSearchChanged}\r\n type=\"text\"\r\n value={fulltextSearch}\r\n >\r\n {\" \"}\r\n <div className=\" text-gray-500 leading-5 flex items-center h-full\">\r\n {!fulltextSearch && <MdSearch></MdSearch>}\r\n {fulltextSearch && (\r\n <MdClose onClick={() => setFulltextSearch(\"\")}></MdClose>\r\n )}\r\n </div>\r\n </FormField>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full leading-normal\">\r\n <thead>\r\n {showColFilters &&\r\n columns.findIndex((it) => it.filterType) > -1 && (\r\n <tr>\r\n {columns.map(({ key, header, filterType, filterParam }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n id={String(key) + \"_filter\"}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={` font-medium cursor-pointer leading-9 text-xs text-left p-0 pb-5 text-gray-600 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n >\r\n {filterType && (\r\n <div className=\"ml-5\">\r\n <FormField\r\n label={header}\r\n name={String(key) + \"_filter\"}\r\n onInputChange={(e) =>\r\n filterHandler(\r\n filterParam as keyof T,\r\n e.target.value\r\n )\r\n }\r\n type={filterType}\r\n options={filterOptions[String(filterParam)] || []}\r\n value={columnFilters[String(filterParam)]}\r\n clearable\r\n className=\"max-w-[300px] min-w-[100px]\"\r\n ></FormField>\r\n </div>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n )}\r\n <tr>\r\n {columns.map(({ key, header, actions, sortParam }) => (\r\n <th\r\n key={String(key)}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={`group font-medium leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n } ${sortParam ? \" cursor-pointer \" : \"\"}`}\r\n onClick={() =>\r\n sortParam ? requestSort(sortParam) : () => {}\r\n }\r\n >\r\n <span className=\"inline-flex items-center gap-2\">\r\n {header}{\" \"}\r\n {!actions && sortParam ? getSortIcon(sortParam) : \"\"}\r\n </span>\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n {!isLoading && (\r\n <tbody>\r\n {data &&\r\n data.content &&\r\n data.content.map((item, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className={`${\r\n item._isHighlighted ? \" bg-gray-200 \" : \" \"\r\n } hover:bg-gray-50 border-gray-200 border-b text-sm `}\r\n >\r\n {columns.map(({ render, actions, classes }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n className={`px-5 py-2\r\n ${\r\n colIndex == 0\r\n ? \" font-medium text-gray-900\"\r\n : \" text-gray-700\"\r\n } ${classes || \"\"}`}\r\n >\r\n {render ? render(item) : \"\"}\r\n {actions &&\r\n actions\r\n .filter((it) => {\r\n if (it.visible) {\r\n return it.visible(item);\r\n } else true;\r\n })\r\n .map((action, actionIndex) => (\r\n <div\r\n key={`${rowIndex}-${colIndex}-${actionIndex}`}\r\n className=\"flex inline-flex align-middle\"\r\n >\r\n {action.icon && (\r\n <Button\r\n variant=\"icon\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.icon}\r\n </Button>\r\n )}\r\n {!action.icon && (\r\n <Button\r\n variant=\"transparent\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.label}\r\n </Button>\r\n )}\r\n </div>\r\n ))}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n {data?.content?.length == 0 && (\r\n <tr key=\"tr-nodata \">\r\n <td\r\n key=\"td-nodata\"\r\n className=\"px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle\"\r\n colSpan={columns.length}\r\n >\r\n Žádná data\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n )}\r\n </table>\r\n </div>\r\n <div className=\"w-full p-5 grid grid-cols-3\">\r\n <div className=\"text-left items-start justify-start\">\r\n {data && !data.first && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={prevPage}\r\n className=\"flex items-center float-left\"\r\n >\r\n <MdArrowBack className=\"mr-1.5\" /> Předchozí\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\" text-center text-xs text-gray-800\">\r\n {paginationDisplay} {/* Updated to use dynamic page numbers */}\r\n </div>\r\n <div className=\"text-right items-end justify-end\">\r\n {data && !data.last && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={nextPage}\r\n className=\"flex items-center float-right\"\r\n >\r\n Následující <MdArrowForward className=\"ml-2\" size={20} />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default DataTableServer;\r\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataTableServer.js","sources":["../../../lib/components/datatable/DataTableServer.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\n\r\nimport {\r\n Button,\r\n DataTableColumn,\r\n FormField,\r\n IPageable,\r\n Spinner,\r\n handleErrors,\r\n useFederationContext,\r\n} from \"../../main\";\r\nimport {\r\n MdArrowBack,\r\n MdArrowDownward,\r\n MdArrowForward,\r\n MdArrowUpward,\r\n MdClose,\r\n MdOutlineFilterAlt,\r\n MdOutlineFilterAltOff,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\nimport SelectField from \"../form/SelectField\";\r\nimport InputField from \"../form/InputField\";\r\n\r\ninterface DataTableServerProps<T> {\r\n url: string;\r\n columns: DataTableColumn<T | \"actions\">[];\r\n itemsPerPage?: number;\r\n title?: string;\r\n subtitle?: string;\r\n allowSearch?: boolean;\r\n}\r\n\r\ntype DataTableInternalItems = {\r\n _isHighlighted?: boolean;\r\n};\r\n\r\nfunction DataTableServer<T extends DataTableInternalItems>({\r\n url,\r\n columns,\r\n itemsPerPage = 10,\r\n title,\r\n subtitle,\r\n allowSearch = true,\r\n}: DataTableServerProps<T>) {\r\n const federationContext = useFederationContext();\r\n const [data, setData] = useState<IPageable<T>>();\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const [fulltextSearch, setFulltextSearch] = useState(\"\");\r\n const [filterOptions, setFilterOptions] = useState<Record<string, any[]>>({});\r\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>(\r\n {}\r\n );\r\n\r\n const [showColFilters, setShowColFilters] = useState(false);\r\n\r\n const [sortConfig, setSortConfig] = useState<{\r\n sortParam: string;\r\n direction: \"ascending\" | \"descending\" | null;\r\n } | null>(null);\r\n useEffect(() => {\r\n setIsLoading(true);\r\n federationContext.apiClient\r\n .get(url, {\r\n params: {\r\n ...columnFilters,\r\n pageSize: itemsPerPage,\r\n page: currentPage,\r\n sortBy: sortConfig?.sortParam,\r\n sortDirection: sortConfig?.direction,\r\n },\r\n })\r\n .then((response) => {\r\n setData(response.data);\r\n setIsLoading(false);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error fetching data:\", error);\r\n handleErrors(error, federationContext.emitter);\r\n setIsLoading(false);\r\n });\r\n }, [url, columnFilters, itemsPerPage, currentPage, sortConfig]);\r\n\r\n useEffect(() => {\r\n const fetchFilterOptions = async (column: DataTableColumn<T>) => {\r\n if (!column.filterSource) {\r\n } else {\r\n try {\r\n const response = await federationContext.apiClient.get(\r\n column.filterSource\r\n );\r\n\r\n const options = response.data.map((item: any) => ({\r\n value: item[column.filterValueKey as keyof typeof item],\r\n label: item[column.filterLabelKey as keyof typeof item],\r\n }));\r\n return options;\r\n } catch (error) {\r\n console.error(\"Error fetching filter options:\", error);\r\n return [];\r\n }\r\n }\r\n };\r\n\r\n const updateFilterOptions = async () => {\r\n const newFilterOptions: Record<string, any[]> = {};\r\n\r\n for (const column of columns) {\r\n if (\r\n column.filterType &&\r\n column.filterSource &&\r\n column.filterValueKey &&\r\n column.filterLabelKey &&\r\n column.filterParam\r\n ) {\r\n const options = await fetchFilterOptions(column);\r\n\r\n if (options) {\r\n newFilterOptions[column.filterParam as string] = [\r\n { value: \"\", label: \"\" },\r\n ...options,\r\n ];\r\n }\r\n }\r\n }\r\n\r\n setFilterOptions(newFilterOptions);\r\n };\r\n\r\n updateFilterOptions();\r\n }, [columns]);\r\n\r\n const requestSort = (sortParam: string) => {\r\n setSortConfig((prevSortConfig) => {\r\n if (\r\n prevSortConfig?.sortParam === sortParam &&\r\n prevSortConfig.direction !== null\r\n ) {\r\n return prevSortConfig.direction === \"ascending\"\r\n ? { sortParam, direction: \"descending\" }\r\n : null;\r\n } else {\r\n return { sortParam, direction: \"ascending\" };\r\n }\r\n });\r\n };\r\n\r\n const getSortIcon = (sortParam: string) => {\r\n if (sortConfig?.sortParam === sortParam) {\r\n return sortConfig.direction === \"ascending\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"descending\" ? (\r\n <MdArrowDownward fontSize=\"small\" />\r\n ) : (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n }\r\n return (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n };\r\n\r\n const nextPage = () => {\r\n setCurrentPage(currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n setCurrentPage(currentPage - 1);\r\n };\r\n const handleSearchChanged = (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >\r\n ) => {\r\n console.log(\r\n \"%clibcomponentsdatatableDataTable.tsx:238 e\",\r\n \"color: #007acc;\",\r\n e\r\n );\r\n setFulltextSearch(e.target?.value);\r\n setCurrentPage(0);\r\n };\r\n\r\n // Pagination display logic\r\n const paginationDisplay = `Strana ${currentPage + 1} z ${data?.totalPages}`;\r\n\r\n const filterHandler = (filterParam: keyof T, value: string) => {\r\n setColumnFilters((prev) => ({ ...prev, [filterParam]: value }));\r\n setCurrentPage(0);\r\n };\r\n const handleToggleShowColFilters = () => {\r\n if (showColFilters) {\r\n setColumnFilters({});\r\n }\r\n setShowColFilters(!showColFilters);\r\n };\r\n\r\n //if (isLoading) return <Spinner />;\r\n return (\r\n <>\r\n <div\r\n className=\"shadow-lg border border-gray-200 rounded-xl overflow-x-auto\"\r\n style={{ overflowY: \"visible\" }}\r\n >\r\n {(title || subtitle || allowSearch) && (\r\n <div className=\"p-5 leading-9 flex \">\r\n <div className=\"flex-grow\">\r\n {title && (\r\n <h1 className=\"font-semibold text-xl leading-[42px] \">\r\n {title}\r\n </h1>\r\n )}\r\n {subtitle && (\r\n <p className=\"font-normal text-gray-600\">{subtitle}</p>\r\n )}\r\n </div>\r\n\r\n <div\r\n className=\"flex items-center text-xl h-full p-3 cursor-pointer text-gray-500 \"\r\n onClick={handleToggleShowColFilters}\r\n >\r\n {!showColFilters && <MdOutlineFilterAlt />}\r\n {showColFilters && <MdOutlineFilterAltOff />}\r\n </div>\r\n {allowSearch && (\r\n <div className=\"ml-5\">\r\n <FormField\r\n placeholder=\"Vyhledávání\"\r\n name=\"search\"\r\n onInputChange={handleSearchChanged}\r\n type=\"text\"\r\n value={fulltextSearch}\r\n >\r\n {\" \"}\r\n <div className=\" text-gray-500 leading-5 flex items-center h-full\">\r\n {!fulltextSearch && <MdSearch></MdSearch>}\r\n {fulltextSearch && (\r\n <MdClose onClick={() => setFulltextSearch(\"\")}></MdClose>\r\n )}\r\n </div>\r\n </FormField>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"\">\r\n <table className=\"w-full leading-normal \">\r\n <thead>\r\n {showColFilters &&\r\n columns.findIndex((it) => it.filterType) > -1 && (\r\n <tr>\r\n {columns.map(({ key, header, filterType, filterParam }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n id={String(key) + \"_filter\"}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={` font-medium leading-9 text-xs text-left p-0 pb-5 text-gray-600 overflow-ellipsis \r\n whitespace-nowrap ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n >\r\n {filterType && filterType === \"select\" && (\r\n <SelectField\r\n label={header}\r\n name={String(key) + \"_filter\"}\r\n onInputChange={(e) =>\r\n filterHandler(\r\n filterParam as keyof T,\r\n e.target.value\r\n )\r\n }\r\n type={filterType}\r\n options={filterOptions[String(filterParam)] || []}\r\n value={columnFilters[String(filterParam)]}\r\n clearable\r\n className=\"pl-5\"\r\n ></SelectField>\r\n )}\r\n {filterType && filterType !== \"select\" && (\r\n <InputField\r\n label={header}\r\n name={String(key) + \"_filter\"}\r\n onInputChange={(e) =>\r\n filterHandler(\r\n filterParam as keyof T,\r\n e.target.value\r\n )\r\n }\r\n type={filterType}\r\n value={columnFilters[String(filterParam)]}\r\n clearable\r\n className=\"max-w-[300px] min-w-[100px] pl-5\"\r\n ></InputField>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n )}\r\n <tr>\r\n {columns.map(({ key, header, actions, sortParam }) => (\r\n <th\r\n key={String(key)}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={`group font-medium leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n } ${sortParam ? \" cursor-pointer \" : \"\"}`}\r\n onClick={() =>\r\n sortParam ? requestSort(sortParam) : () => {}\r\n }\r\n >\r\n <span className=\"inline-flex items-center gap-2\">\r\n {header}{\" \"}\r\n {!actions && sortParam ? getSortIcon(sortParam) : \"\"}\r\n </span>\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n {data && data?.content && data?.content.length > 0 && (\r\n <tbody className=\"relative\">\r\n {isLoading && (\r\n <div className=\"absolute inset-0 bg-gray-300 opacity-50 z-50\">\r\n <div className=\"flex items-center justify-center h-full\">\r\n <Spinner />\r\n </div>\r\n </div>\r\n )}\r\n {data.content.map((item, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className={`${\r\n item._isHighlighted ? \" bg-gray-200 \" : \" \"\r\n } hover:bg-gray-50 border-gray-200 border-b text-sm `}\r\n >\r\n {columns.map(({ render, actions, classes }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n className={`px-5 py-2\r\n ${\r\n colIndex == 0\r\n ? \" font-medium text-gray-900\"\r\n : \" text-gray-700\"\r\n } ${classes || \"\"}`}\r\n >\r\n {render ? render(item) : \"\"}\r\n {actions &&\r\n actions\r\n .filter((it) => {\r\n if (it.visible) {\r\n return it.visible(item);\r\n } else true;\r\n })\r\n .map((action, actionIndex) => (\r\n <div\r\n key={`${rowIndex}-${colIndex}-${actionIndex}`}\r\n className=\"flex inline-flex align-middle\"\r\n >\r\n {action.icon && (\r\n <Button\r\n variant=\"icon\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.icon}\r\n </Button>\r\n )}\r\n {!action.icon && (\r\n <Button\r\n variant=\"transparent\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.label}\r\n </Button>\r\n )}\r\n </div>\r\n ))}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n {data?.content?.length == 0 && (\r\n <tr key=\"tr-nodata \">\r\n <td\r\n key=\"td-nodata\"\r\n className=\"px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle\"\r\n colSpan={columns.length}\r\n >\r\n Žádná data\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n )}\r\n </table>\r\n </div>\r\n <div className=\"w-full p-5 grid grid-cols-3\">\r\n <div className=\"text-left items-start justify-start\">\r\n {data && !data.first && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={prevPage}\r\n className=\"flex items-center float-left\"\r\n >\r\n <MdArrowBack className=\"mr-1.5\" /> Předchozí\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\" text-center text-xs text-gray-800\">\r\n {paginationDisplay} {/* Updated to use dynamic page numbers */}\r\n </div>\r\n <div className=\"text-right items-end justify-end\">\r\n {data && !data.last && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={nextPage}\r\n className=\"flex items-center float-right\"\r\n >\r\n Následující <MdArrowForward className=\"ml-2\" size={20} />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default DataTableServer;\r\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,53 +1,10 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useEffect
|
|
2
|
+
import { useState, useRef, useEffect } from "react";
|
|
3
3
|
import '../../assets/tailwind.css';/* empty css */
|
|
4
|
-
import {
|
|
4
|
+
import { M as MdExpandLess, a as MdExpandMore, b as MdClose } from "../../index-BDqNIr_C.js";
|
|
5
5
|
import "../../contexts/FederationContext.js";
|
|
6
6
|
import { useFederationContext } from "../../contexts/useFederationContext.js";
|
|
7
|
-
|
|
8
|
-
var args = [];
|
|
9
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
10
|
-
args[_i - 1] = arguments[_i];
|
|
11
|
-
}
|
|
12
|
-
if (obj && obj.addEventListener) {
|
|
13
|
-
obj.addEventListener.apply(obj, args);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function off(obj) {
|
|
17
|
-
var args = [];
|
|
18
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
19
|
-
args[_i - 1] = arguments[_i];
|
|
20
|
-
}
|
|
21
|
-
if (obj && obj.removeEventListener) {
|
|
22
|
-
obj.removeEventListener.apply(obj, args);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
var defaultEvents = ["mousedown", "touchstart"];
|
|
26
|
-
var useClickAway = function(ref, onClickAway, events) {
|
|
27
|
-
if (events === void 0) {
|
|
28
|
-
events = defaultEvents;
|
|
29
|
-
}
|
|
30
|
-
var savedCallback = useRef(onClickAway);
|
|
31
|
-
useEffect(function() {
|
|
32
|
-
savedCallback.current = onClickAway;
|
|
33
|
-
}, [onClickAway]);
|
|
34
|
-
useEffect(function() {
|
|
35
|
-
var handler = function(event) {
|
|
36
|
-
var el = ref.current;
|
|
37
|
-
el && !el.contains(event.target) && savedCallback.current(event);
|
|
38
|
-
};
|
|
39
|
-
for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {
|
|
40
|
-
var eventName = events_1[_i];
|
|
41
|
-
on(document, eventName, handler);
|
|
42
|
-
}
|
|
43
|
-
return function() {
|
|
44
|
-
for (var _i2 = 0, events_2 = events; _i2 < events_2.length; _i2++) {
|
|
45
|
-
var eventName2 = events_2[_i2];
|
|
46
|
-
off(document, eventName2, handler);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}, [events, ref]);
|
|
50
|
-
};
|
|
7
|
+
import { u as useClickAway } from "../../useClickAway-CH9ykBsx.js";
|
|
51
8
|
const AutocompleteSearchBar = ({
|
|
52
9
|
label,
|
|
53
10
|
name,
|
|
@@ -331,7 +288,7 @@ const SearchInput = ({
|
|
|
331
288
|
"input",
|
|
332
289
|
{
|
|
333
290
|
type: "text",
|
|
334
|
-
className: `pl-1 py-1 border-gray-800 w-full ${isLoading ? "pr-10" : "pr-20"}`,
|
|
291
|
+
className: `pl-1 py-1 border-gray-800 w-full ${isLoading ? "pr-10 " : "pr-20"}`,
|
|
335
292
|
value,
|
|
336
293
|
onChange,
|
|
337
294
|
onKeyDown,
|
|
@@ -388,7 +345,7 @@ const SearchInput = ({
|
|
|
388
345
|
value && !isLoading && /* @__PURE__ */ jsx(
|
|
389
346
|
MdClose,
|
|
390
347
|
{
|
|
391
|
-
className: "material-icons absolute right-
|
|
348
|
+
className: "material-icons absolute right-6 cursor-pointer text-gray-500",
|
|
392
349
|
onClick: handleClearQuery
|
|
393
350
|
}
|
|
394
351
|
)
|