@addsign/moje-agenda-shared-lib 0.0.71 → 0.0.74
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 +16 -4
- package/dist/components/Calendar.js +3 -3
- package/dist/components/Calendar.js.map +1 -1
- package/dist/components/datatable/DataTableServer.d.ts +10 -1
- package/dist/components/datatable/DataTableServer.js +234 -147
- package/dist/components/datatable/DataTableServer.js.map +1 -1
- package/dist/components/datatable/types.d.ts +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/assets/tailwind.css
CHANGED
|
@@ -777,6 +777,9 @@ video {
|
|
|
777
777
|
.hidden {
|
|
778
778
|
display: none;
|
|
779
779
|
}
|
|
780
|
+
.h-10 {
|
|
781
|
+
height: 2.5rem;
|
|
782
|
+
}
|
|
780
783
|
.h-11 {
|
|
781
784
|
height: 2.75rem;
|
|
782
785
|
}
|
|
@@ -828,6 +831,9 @@ video {
|
|
|
828
831
|
.h-\[400px\] {
|
|
829
832
|
height: 400px;
|
|
830
833
|
}
|
|
834
|
+
.h-\[72px\] {
|
|
835
|
+
height: 72px;
|
|
836
|
+
}
|
|
831
837
|
.h-full {
|
|
832
838
|
height: 100%;
|
|
833
839
|
}
|
|
@@ -894,6 +900,9 @@ video {
|
|
|
894
900
|
.w-96 {
|
|
895
901
|
width: 24rem;
|
|
896
902
|
}
|
|
903
|
+
.w-\[20px\] {
|
|
904
|
+
width: 20px;
|
|
905
|
+
}
|
|
897
906
|
.w-\[calc\(100\%-40px\)\] {
|
|
898
907
|
width: calc(100% - 40px);
|
|
899
908
|
}
|
|
@@ -958,6 +967,9 @@ video {
|
|
|
958
967
|
.cursor-no-drop {
|
|
959
968
|
cursor: no-drop;
|
|
960
969
|
}
|
|
970
|
+
.cursor-not-allowed {
|
|
971
|
+
cursor: not-allowed;
|
|
972
|
+
}
|
|
961
973
|
.cursor-pointer {
|
|
962
974
|
cursor: pointer;
|
|
963
975
|
}
|
|
@@ -1558,6 +1570,10 @@ video {
|
|
|
1558
1570
|
padding-left: 0.375rem;
|
|
1559
1571
|
padding-right: 0.375rem;
|
|
1560
1572
|
}
|
|
1573
|
+
.px-10 {
|
|
1574
|
+
padding-left: 2.5rem;
|
|
1575
|
+
padding-right: 2.5rem;
|
|
1576
|
+
}
|
|
1561
1577
|
.px-2 {
|
|
1562
1578
|
padding-left: 0.5rem;
|
|
1563
1579
|
padding-right: 0.5rem;
|
|
@@ -1578,10 +1594,6 @@ video {
|
|
|
1578
1594
|
padding-left: 1.5rem;
|
|
1579
1595
|
padding-right: 1.5rem;
|
|
1580
1596
|
}
|
|
1581
|
-
.px-8 {
|
|
1582
|
-
padding-left: 2rem;
|
|
1583
|
-
padding-right: 2rem;
|
|
1584
|
-
}
|
|
1585
1597
|
.py-0 {
|
|
1586
1598
|
padding-top: 0px;
|
|
1587
1599
|
padding-bottom: 0px;
|
|
@@ -101,7 +101,7 @@ const Calendar = ({
|
|
|
101
101
|
"div",
|
|
102
102
|
{
|
|
103
103
|
onClick: goToPreviousMonth,
|
|
104
|
-
className: "mr-5 px-
|
|
104
|
+
className: "mr-5 px-10 py-4 cursor-pointer hover:bg-gray-150 rounded-lg text-sm",
|
|
105
105
|
children: /* @__PURE__ */ jsx(FaChevronLeft, {})
|
|
106
106
|
}
|
|
107
107
|
),
|
|
@@ -114,7 +114,7 @@ const Calendar = ({
|
|
|
114
114
|
"div",
|
|
115
115
|
{
|
|
116
116
|
onClick: goToNextMonth,
|
|
117
|
-
className: "px-
|
|
117
|
+
className: "px-10 py-4 cursor-pointer hover:bg-gray-150 rounded-lg text-sm",
|
|
118
118
|
children: /* @__PURE__ */ jsx(FaChevronRight, {})
|
|
119
119
|
}
|
|
120
120
|
)
|
|
@@ -141,7 +141,7 @@ const Calendar = ({
|
|
|
141
141
|
return /* @__PURE__ */ jsxs(
|
|
142
142
|
"div",
|
|
143
143
|
{
|
|
144
|
-
className: "p-0 align-middle justify-center text-center border-t
|
|
144
|
+
className: "p-0 align-middle justify-center text-center border-t cursor-not-allowed " + (dayIndex > 4 ? "bg-gray-100 col-span-1 " : " col-span-2 ") + (isPublicHoliday ? " bg-gray-150 " : "") + (dayIndex !== 0 ? " border-l " : ""),
|
|
145
145
|
children: [
|
|
146
146
|
day && /* @__PURE__ */ jsxs("div", { className: "py-1", children: [
|
|
147
147
|
day,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sources":["../../lib/components/Calendar.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\r\n\r\nexport interface ICalendarItem {\r\n id: number;\r\n label?: string;\r\n from: Date;\r\n to: Date;\r\n background?: string;\r\n color?: string;\r\n tooltip?: string;\r\n}\r\n\r\ntype ICalendarProps = {\r\n items: ICalendarItem[];\r\n startingDate?: Date;\r\n publicHolidays?: string[];\r\n};\r\n\r\n// Check if a day is within any item's date range\r\n\r\nconst Calendar: React.FunctionComponent<ICalendarProps> = ({\r\n items,\r\n startingDate,\r\n publicHolidays,\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(\r\n startingDate ? startingDate.getMonth() : new Date().getMonth()\r\n );\r\n\r\n const [currentYear, setCurrentYear] = useState(\r\n startingDate ? startingDate.getFullYear() : new Date().getFullYear()\r\n );\r\n\r\n useEffect(() => {\r\n if (startingDate) {\r\n setCurrentMonth(startingDate.getMonth());\r\n setCurrentYear(startingDate.getFullYear());\r\n }\r\n }, [startingDate]);\r\n const [calendarData, setCalendarData] = useState<\r\n (string | number | JSX.Element)[][]\r\n >([]);\r\n\r\n const monthNames: string[] = [\r\n \"Leden\",\r\n \"Únor\",\r\n \"Březen\",\r\n \"Duben\",\r\n \"Květen\",\r\n \"Červen\",\r\n \"Červenec\",\r\n \"Srpen\",\r\n \"Září\",\r\n \"Říjen\",\r\n \"Listopad\",\r\n \"Prosinec\",\r\n ];\r\n const dayNames: string[] = [\r\n \"Pondělí\",\r\n \"Úterý\",\r\n \"Středa\",\r\n \"Čtvrtek\",\r\n \"Pátek\",\r\n \"So\",\r\n \"Ne\",\r\n ];\r\n\r\n // Leap year check\r\n const isLeapYear = (year: number) =>\r\n (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n\r\n // Days in each month\r\n const daysInMonth = useCallback((month: number, year: number) => {\r\n if (month === 1) {\r\n // February\r\n return isLeapYear(year) ? 29 : 28;\r\n }\r\n if ([0, 2, 4, 6, 7, 9, 11].includes(month)) {\r\n // Months with 31 days\r\n\r\n return 31;\r\n }\r\n\r\n return 30; // Months with 30 days\r\n }, []);\r\n\r\n // Generate days for a month\r\n const generateMonthDays = useCallback(\r\n (month: number, year: number) => {\r\n const days = [];\r\n // const firstDayOfMonth = new Date(year, month, 1).getDay()\r\n\r\n // Adjusted to make week start from Monday\r\n let firstDayOfMonth = new Date(year, month, 1).getDay() - 1;\r\n if (firstDayOfMonth === -1) firstDayOfMonth = 6; // Sunday becomes 6 instead of -1\r\n\r\n let dayCounter = 1;\r\n\r\n for (let week = 0; week < 6; week++) {\r\n const weekDays = [];\r\n for (let day = 0; day < 7; day++) {\r\n if (week === 0 && day < firstDayOfMonth) {\r\n weekDays.push(\"\");\r\n } else if (dayCounter > daysInMonth(month, year)) {\r\n weekDays.push(\"\");\r\n } else {\r\n weekDays.push(dayCounter++);\r\n }\r\n }\r\n days.push(weekDays);\r\n }\r\n return days;\r\n },\r\n [daysInMonth]\r\n );\r\n\r\n useEffect(() => {\r\n setCalendarData(generateMonthDays(currentMonth, currentYear));\r\n }, [currentMonth, currentYear, generateMonthDays]);\r\n\r\n // Navigation handlers\r\n const goToNextMonth = () => {\r\n setCurrentMonth((prev) => (prev === 11 ? 0 : prev + 1));\r\n if (currentMonth === 11) {\r\n setCurrentYear((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const goToPreviousMonth = () => {\r\n setCurrentMonth((prev) => (prev === 0 ? 11 : prev - 1));\r\n if (currentMonth === 0) {\r\n setCurrentYear((prev) => prev - 1);\r\n }\r\n };\r\n const findItemsForDay = (\r\n day: number,\r\n month: number,\r\n year: number\r\n ): ICalendarItem[] => {\r\n const date = new Date(year, month, day);\r\n\r\n return items.filter((item) => date >= item.from && date <= item.to);\r\n };\r\n return (\r\n <div className=\"flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border overflow-hidden \">\r\n <div className=\"flex justify-between items-center text-black p-2\">\r\n <div\r\n onClick={goToPreviousMonth}\r\n className=\"mr-5 px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronLeft />\r\n </div>\r\n <h2 className=\"font-semibold text-base\">\r\n {monthNames[currentMonth]} {currentYear}\r\n </h2>\r\n\r\n <div\r\n onClick={goToNextMonth}\r\n className=\"px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronRight />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-12 pb-0 \">\r\n {dayNames.map((day, index) => (\r\n <div\r\n key={index}\r\n className={\r\n \"py-1 px-4 text-center font-semibold border-t \" +\r\n (index > 4 ? \" bg-gray-100 col-span-1 \" : \" col-span-2 \")\r\n }\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n {calendarData.map((week, weekIndex) => (\r\n <React.Fragment key={weekIndex}>\r\n {week.map((day, dayIndex) => {\r\n const itemsForDay = day\r\n ? findItemsForDay(day as number, currentMonth, currentYear)\r\n : [];\r\n\r\n const date = new Date(\r\n currentYear,\r\n currentMonth,\r\n (day as number) + 1\r\n );\r\n const isPublicHoliday = publicHolidays?.includes(\r\n date.toISOString().split(\"T\")[0]\r\n );\r\n\r\n return (\r\n <div\r\n key={dayIndex}\r\n className={\r\n \"p-0 align-middle justify-center text-center border-t hover:bg-gray-150 \" +\r\n (dayIndex > 4\r\n ? \"bg-gray-100 col-span-1 \"\r\n : \" col-span-2 \") +\r\n (isPublicHoliday ? \" bg-gray-150 \" : \"\") +\r\n (dayIndex !== 0 ? \" border-l \" : \"\")\r\n }\r\n >\r\n {day && <div className=\"py-1\">{day} </div>}\r\n {itemsForDay.map((item, itemIndex) => (\r\n <div\r\n key={itemIndex}\r\n className={\r\n \"dataItem w-full py-1 text-white text-center mt-0 -pr-1 \"\r\n }\r\n style={{\r\n backgroundColor:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"gray\"\r\n : item.background,\r\n color:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"white\"\r\n : item.color,\r\n }}\r\n data-tooltip-target={\"tooltip-\" + item.id}\r\n title={item.tooltip}\r\n >\r\n {item.label}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Calendar;\r\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../lib/components/Calendar.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\r\n\r\nexport interface ICalendarItem {\r\n id: number;\r\n label?: string;\r\n from: Date;\r\n to: Date;\r\n background?: string;\r\n color?: string;\r\n tooltip?: string;\r\n}\r\n\r\ntype ICalendarProps = {\r\n items: ICalendarItem[];\r\n startingDate?: Date;\r\n publicHolidays?: string[];\r\n};\r\n\r\n// Check if a day is within any item's date range\r\n\r\nconst Calendar: React.FunctionComponent<ICalendarProps> = ({\r\n items,\r\n startingDate,\r\n publicHolidays,\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(\r\n startingDate ? startingDate.getMonth() : new Date().getMonth()\r\n );\r\n\r\n const [currentYear, setCurrentYear] = useState(\r\n startingDate ? startingDate.getFullYear() : new Date().getFullYear()\r\n );\r\n\r\n useEffect(() => {\r\n if (startingDate) {\r\n setCurrentMonth(startingDate.getMonth());\r\n setCurrentYear(startingDate.getFullYear());\r\n }\r\n }, [startingDate]);\r\n const [calendarData, setCalendarData] = useState<\r\n (string | number | JSX.Element)[][]\r\n >([]);\r\n\r\n const monthNames: string[] = [\r\n \"Leden\",\r\n \"Únor\",\r\n \"Březen\",\r\n \"Duben\",\r\n \"Květen\",\r\n \"Červen\",\r\n \"Červenec\",\r\n \"Srpen\",\r\n \"Září\",\r\n \"Říjen\",\r\n \"Listopad\",\r\n \"Prosinec\",\r\n ];\r\n const dayNames: string[] = [\r\n \"Pondělí\",\r\n \"Úterý\",\r\n \"Středa\",\r\n \"Čtvrtek\",\r\n \"Pátek\",\r\n \"So\",\r\n \"Ne\",\r\n ];\r\n\r\n // Leap year check\r\n const isLeapYear = (year: number) =>\r\n (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n\r\n // Days in each month\r\n const daysInMonth = useCallback((month: number, year: number) => {\r\n if (month === 1) {\r\n // February\r\n return isLeapYear(year) ? 29 : 28;\r\n }\r\n if ([0, 2, 4, 6, 7, 9, 11].includes(month)) {\r\n // Months with 31 days\r\n\r\n return 31;\r\n }\r\n\r\n return 30; // Months with 30 days\r\n }, []);\r\n\r\n // Generate days for a month\r\n const generateMonthDays = useCallback(\r\n (month: number, year: number) => {\r\n const days = [];\r\n // const firstDayOfMonth = new Date(year, month, 1).getDay()\r\n\r\n // Adjusted to make week start from Monday\r\n let firstDayOfMonth = new Date(year, month, 1).getDay() - 1;\r\n if (firstDayOfMonth === -1) firstDayOfMonth = 6; // Sunday becomes 6 instead of -1\r\n\r\n let dayCounter = 1;\r\n\r\n for (let week = 0; week < 6; week++) {\r\n const weekDays = [];\r\n for (let day = 0; day < 7; day++) {\r\n if (week === 0 && day < firstDayOfMonth) {\r\n weekDays.push(\"\");\r\n } else if (dayCounter > daysInMonth(month, year)) {\r\n weekDays.push(\"\");\r\n } else {\r\n weekDays.push(dayCounter++);\r\n }\r\n }\r\n days.push(weekDays);\r\n }\r\n return days;\r\n },\r\n [daysInMonth]\r\n );\r\n\r\n useEffect(() => {\r\n setCalendarData(generateMonthDays(currentMonth, currentYear));\r\n }, [currentMonth, currentYear, generateMonthDays]);\r\n\r\n // Navigation handlers\r\n const goToNextMonth = () => {\r\n setCurrentMonth((prev) => (prev === 11 ? 0 : prev + 1));\r\n if (currentMonth === 11) {\r\n setCurrentYear((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const goToPreviousMonth = () => {\r\n setCurrentMonth((prev) => (prev === 0 ? 11 : prev - 1));\r\n if (currentMonth === 0) {\r\n setCurrentYear((prev) => prev - 1);\r\n }\r\n };\r\n const findItemsForDay = (\r\n day: number,\r\n month: number,\r\n year: number\r\n ): ICalendarItem[] => {\r\n const date = new Date(year, month, day);\r\n\r\n return items.filter((item) => date >= item.from && date <= item.to);\r\n };\r\n return (\r\n <div className=\"flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border overflow-hidden \">\r\n <div className=\"flex justify-between items-center text-black p-2\">\r\n <div\r\n onClick={goToPreviousMonth}\r\n className=\"mr-5 px-10 py-4 cursor-pointer hover:bg-gray-150 rounded-lg text-sm\"\r\n >\r\n <FaChevronLeft />\r\n </div>\r\n <h2 className=\"font-semibold text-base\">\r\n {monthNames[currentMonth]} {currentYear}\r\n </h2>\r\n\r\n <div\r\n onClick={goToNextMonth}\r\n className=\"px-10 py-4 cursor-pointer hover:bg-gray-150 rounded-lg text-sm\"\r\n >\r\n <FaChevronRight />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-12 pb-0 \">\r\n {dayNames.map((day, index) => (\r\n <div\r\n key={index}\r\n className={\r\n \"py-1 px-4 text-center font-semibold border-t \" +\r\n (index > 4 ? \" bg-gray-100 col-span-1 \" : \" col-span-2 \")\r\n }\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n {calendarData.map((week, weekIndex) => (\r\n <React.Fragment key={weekIndex}>\r\n {week.map((day, dayIndex) => {\r\n const itemsForDay = day\r\n ? findItemsForDay(day as number, currentMonth, currentYear)\r\n : [];\r\n\r\n const date = new Date(\r\n currentYear,\r\n currentMonth,\r\n (day as number) + 1\r\n );\r\n const isPublicHoliday = publicHolidays?.includes(\r\n date.toISOString().split(\"T\")[0]\r\n );\r\n\r\n return (\r\n <div\r\n key={dayIndex}\r\n className={\r\n \"p-0 align-middle justify-center text-center border-t cursor-not-allowed \" +\r\n (dayIndex > 4\r\n ? \"bg-gray-100 col-span-1 \"\r\n : \" col-span-2 \") +\r\n (isPublicHoliday ? \" bg-gray-150 \" : \"\") +\r\n (dayIndex !== 0 ? \" border-l \" : \"\")\r\n }\r\n >\r\n {day && <div className=\"py-1\">{day} </div>}\r\n {itemsForDay.map((item, itemIndex) => (\r\n <div\r\n key={itemIndex}\r\n className={\r\n \"dataItem w-full py-1 text-white text-center mt-0 -pr-1 \"\r\n }\r\n style={{\r\n backgroundColor:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"gray\"\r\n : item.background,\r\n color:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"white\"\r\n : item.color,\r\n }}\r\n data-tooltip-target={\"tooltip-\" + item.id}\r\n title={item.tooltip}\r\n >\r\n {item.label}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Calendar;\r\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
import { DataTableColumn } from '../../main';
|
|
2
2
|
|
|
3
|
+
interface BulkAction<T> {
|
|
4
|
+
name: string;
|
|
5
|
+
action: (items: T[]) => void;
|
|
6
|
+
icon?: any;
|
|
7
|
+
}
|
|
3
8
|
interface DataTableServerProps<T> {
|
|
9
|
+
id?: string;
|
|
4
10
|
url: string;
|
|
5
11
|
columns: DataTableColumn<T | "actions">[];
|
|
6
12
|
itemsPerPage?: number;
|
|
7
13
|
title?: string;
|
|
8
14
|
subtitle?: string;
|
|
9
15
|
allowSearch?: boolean;
|
|
16
|
+
rowAction?: (item: T) => void;
|
|
17
|
+
bulkActions?: BulkAction<T>[];
|
|
10
18
|
}
|
|
11
19
|
type DataTableInternalItems = {
|
|
12
20
|
_isHighlighted?: boolean;
|
|
21
|
+
id: string;
|
|
13
22
|
};
|
|
14
|
-
declare function DataTableServer<T extends DataTableInternalItems>({ url, columns, itemsPerPage, title, subtitle, allowSearch, }: DataTableServerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
declare function DataTableServer<T extends DataTableInternalItems>({ id, url, columns, itemsPerPage, title, subtitle, allowSearch, rowAction, bulkActions, }: DataTableServerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
15
24
|
export default DataTableServer;
|
|
@@ -13,24 +13,26 @@ import "../../contexts/FederationContext.js";
|
|
|
13
13
|
import { useFederationContext } from "../../contexts/useFederationContext.js";
|
|
14
14
|
import { handleErrors } from "../../utils/handleErrors.js";
|
|
15
15
|
function DataTableServer({
|
|
16
|
+
id,
|
|
16
17
|
url,
|
|
17
18
|
columns,
|
|
18
19
|
itemsPerPage = 10,
|
|
19
20
|
title,
|
|
20
21
|
subtitle,
|
|
21
|
-
allowSearch = true
|
|
22
|
+
allowSearch = true,
|
|
23
|
+
rowAction,
|
|
24
|
+
bulkActions
|
|
22
25
|
}) {
|
|
23
26
|
var _a;
|
|
24
27
|
const federationContext = useFederationContext();
|
|
25
28
|
const [data, setData] = useState();
|
|
26
29
|
const [isLoading, setIsLoading] = useState(false);
|
|
27
30
|
const [currentPage, setCurrentPage] = useState(0);
|
|
31
|
+
const [selectedItems, setSelectedItems] = useState([]);
|
|
28
32
|
const [fulltextSearch, setFulltextSearch] = useState("");
|
|
29
33
|
const [filterOptions, setFilterOptions] = useState({});
|
|
30
|
-
const [columnFilters, setColumnFilters] = useState(
|
|
31
|
-
|
|
32
|
-
);
|
|
33
|
-
const [showColFilters, setShowColFilters] = useState(false);
|
|
34
|
+
const [columnFilters, setColumnFilters] = useState();
|
|
35
|
+
const [showColFilters, setShowColFilters] = useState();
|
|
34
36
|
const [sortConfig, setSortConfig] = useState(null);
|
|
35
37
|
useEffect(() => {
|
|
36
38
|
setIsLoading(true);
|
|
@@ -62,20 +64,18 @@ function DataTableServer({
|
|
|
62
64
|
useEffect(() => {
|
|
63
65
|
const fetchFilterOptions = async (column) => {
|
|
64
66
|
if (column.filterSource) {
|
|
65
|
-
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return [];
|
|
78
|
-
}
|
|
67
|
+
try {
|
|
68
|
+
const response = await federationContext.apiClient.get(
|
|
69
|
+
column.filterSource
|
|
70
|
+
);
|
|
71
|
+
const options = response.data.map((item) => ({
|
|
72
|
+
value: item[column.filterValueKey],
|
|
73
|
+
label: item[column.filterLabelKey]
|
|
74
|
+
}));
|
|
75
|
+
return options;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error("Error fetching filter options:", error);
|
|
78
|
+
return [];
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
};
|
|
@@ -123,6 +123,27 @@ function DataTableServer({
|
|
|
123
123
|
}
|
|
124
124
|
);
|
|
125
125
|
};
|
|
126
|
+
const handleSelectItem = (item) => {
|
|
127
|
+
setSelectedItems((prevSelectedItems) => {
|
|
128
|
+
if (prevSelectedItems.find((selectedItem) => selectedItem.id === item.id)) {
|
|
129
|
+
return prevSelectedItems.filter(
|
|
130
|
+
(selectedItem) => selectedItem.id !== item.id
|
|
131
|
+
);
|
|
132
|
+
} else {
|
|
133
|
+
return [...prevSelectedItems, item];
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
const handleSelectAll = () => {
|
|
138
|
+
if (data && selectedItems.length === data.content.length) {
|
|
139
|
+
setSelectedItems([]);
|
|
140
|
+
} else if (data) {
|
|
141
|
+
setSelectedItems(data.content);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const isSelected = (item) => {
|
|
145
|
+
return selectedItems.some((selectedItem) => selectedItem.id === item.id);
|
|
146
|
+
};
|
|
126
147
|
const nextPage = () => {
|
|
127
148
|
setCurrentPage(currentPage + 1);
|
|
128
149
|
};
|
|
@@ -145,26 +166,74 @@ function DataTableServer({
|
|
|
145
166
|
setCurrentPage(0);
|
|
146
167
|
};
|
|
147
168
|
const handleToggleShowColFilters = () => {
|
|
148
|
-
if (showColFilters) {
|
|
149
|
-
setColumnFilters(
|
|
169
|
+
if (showColFilters && columnFilters !== void 0) {
|
|
170
|
+
setColumnFilters(columnFilters);
|
|
150
171
|
}
|
|
151
172
|
setShowColFilters(!showColFilters);
|
|
152
173
|
};
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
if (id) {
|
|
176
|
+
const storageKey = `datatable:${id}`;
|
|
177
|
+
const storedStorageObject = localStorage.getItem(storageKey);
|
|
178
|
+
if (storedStorageObject) {
|
|
179
|
+
const storageObject = JSON.parse(storedStorageObject);
|
|
180
|
+
console.log(
|
|
181
|
+
"%clibcomponentsdatatableDataTableServer.tsx:255 loading storageObject",
|
|
182
|
+
"color: #007acc;",
|
|
183
|
+
storageObject
|
|
184
|
+
);
|
|
185
|
+
setColumnFilters(storageObject.columnFilters);
|
|
186
|
+
setShowColFilters(storageObject.showColFilters);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}, [id]);
|
|
190
|
+
useEffect(() => {
|
|
191
|
+
if (id && columnFilters !== void 0 && showColFilters !== void 0) {
|
|
192
|
+
console.log(
|
|
193
|
+
"%clibcomponentsdatatableDataTableServer.tsx:266 sotring columnFilters,",
|
|
194
|
+
"color: #007acc;",
|
|
195
|
+
showColFilters,
|
|
196
|
+
columnFilters
|
|
197
|
+
);
|
|
198
|
+
const storageKey = `datatable:${id}`;
|
|
199
|
+
const storageObject = localStorage.getItem(storageKey) ? JSON.parse(localStorage.getItem(storageKey)) : {};
|
|
200
|
+
storageObject.columnFilters = columnFilters;
|
|
201
|
+
storageObject.showColFilters = showColFilters;
|
|
202
|
+
localStorage.setItem(storageKey, JSON.stringify(storageObject));
|
|
203
|
+
}
|
|
204
|
+
}, [columnFilters, showColFilters, id]);
|
|
153
205
|
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
|
|
154
206
|
"div",
|
|
155
207
|
{
|
|
156
|
-
className: "shadow-lg border border-gray-200 rounded-xl
|
|
208
|
+
className: "shadow-lg border border-gray-200 rounded-xl overflow-x-auto",
|
|
157
209
|
style: { overflowY: "visible" },
|
|
158
210
|
children: [
|
|
159
|
-
(title || subtitle || allowSearch) && /* @__PURE__ */ jsxs("div", { className: "p-5 leading-9 flex
|
|
211
|
+
(title || subtitle || allowSearch) && /* @__PURE__ */ jsxs("div", { className: "p-5 leading-9 flex", children: [
|
|
160
212
|
/* @__PURE__ */ jsxs("div", { className: "flex-grow", children: [
|
|
161
|
-
title && /* @__PURE__ */ jsx("h1", { className: "font-semibold text-xl leading-[42px]
|
|
213
|
+
title && /* @__PURE__ */ jsx("h1", { className: "font-semibold text-xl leading-[42px]", children: title }),
|
|
162
214
|
subtitle && /* @__PURE__ */ jsx("p", { className: "font-normal text-gray-600", children: subtitle })
|
|
163
215
|
] }),
|
|
216
|
+
bulkActions && selectedItems.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end text-gray-800", children: [
|
|
217
|
+
"Hromadná akce (",
|
|
218
|
+
selectedItems.length,
|
|
219
|
+
" ",
|
|
220
|
+
selectedItems.length == 1 ? "položka" : selectedItems.length < 5 ? "položky" : "položek",
|
|
221
|
+
") :",
|
|
222
|
+
bulkActions.map((bulkAction) => /* @__PURE__ */ jsx(
|
|
223
|
+
Button,
|
|
224
|
+
{
|
|
225
|
+
variant: "primary",
|
|
226
|
+
className: "ml-2",
|
|
227
|
+
onClick: () => bulkAction.action(selectedItems),
|
|
228
|
+
children: bulkAction.name
|
|
229
|
+
},
|
|
230
|
+
bulkAction.name
|
|
231
|
+
))
|
|
232
|
+
] }),
|
|
164
233
|
/* @__PURE__ */ jsxs(
|
|
165
234
|
"div",
|
|
166
235
|
{
|
|
167
|
-
className: "flex items-center text-xl h-full p-3
|
|
236
|
+
className: "flex items-center text-xl h-full p-3 cursor-pointer text-gray-500",
|
|
168
237
|
onClick: handleToggleShowColFilters,
|
|
169
238
|
children: [
|
|
170
239
|
!showColFilters && /* @__PURE__ */ jsx(MdOutlineFilterAlt, {}),
|
|
@@ -192,166 +261,184 @@ function DataTableServer({
|
|
|
192
261
|
] }),
|
|
193
262
|
/* @__PURE__ */ jsx("div", { className: "", children: /* @__PURE__ */ jsxs("table", { className: "w-full leading-normal ", children: [
|
|
194
263
|
/* @__PURE__ */ jsxs("thead", { children: [
|
|
195
|
-
showColFilters && columns.findIndex((it) => it.filterType) > -1 && /* @__PURE__ */
|
|
196
|
-
|
|
264
|
+
showColFilters && columns.findIndex((it) => it.filterType) > -1 && /* @__PURE__ */ jsxs("tr", { children: [
|
|
265
|
+
data && bulkActions && /* @__PURE__ */ jsx("td", { children: " " }),
|
|
266
|
+
columns.map(
|
|
267
|
+
({ key, header, filterType, filterParam, width }) => /* @__PURE__ */ jsxs(
|
|
268
|
+
"th",
|
|
269
|
+
{
|
|
270
|
+
id: String(key) + "_filter",
|
|
271
|
+
className: `font-medium leading-9 text-xs text-left p-0 pb-5 text-gray-600 overflow-ellipsis whitespace-nowrap ${!title && !subtitle ? "border-t-0" : ""}`,
|
|
272
|
+
style: { width },
|
|
273
|
+
children: [
|
|
274
|
+
filterType && filterType === "select" && /* @__PURE__ */ jsx(
|
|
275
|
+
SelectField,
|
|
276
|
+
{
|
|
277
|
+
label: header,
|
|
278
|
+
name: String(key) + "_filter",
|
|
279
|
+
onInputChange: (e) => filterHandler(
|
|
280
|
+
filterParam,
|
|
281
|
+
e.target.value
|
|
282
|
+
),
|
|
283
|
+
type: filterType,
|
|
284
|
+
options: filterOptions[String(filterParam)] || [],
|
|
285
|
+
value: (columnFilters == null ? void 0 : columnFilters[String(filterParam)]) || "",
|
|
286
|
+
clearable: true,
|
|
287
|
+
className: "pl-3"
|
|
288
|
+
}
|
|
289
|
+
),
|
|
290
|
+
filterType && filterType !== "select" && /* @__PURE__ */ jsx(
|
|
291
|
+
InputField,
|
|
292
|
+
{
|
|
293
|
+
label: header,
|
|
294
|
+
name: String(key) + "_filter",
|
|
295
|
+
onInputChange: (e) => filterHandler(
|
|
296
|
+
filterParam,
|
|
297
|
+
e.target.value
|
|
298
|
+
),
|
|
299
|
+
type: filterType,
|
|
300
|
+
value: (columnFilters == null ? void 0 : columnFilters[String(filterParam)]) || "",
|
|
301
|
+
clearable: true,
|
|
302
|
+
className: "max-w-[300px] min-w-[100px] pl-3"
|
|
303
|
+
}
|
|
304
|
+
)
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
String(key) + "_filter"
|
|
308
|
+
)
|
|
309
|
+
)
|
|
310
|
+
] }),
|
|
311
|
+
/* @__PURE__ */ jsxs("tr", { children: [
|
|
312
|
+
data && bulkActions && /* @__PURE__ */ jsx("th", { className: "w-[20px] h-10 hover:bg-gray-200 bg-gray-50 font-medium text-xs text-center text-gray-600 cursor-pointer border-t border-b border-gray-200", children: /* @__PURE__ */ jsx("label", { className: "w-full h-full flex items-center justify-center cursor-pointer px-2", children: /* @__PURE__ */ jsx(
|
|
313
|
+
"input",
|
|
314
|
+
{
|
|
315
|
+
id: "selectAll",
|
|
316
|
+
type: "checkbox",
|
|
317
|
+
className: "w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-indigo-200 focus:ring-4",
|
|
318
|
+
onChange: handleSelectAll,
|
|
319
|
+
checked: data && selectedItems.length === data.content.length
|
|
320
|
+
}
|
|
321
|
+
) }) }),
|
|
322
|
+
columns.map(({ key, header, actions, sortParam, width }) => /* @__PURE__ */ jsx(
|
|
197
323
|
"th",
|
|
198
324
|
{
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
whitespace-nowrap ${!title && !subtitle ? "border-t-0" : ""}`,
|
|
325
|
+
className: `group font-medium leading-9 text-xs text-left px-3 text-gray-600 bg-gray-50 border-t border-b border-gray-200 ${!title && !subtitle ? "border-t-0" : ""} ${sortParam ? " cursor-pointer " : ""}`,
|
|
326
|
+
onClick: () => sortParam ? requestSort(sortParam) : void 0,
|
|
202
327
|
style: { width },
|
|
203
|
-
children: [
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
name: String(key) + "_filter",
|
|
209
|
-
onInputChange: (e) => filterHandler(
|
|
210
|
-
filterParam,
|
|
211
|
-
e.target.value
|
|
212
|
-
),
|
|
213
|
-
type: filterType,
|
|
214
|
-
options: filterOptions[String(filterParam)] || [],
|
|
215
|
-
value: columnFilters[String(filterParam)],
|
|
216
|
-
clearable: true,
|
|
217
|
-
className: "pl-3 "
|
|
218
|
-
}
|
|
219
|
-
),
|
|
220
|
-
filterType && filterType !== "select" && /* @__PURE__ */ jsx(
|
|
221
|
-
InputField,
|
|
222
|
-
{
|
|
223
|
-
label: header,
|
|
224
|
-
name: String(key) + "_filter",
|
|
225
|
-
onInputChange: (e) => filterHandler(
|
|
226
|
-
filterParam,
|
|
227
|
-
e.target.value
|
|
228
|
-
),
|
|
229
|
-
type: filterType,
|
|
230
|
-
value: columnFilters[String(filterParam)],
|
|
231
|
-
clearable: true,
|
|
232
|
-
className: "max-w-[300px] min-w-[100px] pl-3 "
|
|
233
|
-
}
|
|
234
|
-
)
|
|
235
|
-
]
|
|
236
|
-
},
|
|
237
|
-
String(key) + "_filter"
|
|
238
|
-
)
|
|
239
|
-
) }),
|
|
240
|
-
/* @__PURE__ */ jsx("tr", { children: columns.map(({ key, header, actions, sortParam, width }) => /* @__PURE__ */ jsx(
|
|
241
|
-
"th",
|
|
242
|
-
{
|
|
243
|
-
className: `group font-medium leading-9 text-xs text-left px-3 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${!title && !subtitle ? "border-t-0" : ""} ${sortParam ? " cursor-pointer " : ""}`,
|
|
244
|
-
onClick: () => sortParam ? requestSort(sortParam) : () => {
|
|
328
|
+
children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
329
|
+
header,
|
|
330
|
+
" ",
|
|
331
|
+
!actions && sortParam ? getSortIcon(sortParam) : ""
|
|
332
|
+
] })
|
|
245
333
|
},
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
" ",
|
|
250
|
-
!actions && sortParam ? getSortIcon(sortParam) : ""
|
|
251
|
-
] })
|
|
252
|
-
},
|
|
253
|
-
String(key)
|
|
254
|
-
)) })
|
|
334
|
+
String(key)
|
|
335
|
+
))
|
|
336
|
+
] })
|
|
255
337
|
] }),
|
|
256
338
|
data && (data == null ? void 0 : data.content) && (data == null ? void 0 : data.content.length) > 0 && /* @__PURE__ */ jsxs("tbody", { className: "relative", children: [
|
|
257
339
|
isLoading && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { children: /* @__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, {}) }) }) }) }),
|
|
258
|
-
data.content.map((item, rowIndex) => /* @__PURE__ */
|
|
340
|
+
data.content.map((item, rowIndex) => /* @__PURE__ */ jsxs(
|
|
259
341
|
"tr",
|
|
260
342
|
{
|
|
261
|
-
className: `${item._isHighlighted ? "
|
|
262
|
-
children:
|
|
263
|
-
({
|
|
264
|
-
"
|
|
343
|
+
className: `${item._isHighlighted ? "bg-gray-200" : ""} hover:bg-gray-100 border-gray-200 border-b text-sm`,
|
|
344
|
+
children: [
|
|
345
|
+
bulkActions && /* @__PURE__ */ jsx("td", { className: "w-[20px] h-[72px] hover:bg-gray-200 font-medium text-xs text-center text-gray-600 cursor-pointer", children: /* @__PURE__ */ jsx("label", { className: "w-full h-full flex items-center justify-center cursor-pointer px-2", children: /* @__PURE__ */ jsx(
|
|
346
|
+
"input",
|
|
265
347
|
{
|
|
266
|
-
|
|
267
|
-
className:
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
action.
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
348
|
+
type: "checkbox",
|
|
349
|
+
className: "w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-indigo-200 focus:ring-4",
|
|
350
|
+
checked: isSelected(item) || false,
|
|
351
|
+
onChange: () => handleSelectItem(item)
|
|
352
|
+
}
|
|
353
|
+
) }) }),
|
|
354
|
+
columns.map(
|
|
355
|
+
({ render, actions, classes, width }, colIndex) => /* @__PURE__ */ jsxs(
|
|
356
|
+
"td",
|
|
357
|
+
{
|
|
358
|
+
onClick: rowAction ? () => rowAction(item) : void 0,
|
|
359
|
+
style: { width },
|
|
360
|
+
className: `px-3 py-2 cursor-pointer ${colIndex === 0 ? "font-medium text-gray-900" : "text-gray-700"} ${classes || ""}`,
|
|
361
|
+
children: [
|
|
362
|
+
render ? render(item) : "",
|
|
363
|
+
actions && actions.filter((it) => {
|
|
364
|
+
if (it.rowAction)
|
|
365
|
+
return false;
|
|
366
|
+
if (it.visible) {
|
|
367
|
+
return it.visible(item);
|
|
368
|
+
} else
|
|
369
|
+
return true;
|
|
370
|
+
}).map((action, actionIndex) => /* @__PURE__ */ jsxs(
|
|
371
|
+
"div",
|
|
372
|
+
{
|
|
373
|
+
className: "flex inline-flex align-middle",
|
|
374
|
+
children: [
|
|
375
|
+
action.icon && /* @__PURE__ */ jsx(
|
|
376
|
+
Button,
|
|
377
|
+
{
|
|
378
|
+
variant: "icon",
|
|
379
|
+
onClick: () => action.onClick(item),
|
|
380
|
+
children: action.icon
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
!action.icon && /* @__PURE__ */ jsx(
|
|
384
|
+
Button,
|
|
385
|
+
{
|
|
386
|
+
variant: "transparent",
|
|
387
|
+
onClick: () => action.onClick(item),
|
|
388
|
+
children: action.label
|
|
389
|
+
}
|
|
390
|
+
)
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
`${rowIndex}-${colIndex}-${actionIndex}`
|
|
394
|
+
))
|
|
395
|
+
]
|
|
396
|
+
},
|
|
397
|
+
`${rowIndex}-${colIndex}`
|
|
398
|
+
)
|
|
309
399
|
)
|
|
310
|
-
|
|
400
|
+
]
|
|
311
401
|
},
|
|
312
402
|
rowIndex
|
|
313
403
|
)),
|
|
314
|
-
((_a = data == null ? void 0 : data.content) == null ? void 0 : _a.length)
|
|
404
|
+
((_a = data == null ? void 0 : data.content) == null ? void 0 : _a.length) === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
315
405
|
"td",
|
|
316
406
|
{
|
|
317
407
|
className: "px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle",
|
|
318
408
|
colSpan: columns.length,
|
|
319
|
-
children: "
|
|
409
|
+
children: "No data"
|
|
320
410
|
},
|
|
321
411
|
"td-nodata"
|
|
322
|
-
) }, "tr-nodata
|
|
412
|
+
) }, "tr-nodata")
|
|
323
413
|
] })
|
|
324
414
|
] }) }),
|
|
325
|
-
/* @__PURE__ */
|
|
326
|
-
|
|
415
|
+
/* @__PURE__ */ jsx("div", { className: "w-full p-5 flex gap-5 justify-between", children: /* @__PURE__ */ jsxs("div", { className: "flex gap-5", children: [
|
|
416
|
+
data && !data.first && /* @__PURE__ */ jsxs(
|
|
327
417
|
Button,
|
|
328
418
|
{
|
|
329
419
|
variant: "secondary",
|
|
330
420
|
onClick: prevPage,
|
|
331
|
-
className: "flex items-center
|
|
421
|
+
className: "flex items-center",
|
|
332
422
|
children: [
|
|
333
423
|
/* @__PURE__ */ jsx(MdArrowBack, { className: "mr-1.5" }),
|
|
334
|
-
"
|
|
424
|
+
" Previous"
|
|
335
425
|
]
|
|
336
426
|
}
|
|
337
|
-
)
|
|
338
|
-
/* @__PURE__ */ jsxs(
|
|
339
|
-
paginationDisplay,
|
|
340
|
-
" "
|
|
341
|
-
] }),
|
|
342
|
-
/* @__PURE__ */ jsx("div", { className: "text-right items-end justify-end", children: data && !data.last && /* @__PURE__ */ jsxs(
|
|
427
|
+
),
|
|
428
|
+
data && !data.last && /* @__PURE__ */ jsxs(
|
|
343
429
|
Button,
|
|
344
430
|
{
|
|
345
431
|
variant: "secondary",
|
|
346
432
|
onClick: nextPage,
|
|
347
|
-
className: "flex items-center
|
|
433
|
+
className: "flex items-center",
|
|
348
434
|
children: [
|
|
349
|
-
"
|
|
435
|
+
"Next ",
|
|
350
436
|
/* @__PURE__ */ jsx(MdArrowForward, { className: "ml-2", size: 20 })
|
|
351
437
|
]
|
|
352
438
|
}
|
|
353
|
-
)
|
|
354
|
-
|
|
439
|
+
),
|
|
440
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center justify-end text-xs text-gray-800", children: paginationDisplay })
|
|
441
|
+
] }) })
|
|
355
442
|
]
|
|
356
443
|
}
|
|
357
444
|
) });
|
|
@@ -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 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: \"asc\" | \"desc\" | 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 }, [\r\n url,\r\n columnFilters,\r\n itemsPerPage,\r\n currentPage,\r\n sortConfig,\r\n federationContext.apiClient,\r\n federationContext.emitter,\r\n ]);\r\n\r\n useEffect(() => {\r\n const fetchFilterOptions = async (column: DataTableColumn<T>) => {\r\n if (column.filterSource) {\r\n {\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, federationContext.apiClient]);\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 === \"asc\"\r\n ? { sortParam, direction: \"desc\" }\r\n : null;\r\n } else {\r\n return { sortParam, direction: \"asc\" };\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 === \"asc\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"desc\" ? (\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(\r\n ({ key, header, filterType, filterParam, width }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n id={String(key) + \"_filter\"}\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 style={{ width: width }}\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-3 \"\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-3 \"\r\n ></InputField>\r\n )}\r\n </th>\r\n )\r\n )}\r\n </tr>\r\n )}\r\n <tr>\r\n {columns.map(({ key, header, actions, sortParam, width }) => (\r\n <th\r\n key={String(key)}\r\n className={`group font-medium leading-9 text-xs text-left px-3 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 style={{ width: width }}\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 <tr>\r\n <td>\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 </td>\r\n </tr>\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(\r\n ({ render, actions, classes, width }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n style={{ width: width }}\r\n className={`px-3 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 )}\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 BulkAction<T> {\r\n name: string;\r\n action: (items: T[]) => void;\r\n icon?: any;\r\n}\r\n\r\ninterface DataTableServerProps<T> {\r\n id?: string;\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 rowAction?: (item: T) => void;\r\n bulkActions?: BulkAction<T>[];\r\n}\r\n\r\ntype DataTableInternalItems = {\r\n _isHighlighted?: boolean;\r\n id: string; // Assuming items have an `id` field for identification\r\n};\r\n\r\nfunction DataTableServer<T extends DataTableInternalItems>({\r\n id,\r\n url,\r\n columns,\r\n itemsPerPage = 10,\r\n title,\r\n subtitle,\r\n allowSearch = true,\r\n rowAction,\r\n bulkActions,\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 [selectedItems, setSelectedItems] = useState<T[]>([]);\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 const [showColFilters, setShowColFilters] = useState<boolean>();\r\n const [sortConfig, setSortConfig] = useState<{\r\n sortParam: string;\r\n direction: \"asc\" | \"desc\" | null;\r\n } | null>(null);\r\n\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 }, [\r\n url,\r\n columnFilters,\r\n itemsPerPage,\r\n currentPage,\r\n sortConfig,\r\n federationContext.apiClient,\r\n federationContext.emitter,\r\n ]);\r\n\r\n useEffect(() => {\r\n const fetchFilterOptions = async (column: DataTableColumn<T>) => {\r\n if (column.filterSource) {\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 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, federationContext.apiClient]);\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 === \"asc\"\r\n ? { sortParam, direction: \"desc\" }\r\n : null;\r\n } else {\r\n return { sortParam, direction: \"asc\" };\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 === \"asc\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"desc\" ? (\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 handleSelectItem = (item: T) => {\r\n setSelectedItems((prevSelectedItems) => {\r\n if (\r\n prevSelectedItems.find((selectedItem) => selectedItem.id === item.id)\r\n ) {\r\n return prevSelectedItems.filter(\r\n (selectedItem) => selectedItem.id !== item.id\r\n );\r\n } else {\r\n return [...prevSelectedItems, item];\r\n }\r\n });\r\n };\r\n\r\n const handleSelectAll = () => {\r\n if (data && selectedItems.length === data.content.length) {\r\n setSelectedItems([]);\r\n } else if (data) {\r\n setSelectedItems(data.content);\r\n }\r\n };\r\n\r\n const isSelected = (item: T) => {\r\n return selectedItems.some((selectedItem) => selectedItem.id === item.id);\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\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 && columnFilters !== undefined) {\r\n setColumnFilters(columnFilters);\r\n }\r\n\r\n setShowColFilters(!showColFilters);\r\n };\r\n\r\n //load from localstorage\r\n useEffect(() => {\r\n if (id) {\r\n const storageKey = `datatable:${id}`;\r\n const storedStorageObject = localStorage.getItem(storageKey);\r\n if (storedStorageObject) {\r\n const storageObject = JSON.parse(storedStorageObject);\r\n console.log(\r\n \"%clibcomponentsdatatableDataTableServer.tsx:255 loading storageObject\",\r\n \"color: #007acc;\",\r\n storageObject\r\n );\r\n setColumnFilters(storageObject.columnFilters);\r\n setShowColFilters(storageObject.showColFilters);\r\n }\r\n }\r\n }, [id]);\r\n //store filters in localstorage\r\n useEffect(() => {\r\n if (id && columnFilters !== undefined && showColFilters !== undefined) {\r\n console.log(\r\n \"%clibcomponentsdatatableDataTableServer.tsx:266 sotring columnFilters,\",\r\n \"color: #007acc;\",\r\n showColFilters,\r\n columnFilters\r\n );\r\n const storageKey = `datatable:${id}`;\r\n const storageObject = localStorage.getItem(storageKey)\r\n ? JSON.parse(localStorage.getItem(storageKey)!)\r\n : {};\r\n\r\n storageObject.columnFilters = columnFilters;\r\n storageObject.showColFilters = showColFilters;\r\n localStorage.setItem(storageKey, JSON.stringify(storageObject));\r\n }\r\n }, [columnFilters, showColFilters, id]);\r\n\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 {bulkActions && selectedItems.length > 0 && (\r\n <div className=\"flex items-center justify-end text-gray-800\">\r\n Hromadná akce ({selectedItems.length}{\" \"}\r\n {selectedItems.length == 1\r\n ? \"položka\"\r\n : selectedItems.length < 5\r\n ? \"položky\"\r\n : \"položek\"}\r\n ) :\r\n {bulkActions.map((bulkAction) => (\r\n <Button\r\n key={bulkAction.name}\r\n variant=\"primary\"\r\n className=\"ml-2\"\r\n onClick={() => bulkAction.action(selectedItems)}\r\n >\r\n {bulkAction.name}\r\n </Button>\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(\"\")} />\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 {data && bulkActions && <td> </td>}\r\n {columns.map(\r\n ({ key, header, filterType, filterParam, width }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n id={String(key) + \"_filter\"}\r\n className={`font-medium leading-9 text-xs text-left p-0 pb-5 text-gray-600 overflow-ellipsis whitespace-nowrap ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n style={{ width: width }}\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-3\"\r\n />\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-3\"\r\n />\r\n )}\r\n </th>\r\n )\r\n )}\r\n </tr>\r\n )}\r\n <tr>\r\n {data && bulkActions && (\r\n <th className=\"w-[20px] h-10 hover:bg-gray-200 bg-gray-50 font-medium text-xs text-center text-gray-600 cursor-pointer border-t border-b border-gray-200\">\r\n <label className=\"w-full h-full flex items-center justify-center cursor-pointer px-2\">\r\n <input\r\n id=\"selectAll\"\r\n type=\"checkbox\"\r\n className=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-indigo-200 focus:ring-4\"\r\n onChange={handleSelectAll}\r\n checked={\r\n data && selectedItems.length === data.content.length\r\n }\r\n />\r\n </label>\r\n </th>\r\n )}\r\n {columns.map(({ key, header, actions, sortParam, width }) => (\r\n <th\r\n key={String(key)}\r\n className={`group font-medium leading-9 text-xs text-left px-3 text-gray-600 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) : undefined\r\n }\r\n style={{ width: width }}\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 <tr>\r\n <td>\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 </td>\r\n </tr>\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-100 border-gray-200 border-b text-sm`}\r\n >\r\n {bulkActions && (\r\n <td className=\"w-[20px] h-[72px] hover:bg-gray-200 font-medium text-xs text-center text-gray-600 cursor-pointer\">\r\n <label className=\"w-full h-full flex items-center justify-center cursor-pointer px-2\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-indigo-200 focus:ring-4\"\r\n checked={isSelected(item) || false}\r\n onChange={() => handleSelectItem(item)}\r\n />\r\n </label>\r\n </td>\r\n )}\r\n {columns.map(\r\n ({ render, actions, classes, width }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n onClick={\r\n rowAction ? () => rowAction(item) : undefined\r\n }\r\n style={{ width: width }}\r\n className={`px-3 py-2 cursor-pointer ${\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.rowAction) return false;\r\n if (it.visible) {\r\n return it.visible(item);\r\n } else return 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 {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 {action.label}\r\n </Button>\r\n )}\r\n </div>\r\n ))}\r\n </td>\r\n )\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 No 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 flex gap-5 justify-between\">\r\n <div className=\"flex gap-5\">\r\n {data && !data.first && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={prevPage}\r\n className=\"flex items-center\"\r\n >\r\n <MdArrowBack className=\"mr-1.5\" /> Previous\r\n </Button>\r\n )}\r\n {data && !data.last && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={nextPage}\r\n className=\"flex items-center\"\r\n >\r\n Next <MdArrowForward className=\"ml-2\" size={20} />\r\n </Button>\r\n )}\r\n <div className=\"flex items-center justify-end text-xs text-gray-800\">\r\n {paginationDisplay}\r\n </div>\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":";;;;;;;;;;;;;;AA+CA,SAAS,gBAAkD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AACF,GAA4B;;AAC1B,QAAM,oBAAoB;AAC1B,QAAM,CAAC,MAAM,OAAO,IAAI,SAAuB;AAC/C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,CAAC;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAc,CAAE,CAAA;AAC1D,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,EAAE;AACvD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAgC,CAAE,CAAA;AAC5E,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiC;AAC3E,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAkB;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAI,SAG1B,IAAI;AAEd,YAAU,MAAM;AACd,iBAAa,IAAI;AACC,sBAAA,UACf,IAAI,KAAK;AAAA,MACR,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,yCAAY;AAAA,QACpB,eAAe,yCAAY;AAAA,MAC7B;AAAA,IAAA,CACD,EACA,KAAK,CAAC,aAAa;AAClB,cAAQ,SAAS,IAAI;AACrB,mBAAa,KAAK;AAAA,IAAA,CACnB,EACA,MAAM,CAAC,UAAU;AACR,cAAA,MAAM,wBAAwB,KAAK;AAC9B,mBAAA,OAAO,kBAAkB,OAAO;AAC7C,mBAAa,KAAK;AAAA,IAAA,CACnB;AAAA,EAAA,GACF;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,EAAA,CACnB;AAED,YAAU,MAAM;AACR,UAAA,qBAAqB,OAAO,WAA+B;AAC/D,UAAI,OAAO,cAAc;AACnB,YAAA;AACI,gBAAA,WAAW,MAAM,kBAAkB,UAAU;AAAA,YACjD,OAAO;AAAA,UAAA;AAGT,gBAAM,UAAU,SAAS,KAAK,IAAI,CAAC,UAAe;AAAA,YAChD,OAAO,KAAK,OAAO,cAAmC;AAAA,YACtD,OAAO,KAAK,OAAO,cAAmC;AAAA,UACtD,EAAA;AACK,iBAAA;AAAA,iBACA,OAAO;AACN,kBAAA,MAAM,kCAAkC,KAAK;AACrD,iBAAO;QACT;AAAA,MACF;AAAA,IAAA;AAEF,UAAM,sBAAsB,YAAY;AACtC,YAAM,mBAA0C,CAAA;AAEhD,iBAAW,UAAU,SAAS;AAE1B,YAAA,OAAO,cACP,OAAO,gBACP,OAAO,kBACP,OAAO,kBACP,OAAO,aACP;AACM,gBAAA,UAAU,MAAM,mBAAmB,MAAM;AAE/C,cAAI,SAAS;AACM,6BAAA,OAAO,WAAqB,IAAI;AAAA,cAC/C,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,cACvB,GAAG;AAAA,YAAA;AAAA,UAEP;AAAA,QACF;AAAA,MACF;AAEA,uBAAiB,gBAAgB;AAAA,IAAA;AAGf;EACnB,GAAA,CAAC,SAAS,kBAAkB,SAAS,CAAC;AAEnC,QAAA,cAAc,CAAC,cAAsB;AACzC,kBAAc,CAAC,mBAAmB;AAChC,WACE,iDAAgB,eAAc,aAC9B,eAAe,cAAc,MAC7B;AACA,eAAO,eAAe,cAAc,QAChC,EAAE,WAAW,WAAW,OACxB,IAAA;AAAA,MAAA,OACC;AACE,eAAA,EAAE,WAAW,WAAW;MACjC;AAAA,IAAA,CACD;AAAA,EAAA;AAGG,QAAA,cAAc,CAAC,cAAsB;AACrC,SAAA,yCAAY,eAAc,WAAW;AACvC,aAAO,WAAW,cAAc,QAC9B,oBAAC,iBAAc,UAAS,QAAQ,CAAA,IAC9B,WAAW,cAAc,SAC3B,oBAAC,iBAAgB,EAAA,UAAS,QAAQ,CAAA,IAElC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,UAAS;AAAA,UACT,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAGhB;AAEE,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ;AAIE,QAAA,mBAAmB,CAAC,SAAY;AACpC,qBAAiB,CAAC,sBAAsB;AAEpC,UAAA,kBAAkB,KAAK,CAAC,iBAAiB,aAAa,OAAO,KAAK,EAAE,GACpE;AACA,eAAO,kBAAkB;AAAA,UACvB,CAAC,iBAAiB,aAAa,OAAO,KAAK;AAAA,QAAA;AAAA,MAC7C,OACK;AACE,eAAA,CAAC,GAAG,mBAAmB,IAAI;AAAA,MACpC;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,kBAAkB,MAAM;AAC5B,QAAI,QAAQ,cAAc,WAAW,KAAK,QAAQ,QAAQ;AACxD,uBAAiB,CAAE,CAAA;AAAA,eACV,MAAM;AACf,uBAAiB,KAAK,OAAO;AAAA,IAC/B;AAAA,EAAA;AAGI,QAAA,aAAa,CAAC,SAAY;AAC9B,WAAO,cAAc,KAAK,CAAC,iBAAiB,aAAa,OAAO,KAAK,EAAE;AAAA,EAAA;AAGzE,QAAM,WAAW,MAAM;AACrB,mBAAe,cAAc,CAAC;AAAA,EAAA;AAGhC,QAAM,WAAW,MAAM;AACrB,mBAAe,cAAc,CAAC;AAAA,EAAA;AAG1B,QAAA,sBAAsB,CAC1B,MAGG;;AACK,YAAA;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEgB,uBAAAA,MAAA,EAAE,WAAF,gBAAAA,IAAU,KAAK;AACjC,mBAAe,CAAC;AAAA,EAAA;AAIlB,QAAM,oBAAoB,UAAU,cAAc,CAAC,MAAM,6BAAM,UAAU;AAEnE,QAAA,gBAAgB,CAAC,aAAsB,UAAkB;AAC5C,qBAAA,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,MAAQ,EAAA;AAC9D,mBAAe,CAAC;AAAA,EAAA;AAElB,QAAM,6BAA6B,MAAM;AACnC,QAAA,kBAAkB,kBAAkB,QAAW;AACjD,uBAAiB,aAAa;AAAA,IAChC;AAEA,sBAAkB,CAAC,cAAc;AAAA,EAAA;AAInC,YAAU,MAAM;AACd,QAAI,IAAI;AACA,YAAA,aAAa,aAAa,EAAE;AAC5B,YAAA,sBAAsB,aAAa,QAAQ,UAAU;AAC3D,UAAI,qBAAqB;AACjB,cAAA,gBAAgB,KAAK,MAAM,mBAAmB;AAC5C,gBAAA;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAEF,yBAAiB,cAAc,aAAa;AAC5C,0BAAkB,cAAc,cAAc;AAAA,MAChD;AAAA,IACF;AAAA,EAAA,GACC,CAAC,EAAE,CAAC;AAEP,YAAU,MAAM;AACd,QAAI,MAAM,kBAAkB,UAAa,mBAAmB,QAAW;AAC7D,cAAA;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAEI,YAAA,aAAa,aAAa,EAAE;AAClC,YAAM,gBAAgB,aAAa,QAAQ,UAAU,IACjD,KAAK,MAAM,aAAa,QAAQ,UAAU,CAAE,IAC5C,CAAA;AAEJ,oBAAc,gBAAgB;AAC9B,oBAAc,iBAAiB;AAC/B,mBAAa,QAAQ,YAAY,KAAK,UAAU,aAAa,CAAC;AAAA,IAChE;AAAA,EACC,GAAA,CAAC,eAAe,gBAAgB,EAAE,CAAC;AAEtC,SAEI,oBAAA,UAAA,EAAA,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,WAAW,UAAU;AAAA,MAE5B,UAAA;AAAA,SAAA,SAAS,YAAY,gBACpB,qBAAA,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,UAAC,qBAAA,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,YAAA,SACE,oBAAA,MAAA,EAAG,WAAU,wCACX,UACH,OAAA;AAAA,YAED,YACC,oBAAC,KAAE,EAAA,WAAU,6BAA6B,UAAS,UAAA;AAAA,UAAA,GAEvD;AAAA,UACC,eAAe,cAAc,SAAS,KACpC,qBAAA,OAAA,EAAI,WAAU,gDAA+C,UAAA;AAAA,YAAA;AAAA,YAC5C,cAAc;AAAA,YAAQ;AAAA,YACrC,cAAc,UAAU,IACrB,YACA,cAAc,SAAS,IACrB,YACA;AAAA,YAAU;AAAA,YAEf,YAAY,IAAI,CAAC,eAChB;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,MAAM,WAAW,OAAO,aAAa;AAAA,gBAE7C,UAAW,WAAA;AAAA,cAAA;AAAA,cALP,WAAW;AAAA,YAAA,CAOnB;AAAA,UAAA,GACH;AAAA,UAEF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cAER,UAAA;AAAA,gBAAC,CAAA,sCAAmB,oBAAmB,EAAA;AAAA,gBACvC,sCAAmB,uBAAsB,EAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5C;AAAA,UACC,eACC,oBAAC,OAAI,EAAA,WAAU,QACb,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,eAAe;AAAA,cACf,MAAK;AAAA,cACL,OAAO;AAAA,cAEN,UAAA;AAAA,gBAAA;AAAA,gBACD,qBAAC,OAAI,EAAA,WAAU,qDACZ,UAAA;AAAA,kBAAC,CAAA,sCAAmB,UAAS,EAAA;AAAA,kBAC7B,kBACE,oBAAA,SAAA,EAAQ,SAAS,MAAM,kBAAkB,EAAE,GAAG;AAAA,gBAAA,GAEnD;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,QAAA,GAEJ;AAAA,4BAED,OAAI,EAAA,WAAU,IACb,UAAC,qBAAA,SAAA,EAAM,WAAU,0BACf,UAAA;AAAA,UAAA,qBAAC,SACE,EAAA,UAAA;AAAA,YACC,kBAAA,QAAQ,UAAU,CAAC,OAAO,GAAG,UAAU,IAAI,MACzC,qBAAC,MACE,EAAA,UAAA;AAAA,cAAQ,QAAA,eAAgB,oBAAA,MAAA,EAAG,UAAC,KAAA;AAAA,cAC5B,QAAQ;AAAA,gBACP,CAAC,EAAE,KAAK,QAAQ,YAAY,aAAa,YACvC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,IAAI,OAAO,GAAG,IAAI;AAAA,oBAClB,WAAW,sGACT,CAAC,SAAS,CAAC,WAAW,eAAe,EACvC;AAAA,oBACA,OAAO,EAAE,MAAa;AAAA,oBAErB,UAAA;AAAA,sBAAA,cAAc,eAAe,YAC5B;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,0BACP,MAAM,OAAO,GAAG,IAAI;AAAA,0BACpB,eAAe,CAAC,MACd;AAAA,4BACE;AAAA,4BACA,EAAE,OAAO;AAAA,0BACX;AAAA,0BAEF,MAAM;AAAA,0BACN,SAAS,cAAc,OAAO,WAAW,CAAC,KAAK,CAAC;AAAA,0BAChD,QAAO,+CAAgB,OAAO,WAAW,OAAM;AAAA,0BAC/C,WAAS;AAAA,0BACT,WAAU;AAAA,wBAAA;AAAA,sBACZ;AAAA,sBAED,cAAc,eAAe,YAC5B;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,0BACP,MAAM,OAAO,GAAG,IAAI;AAAA,0BACpB,eAAe,CAAC,MACd;AAAA,4BACE;AAAA,4BACA,EAAE,OAAO;AAAA,0BACX;AAAA,0BAEF,MAAM;AAAA,0BACN,QAAO,+CAAgB,OAAO,WAAW,OAAM;AAAA,0BAC/C,WAAS;AAAA,0BACT,WAAU;AAAA,wBAAA;AAAA,sBACZ;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAtCG,OAAO,GAAG,IAAI;AAAA,gBAwCrB;AAAA,cAEJ;AAAA,YAAA,GACF;AAAA,iCAEH,MACE,EAAA,UAAA;AAAA,cAAQ,QAAA,mCACN,MAAG,EAAA,WAAU,8IACZ,UAAC,oBAAA,SAAA,EAAM,WAAU,sEACf,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,UAAU;AAAA,kBACV,SACE,QAAQ,cAAc,WAAW,KAAK,QAAQ;AAAA,gBAAA;AAAA,iBAGpD,EACF,CAAA;AAAA,cAED,QAAQ,IAAI,CAAC,EAAE,KAAK,QAAQ,SAAS,WAAW,MAAA,MAC/C;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAW,iHACT,CAAC,SAAS,CAAC,WAAW,eAAe,EACvC,IAAI,YAAY,qBAAqB,EAAE;AAAA,kBACvC,SAAS,MACP,YAAY,YAAY,SAAS,IAAI;AAAA,kBAEvC,OAAO,EAAE,MAAa;AAAA,kBAEtB,UAAA,qBAAC,QAAK,EAAA,WAAU,kCACb,UAAA;AAAA,oBAAA;AAAA,oBAAQ;AAAA,oBACR,CAAC,WAAW,YAAY,YAAY,SAAS,IAAI;AAAA,kBAAA,GACpD;AAAA,gBAAA;AAAA,gBAZK,OAAO,GAAG;AAAA,cAAA,CAclB;AAAA,YAAA,GACH;AAAA,UAAA,GACF;AAAA,UACC,SAAQ,6BAAM,aAAW,6BAAM,QAAQ,UAAS,KAC/C,qBAAC,SAAM,EAAA,WAAU,YACd,UAAA;AAAA,YAAA,iCACE,MACC,EAAA,UAAA,oBAAC,MACC,EAAA,UAAA,oBAAC,SAAI,WAAU,gDACb,UAAC,oBAAA,OAAA,EAAI,WAAU,2CACb,UAAA,oBAAC,UAAQ,CAAA,EACX,CAAA,GACF,GACF,EACF,CAAA;AAAA,YAED,KAAK,QAAQ,IAAI,CAAC,MAAM,aACvB;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAW,GACT,KAAK,iBAAiB,gBAAgB,EACxC;AAAA,gBAEC,UAAA;AAAA,kBAAA,mCACE,MAAG,EAAA,WAAU,oGACZ,UAAC,oBAAA,SAAA,EAAM,WAAU,sEACf,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAU;AAAA,sBACV,SAAS,WAAW,IAAI,KAAK;AAAA,sBAC7B,UAAU,MAAM,iBAAiB,IAAI;AAAA,oBAAA;AAAA,qBAEzC,EACF,CAAA;AAAA,kBAED,QAAQ;AAAA,oBACP,CAAC,EAAE,QAAQ,SAAS,SAAS,MAAA,GAAS,aACpC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,SACE,YAAY,MAAM,UAAU,IAAI,IAAI;AAAA,wBAEtC,OAAO,EAAE,MAAa;AAAA,wBACtB,WAAW,4BACT,aAAa,IACT,8BACA,eACN,IAAI,WAAW,EAAE;AAAA,wBAEhB,UAAA;AAAA,0BAAS,SAAA,OAAO,IAAI,IAAI;AAAA,0BACxB,WACC,QACG,OAAO,CAAC,OAAO;AACd,gCAAI,GAAG;AAAkB,qCAAA;AACzB,gCAAI,GAAG,SAAS;AACP,qCAAA,GAAG,QAAQ,IAAI;AAAA,4BACxB;AAAc,qCAAA;AAAA,0BACf,CAAA,EACA,IAAI,CAAC,QAAQ,gBACZ;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BAEC,WAAU;AAAA,8BAET,UAAA;AAAA,gCAAA,OAAO,QACN;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCACC,SAAQ;AAAA,oCACR,SAAS,MAAM,OAAO,QAAQ,IAAI;AAAA,oCAEjC,UAAO,OAAA;AAAA,kCAAA;AAAA,gCACV;AAAA,gCAED,CAAC,OAAO,QACP;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCACC,SAAQ;AAAA,oCACR,SAAS,MAAM,OAAO,QAAQ,IAAI;AAAA,oCAEjC,UAAO,OAAA;AAAA,kCAAA;AAAA,gCACV;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAjBG,GAAG,QAAQ,IAAI,QAAQ,IAAI,WAAW;AAAA,0BAAA,CAoB9C;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBA1CA,GAAG,QAAQ,IAAI,QAAQ;AAAA,oBA2C9B;AAAA,kBAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAjEK;AAAA,YAAA,CAmER;AAAA,cACA,kCAAM,YAAN,mBAAe,YAAW,yBACxB,MACC,EAAA,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,SAAS,QAAQ;AAAA,gBAClB,UAAA;AAAA,cAAA;AAAA,cAHK;AAAA,iBAFA,WAQR;AAAA,UAAA,GAEJ;AAAA,QAAA,EAAA,CAEJ,EACF,CAAA;AAAA,4BACC,OAAI,EAAA,WAAU,yCACb,UAAC,qBAAA,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,UAAQ,QAAA,CAAC,KAAK,SACb;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAC,oBAAA,aAAA,EAAY,WAAU,SAAS,CAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACpC;AAAA,UAED,QAAQ,CAAC,KAAK,QACb;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,gBAAA;AAAA,gBACO,oBAAA,gBAAA,EAAe,WAAU,QAAO,MAAM,IAAI;AAAA,cAAA;AAAA,YAAA;AAAA,UAClD;AAAA,UAED,oBAAA,OAAA,EAAI,WAAU,uDACZ,UACH,mBAAA;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../lib/types.ts"],"sourcesContent":["import { AxiosInstance } from \"axios\";\r\nimport { Emitter } from \"mitt\";\r\n\r\n\r\nimport { UseFormReturn } from \"react-hook-form\";\r\n\r\nexport interface IUserInfo {\r\n contractGroup: number;\r\n degreeAfter: string;\r\n degreeBefore: string;\r\n departmentId: string;\r\n departmentName: string;\r\n departmentNameLong: string;\r\n email: string;\r\n employeeId: number;\r\n firstName: string;\r\n lastName: string;\r\n positionName: string;\r\n positionNumber: string;\r\n userId: string;\r\n}\r\nexport interface IEmployee extends IUserInfo {\r\n\r\n deleted: boolean\r\n hasComputer: string\r\n language: string\r\n manager: string\r\n parentFrId: number\r\n positionId: number\r\n validFrom: string\r\n validTo: string\r\n contractType: number\r\n exemption: number\r\n activatedOn: string\r\n}\r\n\r\nexport type IAuthApps = string[];\r\n\r\nexport interface IEventMessage {\r\n title?: string;\r\n message?: string;\r\n timeout?: number;\r\n classes?: string;\r\n}\r\n\r\nexport type Events = {\r\n message?: IEventMessage;\r\n loading?: boolean;\r\n};\r\n\r\nexport interface IContextValue {\r\n userInfo: IUserInfo;\r\n apiClient: AxiosInstance;\r\n authApps: IAuthApps;\r\n emitter: Emitter<Events>;\r\n}\r\nexport interface IOptionItem {\r\n value: string | number | null;\r\n label: string;\r\n description?: string;\r\n}\r\n\r\nexport type IFormProps = {\r\n formName: string;\r\n entityId: string;\r\n entityName: string;\r\n context: IContextValue;\r\n onSuccess: (path: string, message?: string) => void;\r\n};\r\nexport type IListProps = {\r\n listName: string;\r\n filters: object; //{ [key: string]: any };\r\n context: IContextValue;\r\n title?: string;\r\n};\r\n\r\nexport type IStartProcessProps = {\r\n context: IContextValue;\r\n\r\n onNavigate: (path: string) => void;\r\n};\r\n\r\nexport interface IModuleProcess {\r\n\r\n key: string;\r\n name: string;\r\n description: string;\r\n\r\n}\r\nexport interface IModuleConstants {\r\n\r\n name: string\r\n processes: IModuleProcess[]\r\n};\r\n\r\n\r\nexport interface IPosition {\r\n id: number;\r\n departmentId: string;\r\n positionName: string;\r\n positionNumber: string;\r\n manager: string;\r\n virtual: boolean;\r\n title: string;\r\n}\r\nexport interface IPositionEmployee extends IPosition {\r\n employee: IEmployee;\r\n}\r\nexport interface IEmployeePosition extends IEmployee {\r\n position: IPosition;\r\n}\r\nexport type { ICalendarItem } from \"./components/Calendar\";\r\n\r\n\r\nexport interface ITimeOffCategoryDto {\r\n id?: number;\r\n name?: string;\r\n}\r\nexport interface ITimeOffData {\r\n id: number;\r\n startDate: string;\r\n endDate: string;\r\n days?: number;\r\n year?: number;\r\n comment?: string;\r\n applicant?: IEmployee;\r\n place?: string;\r\n leaveType?: string;\r\n initiator?: string;\r\n dateFromEvidence?: string;\r\n dateToEvidence?: string;\r\n status?: number;\r\n statusText?: string;\r\n timeOffCategoryDto: ITimeOffCategoryDto;\r\n applicantContractGroup?: number;\r\n name?: string;\r\n daysOfEvidence?: number;\r\n daysInStartMonth?: number;\r\n daysInEndMonth?: number;\r\n lastChange?: string;\r\n created?: string;\r\n updated?: string;\r\n attachment?: IAttachment;\r\n steps?: IStep[];\r\n}\r\n\r\nexport interface IDepartment {\r\n departmentId: string;\r\n nameLong: string;\r\n parentDepartmentId: string;\r\n parentLocationId: number;\r\n nameShort: string;\r\n}\r\n\r\nexport interface IPageable<T> {\r\n content: T[];\r\n empty: boolean;\r\n first: boolean;\r\n last: boolean;\r\n number: number;\r\n numberOfElements: number;\r\n size: number;\r\n totalElements: number;\r\n totalPages: number;\r\n}\r\n\r\n\r\nexport interface IFormFieldGlobalProps {\r\n label?: string;\r\n description?: string;\r\n name: string;\r\n type?: string;\r\n value?: any;\r\n\r\n methods?: UseFormReturn<any>;\r\n\r\n errors?: any;\r\n register?: any;\r\n disabled?: boolean;\r\n required?: boolean;\r\n clearable?: boolean;\r\n placeholder?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n\r\n onInputChange: (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | any\r\n >\r\n ) => void;\r\n}\r\n\r\n\r\nexport interface SysConfigHolidayEntityResponse {\r\n \"id\": number,\r\n \"date\": string,\r\n \"day\": number,\r\n \"month\": number,\r\n \"year\": number,\r\n \"dayOfWeek\": number\r\n}\r\n\r\n\r\nexport interface IProfileApprover {\r\n id: number;\r\n role: number;\r\n roleTxt: string;\r\n approverOrder: number;\r\n approver: IEmployee;\r\n position: IPositionEmployee;\r\n isEmployee: boolean;\r\n ignore: boolean;\r\n makePreapprover: boolean;\r\n}\r\n\r\n\r\nexport enum EApproverRoles {\r\n predschvalovatel = 10,\r\n zastupce = 20,\r\n zastupce9 = 30,\r\n vedouci = 40,\r\n vyssiSchvalovatel = 60,\r\n vyssiSchvalovatelZastupce = 61,\r\n vyssiSchvalovatelZastupce9 = 62,\r\n dochazkovyVedouci = 90,\r\n}\r\nexport enum EApproverTypes {\r\n vyssiSchvalovatel = \"vyssiSchvalovatel\",\r\n vyssiSchvalovatelZastupce = \"vyssiSchvalovatelZastupce\",\r\n vyssiSchvalovatelZastupce9 = \"vyssiSchvalovatelZastupce9\",\r\n vedouci = \"vedouci\",\r\n zastupce9 = \"zastupce9\",\r\n zastupce = \"zastupce\",\r\n predschvalovatel1 = \"predschvalovatel1\",\r\n predschvalovatel2 = \"predschvalovatel2\",\r\n predschvalovatel3 = \"predschvalovatel3\",\r\n dochazkovyVedouci = \"dochazkovyVedouci\",\r\n}\r\n\r\nexport interface IAttachment {\r\n\r\n\r\n id: number;\r\n created: string;\r\n createdByEmpId: string;\r\n updated: string;\r\n updatedByEmpId: string;\r\n mimeType: string;\r\n size: number;\r\n filename: string;\r\n\r\n}\r\n\r\n\r\n\r\nexport interface IStep {\r\n\r\n\r\n date: string;\r\n type: number;\r\n comment: string;\r\n decision: string;\r\n employee: IEmployee;\r\n\r\n}\r\n\r\n\r\nexport enum EDecisionsTranslations {\r\n approved = 'Schváleno',\r\n rejected = 'Zamítnuto',\r\n cancelled = 'Stornováno',\r\n evided = 'Zaevidováno',\r\n}\r\n\r\n\r\nexport interface ProcessDefinitionDto {\r\n /**\r\n * The id of the process definition\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n id?: string | null;\r\n\r\n /**\r\n * The key of the process definition, i.e., the id of the BPMN 2.0 XML process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n key?: string | null;\r\n\r\n /**\r\n * The category of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n category?: string | null;\r\n\r\n /**\r\n * The description of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n description?: string | null;\r\n\r\n /**\r\n * The name of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n name?: string | null;\r\n\r\n /**\r\n * The version of the process definition that the engine assigned to it.\r\n *\r\n * @type {number}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n version?: number | null;\r\n\r\n /**\r\n * The file name of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n resource?: string | null;\r\n\r\n /**\r\n * The deployment id of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n deploymentId?: string | null;\r\n\r\n /**\r\n * The file name of the process definition diagram, if it exists.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n diagram?: string | null;\r\n\r\n /**\r\n * A flag indicating whether the definition is suspended or not.\r\n *\r\n * @type {boolean}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n suspended?: boolean | null;\r\n\r\n /**\r\n * The tenant id of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n tenantId?: string | null;\r\n\r\n /**\r\n * The version tag of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n versionTag?: string | null;\r\n\r\n /**\r\n * History time to live value of the process definition. Is used within [History cleanup](https://docs.camunda.org/manual/7.20/user-guide/process-engine/history/#history-cleanup).\r\n *\r\n * @type {number}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n historyTimeToLive?: number | null;\r\n\r\n /**\r\n * A flag indicating whether the process definition is startable in Tasklist or not.\r\n *\r\n * @type {boolean}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n startableInTasklist?: boolean | null;\r\n}"],"names":["EApproverRoles","EApproverTypes","EDecisionsTranslations"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../lib/types.ts"],"sourcesContent":["import { AxiosInstance } from \"axios\";\r\nimport { Emitter } from \"mitt\";\r\n\r\n\r\nimport { UseFormReturn } from \"react-hook-form\";\r\n\r\nexport interface IUserInfo {\r\n contractGroup: number;\r\n degreeAfter: string;\r\n degreeBefore: string;\r\n departmentId: string;\r\n departmentName: string;\r\n departmentNameLong: string;\r\n email: string;\r\n employeeId: number;\r\n firstName: string;\r\n lastName: string;\r\n positionName: string;\r\n positionNumber: string;\r\n userId: string;\r\n}\r\nexport interface IEmployee extends IUserInfo {\r\n\r\n deleted: boolean\r\n hasComputer: string\r\n language: string\r\n manager: string\r\n parentFrId: number\r\n positionId: number\r\n validFrom: string\r\n validTo: string\r\n contractType: number\r\n exemption: number\r\n activatedOn: string\r\n}\r\n\r\nexport type IAuthApps = string[];\r\n\r\nexport interface IEventMessage {\r\n title?: string;\r\n message?: string;\r\n timeout?: number;\r\n classes?: string;\r\n}\r\n\r\nexport type Events = {\r\n message?: IEventMessage;\r\n loading?: boolean;\r\n};\r\n\r\nexport interface IContextValue {\r\n userInfo: IUserInfo;\r\n apiClient: AxiosInstance;\r\n authApps: IAuthApps;\r\n emitter: Emitter<Events>;\r\n}\r\nexport interface IOptionItem {\r\n value: string | number | null;\r\n label: string;\r\n description?: string;\r\n}\r\n\r\nexport type IFormProps = {\r\n formName: string;\r\n entityId: string;\r\n entityName: string;\r\n context: IContextValue;\r\n onSuccess: (path: string, message?: string) => void;\r\n};\r\nexport type IListProps = {\r\n id?: string;\r\n listName: string;\r\n filters: object; //{ [key: string]: any };\r\n context: IContextValue;\r\n title?: string;\r\n};\r\n\r\nexport type IStartProcessProps = {\r\n context: IContextValue;\r\n\r\n onNavigate: (path: string) => void;\r\n};\r\n\r\nexport interface IModuleProcess {\r\n\r\n key: string;\r\n name: string;\r\n description: string;\r\n\r\n}\r\nexport interface IModuleConstants {\r\n\r\n name: string\r\n processes: IModuleProcess[]\r\n};\r\n\r\n\r\nexport interface IPosition {\r\n id: number;\r\n departmentId: string;\r\n positionName: string;\r\n positionNumber: string;\r\n manager: string;\r\n virtual: boolean;\r\n title: string;\r\n}\r\nexport interface IPositionEmployee extends IPosition {\r\n employee: IEmployee;\r\n}\r\nexport interface IEmployeePosition extends IEmployee {\r\n position: IPosition;\r\n}\r\nexport type { ICalendarItem } from \"./components/Calendar\";\r\n\r\n\r\nexport interface ITimeOffCategoryDto {\r\n id?: number;\r\n name?: string;\r\n}\r\nexport interface ITimeOffData {\r\n id: number;\r\n startDate: string;\r\n endDate: string;\r\n days?: number;\r\n year?: number;\r\n comment?: string;\r\n applicant?: IEmployee;\r\n place?: string;\r\n leaveType?: string;\r\n initiator?: string;\r\n dateFromEvidence?: string;\r\n dateToEvidence?: string;\r\n status?: number;\r\n statusText?: string;\r\n timeOffCategoryDto: ITimeOffCategoryDto;\r\n applicantContractGroup?: number;\r\n name?: string;\r\n daysOfEvidence?: number;\r\n daysInStartMonth?: number;\r\n daysInEndMonth?: number;\r\n lastChange?: string;\r\n created?: string;\r\n updated?: string;\r\n attachment?: IAttachment;\r\n steps?: IStep[];\r\n}\r\n\r\nexport interface IDepartment {\r\n departmentId: string;\r\n nameLong: string;\r\n parentDepartmentId: string;\r\n parentLocationId: number;\r\n nameShort: string;\r\n}\r\n\r\nexport interface IPageable<T> {\r\n content: T[];\r\n empty: boolean;\r\n first: boolean;\r\n last: boolean;\r\n number: number;\r\n numberOfElements: number;\r\n size: number;\r\n totalElements: number;\r\n totalPages: number;\r\n}\r\n\r\n\r\nexport interface IFormFieldGlobalProps {\r\n label?: string;\r\n description?: string;\r\n name: string;\r\n type?: string;\r\n value?: any;\r\n\r\n methods?: UseFormReturn<any>;\r\n\r\n errors?: any;\r\n register?: any;\r\n disabled?: boolean;\r\n required?: boolean;\r\n clearable?: boolean;\r\n placeholder?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n\r\n onInputChange: (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | any\r\n >\r\n ) => void;\r\n}\r\n\r\n\r\nexport interface SysConfigHolidayEntityResponse {\r\n \"id\": number,\r\n \"date\": string,\r\n \"day\": number,\r\n \"month\": number,\r\n \"year\": number,\r\n \"dayOfWeek\": number\r\n}\r\n\r\n\r\nexport interface IProfileApprover {\r\n id: number;\r\n role: number;\r\n roleTxt: string;\r\n approverOrder: number;\r\n approver: IEmployee;\r\n position: IPositionEmployee;\r\n isEmployee: boolean;\r\n ignore: boolean;\r\n makePreapprover: boolean;\r\n}\r\n\r\n\r\nexport enum EApproverRoles {\r\n predschvalovatel = 10,\r\n zastupce = 20,\r\n zastupce9 = 30,\r\n vedouci = 40,\r\n vyssiSchvalovatel = 60,\r\n vyssiSchvalovatelZastupce = 61,\r\n vyssiSchvalovatelZastupce9 = 62,\r\n dochazkovyVedouci = 90,\r\n}\r\nexport enum EApproverTypes {\r\n vyssiSchvalovatel = \"vyssiSchvalovatel\",\r\n vyssiSchvalovatelZastupce = \"vyssiSchvalovatelZastupce\",\r\n vyssiSchvalovatelZastupce9 = \"vyssiSchvalovatelZastupce9\",\r\n vedouci = \"vedouci\",\r\n zastupce9 = \"zastupce9\",\r\n zastupce = \"zastupce\",\r\n predschvalovatel1 = \"predschvalovatel1\",\r\n predschvalovatel2 = \"predschvalovatel2\",\r\n predschvalovatel3 = \"predschvalovatel3\",\r\n dochazkovyVedouci = \"dochazkovyVedouci\",\r\n}\r\n\r\nexport interface IAttachment {\r\n\r\n\r\n id: number;\r\n created: string;\r\n createdByEmpId: string;\r\n updated: string;\r\n updatedByEmpId: string;\r\n mimeType: string;\r\n size: number;\r\n filename: string;\r\n\r\n}\r\n\r\n\r\n\r\nexport interface IStep {\r\n\r\n\r\n date: string;\r\n type: number;\r\n comment: string;\r\n decision: string;\r\n employee: IEmployee;\r\n\r\n}\r\n\r\n\r\nexport enum EDecisionsTranslations {\r\n approved = 'Schváleno',\r\n rejected = 'Zamítnuto',\r\n cancelled = 'Stornováno',\r\n evided = 'Zaevidováno',\r\n}\r\n\r\n\r\nexport interface ProcessDefinitionDto {\r\n /**\r\n * The id of the process definition\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n id?: string | null;\r\n\r\n /**\r\n * The key of the process definition, i.e., the id of the BPMN 2.0 XML process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n key?: string | null;\r\n\r\n /**\r\n * The category of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n category?: string | null;\r\n\r\n /**\r\n * The description of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n description?: string | null;\r\n\r\n /**\r\n * The name of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n name?: string | null;\r\n\r\n /**\r\n * The version of the process definition that the engine assigned to it.\r\n *\r\n * @type {number}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n version?: number | null;\r\n\r\n /**\r\n * The file name of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n resource?: string | null;\r\n\r\n /**\r\n * The deployment id of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n deploymentId?: string | null;\r\n\r\n /**\r\n * The file name of the process definition diagram, if it exists.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n diagram?: string | null;\r\n\r\n /**\r\n * A flag indicating whether the definition is suspended or not.\r\n *\r\n * @type {boolean}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n suspended?: boolean | null;\r\n\r\n /**\r\n * The tenant id of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n tenantId?: string | null;\r\n\r\n /**\r\n * The version tag of the process definition.\r\n *\r\n * @type {string}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n versionTag?: string | null;\r\n\r\n /**\r\n * History time to live value of the process definition. Is used within [History cleanup](https://docs.camunda.org/manual/7.20/user-guide/process-engine/history/#history-cleanup).\r\n *\r\n * @type {number}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n historyTimeToLive?: number | null;\r\n\r\n /**\r\n * A flag indicating whether the process definition is startable in Tasklist or not.\r\n *\r\n * @type {boolean}\r\n * @memberof ProcessDefinitionDto\r\n */\r\n startableInTasklist?: boolean | null;\r\n}"],"names":["EApproverRoles","EApproverTypes","EDecisionsTranslations"],"mappings":"AAyNY,IAAA,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,sBAAmB,EAAnB,IAAA;AACAA,kBAAAA,gBAAA,cAAW,EAAX,IAAA;AACAA,kBAAAA,gBAAA,eAAY,EAAZ,IAAA;AACAA,kBAAAA,gBAAA,aAAU,EAAV,IAAA;AACAA,kBAAAA,gBAAA,uBAAoB,EAApB,IAAA;AACAA,kBAAAA,gBAAA,+BAA4B,EAA5B,IAAA;AACAA,kBAAAA,gBAAA,gCAA6B,EAA7B,IAAA;AACAA,kBAAAA,gBAAA,uBAAoB,EAApB,IAAA;AARUA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAUA,IAAA,mCAAAC,oBAAL;AACLA,kBAAA,mBAAoB,IAAA;AACpBA,kBAAA,2BAA4B,IAAA;AAC5BA,kBAAA,4BAA6B,IAAA;AAC7BA,kBAAA,SAAU,IAAA;AACVA,kBAAA,WAAY,IAAA;AACZA,kBAAA,UAAW,IAAA;AACXA,kBAAA,mBAAoB,IAAA;AACpBA,kBAAA,mBAAoB,IAAA;AACpBA,kBAAA,mBAAoB,IAAA;AACpBA,kBAAA,mBAAoB,IAAA;AAVVA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAyCA,IAAA,2CAAAC,4BAAL;AACLA,0BAAA,UAAW,IAAA;AACXA,0BAAA,UAAW,IAAA;AACXA,0BAAA,WAAY,IAAA;AACZA,0BAAA,QAAS,IAAA;AAJCA,SAAAA;AAAA,GAAA,0BAAA,CAAA,CAAA;"}
|