andoncloud-dashboard-toolkit 1.5.82 → 1.5.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +223 -206
- package/dist/index.js +322 -297
- package/dist/index.js.map +1 -1
- package/package.json +32 -32
package/dist/index.js
CHANGED
|
@@ -6,8 +6,6 @@ import CalendarTodayIcon from "@mui/icons-material/CalendarToday";
|
|
|
6
6
|
import { AccessBlocker, AccessGuard, Checkbox, fetch, refreshUserData, registerTranslations, useAccess, useStore } from "andoncloud-sdk";
|
|
7
7
|
import dayjs from "dayjs";
|
|
8
8
|
import gql from "graphql-tag";
|
|
9
|
-
import isoWeek from "dayjs/plugin/isoWeek.js";
|
|
10
|
-
import quarterOfYear from "dayjs/plugin/quarterOfYear.js";
|
|
11
9
|
import "dayjs/locale/pl.js";
|
|
12
10
|
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
|
|
13
11
|
import { DateCalendar } from "@mui/x-date-pickers/DateCalendar";
|
|
@@ -17,6 +15,8 @@ import isBetween from "dayjs/plugin/isBetween.js";
|
|
|
17
15
|
import { mergeSx } from "merge-sx";
|
|
18
16
|
import LockIcon from "@mui/icons-material/Lock";
|
|
19
17
|
import SearchIcon from "@mui/icons-material/Search";
|
|
18
|
+
import isoWeek from "dayjs/plugin/isoWeek.js";
|
|
19
|
+
import quarterOfYear from "dayjs/plugin/quarterOfYear.js";
|
|
20
20
|
import TextTruncate from "react-text-truncate";
|
|
21
21
|
import durationPlugin from "dayjs/plugin/duration.js";
|
|
22
22
|
import { keyframes } from "@mui/system";
|
|
@@ -124,6 +124,11 @@ let InsightsAggregation = /* @__PURE__ */ function(InsightsAggregation) {
|
|
|
124
124
|
InsightsAggregation["Weekly"] = "WEEKLY";
|
|
125
125
|
return InsightsAggregation;
|
|
126
126
|
}({});
|
|
127
|
+
let InsightsPeriodView = /* @__PURE__ */ function(InsightsPeriodView) {
|
|
128
|
+
InsightsPeriodView["Breakdown"] = "BREAKDOWN";
|
|
129
|
+
InsightsPeriodView["Comparison"] = "COMPARISON";
|
|
130
|
+
return InsightsPeriodView;
|
|
131
|
+
}({});
|
|
127
132
|
let MetricTypeEnum = /* @__PURE__ */ function(MetricTypeEnum) {
|
|
128
133
|
MetricTypeEnum["Counter"] = "COUNTER";
|
|
129
134
|
MetricTypeEnum["Empty"] = "EMPTY";
|
|
@@ -3645,8 +3650,6 @@ const GetWorkplacePerformanceInsightsDocument = gql`
|
|
|
3645
3650
|
totalUptimePercentage
|
|
3646
3651
|
totalDowntime
|
|
3647
3652
|
totalDowntimePercentage
|
|
3648
|
-
offScheduleDuration
|
|
3649
|
-
offScheduleSeconds
|
|
3650
3653
|
mtbf
|
|
3651
3654
|
mttr
|
|
3652
3655
|
reasons {
|
|
@@ -3721,7 +3724,6 @@ const ListReasonsDocument = gql`
|
|
|
3721
3724
|
leaf
|
|
3722
3725
|
name
|
|
3723
3726
|
statusColor
|
|
3724
|
-
reasonGroupId
|
|
3725
3727
|
}
|
|
3726
3728
|
}
|
|
3727
3729
|
`;
|
|
@@ -3885,14 +3887,6 @@ const ListWorkplaceAssignmentsDocument = gql`
|
|
|
3885
3887
|
const ListWorkplacesDocument = gql`
|
|
3886
3888
|
query listWorkplaces($filter: WorkplaceFilter) {
|
|
3887
3889
|
workplaces(filter: $filter) {
|
|
3888
|
-
currentStatusChange {
|
|
3889
|
-
id
|
|
3890
|
-
reason {
|
|
3891
|
-
id
|
|
3892
|
-
name
|
|
3893
|
-
statusColor
|
|
3894
|
-
}
|
|
3895
|
-
}
|
|
3896
3890
|
deactivated
|
|
3897
3891
|
departmentId
|
|
3898
3892
|
id
|
|
@@ -4997,7 +4991,7 @@ const resolveInitialValues = (values) => {
|
|
|
4997
4991
|
if (!values) return void 0;
|
|
4998
4992
|
const today = dayjs().format("YYYY-MM-DD");
|
|
4999
4993
|
return {
|
|
5000
|
-
dayType: values.dayType ??
|
|
4994
|
+
dayType: values.dayType ?? "PRODUCTION",
|
|
5001
4995
|
dateRange: values.dateRange ?? {
|
|
5002
4996
|
from: `${today}T00:00:00`,
|
|
5003
4997
|
to: `${today}T23:59:59`
|
|
@@ -5007,6 +5001,236 @@ const resolveInitialValues = (values) => {
|
|
|
5007
5001
|
};
|
|
5008
5002
|
};
|
|
5009
5003
|
//#endregion
|
|
5004
|
+
//#region src/locales/index.ts
|
|
5005
|
+
const resources = {
|
|
5006
|
+
en: { translation: {
|
|
5007
|
+
"Are you sure you want to delete this widget?": "Are you sure you want to delete this widget?",
|
|
5008
|
+
Cancel: "Cancel",
|
|
5009
|
+
Delete: "Delete",
|
|
5010
|
+
widgetCard: {
|
|
5011
|
+
"error": "Widget encountered an error",
|
|
5012
|
+
"retry": "Retry",
|
|
5013
|
+
"openSettings": "Open widget settings",
|
|
5014
|
+
"showVersion": "Show widget version",
|
|
5015
|
+
"deleteWidget": "Delete widget"
|
|
5016
|
+
},
|
|
5017
|
+
dashboardFilters: {
|
|
5018
|
+
"dayType": {
|
|
5019
|
+
"label": "Day type",
|
|
5020
|
+
"calendar": "Calendar",
|
|
5021
|
+
"production": "Production"
|
|
5022
|
+
},
|
|
5023
|
+
"shifts": {
|
|
5024
|
+
"label": "Shifts",
|
|
5025
|
+
"allShifts": "All shifts"
|
|
5026
|
+
},
|
|
5027
|
+
"dateRange": {
|
|
5028
|
+
"label": "Date range",
|
|
5029
|
+
"from": "From",
|
|
5030
|
+
"to": "To"
|
|
5031
|
+
},
|
|
5032
|
+
"search": {
|
|
5033
|
+
"placeholder": "Search periods...",
|
|
5034
|
+
"noResults": "No periods found"
|
|
5035
|
+
},
|
|
5036
|
+
"premium": { "indicator": "Premium" },
|
|
5037
|
+
"periods": {
|
|
5038
|
+
"currentShift": "Current shift",
|
|
5039
|
+
"lastShift": "Previous shift",
|
|
5040
|
+
"today": "Today",
|
|
5041
|
+
"yesterday": "Yesterday",
|
|
5042
|
+
"last7Days": "Last 7 days",
|
|
5043
|
+
"last14Days": "Last 14 days",
|
|
5044
|
+
"last30Days": "Last 30 days",
|
|
5045
|
+
"last90Days": "Last 90 days",
|
|
5046
|
+
"last180Days": "Last 180 days",
|
|
5047
|
+
"last365Days": "Last 365 days",
|
|
5048
|
+
"currentWeek": "Current week",
|
|
5049
|
+
"currentMonth": "Current month",
|
|
5050
|
+
"currentQuarter": "Current quarter",
|
|
5051
|
+
"currentYear": "Current year",
|
|
5052
|
+
"previousWeek": "Previous week",
|
|
5053
|
+
"previousMonth": "Previous month",
|
|
5054
|
+
"previousQuarter": "Previous quarter",
|
|
5055
|
+
"previousYear": "Previous year",
|
|
5056
|
+
"last2Weeks": "Last 2 weeks",
|
|
5057
|
+
"last4Weeks": "Last 4 weeks",
|
|
5058
|
+
"last8Weeks": "Last 8 weeks",
|
|
5059
|
+
"last12Weeks": "Last 12 weeks",
|
|
5060
|
+
"last3Months": "Last 3 months",
|
|
5061
|
+
"last6Months": "Last 6 months",
|
|
5062
|
+
"last12Months": "Last 12 months",
|
|
5063
|
+
"week": "Week {{week}}"
|
|
5064
|
+
},
|
|
5065
|
+
"accessDenied": {
|
|
5066
|
+
"title": "Premium feature",
|
|
5067
|
+
"close": "Close"
|
|
5068
|
+
}
|
|
5069
|
+
}
|
|
5070
|
+
} },
|
|
5071
|
+
pl: { translation: {
|
|
5072
|
+
"Are you sure you want to delete this widget?": "Czy na pewno usunąć ten widżet?",
|
|
5073
|
+
Cancel: "Anuluj",
|
|
5074
|
+
Delete: "Usuń",
|
|
5075
|
+
widgetCard: {
|
|
5076
|
+
"error": "Widżet napotkał błąd",
|
|
5077
|
+
"retry": "Ponów",
|
|
5078
|
+
"openSettings": "Otwórz ustawienia widżetu",
|
|
5079
|
+
"showVersion": "Pokaż wersję widżetu",
|
|
5080
|
+
"deleteWidget": "Usuń widżet"
|
|
5081
|
+
},
|
|
5082
|
+
dashboardFilters: {
|
|
5083
|
+
"dayType": {
|
|
5084
|
+
"label": "Typ dnia",
|
|
5085
|
+
"calendar": "Kalendarzowy",
|
|
5086
|
+
"production": "Produkcyjny"
|
|
5087
|
+
},
|
|
5088
|
+
"shifts": {
|
|
5089
|
+
"label": "Zmiany",
|
|
5090
|
+
"allShifts": "Wszystkie zmiany"
|
|
5091
|
+
},
|
|
5092
|
+
"dateRange": {
|
|
5093
|
+
"label": "Zakres dat",
|
|
5094
|
+
"from": "Od",
|
|
5095
|
+
"to": "Do"
|
|
5096
|
+
},
|
|
5097
|
+
"search": {
|
|
5098
|
+
"placeholder": "Szukaj okresów...",
|
|
5099
|
+
"noResults": "Nie znaleziono okresów"
|
|
5100
|
+
},
|
|
5101
|
+
"premium": { "indicator": "Premium" },
|
|
5102
|
+
"periods": {
|
|
5103
|
+
"currentShift": "Aktualna zmiana",
|
|
5104
|
+
"lastShift": "Poprzednia zmiana",
|
|
5105
|
+
"today": "Dzisiaj",
|
|
5106
|
+
"yesterday": "Wczoraj",
|
|
5107
|
+
"last7Days": "Ostatnie 7 dni",
|
|
5108
|
+
"last14Days": "Ostatnie 14 dni",
|
|
5109
|
+
"last30Days": "Ostatnie 30 dni",
|
|
5110
|
+
"last90Days": "Ostatnie 90 dni",
|
|
5111
|
+
"last180Days": "Ostatnie 180 dni",
|
|
5112
|
+
"last365Days": "Ostatnie 365 dni",
|
|
5113
|
+
"currentWeek": "Bieżący tydzień",
|
|
5114
|
+
"currentMonth": "Bieżący miesiąc",
|
|
5115
|
+
"currentQuarter": "Bieżący kwartał",
|
|
5116
|
+
"currentYear": "Bieżący rok",
|
|
5117
|
+
"previousWeek": "Poprzedni tydzień",
|
|
5118
|
+
"previousMonth": "Poprzedni miesiąc",
|
|
5119
|
+
"previousQuarter": "Poprzedni kwartał",
|
|
5120
|
+
"previousYear": "Poprzedni rok",
|
|
5121
|
+
"last2Weeks": "Ostatnie 2 tygodnie",
|
|
5122
|
+
"last4Weeks": "Ostatnie 4 tygodnie",
|
|
5123
|
+
"last8Weeks": "Ostatnie 8 tygodni",
|
|
5124
|
+
"last12Weeks": "Ostatnie 12 tygodni",
|
|
5125
|
+
"last3Months": "Ostatnie 3 miesiące",
|
|
5126
|
+
"last6Months": "Ostatnie 6 miesięcy",
|
|
5127
|
+
"last12Months": "Ostatnie 12 miesięcy",
|
|
5128
|
+
"week": "Tydzień {{week}}"
|
|
5129
|
+
},
|
|
5130
|
+
"accessDenied": {
|
|
5131
|
+
"title": "Funkcja Premium",
|
|
5132
|
+
"close": "Zamknij"
|
|
5133
|
+
}
|
|
5134
|
+
}
|
|
5135
|
+
} }
|
|
5136
|
+
};
|
|
5137
|
+
//#endregion
|
|
5138
|
+
//#region src/components/DashboardFilters/AccessDeniedModal/styles.ts
|
|
5139
|
+
const styles$6 = { dialog: {
|
|
5140
|
+
"& .MuiDialog-paper": { borderRadius: "6px" },
|
|
5141
|
+
"& .MuiDialogContent-root": { padding: 0 }
|
|
5142
|
+
} };
|
|
5143
|
+
//#endregion
|
|
5144
|
+
//#region src/components/DashboardFilters/AccessDeniedModal/index.tsx
|
|
5145
|
+
const FEATURE_KEY$1 = "feature.dashboard_extended_date_ranges";
|
|
5146
|
+
const AccessDeniedModal = ({ open, onClose, accessState, buttons, daysSinceExpiry, cooldownInfo, workplaceId, onFeatureRequest }) => {
|
|
5147
|
+
const handleTrialRequest = useCallback(() => Promise.resolve(false), []);
|
|
5148
|
+
const handleFeatureRequest = useCallback(async (payload) => {
|
|
5149
|
+
const success = onFeatureRequest ? await onFeatureRequest(payload) : false;
|
|
5150
|
+
if (success) onClose();
|
|
5151
|
+
return success;
|
|
5152
|
+
}, [onFeatureRequest, onClose]);
|
|
5153
|
+
const { t } = useTranslation();
|
|
5154
|
+
return /* @__PURE__ */ jsxs(Dialog, {
|
|
5155
|
+
open,
|
|
5156
|
+
onClose,
|
|
5157
|
+
sx: styles$6.dialog,
|
|
5158
|
+
"data-testid": "dashboard-filters.access-denied-dialog",
|
|
5159
|
+
children: [/* @__PURE__ */ jsx(DialogTitle, { children: t("dashboardFilters.accessDenied.title") }), /* @__PURE__ */ jsxs(DialogContent, { children: [/* @__PURE__ */ jsx(AccessBlocker, {
|
|
5160
|
+
accessState,
|
|
5161
|
+
buttons,
|
|
5162
|
+
daysSinceExpiry: daysSinceExpiry ?? void 0,
|
|
5163
|
+
featureKey: FEATURE_KEY$1,
|
|
5164
|
+
workplaceId,
|
|
5165
|
+
cooldownInfo,
|
|
5166
|
+
onTrialRequest: handleTrialRequest,
|
|
5167
|
+
onFeatureRequest: handleFeatureRequest
|
|
5168
|
+
}), /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, {
|
|
5169
|
+
onClick: onClose,
|
|
5170
|
+
children: t("dashboardFilters.accessDenied.close")
|
|
5171
|
+
}) })] })]
|
|
5172
|
+
});
|
|
5173
|
+
};
|
|
5174
|
+
//#endregion
|
|
5175
|
+
//#region src/components/DashboardFilters/DayTypeSelector/styles.ts
|
|
5176
|
+
const styles$5 = {
|
|
5177
|
+
container: {
|
|
5178
|
+
display: "flex",
|
|
5179
|
+
alignItems: "center",
|
|
5180
|
+
gap: (theme) => theme.spacing(1)
|
|
5181
|
+
},
|
|
5182
|
+
label: {
|
|
5183
|
+
fontSize: "0.875rem",
|
|
5184
|
+
whiteSpace: "nowrap",
|
|
5185
|
+
color: (theme) => theme.palette.common.white
|
|
5186
|
+
},
|
|
5187
|
+
toggleGroup: { "& .MuiToggleButton-root": {
|
|
5188
|
+
padding: (theme) => theme.spacing(.5, 1.5),
|
|
5189
|
+
fontSize: "0.875rem",
|
|
5190
|
+
opacity: .7,
|
|
5191
|
+
color: (theme) => theme.palette.text.primary,
|
|
5192
|
+
textTransform: "none",
|
|
5193
|
+
borderRadius: "6px",
|
|
5194
|
+
"&.Mui-selected": {
|
|
5195
|
+
opacity: 1,
|
|
5196
|
+
color: (theme) => theme.palette.common.white,
|
|
5197
|
+
backgroundColor: (theme) => theme.palette.primary.main,
|
|
5198
|
+
"&:hover": { backgroundColor: (theme) => theme.palette.primary.dark }
|
|
5199
|
+
}
|
|
5200
|
+
} }
|
|
5201
|
+
};
|
|
5202
|
+
//#endregion
|
|
5203
|
+
//#region src/components/DashboardFilters/DayTypeSelector/index.tsx
|
|
5204
|
+
const DayTypeSelector = ({ value, onChange }) => {
|
|
5205
|
+
const { t } = useTranslation();
|
|
5206
|
+
const handleChange = useCallback((_event, newValue) => {
|
|
5207
|
+
if (newValue !== null) onChange(newValue);
|
|
5208
|
+
}, [onChange]);
|
|
5209
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
5210
|
+
sx: styles$5.container,
|
|
5211
|
+
children: [/* @__PURE__ */ jsx(Typography, {
|
|
5212
|
+
sx: styles$5.label,
|
|
5213
|
+
children: t("dashboardFilters.dayType.label")
|
|
5214
|
+
}), /* @__PURE__ */ jsxs(ToggleButtonGroup, {
|
|
5215
|
+
value,
|
|
5216
|
+
exclusive: true,
|
|
5217
|
+
onChange: handleChange,
|
|
5218
|
+
size: "small",
|
|
5219
|
+
sx: styles$5.toggleGroup,
|
|
5220
|
+
"data-testid": "dashboard-filters.day-type-selector",
|
|
5221
|
+
children: [/* @__PURE__ */ jsx(ToggleButton, {
|
|
5222
|
+
value: "CALENDAR",
|
|
5223
|
+
"data-testid": "dashboard-filters.day-type-calendar",
|
|
5224
|
+
children: t("dashboardFilters.dayType.calendar")
|
|
5225
|
+
}), /* @__PURE__ */ jsx(ToggleButton, {
|
|
5226
|
+
value: "PRODUCTION",
|
|
5227
|
+
"data-testid": "dashboard-filters.day-type-production",
|
|
5228
|
+
children: t("dashboardFilters.dayType.production")
|
|
5229
|
+
})]
|
|
5230
|
+
})]
|
|
5231
|
+
});
|
|
5232
|
+
};
|
|
5233
|
+
//#endregion
|
|
5010
5234
|
//#region src/helpers/shifts.ts
|
|
5011
5235
|
const setDate = (date, shiftDate) => {
|
|
5012
5236
|
return shiftDate.year(date.year()).month(date.month()).date(date.date());
|
|
@@ -5091,7 +5315,7 @@ const formatDateTime = (date, time) => {
|
|
|
5091
5315
|
return date.hour(hours).minute(minutes).second(seconds || 0).format("YYYY-MM-DDTHH:mm:ss");
|
|
5092
5316
|
};
|
|
5093
5317
|
const createDateRange = (startDate, endDate, dayType, boundaries) => {
|
|
5094
|
-
if (dayType ===
|
|
5318
|
+
if (dayType === "CALENDAR") return {
|
|
5095
5319
|
from: formatDateTime(startDate, "00:00:00"),
|
|
5096
5320
|
to: formatDateTime(endDate, "23:59:59")
|
|
5097
5321
|
};
|
|
@@ -5427,7 +5651,7 @@ const getShiftTimeRange = (shift) => {
|
|
|
5427
5651
|
return `${parseShiftTime(shift.startedAt).slice(0, 5)} - ${parseShiftTime(shift.finishedAt).slice(0, 5)}`;
|
|
5428
5652
|
};
|
|
5429
5653
|
const getNextMidnight = (ctx) => {
|
|
5430
|
-
if (ctx.dayType ===
|
|
5654
|
+
if (ctx.dayType === "PRODUCTION" && ctx.shifts.length > 0) {
|
|
5431
5655
|
const [h, m, s] = getTimeBoundaries(ctx.shifts, ctx.selectedShiftIds).startTime.split(":").map(Number);
|
|
5432
5656
|
return dayjs().add(1, "day").hour(h).minute(m).second(s || 0).millisecond(0).toDate();
|
|
5433
5657
|
}
|
|
@@ -5464,230 +5688,6 @@ const getNextBoundary = (periodId, ctx) => {
|
|
|
5464
5688
|
}
|
|
5465
5689
|
};
|
|
5466
5690
|
//#endregion
|
|
5467
|
-
//#region src/locales/index.ts
|
|
5468
|
-
const resources = {
|
|
5469
|
-
en: { translation: {
|
|
5470
|
-
"Are you sure you want to delete this widget?": "Are you sure you want to delete this widget?",
|
|
5471
|
-
Cancel: "Cancel",
|
|
5472
|
-
Delete: "Delete",
|
|
5473
|
-
widgetCard: {
|
|
5474
|
-
"error": "Widget encountered an error",
|
|
5475
|
-
"retry": "Retry"
|
|
5476
|
-
},
|
|
5477
|
-
dashboardFilters: {
|
|
5478
|
-
"dayType": {
|
|
5479
|
-
"label": "Day type",
|
|
5480
|
-
"calendar": "Calendar",
|
|
5481
|
-
"production": "Production"
|
|
5482
|
-
},
|
|
5483
|
-
"shifts": {
|
|
5484
|
-
"label": "Shifts",
|
|
5485
|
-
"allShifts": "All shifts"
|
|
5486
|
-
},
|
|
5487
|
-
"dateRange": {
|
|
5488
|
-
"label": "Date range",
|
|
5489
|
-
"from": "From",
|
|
5490
|
-
"to": "To"
|
|
5491
|
-
},
|
|
5492
|
-
"search": {
|
|
5493
|
-
"placeholder": "Search periods...",
|
|
5494
|
-
"noResults": "No periods found"
|
|
5495
|
-
},
|
|
5496
|
-
"premium": { "indicator": "Premium" },
|
|
5497
|
-
"periods": {
|
|
5498
|
-
"currentShift": "Current shift",
|
|
5499
|
-
"lastShift": "Previous shift",
|
|
5500
|
-
"today": "Today",
|
|
5501
|
-
"yesterday": "Yesterday",
|
|
5502
|
-
"last7Days": "Last 7 days",
|
|
5503
|
-
"last14Days": "Last 14 days",
|
|
5504
|
-
"last30Days": "Last 30 days",
|
|
5505
|
-
"last90Days": "Last 90 days",
|
|
5506
|
-
"last180Days": "Last 180 days",
|
|
5507
|
-
"last365Days": "Last 365 days",
|
|
5508
|
-
"currentWeek": "Current week",
|
|
5509
|
-
"currentMonth": "Current month",
|
|
5510
|
-
"currentQuarter": "Current quarter",
|
|
5511
|
-
"currentYear": "Current year",
|
|
5512
|
-
"previousWeek": "Previous week",
|
|
5513
|
-
"previousMonth": "Previous month",
|
|
5514
|
-
"previousQuarter": "Previous quarter",
|
|
5515
|
-
"previousYear": "Previous year",
|
|
5516
|
-
"last2Weeks": "Last 2 weeks",
|
|
5517
|
-
"last4Weeks": "Last 4 weeks",
|
|
5518
|
-
"last8Weeks": "Last 8 weeks",
|
|
5519
|
-
"last12Weeks": "Last 12 weeks",
|
|
5520
|
-
"last3Months": "Last 3 months",
|
|
5521
|
-
"last6Months": "Last 6 months",
|
|
5522
|
-
"last12Months": "Last 12 months",
|
|
5523
|
-
"week": "Week {{week}}"
|
|
5524
|
-
},
|
|
5525
|
-
"accessDenied": {
|
|
5526
|
-
"title": "Premium feature",
|
|
5527
|
-
"close": "Close"
|
|
5528
|
-
}
|
|
5529
|
-
}
|
|
5530
|
-
} },
|
|
5531
|
-
pl: { translation: {
|
|
5532
|
-
"Are you sure you want to delete this widget?": "Czy na pewno usunąć ten widżet?",
|
|
5533
|
-
Cancel: "Anuluj",
|
|
5534
|
-
Delete: "Usuń",
|
|
5535
|
-
widgetCard: {
|
|
5536
|
-
"error": "Widżet napotkał błąd",
|
|
5537
|
-
"retry": "Ponów"
|
|
5538
|
-
},
|
|
5539
|
-
dashboardFilters: {
|
|
5540
|
-
"dayType": {
|
|
5541
|
-
"label": "Typ dnia",
|
|
5542
|
-
"calendar": "Kalendarzowy",
|
|
5543
|
-
"production": "Produkcyjny"
|
|
5544
|
-
},
|
|
5545
|
-
"shifts": {
|
|
5546
|
-
"label": "Zmiany",
|
|
5547
|
-
"allShifts": "Wszystkie zmiany"
|
|
5548
|
-
},
|
|
5549
|
-
"dateRange": {
|
|
5550
|
-
"label": "Zakres dat",
|
|
5551
|
-
"from": "Od",
|
|
5552
|
-
"to": "Do"
|
|
5553
|
-
},
|
|
5554
|
-
"search": {
|
|
5555
|
-
"placeholder": "Szukaj okresów...",
|
|
5556
|
-
"noResults": "Nie znaleziono okresów"
|
|
5557
|
-
},
|
|
5558
|
-
"premium": { "indicator": "Premium" },
|
|
5559
|
-
"periods": {
|
|
5560
|
-
"currentShift": "Aktualna zmiana",
|
|
5561
|
-
"lastShift": "Poprzednia zmiana",
|
|
5562
|
-
"today": "Dzisiaj",
|
|
5563
|
-
"yesterday": "Wczoraj",
|
|
5564
|
-
"last7Days": "Ostatnie 7 dni",
|
|
5565
|
-
"last14Days": "Ostatnie 14 dni",
|
|
5566
|
-
"last30Days": "Ostatnie 30 dni",
|
|
5567
|
-
"last90Days": "Ostatnie 90 dni",
|
|
5568
|
-
"last180Days": "Ostatnie 180 dni",
|
|
5569
|
-
"last365Days": "Ostatnie 365 dni",
|
|
5570
|
-
"currentWeek": "Bieżący tydzień",
|
|
5571
|
-
"currentMonth": "Bieżący miesiąc",
|
|
5572
|
-
"currentQuarter": "Bieżący kwartał",
|
|
5573
|
-
"currentYear": "Bieżący rok",
|
|
5574
|
-
"previousWeek": "Poprzedni tydzień",
|
|
5575
|
-
"previousMonth": "Poprzedni miesiąc",
|
|
5576
|
-
"previousQuarter": "Poprzedni kwartał",
|
|
5577
|
-
"previousYear": "Poprzedni rok",
|
|
5578
|
-
"last2Weeks": "Ostatnie 2 tygodnie",
|
|
5579
|
-
"last4Weeks": "Ostatnie 4 tygodnie",
|
|
5580
|
-
"last8Weeks": "Ostatnie 8 tygodni",
|
|
5581
|
-
"last12Weeks": "Ostatnie 12 tygodni",
|
|
5582
|
-
"last3Months": "Ostatnie 3 miesiące",
|
|
5583
|
-
"last6Months": "Ostatnie 6 miesięcy",
|
|
5584
|
-
"last12Months": "Ostatnie 12 miesięcy",
|
|
5585
|
-
"week": "Tydzień {{week}}"
|
|
5586
|
-
},
|
|
5587
|
-
"accessDenied": {
|
|
5588
|
-
"title": "Funkcja Premium",
|
|
5589
|
-
"close": "Zamknij"
|
|
5590
|
-
}
|
|
5591
|
-
}
|
|
5592
|
-
} }
|
|
5593
|
-
};
|
|
5594
|
-
//#endregion
|
|
5595
|
-
//#region src/components/DashboardFilters/AccessDeniedModal/styles.ts
|
|
5596
|
-
const styles$6 = { dialog: {
|
|
5597
|
-
"& .MuiDialog-paper": { borderRadius: "6px" },
|
|
5598
|
-
"& .MuiDialogContent-root": { padding: 0 }
|
|
5599
|
-
} };
|
|
5600
|
-
//#endregion
|
|
5601
|
-
//#region src/components/DashboardFilters/AccessDeniedModal/index.tsx
|
|
5602
|
-
const FEATURE_KEY$1 = "feature.dashboard_extended_date_ranges";
|
|
5603
|
-
const AccessDeniedModal = ({ open, onClose, accessState, buttons, daysSinceExpiry, cooldownInfo, workplaceId, onFeatureRequest }) => {
|
|
5604
|
-
const handleTrialRequest = useCallback(() => Promise.resolve(false), []);
|
|
5605
|
-
const handleFeatureRequest = useCallback(async (payload) => {
|
|
5606
|
-
const success = onFeatureRequest ? await onFeatureRequest(payload) : false;
|
|
5607
|
-
if (success) onClose();
|
|
5608
|
-
return success;
|
|
5609
|
-
}, [onFeatureRequest, onClose]);
|
|
5610
|
-
const { t } = useTranslation();
|
|
5611
|
-
return /* @__PURE__ */ jsxs(Dialog, {
|
|
5612
|
-
open,
|
|
5613
|
-
onClose,
|
|
5614
|
-
sx: styles$6.dialog,
|
|
5615
|
-
"data-testid": "dashboard-filters.access-denied-dialog",
|
|
5616
|
-
children: [/* @__PURE__ */ jsx(DialogTitle, { children: t("dashboardFilters.accessDenied.title") }), /* @__PURE__ */ jsxs(DialogContent, { children: [/* @__PURE__ */ jsx(AccessBlocker, {
|
|
5617
|
-
accessState,
|
|
5618
|
-
buttons,
|
|
5619
|
-
daysSinceExpiry: daysSinceExpiry ?? void 0,
|
|
5620
|
-
featureKey: FEATURE_KEY$1,
|
|
5621
|
-
workplaceId,
|
|
5622
|
-
cooldownInfo,
|
|
5623
|
-
onTrialRequest: handleTrialRequest,
|
|
5624
|
-
onFeatureRequest: handleFeatureRequest
|
|
5625
|
-
}), /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, {
|
|
5626
|
-
onClick: onClose,
|
|
5627
|
-
children: t("dashboardFilters.accessDenied.close")
|
|
5628
|
-
}) })] })]
|
|
5629
|
-
});
|
|
5630
|
-
};
|
|
5631
|
-
//#endregion
|
|
5632
|
-
//#region src/components/DashboardFilters/DayTypeSelector/styles.ts
|
|
5633
|
-
const styles$5 = {
|
|
5634
|
-
container: {
|
|
5635
|
-
display: "flex",
|
|
5636
|
-
alignItems: "center",
|
|
5637
|
-
gap: (theme) => theme.spacing(1)
|
|
5638
|
-
},
|
|
5639
|
-
label: {
|
|
5640
|
-
fontSize: "0.875rem",
|
|
5641
|
-
whiteSpace: "nowrap",
|
|
5642
|
-
color: (theme) => theme.palette.common.white
|
|
5643
|
-
},
|
|
5644
|
-
toggleGroup: { "& .MuiToggleButton-root": {
|
|
5645
|
-
padding: (theme) => theme.spacing(.5, 1.5),
|
|
5646
|
-
fontSize: "0.875rem",
|
|
5647
|
-
opacity: .7,
|
|
5648
|
-
color: (theme) => theme.palette.text.primary,
|
|
5649
|
-
textTransform: "none",
|
|
5650
|
-
borderRadius: "6px",
|
|
5651
|
-
"&.Mui-selected": {
|
|
5652
|
-
opacity: 1,
|
|
5653
|
-
color: (theme) => theme.palette.common.white,
|
|
5654
|
-
backgroundColor: (theme) => theme.palette.primary.main,
|
|
5655
|
-
"&:hover": { backgroundColor: (theme) => theme.palette.primary.dark }
|
|
5656
|
-
}
|
|
5657
|
-
} }
|
|
5658
|
-
};
|
|
5659
|
-
//#endregion
|
|
5660
|
-
//#region src/components/DashboardFilters/DayTypeSelector/index.tsx
|
|
5661
|
-
const DayTypeSelector = ({ value, onChange }) => {
|
|
5662
|
-
const { t } = useTranslation();
|
|
5663
|
-
const handleChange = useCallback((_event, newValue) => {
|
|
5664
|
-
if (newValue !== null) onChange(newValue);
|
|
5665
|
-
}, [onChange]);
|
|
5666
|
-
return /* @__PURE__ */ jsxs(Box, {
|
|
5667
|
-
sx: styles$5.container,
|
|
5668
|
-
children: [/* @__PURE__ */ jsx(Typography, {
|
|
5669
|
-
sx: styles$5.label,
|
|
5670
|
-
children: t("dashboardFilters.dayType.label")
|
|
5671
|
-
}), /* @__PURE__ */ jsxs(ToggleButtonGroup, {
|
|
5672
|
-
value,
|
|
5673
|
-
exclusive: true,
|
|
5674
|
-
onChange: handleChange,
|
|
5675
|
-
size: "small",
|
|
5676
|
-
sx: styles$5.toggleGroup,
|
|
5677
|
-
"data-testid": "dashboard-filters.day-type-selector",
|
|
5678
|
-
children: [/* @__PURE__ */ jsx(ToggleButton, {
|
|
5679
|
-
value: DayType.Calendar,
|
|
5680
|
-
"data-testid": "dashboard-filters.day-type-calendar",
|
|
5681
|
-
children: t("dashboardFilters.dayType.calendar")
|
|
5682
|
-
}), /* @__PURE__ */ jsx(ToggleButton, {
|
|
5683
|
-
value: DayType.Production,
|
|
5684
|
-
"data-testid": "dashboard-filters.day-type-production",
|
|
5685
|
-
children: t("dashboardFilters.dayType.production")
|
|
5686
|
-
})]
|
|
5687
|
-
})]
|
|
5688
|
-
});
|
|
5689
|
-
};
|
|
5690
|
-
//#endregion
|
|
5691
5691
|
//#region src/components/DashboardFilters/PeriodList/styles.ts
|
|
5692
5692
|
const styles$4 = {
|
|
5693
5693
|
container: {
|
|
@@ -5744,7 +5744,7 @@ const PeriodList = ({ dayType, shifts, selectedShiftIds, selectedPeriodId, hasAc
|
|
|
5744
5744
|
}, 300);
|
|
5745
5745
|
}, []);
|
|
5746
5746
|
const timeRangeLabel = useMemo(() => {
|
|
5747
|
-
if (dayType !==
|
|
5747
|
+
if (dayType !== "PRODUCTION" || shifts.length === 0) return null;
|
|
5748
5748
|
return getTimeRangeLabel(shifts, selectedShiftIds);
|
|
5749
5749
|
}, [
|
|
5750
5750
|
dayType,
|
|
@@ -5769,7 +5769,7 @@ const PeriodList = ({ dayType, shifts, selectedShiftIds, selectedPeriodId, hasAc
|
|
|
5769
5769
|
}, [shifts]);
|
|
5770
5770
|
const filteredPeriods = useMemo(() => {
|
|
5771
5771
|
let available = periods.filter((period) => {
|
|
5772
|
-
if (period.category === "shift_based" && dayType ===
|
|
5772
|
+
if (period.category === "shift_based" && dayType === "CALENDAR") return false;
|
|
5773
5773
|
return true;
|
|
5774
5774
|
});
|
|
5775
5775
|
if (debouncedQuery.trim()) {
|
|
@@ -6026,20 +6026,7 @@ const styles$2 = {
|
|
|
6026
6026
|
fontSize: "0.875rem",
|
|
6027
6027
|
opacity: .8
|
|
6028
6028
|
},
|
|
6029
|
-
select:
|
|
6030
|
-
minWidth: 200,
|
|
6031
|
-
maxWidth: 350,
|
|
6032
|
-
"& .MuiInputBase-input.Mui-disabled": {
|
|
6033
|
-
WebkitTextFillColor: theme.palette.text.primary,
|
|
6034
|
-
opacity: .6
|
|
6035
|
-
},
|
|
6036
|
-
"& .MuiSelect-icon.Mui-disabled": {
|
|
6037
|
-
color: theme.palette.text.primary,
|
|
6038
|
-
opacity: .6
|
|
6039
|
-
},
|
|
6040
|
-
"& .Mui-disabled .MuiOutlinedInput-notchedOutline": { borderColor: theme.palette.divider },
|
|
6041
|
-
"&:has(.Mui-disabled) .MuiInputLabel-root": { color: theme.palette.text.primary }
|
|
6042
|
-
}),
|
|
6029
|
+
select: { minWidth: 200 },
|
|
6043
6030
|
menuItem: { padding: (theme) => theme.spacing(.5, 1) },
|
|
6044
6031
|
listItemText: {
|
|
6045
6032
|
"& .MuiListItemText-primary": { fontSize: "0.875rem" },
|
|
@@ -6052,7 +6039,7 @@ const styles$2 = {
|
|
|
6052
6039
|
};
|
|
6053
6040
|
//#endregion
|
|
6054
6041
|
//#region src/components/DashboardFilters/ShiftSelector/index.tsx
|
|
6055
|
-
const ShiftSelector = ({ shifts, selectedShiftIds, onChange
|
|
6042
|
+
const ShiftSelector = ({ shifts, selectedShiftIds, onChange }) => {
|
|
6056
6043
|
const { t } = useTranslation();
|
|
6057
6044
|
const handleChange = useCallback((event) => {
|
|
6058
6045
|
const value = event.target.value;
|
|
@@ -6060,15 +6047,12 @@ const ShiftSelector = ({ shifts, selectedShiftIds, onChange, disabled = false })
|
|
|
6060
6047
|
}, [onChange]);
|
|
6061
6048
|
const renderValue = useCallback((selected) => {
|
|
6062
6049
|
if (selected.length === 0) return t("dashboardFilters.shifts.allShifts");
|
|
6063
|
-
|
|
6064
|
-
if (selectedNames.length === 1) return selectedNames[0];
|
|
6065
|
-
return `${selectedNames[0]} (+${selectedNames.length - 1})`;
|
|
6050
|
+
return shifts.filter((s) => selected.includes(s.id)).map((s) => s.name).join(", ");
|
|
6066
6051
|
}, [shifts, t]);
|
|
6067
6052
|
return /* @__PURE__ */ jsx(Box, {
|
|
6068
6053
|
sx: styles$2.container,
|
|
6069
6054
|
children: /* @__PURE__ */ jsxs(FormControl, {
|
|
6070
6055
|
size: "small",
|
|
6071
|
-
disabled,
|
|
6072
6056
|
sx: styles$2.select,
|
|
6073
6057
|
"data-testid": "dashboard-filters.shift-selector",
|
|
6074
6058
|
children: [/* @__PURE__ */ jsx(InputLabel, {
|
|
@@ -6081,6 +6065,7 @@ const ShiftSelector = ({ shifts, selectedShiftIds, onChange, disabled = false })
|
|
|
6081
6065
|
onChange: handleChange,
|
|
6082
6066
|
renderValue,
|
|
6083
6067
|
label: t("dashboardFilters.shifts.label"),
|
|
6068
|
+
inputProps: { "aria-label": t("dashboardFilters.shifts.label") },
|
|
6084
6069
|
children: shifts.map((shift) => /* @__PURE__ */ jsxs(MenuItem, {
|
|
6085
6070
|
value: shift.id,
|
|
6086
6071
|
sx: styles$2.menuItem,
|
|
@@ -6107,7 +6092,7 @@ const buildCoreState = (values, shifts) => {
|
|
|
6107
6092
|
if (!values) {
|
|
6108
6093
|
const shiftId = shifts?.length ? resolveShiftIdForPeriod("current_shift", shifts) : null;
|
|
6109
6094
|
return {
|
|
6110
|
-
dayType:
|
|
6095
|
+
dayType: "PRODUCTION",
|
|
6111
6096
|
selectedPeriodId: "current_shift",
|
|
6112
6097
|
customDateRange: null,
|
|
6113
6098
|
shiftIds: shiftId ? [shiftId] : []
|
|
@@ -6267,7 +6252,6 @@ const styles$1 = {
|
|
|
6267
6252
|
};
|
|
6268
6253
|
//#endregion
|
|
6269
6254
|
//#region src/components/DashboardFilters/index.tsx
|
|
6270
|
-
registerTranslations(resources);
|
|
6271
6255
|
const FEATURE_KEY = "feature.dashboard_extended_date_ranges";
|
|
6272
6256
|
const DashboardFilters = ({ initialValues, onChange, shifts = [], onFeatureRequest }) => {
|
|
6273
6257
|
const { hasAccess, accessState, buttons, cooldownInfo, features } = useAccess([FEATURE_KEY]);
|
|
@@ -6276,14 +6260,11 @@ const DashboardFilters = ({ initialValues, onChange, shifts = [], onFeatureReque
|
|
|
6276
6260
|
const dateFieldRef = useRef(null);
|
|
6277
6261
|
const { filterValues, selectedPeriodId, handlers } = useDashboardFilters(useMemo(() => resolveInitialValues(initialValues), [initialValues]), shifts, onChange);
|
|
6278
6262
|
const { t } = useTranslation();
|
|
6263
|
+
registerTranslations(resources);
|
|
6279
6264
|
const daysSinceExpiry = useMemo(() => {
|
|
6280
6265
|
return features.find((f) => f.featureKey === FEATURE_KEY)?.daysSinceExpiry ?? null;
|
|
6281
6266
|
}, [features]);
|
|
6282
6267
|
const filteredButtons = useMemo(() => buttons.filter((b) => b.action !== "start_trial"), [buttons]);
|
|
6283
|
-
const isShiftLocked = useMemo(() => {
|
|
6284
|
-
if (!selectedPeriodId) return false;
|
|
6285
|
-
return periods.find((p) => p.id === selectedPeriodId)?.category === "shift_based";
|
|
6286
|
-
}, [selectedPeriodId]);
|
|
6287
6268
|
const handlePeriodSelect = useCallback((period, dateRange) => {
|
|
6288
6269
|
if (period.needAccess && !hasAccess) {
|
|
6289
6270
|
setAccessModalOpen(true);
|
|
@@ -6325,8 +6306,7 @@ const DashboardFilters = ({ initialValues, onChange, shifts = [], onFeatureReque
|
|
|
6325
6306
|
}), /* @__PURE__ */ jsx(ShiftSelector, {
|
|
6326
6307
|
shifts,
|
|
6327
6308
|
selectedShiftIds: filterValues.shiftIds,
|
|
6328
|
-
onChange: handlers.handleShiftChange
|
|
6329
|
-
disabled: isShiftLocked
|
|
6309
|
+
onChange: handlers.handleShiftChange
|
|
6330
6310
|
})]
|
|
6331
6311
|
}),
|
|
6332
6312
|
/* @__PURE__ */ jsx(Popover, {
|
|
@@ -6580,12 +6560,12 @@ const MetricCard = ({ title, metricLabel, metricValue, progressValue, extraValue
|
|
|
6580
6560
|
const value = metricValue.textValue;
|
|
6581
6561
|
if (!value) return "";
|
|
6582
6562
|
switch (metricValue.unit) {
|
|
6583
|
-
case
|
|
6563
|
+
case "DURATION": {
|
|
6584
6564
|
const duration = dayjs.duration(Number(value), "seconds");
|
|
6585
6565
|
return `${Math.floor(duration.asMinutes())}m ${duration.seconds()}s`;
|
|
6586
6566
|
}
|
|
6587
|
-
case
|
|
6588
|
-
case
|
|
6567
|
+
case "PERCENT": return `${formatFloat(parseFloat(value) * 100)}%`;
|
|
6568
|
+
case "ROUND": return formatFloat(parseFloat(value));
|
|
6589
6569
|
default: return value;
|
|
6590
6570
|
}
|
|
6591
6571
|
};
|
|
@@ -6593,9 +6573,9 @@ const MetricCard = ({ title, metricLabel, metricValue, progressValue, extraValue
|
|
|
6593
6573
|
const getBackgroundColor = () => {
|
|
6594
6574
|
const statusColor = getStatusColor();
|
|
6595
6575
|
if (statusColor) switch (statusColor) {
|
|
6596
|
-
case
|
|
6597
|
-
case
|
|
6598
|
-
case
|
|
6576
|
+
case "green": return "#32D74B";
|
|
6577
|
+
case "yellow": return "#FFC12F";
|
|
6578
|
+
case "red": return "#FF3B2F";
|
|
6599
6579
|
default: return "#BBBBBBBF";
|
|
6600
6580
|
}
|
|
6601
6581
|
return "#FFFFFFBF";
|
|
@@ -6603,9 +6583,9 @@ const MetricCard = ({ title, metricLabel, metricValue, progressValue, extraValue
|
|
|
6603
6583
|
const getBackground = () => {
|
|
6604
6584
|
const statusColor = getStatusColor();
|
|
6605
6585
|
if (statusColor) switch (statusColor) {
|
|
6606
|
-
case
|
|
6607
|
-
case
|
|
6608
|
-
case
|
|
6586
|
+
case "green": return "linear-gradient(180deg, #31BF59 0%, #32D74B 100%)";
|
|
6587
|
+
case "yellow": return "linear-gradient(360deg, #FFD60A 0%, #FFC12F 100%)";
|
|
6588
|
+
case "red": return "linear-gradient(0deg, #F05C53 0%, #FF3B2F 100%)";
|
|
6609
6589
|
default: return "rgba(187, 187, 187, 0.75)";
|
|
6610
6590
|
}
|
|
6611
6591
|
return "rgba(255, 255, 255, 0.75)";
|
|
@@ -6704,6 +6684,8 @@ const SortableSelect = ({ placeholder, options, selected, onChange }) => {
|
|
|
6704
6684
|
value: selected.map((value) => options.find((option) => option.value === value)),
|
|
6705
6685
|
onChange: (selected) => onChange([...selected || []].map((item) => item.value)),
|
|
6706
6686
|
closeMenuOnSelect: false,
|
|
6687
|
+
menuPortalTarget: typeof document !== "undefined" ? document.body : void 0,
|
|
6688
|
+
menuPosition: "fixed",
|
|
6707
6689
|
components: {
|
|
6708
6690
|
MultiValueContainer: SortableMultiValueContainer,
|
|
6709
6691
|
MultiValueLabel: SortableMultiValueLabel,
|
|
@@ -6737,6 +6719,10 @@ const SortableSelect = ({ placeholder, options, selected, onChange }) => {
|
|
|
6737
6719
|
option: (baseStyles, state) => ({
|
|
6738
6720
|
...baseStyles,
|
|
6739
6721
|
background: state.isFocused ? "#2A2E34" : "#1C1F25"
|
|
6722
|
+
}),
|
|
6723
|
+
menuPortal: (baseStyles) => ({
|
|
6724
|
+
...baseStyles,
|
|
6725
|
+
zIndex: 1500
|
|
6740
6726
|
})
|
|
6741
6727
|
}
|
|
6742
6728
|
});
|
|
@@ -6869,10 +6855,7 @@ var GraphqlWsClient = class {
|
|
|
6869
6855
|
if (keys.length !== 1) throw new Error(`Expected exactly one response key, got: ${keys.join(", ")}`);
|
|
6870
6856
|
return data[keys[0]];
|
|
6871
6857
|
};
|
|
6872
|
-
if (!this.actionCableClient)
|
|
6873
|
-
console.warn("[dashboard-toolkit] WebSocket client not available — skipping subscription");
|
|
6874
|
-
return { unsubscribe: () => {} };
|
|
6875
|
-
}
|
|
6858
|
+
if (!this.actionCableClient) throw new Error("No WS client available");
|
|
6876
6859
|
return this.actionCableClient.request({
|
|
6877
6860
|
query,
|
|
6878
6861
|
variables
|
|
@@ -6955,7 +6938,7 @@ const ErrorFallback = ({ resetErrorBoundary }) => {
|
|
|
6955
6938
|
sx: container,
|
|
6956
6939
|
children: [/* @__PURE__ */ jsx(Typography, {
|
|
6957
6940
|
variant: "body2",
|
|
6958
|
-
color: "text.
|
|
6941
|
+
color: "text.secondary",
|
|
6959
6942
|
children: t("widgetCard.error")
|
|
6960
6943
|
}), /* @__PURE__ */ jsx(Button, {
|
|
6961
6944
|
variant: "outlined",
|
|
@@ -7125,7 +7108,6 @@ const styles = {
|
|
|
7125
7108
|
};
|
|
7126
7109
|
//#endregion
|
|
7127
7110
|
//#region src/components/WidgetCard/index.tsx
|
|
7128
|
-
registerTranslations(resources);
|
|
7129
7111
|
const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, getTitle, thumbnail, url, wsUrl, lang, filters, openSettingsModal, onSettingsModalOpened, onSettingsModalClosed, sidePanelOpened, updateSidePanelProps, onDelete, editMode, version, requiredFeatures, extraPermissions, ...cardProps }, ref) => {
|
|
7130
7112
|
const { graphqlSdk } = useGqlClients({
|
|
7131
7113
|
url,
|
|
@@ -7144,6 +7126,7 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7144
7126
|
setWidgetSettings(newSettings);
|
|
7145
7127
|
}, []);
|
|
7146
7128
|
const { t } = useTranslation();
|
|
7129
|
+
registerTranslations(resources);
|
|
7147
7130
|
const displayTitle = useCallback(() => {
|
|
7148
7131
|
const trimmed = widgetSettings?.customTitle?.trim();
|
|
7149
7132
|
if (trimmed) return trimmed;
|
|
@@ -7214,6 +7197,7 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7214
7197
|
sx: styles.settingsButton,
|
|
7215
7198
|
onClick: handleOpenSettingsModal,
|
|
7216
7199
|
disabled: !hasAccess,
|
|
7200
|
+
"aria-label": t("widgetCard.openSettings"),
|
|
7217
7201
|
"data-testid": "widget-card.settings-button",
|
|
7218
7202
|
children: /* @__PURE__ */ jsx(Settings, {})
|
|
7219
7203
|
}),
|
|
@@ -7222,6 +7206,7 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7222
7206
|
children: /* @__PURE__ */ jsx(Button, {
|
|
7223
7207
|
color: "secondary",
|
|
7224
7208
|
sx: styles.infoButton,
|
|
7209
|
+
"aria-label": t("widgetCard.showVersion"),
|
|
7225
7210
|
"data-testid": "widget-card.info-button",
|
|
7226
7211
|
children: /* @__PURE__ */ jsx(Info, {})
|
|
7227
7212
|
})
|
|
@@ -7243,6 +7228,7 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7243
7228
|
setRemoveTooltipOpened(true);
|
|
7244
7229
|
},
|
|
7245
7230
|
loading: deleteInProgress,
|
|
7231
|
+
"aria-label": t("widgetCard.deleteWidget"),
|
|
7246
7232
|
"data-testid": "widget-card.delete-button",
|
|
7247
7233
|
children: /* @__PURE__ */ jsx(Delete, {})
|
|
7248
7234
|
})
|
|
@@ -7279,9 +7265,9 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7279
7265
|
children: /* @__PURE__ */ jsx(AccessGuard, {
|
|
7280
7266
|
features: requiredFeatures,
|
|
7281
7267
|
extraPermissions,
|
|
7268
|
+
backgroundImage: thumbnail,
|
|
7282
7269
|
onTrialRequest: handleTrialRequest,
|
|
7283
7270
|
onFeatureRequest: handleFeatureRequest,
|
|
7284
|
-
backgroundImage: thumbnail,
|
|
7285
7271
|
children: /* @__PURE__ */ jsx(WidgetErrorBoundary, { children: /* @__PURE__ */ jsx(Widget, {
|
|
7286
7272
|
id,
|
|
7287
7273
|
url,
|
|
@@ -7289,9 +7275,7 @@ const WidgetCard = forwardRef(({ children, title, Widget, id, getDisplayName, ge
|
|
|
7289
7275
|
lang,
|
|
7290
7276
|
filters,
|
|
7291
7277
|
onDataChange: handleDataChange,
|
|
7292
|
-
onDataSync: handleDataChange,
|
|
7293
7278
|
onSettingsChange: handleSettingsChange,
|
|
7294
|
-
onSettingsSync: handleSettingsChange,
|
|
7295
7279
|
openSettingsModal,
|
|
7296
7280
|
onSettingsModalOpened,
|
|
7297
7281
|
onSettingsModalClosed,
|
|
@@ -7320,10 +7304,10 @@ const getValidAggregations = (dateRange) => {
|
|
|
7320
7304
|
const days = to.diff(from, "day");
|
|
7321
7305
|
const months = to.diff(from, "month");
|
|
7322
7306
|
const valid = [];
|
|
7323
|
-
if (days <= MAX_DAYS_HOURLY) valid.push(
|
|
7324
|
-
if (days >= MIN_DAYS_DAILY && days <= MAX_DAYS_DAILY) valid.push(
|
|
7325
|
-
if (days >= MIN_DAYS_WEEKLY && months <= MAX_MONTHS_WEEKLY) valid.push(
|
|
7326
|
-
if (months >= MIN_MONTHS_MONTHLY && months <= MAX_MONTHS_MONTHLY) valid.push(
|
|
7307
|
+
if (days <= MAX_DAYS_HOURLY) valid.push("HOURLY");
|
|
7308
|
+
if (days >= MIN_DAYS_DAILY && days <= MAX_DAYS_DAILY) valid.push("DAILY");
|
|
7309
|
+
if (days >= MIN_DAYS_WEEKLY && months <= MAX_MONTHS_WEEKLY) valid.push("WEEKLY");
|
|
7310
|
+
if (months >= MIN_MONTHS_MONTHLY && months <= MAX_MONTHS_MONTHLY) valid.push("MONTHLY");
|
|
7327
7311
|
return valid;
|
|
7328
7312
|
};
|
|
7329
7313
|
const resolveAutoAggregation = (dateRange) => {
|
|
@@ -7331,10 +7315,10 @@ const resolveAutoAggregation = (dateRange) => {
|
|
|
7331
7315
|
const to = dayjs(dateRange.dateTo);
|
|
7332
7316
|
const days = to.diff(from, "day");
|
|
7333
7317
|
const months = to.diff(from, "month");
|
|
7334
|
-
if (days <= 1) return
|
|
7335
|
-
if (days <= 13) return
|
|
7336
|
-
if (months < 3) return
|
|
7337
|
-
return
|
|
7318
|
+
if (days <= 1) return "HOURLY";
|
|
7319
|
+
if (days <= 13) return "DAILY";
|
|
7320
|
+
if (months < 3) return "WEEKLY";
|
|
7321
|
+
return "MONTHLY";
|
|
7338
7322
|
};
|
|
7339
7323
|
const resolveAggregation = (dateRange, savedAggregation) => {
|
|
7340
7324
|
if (savedAggregation) {
|
|
@@ -7343,6 +7327,47 @@ const resolveAggregation = (dateRange, savedAggregation) => {
|
|
|
7343
7327
|
return resolveAutoAggregation(dateRange);
|
|
7344
7328
|
};
|
|
7345
7329
|
//#endregion
|
|
7330
|
+
//#region src/helpers/period-view.ts
|
|
7331
|
+
const COMPARED_PERIODS_MIN = 2;
|
|
7332
|
+
const COMPARED_PERIODS_MAX = 13;
|
|
7333
|
+
const DEFAULT_COMPARED_PERIODS = 7;
|
|
7334
|
+
const MAX_DAYS_FOR_COMPARISON_DEFAULT = 6;
|
|
7335
|
+
const getValidComparedPeriods = () => ({
|
|
7336
|
+
min: COMPARED_PERIODS_MIN,
|
|
7337
|
+
max: COMPARED_PERIODS_MAX
|
|
7338
|
+
});
|
|
7339
|
+
const resolvePeriodViewDefault = (dateRange) => {
|
|
7340
|
+
if (dayjs(dateRange.dateTo).diff(dayjs(dateRange.dateFrom), "day") <= MAX_DAYS_FOR_COMPARISON_DEFAULT) return {
|
|
7341
|
+
periodView: "COMPARISON",
|
|
7342
|
+
comparedPeriods: DEFAULT_COMPARED_PERIODS
|
|
7343
|
+
};
|
|
7344
|
+
return {
|
|
7345
|
+
periodView: "BREAKDOWN",
|
|
7346
|
+
aggregation: resolveAutoAggregation(dateRange)
|
|
7347
|
+
};
|
|
7348
|
+
};
|
|
7349
|
+
const isValidSavedBreakdown = (savedSettings, dateRange) => {
|
|
7350
|
+
if (savedSettings.periodView !== "BREAKDOWN") return false;
|
|
7351
|
+
if (!savedSettings.aggregation) return false;
|
|
7352
|
+
return getValidAggregations(dateRange).includes(savedSettings.aggregation);
|
|
7353
|
+
};
|
|
7354
|
+
const isValidSavedComparison = (savedSettings) => {
|
|
7355
|
+
if (savedSettings.periodView !== "COMPARISON") return false;
|
|
7356
|
+
const n = savedSettings.comparedPeriods;
|
|
7357
|
+
return typeof n === "number" && n >= COMPARED_PERIODS_MIN && n <= COMPARED_PERIODS_MAX;
|
|
7358
|
+
};
|
|
7359
|
+
const resolvePeriodView = (dateRange, savedSettings, widgetDefault) => {
|
|
7360
|
+
if (isValidSavedBreakdown(savedSettings, dateRange)) return {
|
|
7361
|
+
periodView: "BREAKDOWN",
|
|
7362
|
+
aggregation: savedSettings.aggregation
|
|
7363
|
+
};
|
|
7364
|
+
if (isValidSavedComparison(savedSettings)) return {
|
|
7365
|
+
periodView: "COMPARISON",
|
|
7366
|
+
comparedPeriods: savedSettings.comparedPeriods
|
|
7367
|
+
};
|
|
7368
|
+
return widgetDefault(dateRange);
|
|
7369
|
+
};
|
|
7370
|
+
//#endregion
|
|
7346
7371
|
//#region src/helpers/time.ts
|
|
7347
7372
|
const generateTimeRange = (start, end, unit, step) => {
|
|
7348
7373
|
const result = [];
|
|
@@ -7356,8 +7381,8 @@ const generateTimeRange = (start, end, unit, step) => {
|
|
|
7356
7381
|
};
|
|
7357
7382
|
//#endregion
|
|
7358
7383
|
//#region src/version.ts
|
|
7359
|
-
const LIBRARY_VERSION = "1.5.
|
|
7384
|
+
const LIBRARY_VERSION = "1.5.84";
|
|
7360
7385
|
//#endregion
|
|
7361
|
-
export { AccessRequestTypeEnum, ActualStaffingCountsDocument, AndonLightColor, ApplicationInfoDocument, AssignOperatorDocument, AssignOperatorToWorkplaceDocument, AvailabilityInsightsDocument, AvailabilityStatus, BulkUpsertStaffingPlansDocument, CompanyConfigDocument, ConfirmTooltip, CounterDirectoriesDocument, CounterKindEnum, CountersDocument, CreateDashboardDocument, CreateOrderDocument, CreateProductDocument, CreateStaffingPlanDocument, CreateStatusChangeDocument, CreateUserPresenceDocument, CreateWidgetDocument, CurrentUserDocument, DashboardFilters, DashboardsDocument, DayType, DepartmentsDocument, EditWorkOrderDocument, FloorPlansDocument, GetAvailabilityInsightsDocument, GetCompanyConfigDocument, GetProductionInsightsDocument, GetStatusInsightsDocument, GetWorkOrdersInsightsDocument, GetWorkplacePerformanceInsightsDocument, GraphqlWsClient, InsightsAggregation, ListActualStaffingCountsDocument, ListFloorPlansDocument, ListMetricValuesDocument, ListMetricsDocument, ListReasonsDocument, ListShiftsDocument, ListStaffingPlansDocument, ListStatusChangesDocument, ListWorkOrdersDocument, ListWorkplaceAssignmentsDocument, ListWorkplacesDocument, MetricCard, MetricTypeEnum, MetricUnitEnum, MetricValuesDocument, MetricsDocument, NotificationsDocument, OrdersDocument, OrdersExecutionsDocument, PauseOrderExecutionDocument, Period, PresenceStatusEnum, ProductionInsightsDocument, ProductionMode, ProductsDocument, ReasonsDocument, ReasonsRecommendationDocument, RemoveDashboardDocument, RemoveStaffingPlanDocument, RemoveUserPresenceDocument, RemoveWidgetDocument, RemoveWorkplaceUsersPresencesDocument, RequestFeatureAccessDocument, ScreenEnum, SetCounterDocument, ShiftsDocument, SortableSelect, StaffingPlansDocument, StandardRatesDocument, StartOrderExecutionDocument, StartTrialDocument, StatusChangeTransitionPermissionsDocument, StatusChangesDocument, StatusInsightsDocument, StatusScreenDisplayBlocksEnum, StopOrderExecutionDocument, TrainingStatus, UnassignOperatorDocument, UnassignOperatorFromWorkplaceDocument, UpdateDashboardDocument, UpdateNotificationDocument, UpdateOrderDocument, UpdateOrderExecutionDocument, UpdateStaffingPlanDocument, UpdateStatusChangeDocument, UpdateWidgetDocument, UpdateWorkOrderDocument, UsersDocument, UsersPresencesDocument, WidgetCard, WidgetDocument, WidgetErrorBoundary, WidgetsDocument, WorkOrderCreationMethodEnum, WorkOrderPriorityEnum, WorkOrderStatusEnum, WorkOrdersDocument, WorkOrdersInsightsDocument, WorkplaceAssignmentsDocument, WorkplaceEvent, WorkplaceEventDocument, WorkplacePerformanceInsightsDocument, WorkplacesDocument, findPeriodById, generateTimeRange, getCurrentShift, getGqlWsClient, getGraphqlSdk, getNextBoundary, getRecentShift, getSdk, getShiftTimeRange, getTimeRangeLabel, getValidAggregations, normalizeShifts, periods, resolveAggregation, resolveShiftIdForPeriod, useGqlClients, LIBRARY_VERSION as version };
|
|
7386
|
+
export { AccessRequestTypeEnum, ActualStaffingCountsDocument, AndonLightColor, ApplicationInfoDocument, AssignOperatorDocument, AssignOperatorToWorkplaceDocument, AvailabilityInsightsDocument, AvailabilityStatus, BulkUpsertStaffingPlansDocument, CompanyConfigDocument, ConfirmTooltip, CounterDirectoriesDocument, CounterKindEnum, CountersDocument, CreateDashboardDocument, CreateOrderDocument, CreateProductDocument, CreateStaffingPlanDocument, CreateStatusChangeDocument, CreateUserPresenceDocument, CreateWidgetDocument, CurrentUserDocument, DashboardFilters, DashboardsDocument, DayType, DepartmentsDocument, EditWorkOrderDocument, FloorPlansDocument, GetAvailabilityInsightsDocument, GetCompanyConfigDocument, GetProductionInsightsDocument, GetStatusInsightsDocument, GetWorkOrdersInsightsDocument, GetWorkplacePerformanceInsightsDocument, GraphqlWsClient, InsightsAggregation, InsightsPeriodView, ListActualStaffingCountsDocument, ListFloorPlansDocument, ListMetricValuesDocument, ListMetricsDocument, ListReasonsDocument, ListShiftsDocument, ListStaffingPlansDocument, ListStatusChangesDocument, ListWorkOrdersDocument, ListWorkplaceAssignmentsDocument, ListWorkplacesDocument, MetricCard, MetricTypeEnum, MetricUnitEnum, MetricValuesDocument, MetricsDocument, NotificationsDocument, OrdersDocument, OrdersExecutionsDocument, PauseOrderExecutionDocument, Period, PresenceStatusEnum, ProductionInsightsDocument, ProductionMode, ProductsDocument, ReasonsDocument, ReasonsRecommendationDocument, RemoveDashboardDocument, RemoveStaffingPlanDocument, RemoveUserPresenceDocument, RemoveWidgetDocument, RemoveWorkplaceUsersPresencesDocument, RequestFeatureAccessDocument, ScreenEnum, SetCounterDocument, ShiftsDocument, SortableSelect, StaffingPlansDocument, StandardRatesDocument, StartOrderExecutionDocument, StartTrialDocument, StatusChangeTransitionPermissionsDocument, StatusChangesDocument, StatusInsightsDocument, StatusScreenDisplayBlocksEnum, StopOrderExecutionDocument, TrainingStatus, UnassignOperatorDocument, UnassignOperatorFromWorkplaceDocument, UpdateDashboardDocument, UpdateNotificationDocument, UpdateOrderDocument, UpdateOrderExecutionDocument, UpdateStaffingPlanDocument, UpdateStatusChangeDocument, UpdateWidgetDocument, UpdateWorkOrderDocument, UsersDocument, UsersPresencesDocument, WidgetCard, WidgetDocument, WidgetErrorBoundary, WidgetsDocument, WorkOrderCreationMethodEnum, WorkOrderPriorityEnum, WorkOrderStatusEnum, WorkOrdersDocument, WorkOrdersInsightsDocument, WorkplaceAssignmentsDocument, WorkplaceEvent, WorkplaceEventDocument, WorkplacePerformanceInsightsDocument, WorkplacesDocument, findPeriodById, generateTimeRange, getCurrentShift, getGqlWsClient, getGraphqlSdk, getNextBoundary, getRecentShift, getSdk, getShiftTimeRange, getTimeRangeLabel, getValidAggregations, getValidComparedPeriods, normalizeShifts, periods, resolveAggregation, resolveAutoAggregation, resolvePeriodView, resolvePeriodViewDefault, resolveShiftIdForPeriod, useGqlClients, LIBRARY_VERSION as version };
|
|
7362
7387
|
|
|
7363
7388
|
//# sourceMappingURL=index.js.map
|