@optifye/dashboard-core 6.0.4 → 6.0.5
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.css +0 -22
- package/dist/index.d.mts +84 -10
- package/dist/index.d.ts +84 -10
- package/dist/index.js +166 -139
- package/dist/index.mjs +160 -140
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -487,6 +487,76 @@ var getMetricsTablePrefix = (companyId) => {
|
|
|
487
487
|
return "performance_metrics";
|
|
488
488
|
};
|
|
489
489
|
|
|
490
|
+
// src/lib/utils/lineConfig.ts
|
|
491
|
+
function getConfiguredLineIds(entityConfig) {
|
|
492
|
+
if (entityConfig.lines && Object.keys(entityConfig.lines).length > 0) {
|
|
493
|
+
return Object.keys(entityConfig.lines);
|
|
494
|
+
}
|
|
495
|
+
const lineIds = [];
|
|
496
|
+
if (entityConfig.defaultLineId) {
|
|
497
|
+
lineIds.push(entityConfig.defaultLineId);
|
|
498
|
+
}
|
|
499
|
+
if (entityConfig.secondaryLineId && entityConfig.secondaryLineId !== entityConfig.defaultLineId) {
|
|
500
|
+
lineIds.push(entityConfig.secondaryLineId);
|
|
501
|
+
}
|
|
502
|
+
return lineIds;
|
|
503
|
+
}
|
|
504
|
+
function getLineDisplayName(entityConfig, lineId) {
|
|
505
|
+
if (entityConfig.lines && entityConfig.lines[lineId]) {
|
|
506
|
+
return entityConfig.lines[lineId];
|
|
507
|
+
}
|
|
508
|
+
if (entityConfig.lineNames && entityConfig.lineNames[lineId]) {
|
|
509
|
+
return entityConfig.lineNames[lineId];
|
|
510
|
+
}
|
|
511
|
+
return `Line ${lineId.substring(0, 8)}`;
|
|
512
|
+
}
|
|
513
|
+
function getAllLineDisplayNames(entityConfig) {
|
|
514
|
+
const displayNames = {};
|
|
515
|
+
if (entityConfig.lineNames) {
|
|
516
|
+
Object.assign(displayNames, entityConfig.lineNames);
|
|
517
|
+
}
|
|
518
|
+
if (entityConfig.lines) {
|
|
519
|
+
Object.assign(displayNames, entityConfig.lines);
|
|
520
|
+
}
|
|
521
|
+
return displayNames;
|
|
522
|
+
}
|
|
523
|
+
function getDefaultLineId(entityConfig) {
|
|
524
|
+
if (entityConfig.lines && Object.keys(entityConfig.lines).length > 0) {
|
|
525
|
+
return Object.keys(entityConfig.lines)[0];
|
|
526
|
+
}
|
|
527
|
+
return entityConfig.defaultLineId;
|
|
528
|
+
}
|
|
529
|
+
function isLegacyConfiguration(entityConfig) {
|
|
530
|
+
return !entityConfig.lines || Object.keys(entityConfig.lines).length === 0;
|
|
531
|
+
}
|
|
532
|
+
function migrateLegacyConfiguration(entityConfig) {
|
|
533
|
+
if (!isLegacyConfiguration(entityConfig)) {
|
|
534
|
+
return entityConfig;
|
|
535
|
+
}
|
|
536
|
+
const lines = {};
|
|
537
|
+
if (entityConfig.defaultLineId) {
|
|
538
|
+
lines[entityConfig.defaultLineId] = getLineDisplayName(entityConfig, entityConfig.defaultLineId);
|
|
539
|
+
}
|
|
540
|
+
if (entityConfig.secondaryLineId && entityConfig.secondaryLineId !== entityConfig.defaultLineId) {
|
|
541
|
+
lines[entityConfig.secondaryLineId] = getLineDisplayName(entityConfig, entityConfig.secondaryLineId);
|
|
542
|
+
}
|
|
543
|
+
if (entityConfig.lineNames) {
|
|
544
|
+
Object.entries(entityConfig.lineNames).forEach(([id3, name]) => {
|
|
545
|
+
if (!lines[id3]) {
|
|
546
|
+
lines[id3] = name;
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
return {
|
|
551
|
+
...entityConfig,
|
|
552
|
+
lines
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
function isValidFactoryViewConfiguration(entityConfig) {
|
|
556
|
+
const lineIds = getConfiguredLineIds(entityConfig);
|
|
557
|
+
return lineIds.length > 0;
|
|
558
|
+
}
|
|
559
|
+
|
|
490
560
|
// src/lib/services/dashboardService.ts
|
|
491
561
|
var getTable2 = (dbConfig, tableName) => {
|
|
492
562
|
const defaults2 = DEFAULT_DATABASE_CONFIG.tables;
|
|
@@ -508,15 +578,15 @@ var dashboardService = {
|
|
|
508
578
|
const companyId = entityConfig.companyId;
|
|
509
579
|
const metricsTablePrefixStr = getMetricsTablePrefix();
|
|
510
580
|
const metricsTable = `${metricsTablePrefixStr}_${companyId ? companyId.replace(/-/g, "_") : "unknown_company"}`;
|
|
511
|
-
const
|
|
512
|
-
const
|
|
581
|
+
const configuredLineIds = getConfiguredLineIds(entityConfig);
|
|
582
|
+
const defaultLineId = configuredLineIds[0];
|
|
513
583
|
const factoryViewId = entityConfig.factoryViewId ?? "factory";
|
|
514
584
|
const defaultTimezone = dateTimeConfig.defaultTimezone;
|
|
515
585
|
const { shiftId, date } = getCurrentShift(defaultTimezone, shiftConfig);
|
|
516
586
|
const lineId = lineIdInput;
|
|
517
587
|
if (lineId === factoryViewId) {
|
|
518
|
-
if (!
|
|
519
|
-
throw new Error("Factory View requires
|
|
588
|
+
if (!isValidFactoryViewConfiguration(entityConfig) || !companyId) {
|
|
589
|
+
throw new Error("Factory View requires at least one configured line and companyId to be configured.");
|
|
520
590
|
}
|
|
521
591
|
const [lineResult, metricsResult, performanceResult] = await Promise.all([
|
|
522
592
|
// Get Line 1's info for general factory details
|
|
@@ -528,10 +598,10 @@ var dashboardService = {
|
|
|
528
598
|
company_id,
|
|
529
599
|
companies!lines_company_id_fkey(company_name:name)
|
|
530
600
|
`).eq("id", defaultLineId).maybeSingle(),
|
|
531
|
-
// Get metrics from line_metrics table for
|
|
532
|
-
supabase.from(lineMetricsTable).select("*").in("line_id",
|
|
533
|
-
// Get performance data from the dynamic metrics table for
|
|
534
|
-
supabase.from(metricsTable).select("efficiency").in("line_id",
|
|
601
|
+
// Get metrics from line_metrics table for all configured lines
|
|
602
|
+
supabase.from(lineMetricsTable).select("*").in("line_id", configuredLineIds).eq("shift_id", shiftId).eq("date", date),
|
|
603
|
+
// Get performance data from the dynamic metrics table for all configured lines
|
|
604
|
+
supabase.from(metricsTable).select("efficiency").in("line_id", configuredLineIds).eq("shift_id", shiftId).eq("date", date)
|
|
535
605
|
]);
|
|
536
606
|
if (lineResult.error) throw lineResult.error;
|
|
537
607
|
if (!lineResult.data) throw new Error(`Configured default line (${defaultLineId}) not found`);
|
|
@@ -678,8 +748,8 @@ var dashboardService = {
|
|
|
678
748
|
}
|
|
679
749
|
const metricsTablePrefixStr = getMetricsTablePrefix();
|
|
680
750
|
const metricsTable = `${metricsTablePrefixStr}_${companyId.replace(/-/g, "_")}`;
|
|
681
|
-
const
|
|
682
|
-
|
|
751
|
+
const configuredLineIds = getConfiguredLineIds(entityConfig);
|
|
752
|
+
configuredLineIds[0];
|
|
683
753
|
const factoryViewId = entityConfig.factoryViewId ?? "factory";
|
|
684
754
|
const defaultTimezone = dateTimeConfig.defaultTimezone;
|
|
685
755
|
const currentShiftResult = getCurrentShift(defaultTimezone, shiftConfig);
|
|
@@ -688,10 +758,10 @@ var dashboardService = {
|
|
|
688
758
|
const lineId = lineIdInput;
|
|
689
759
|
let query = supabase.from(metricsTable).select("company_id,line_id,shift_id,date,workspace_id,workspace_name,total_output,avg_pph,performance_score,avg_cycle_time,trend_score,ideal_output,efficiency,total_day_output").eq("shift_id", queryShiftId).eq("date", queryDate);
|
|
690
760
|
if (!lineId || lineId === factoryViewId) {
|
|
691
|
-
if (!
|
|
692
|
-
throw new Error("Factory View requires
|
|
761
|
+
if (!isValidFactoryViewConfiguration(entityConfig)) {
|
|
762
|
+
throw new Error("Factory View requires at least one configured line for workspace data.");
|
|
693
763
|
}
|
|
694
|
-
query = query.in("line_id",
|
|
764
|
+
query = query.in("line_id", configuredLineIds);
|
|
695
765
|
} else {
|
|
696
766
|
query = query.eq("line_id", lineId);
|
|
697
767
|
}
|
|
@@ -916,8 +986,8 @@ var dashboardService = {
|
|
|
916
986
|
const companyId = entityConfig.companyId;
|
|
917
987
|
const metricsTablePrefixStr = getMetricsTablePrefix();
|
|
918
988
|
const metricsTable = `${metricsTablePrefixStr}_${companyId ? companyId.replace(/-/g, "_") : "unknown_company"}`;
|
|
919
|
-
const
|
|
920
|
-
const
|
|
989
|
+
const configuredLineIds = getConfiguredLineIds(entityConfig);
|
|
990
|
+
const defaultLineId = configuredLineIds[0];
|
|
921
991
|
const factoryViewId = entityConfig.factoryViewId ?? "factory";
|
|
922
992
|
const defaultTimezone = dateTimeConfig.defaultTimezone;
|
|
923
993
|
const lineIdToQuery = lineIdInput || factoryViewId;
|
|
@@ -926,10 +996,10 @@ var dashboardService = {
|
|
|
926
996
|
const queryShiftId = shiftProp !== void 0 ? shiftProp : currentShiftResult.shiftId;
|
|
927
997
|
try {
|
|
928
998
|
if (lineIdToQuery === factoryViewId) {
|
|
929
|
-
if (!
|
|
930
|
-
throw new Error("Factory View requires at least
|
|
999
|
+
if (!isValidFactoryViewConfiguration(entityConfig) || !companyId) {
|
|
1000
|
+
throw new Error("Factory View requires at least one configured line and companyId to be configured.");
|
|
931
1001
|
}
|
|
932
|
-
const lineIdsToQuery =
|
|
1002
|
+
const lineIdsToQuery = configuredLineIds;
|
|
933
1003
|
const [line1Result, metricsResult2, performanceResult2] = await Promise.all([
|
|
934
1004
|
supabase.from(linesTable).select("id, line_name, factory_id, factories!lines_factory_id_fkey(factory_name), company_id, companies!lines_company_id_fkey(company_name:name)").eq("id", defaultLineId).single(),
|
|
935
1005
|
supabase.from(lineMetricsTable).select("*").in("line_id", lineIdsToQuery).eq("shift_id", queryShiftId).eq("date", queryDate),
|
|
@@ -1100,8 +1170,7 @@ var dashboardService = {
|
|
|
1100
1170
|
const dbConfig = config.databaseConfig ?? DEFAULT_DATABASE_CONFIG;
|
|
1101
1171
|
const entityConfig = config.entityConfig ?? DEFAULT_ENTITY_CONFIG;
|
|
1102
1172
|
const lineMetricsTable = getTable2(dbConfig, "lineMetrics");
|
|
1103
|
-
const
|
|
1104
|
-
const secondaryLineId = entityConfig.secondaryLineId;
|
|
1173
|
+
const configuredLineIds = getConfiguredLineIds(entityConfig);
|
|
1105
1174
|
const factoryViewId = entityConfig.factoryViewId ?? "factory";
|
|
1106
1175
|
const startDate = new Date(year, month, 1);
|
|
1107
1176
|
const endDate = new Date(year, month + 1, 0);
|
|
@@ -1110,10 +1179,10 @@ var dashboardService = {
|
|
|
1110
1179
|
const formattedEndDate = formatDate(endDate);
|
|
1111
1180
|
let query = supabase.from(lineMetricsTable).select("date, shift_id, avg_efficiency, underperforming_workspaces, total_workspaces").gte("date", formattedStartDate).lte("date", formattedEndDate);
|
|
1112
1181
|
if (lineIdInput === factoryViewId) {
|
|
1113
|
-
if (!
|
|
1114
|
-
throw new Error("Factory View requires
|
|
1182
|
+
if (!isValidFactoryViewConfiguration(entityConfig)) {
|
|
1183
|
+
throw new Error("Factory View requires at least one configured line for monthly data.");
|
|
1115
1184
|
}
|
|
1116
|
-
query = query.in("line_id",
|
|
1185
|
+
query = query.in("line_id", configuredLineIds);
|
|
1117
1186
|
} else {
|
|
1118
1187
|
query = query.eq("line_id", lineIdInput);
|
|
1119
1188
|
}
|
|
@@ -1144,8 +1213,7 @@ var dashboardService = {
|
|
|
1144
1213
|
const companyId = entityConfig.companyId;
|
|
1145
1214
|
const metricsTablePrefixStr = getMetricsTablePrefix();
|
|
1146
1215
|
const metricsTable = `${metricsTablePrefixStr}_${companyId ? companyId.replace(/-/g, "_") : "unknown_company"}`;
|
|
1147
|
-
const
|
|
1148
|
-
const secondaryLineId = entityConfig.secondaryLineId;
|
|
1216
|
+
const configuredLineIds = getConfiguredLineIds(entityConfig);
|
|
1149
1217
|
const factoryViewId = entityConfig.factoryViewId ?? "factory";
|
|
1150
1218
|
const worstPerformingEndpoint = endpointsConfig?.worstPerformingWorkspaces;
|
|
1151
1219
|
if (!worstPerformingEndpoint) throw new Error("worstPerformingWorkspaces endpoint must be configured.");
|
|
@@ -1157,7 +1225,7 @@ var dashboardService = {
|
|
|
1157
1225
|
const currentMonth = monthInput !== void 0 ? monthInput : currentDate.getMonth();
|
|
1158
1226
|
const currentYear = yearInput !== void 0 ? yearInput : currentDate.getFullYear();
|
|
1159
1227
|
const bodyPayload = {
|
|
1160
|
-
lineId: lineIdInput === factoryViewId ?
|
|
1228
|
+
lineId: lineIdInput === factoryViewId ? configuredLineIds : lineIdInput,
|
|
1161
1229
|
month: currentMonth,
|
|
1162
1230
|
year: currentYear,
|
|
1163
1231
|
companyId,
|
|
@@ -3820,11 +3888,11 @@ var useLineDetailedMetrics = (lineIdFromProp) => {
|
|
|
3820
3888
|
let targetLineIdsForSubscription = [];
|
|
3821
3889
|
const factoryViewIdentifier = entityConfig.factoryViewId || "factory";
|
|
3822
3890
|
if (lineIdToUse === factoryViewIdentifier) {
|
|
3823
|
-
if (entityConfig
|
|
3824
|
-
targetLineIdsForSubscription =
|
|
3891
|
+
if (isValidFactoryViewConfiguration(entityConfig)) {
|
|
3892
|
+
targetLineIdsForSubscription = getConfiguredLineIds(entityConfig);
|
|
3825
3893
|
filterString += `,line_id=in.(${targetLineIdsForSubscription.join(",")})`;
|
|
3826
3894
|
} else {
|
|
3827
|
-
console.warn("[useLineDetailedMetrics] Factory view selected but
|
|
3895
|
+
console.warn("[useLineDetailedMetrics] Factory view selected but no lines configured in entityConfig. Realtime updates may be incomplete.");
|
|
3828
3896
|
return;
|
|
3829
3897
|
}
|
|
3830
3898
|
} else {
|
|
@@ -4042,9 +4110,9 @@ var useDashboardMetrics = ({ onLineMetricsUpdate, lineId }) => {
|
|
|
4042
4110
|
try {
|
|
4043
4111
|
const currentShiftDetails = getCurrentShift(defaultTimezone, shiftConfig);
|
|
4044
4112
|
const operationalDate = getOperationalDate(defaultTimezone);
|
|
4045
|
-
const targetLineIds = currentLineIdToUse === (entityConfig.factoryViewId || "factory") ?
|
|
4113
|
+
const targetLineIds = currentLineIdToUse === (entityConfig.factoryViewId || "factory") ? getConfiguredLineIds(entityConfig) : [currentLineIdToUse];
|
|
4046
4114
|
if (targetLineIds.length === 0 && currentLineIdToUse === (entityConfig.factoryViewId || "factory")) {
|
|
4047
|
-
throw new Error("Factory view selected, but
|
|
4115
|
+
throw new Error("Factory view selected, but no lines are configured in entityConfig.");
|
|
4048
4116
|
}
|
|
4049
4117
|
if (targetLineIds.length === 0) {
|
|
4050
4118
|
throw new Error("No target line IDs available for fetching metrics.");
|
|
@@ -4144,7 +4212,7 @@ var useDashboardMetrics = ({ onLineMetricsUpdate, lineId }) => {
|
|
|
4144
4212
|
}
|
|
4145
4213
|
const currentShiftDetails = getCurrentShift(defaultTimezone, shiftConfig);
|
|
4146
4214
|
const operationalDateForSubscription = getOperationalDate(defaultTimezone);
|
|
4147
|
-
const targetLineIds = currentLineIdToUse === (entityConfig.factoryViewId || "factory") ?
|
|
4215
|
+
const targetLineIds = currentLineIdToUse === (entityConfig.factoryViewId || "factory") ? getConfiguredLineIds(entityConfig) : [currentLineIdToUse];
|
|
4148
4216
|
if (targetLineIds.length === 0) return;
|
|
4149
4217
|
const wsMetricsFilter = `date=eq.${operationalDateForSubscription}&shift_id=eq.${currentShiftDetails.shiftId}&line_id=in.(${targetLineIds.join(",")})`;
|
|
4150
4218
|
const lineMetricsFilter = `date=eq.${operationalDateForSubscription}&shift_id=eq.${currentShiftDetails.shiftId}&line_id=in.(${targetLineIds.join(",")})`;
|
|
@@ -4313,11 +4381,8 @@ var useLineKPIs = ({ lineId }) => {
|
|
|
4313
4381
|
const currentShiftDetails = getCurrentShift(defaultTimezone, shiftConfig);
|
|
4314
4382
|
const operationalDate = currentShiftDetails.date;
|
|
4315
4383
|
const factoryViewIdentifier = entityConfig.factoryViewId || "factory";
|
|
4316
|
-
const targetLineIds = currentLineId === factoryViewIdentifier ?
|
|
4317
|
-
if (targetLineIds.length === 0
|
|
4318
|
-
console.warn("[useLineKPIs] Factory view: defaultLineId/secondaryLineId not in entityConfig. Cannot subscribe effectively.");
|
|
4319
|
-
return;
|
|
4320
|
-
} else if (targetLineIds.length === 0) {
|
|
4384
|
+
const targetLineIds = currentLineId === factoryViewIdentifier ? getConfiguredLineIds(entityConfig) : [currentLineId];
|
|
4385
|
+
if (targetLineIds.length === 0) {
|
|
4321
4386
|
console.warn("[useLineKPIs] No target line IDs for subscription. LineId:", currentLineId);
|
|
4322
4387
|
return;
|
|
4323
4388
|
}
|
|
@@ -4417,10 +4482,8 @@ var useRealtimeLineMetrics = ({
|
|
|
4417
4482
|
currentTime: (/* @__PURE__ */ new Date()).toLocaleString("en-US", { timeZone: dateTimeConfig.defaultTimezone || "Asia/Kolkata" })
|
|
4418
4483
|
});
|
|
4419
4484
|
const factoryViewId = entityConfig.factoryViewId || "factory";
|
|
4420
|
-
const defaultLineId = entityConfig.defaultLineId;
|
|
4421
|
-
const secondaryLineId = entityConfig.secondaryLineId;
|
|
4422
4485
|
if (lineIdRef.current === factoryViewId) {
|
|
4423
|
-
const targetLineIds =
|
|
4486
|
+
const targetLineIds = getConfiguredLineIds(entityConfig);
|
|
4424
4487
|
if (targetLineIds.length === 0) {
|
|
4425
4488
|
throw new Error("No configured line IDs for factory view");
|
|
4426
4489
|
}
|
|
@@ -4634,9 +4697,7 @@ var useRealtimeLineMetrics = ({
|
|
|
4634
4697
|
console.log("Setting up line metrics subscriptions for:", lineIdRef.current);
|
|
4635
4698
|
}
|
|
4636
4699
|
const factoryViewId = entityConfig.factoryViewId || "factory";
|
|
4637
|
-
const
|
|
4638
|
-
const secondaryLineId = entityConfig.secondaryLineId;
|
|
4639
|
-
const targetLineIds = lineIdRef.current === factoryViewId ? [defaultLineId, secondaryLineId].filter(Boolean) : [lineIdRef.current];
|
|
4700
|
+
const targetLineIds = lineIdRef.current === factoryViewId ? getConfiguredLineIds(entityConfig) : [lineIdRef.current];
|
|
4640
4701
|
if (targetLineIds.length === 0) {
|
|
4641
4702
|
return;
|
|
4642
4703
|
}
|
|
@@ -27399,20 +27460,33 @@ var DEFAULT_SHIFT_CONFIG2 = {
|
|
|
27399
27460
|
var FactoryView = ({
|
|
27400
27461
|
line1Id,
|
|
27401
27462
|
line2Id,
|
|
27463
|
+
lineIds,
|
|
27464
|
+
lineNames = {},
|
|
27402
27465
|
factoryName = "Plant 1",
|
|
27403
27466
|
timezone = DEFAULT_TIMEZONE,
|
|
27404
27467
|
shiftConfig = DEFAULT_SHIFT_CONFIG2,
|
|
27405
27468
|
productIds = {}
|
|
27406
27469
|
}) => {
|
|
27470
|
+
const effectiveLineIds = useMemo(() => {
|
|
27471
|
+
if (lineIds && lineIds.length > 0) {
|
|
27472
|
+
return lineIds;
|
|
27473
|
+
}
|
|
27474
|
+
const ids = [];
|
|
27475
|
+
if (line1Id) ids.push(line1Id);
|
|
27476
|
+
if (line2Id && line2Id !== line1Id) ids.push(line2Id);
|
|
27477
|
+
return ids;
|
|
27478
|
+
}, [lineIds, line1Id, line2Id]);
|
|
27407
27479
|
const router = useRouter();
|
|
27408
27480
|
const supabase = useSupabase();
|
|
27409
|
-
const
|
|
27410
|
-
|
|
27481
|
+
const lineDataHooks = effectiveLineIds.map((lineId) => ({
|
|
27482
|
+
lineId,
|
|
27483
|
+
hook: useLineDetailedMetrics(lineId)
|
|
27484
|
+
}));
|
|
27411
27485
|
const [lines, setLines] = useState([]);
|
|
27412
27486
|
const [loading, setLoading] = useState(true);
|
|
27413
27487
|
const [error, setError] = useState(null);
|
|
27414
27488
|
useMemo(() => {
|
|
27415
|
-
const processLineData = (hookData,
|
|
27489
|
+
const processLineData = (hookData, lineId) => {
|
|
27416
27490
|
const currentLineInfo = hookData.lineData;
|
|
27417
27491
|
let last5HoursData = [];
|
|
27418
27492
|
if (currentLineInfo && currentLineInfo.metrics && currentLineInfo.metrics.output_array && currentLineInfo.metrics.output_array.length > 0) {
|
|
@@ -27433,6 +27507,7 @@ var FactoryView = ({
|
|
|
27433
27507
|
}
|
|
27434
27508
|
}
|
|
27435
27509
|
}
|
|
27510
|
+
const defaultName = lineNames[lineId] || `Line ${lineId.substring(0, 8)}`;
|
|
27436
27511
|
return {
|
|
27437
27512
|
name: currentLineInfo?.line_name || defaultName,
|
|
27438
27513
|
metrics: currentLineInfo,
|
|
@@ -27441,11 +27516,8 @@ var FactoryView = ({
|
|
|
27441
27516
|
last5Hours: last5HoursData.slice(-5)
|
|
27442
27517
|
};
|
|
27443
27518
|
};
|
|
27444
|
-
return
|
|
27445
|
-
|
|
27446
|
-
processLineData(line2DataHook, "Line 2")
|
|
27447
|
-
];
|
|
27448
|
-
}, [line1DataHook, line2DataHook]);
|
|
27519
|
+
return lineDataHooks.map(({ lineId, hook }) => processLineData(hook, lineId));
|
|
27520
|
+
}, [lineDataHooks, lineNames]);
|
|
27449
27521
|
useEffect(() => {
|
|
27450
27522
|
const fetchHourlyData = async () => {
|
|
27451
27523
|
try {
|
|
@@ -27456,45 +27528,37 @@ var FactoryView = ({
|
|
|
27456
27528
|
}
|
|
27457
27529
|
const { shiftId } = getCurrentShift(timezone, shiftConfig);
|
|
27458
27530
|
const date = getOperationalDate();
|
|
27459
|
-
const
|
|
27460
|
-
|
|
27461
|
-
|
|
27462
|
-
|
|
27463
|
-
|
|
27464
|
-
|
|
27465
|
-
|
|
27466
|
-
|
|
27467
|
-
id: line1Id,
|
|
27468
|
-
line_name: line1DataHook.lineData.line_name || "Line 1",
|
|
27469
|
-
factory_id: line1DataHook.lineData.factory_id || "",
|
|
27470
|
-
factory_name: line1DataHook.lineData.factory_name || "Factory 1"
|
|
27471
|
-
},
|
|
27472
|
-
current_output: line1DataHook.lineData.metrics.current_output || 0,
|
|
27473
|
-
ideal_output: line1DataHook.lineData.metrics.ideal_output || 0,
|
|
27474
|
-
avg_efficiency: line1DataHook.lineData.metrics.avg_efficiency || 0,
|
|
27475
|
-
total_workspaces: line1DataHook.lineData.metrics.total_workspaces || 0,
|
|
27476
|
-
underperforming_workspaces: line1DataHook.lineData.metrics.underperforming_workspaces || 0,
|
|
27477
|
-
last5Hours: (hourlyDataLine1 || []).map((h) => ({ hour: h.hour, efficiency: h.efficiency })).reverse(),
|
|
27478
|
-
productId: productIds[line1Id] || "Product A"
|
|
27479
|
-
});
|
|
27480
|
-
}
|
|
27481
|
-
if (line2DataHook.lineData && line2DataHook.lineData.metrics && line2DataHook.lineData.metrics.output_array) {
|
|
27482
|
-
linesData.push({
|
|
27483
|
-
details: {
|
|
27484
|
-
id: line2Id,
|
|
27485
|
-
line_name: line2DataHook.lineData.line_name || "Line 2",
|
|
27486
|
-
factory_id: line2DataHook.lineData.factory_id || "",
|
|
27487
|
-
factory_name: line2DataHook.lineData.factory_name || "Factory 2"
|
|
27488
|
-
},
|
|
27489
|
-
current_output: line2DataHook.lineData.metrics.current_output || 0,
|
|
27490
|
-
ideal_output: line2DataHook.lineData.metrics.ideal_output || 0,
|
|
27491
|
-
avg_efficiency: line2DataHook.lineData.metrics.avg_efficiency || 0,
|
|
27492
|
-
total_workspaces: line2DataHook.lineData.metrics.total_workspaces || 0,
|
|
27493
|
-
underperforming_workspaces: line2DataHook.lineData.metrics.underperforming_workspaces || 0,
|
|
27494
|
-
last5Hours: (hourlyDataLine2 || []).map((h) => ({ hour: h.hour, efficiency: h.efficiency })).reverse(),
|
|
27495
|
-
productId: productIds[line2Id] || "Product B"
|
|
27496
|
-
});
|
|
27531
|
+
const hourlyDataPromises = effectiveLineIds.map(
|
|
27532
|
+
(lineId) => supabase.from("line_hourly_metrics").select("hour, efficiency").eq("line_id", lineId).eq("shift_id", shiftId).eq("date", date).order("hour", { ascending: false }).limit(5)
|
|
27533
|
+
);
|
|
27534
|
+
const hourlyDataResults = await Promise.all(hourlyDataPromises);
|
|
27535
|
+
for (let i = 0; i < hourlyDataResults.length; i++) {
|
|
27536
|
+
if (hourlyDataResults[i].error) {
|
|
27537
|
+
throw hourlyDataResults[i].error;
|
|
27538
|
+
}
|
|
27497
27539
|
}
|
|
27540
|
+
const linesData = [];
|
|
27541
|
+
lineDataHooks.forEach(({ lineId, hook }, index) => {
|
|
27542
|
+
const lineData = hook.lineData;
|
|
27543
|
+
const hourlyData = hourlyDataResults[index].data;
|
|
27544
|
+
if (lineData && lineData.metrics && lineData.metrics.output_array) {
|
|
27545
|
+
linesData.push({
|
|
27546
|
+
details: {
|
|
27547
|
+
id: lineId,
|
|
27548
|
+
line_name: lineData.line_name || lineNames[lineId] || `Line ${index + 1}`,
|
|
27549
|
+
factory_id: lineData.factory_id || "",
|
|
27550
|
+
factory_name: lineData.factory_name || factoryName
|
|
27551
|
+
},
|
|
27552
|
+
current_output: lineData.metrics.current_output || 0,
|
|
27553
|
+
ideal_output: lineData.metrics.ideal_output || 0,
|
|
27554
|
+
avg_efficiency: lineData.metrics.avg_efficiency || 0,
|
|
27555
|
+
total_workspaces: lineData.metrics.total_workspaces || 0,
|
|
27556
|
+
underperforming_workspaces: lineData.metrics.underperforming_workspaces || 0,
|
|
27557
|
+
last5Hours: (hourlyData || []).map((h) => ({ hour: h.hour, efficiency: h.efficiency })).reverse(),
|
|
27558
|
+
productId: productIds[lineId] || `Product ${String.fromCharCode(65 + index)}`
|
|
27559
|
+
});
|
|
27560
|
+
}
|
|
27561
|
+
});
|
|
27498
27562
|
setLines(linesData);
|
|
27499
27563
|
setLoading(false);
|
|
27500
27564
|
} catch (err) {
|
|
@@ -27503,10 +27567,11 @@ var FactoryView = ({
|
|
|
27503
27567
|
setLoading(false);
|
|
27504
27568
|
}
|
|
27505
27569
|
};
|
|
27506
|
-
|
|
27570
|
+
const allHooksLoaded = lineDataHooks.every(({ hook }) => !hook.loading);
|
|
27571
|
+
if (allHooksLoaded) {
|
|
27507
27572
|
fetchHourlyData();
|
|
27508
27573
|
}
|
|
27509
|
-
}, [supabase,
|
|
27574
|
+
}, [supabase, lineDataHooks, effectiveLineIds, lineNames, factoryName, timezone, shiftConfig, productIds]);
|
|
27510
27575
|
const getShiftName = () => {
|
|
27511
27576
|
const now2 = /* @__PURE__ */ new Date();
|
|
27512
27577
|
const currentHour = now2.getHours();
|
|
@@ -27520,7 +27585,7 @@ var FactoryView = ({
|
|
|
27520
27585
|
return /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" }) });
|
|
27521
27586
|
}
|
|
27522
27587
|
};
|
|
27523
|
-
if (loading ||
|
|
27588
|
+
if (loading || lineDataHooks.some((hookData) => hookData.hook.loading)) {
|
|
27524
27589
|
return /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxs("div", { className: "animate-pulse space-y-4", children: [
|
|
27525
27590
|
/* @__PURE__ */ jsx("div", { className: "h-12 bg-gray-200 rounded" }),
|
|
27526
27591
|
/* @__PURE__ */ jsx("div", { className: "h-12 bg-gray-200 rounded" })
|
|
@@ -28270,6 +28335,7 @@ var HelpView = ({
|
|
|
28270
28335
|
var AuthenticatedHelpView = withAuth(HelpView);
|
|
28271
28336
|
var HelpView_default = HelpView;
|
|
28272
28337
|
var KPISection2 = KPISection;
|
|
28338
|
+
var LoadingPageCmp = LoadingPage_default;
|
|
28273
28339
|
function HomeView({
|
|
28274
28340
|
defaultLineId,
|
|
28275
28341
|
factoryViewId,
|
|
@@ -28409,53 +28475,7 @@ function HomeView({
|
|
|
28409
28475
|
const isInitialLoading = !isHydrated || !displayNamesInitialized && displayNamesLoading;
|
|
28410
28476
|
const isDataLoading = metricsLoading || kpisLoading;
|
|
28411
28477
|
if (isInitialLoading) {
|
|
28412
|
-
return /* @__PURE__ */ jsx(
|
|
28413
|
-
motion.div,
|
|
28414
|
-
{
|
|
28415
|
-
className: "text-center",
|
|
28416
|
-
initial: { opacity: 0, scale: 0.9 },
|
|
28417
|
-
animate: { opacity: 1, scale: 1 },
|
|
28418
|
-
transition: { duration: 0.5 },
|
|
28419
|
-
children: /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-2xl shadow-2xl p-12 max-w-md mx-auto", children: [
|
|
28420
|
-
/* @__PURE__ */ jsx("div", { className: "relative mb-8", children: /* @__PURE__ */ jsxs("div", { className: "w-24 h-24 mx-auto", children: [
|
|
28421
|
-
/* @__PURE__ */ jsxs("svg", { className: "animate-spin", viewBox: "0 0 100 100", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
28422
|
-
/* @__PURE__ */ jsx("circle", { cx: "50", cy: "50", r: "45", fill: "none", stroke: "#e5e7eb", strokeWidth: "8" }),
|
|
28423
|
-
/* @__PURE__ */ jsx(
|
|
28424
|
-
"circle",
|
|
28425
|
-
{
|
|
28426
|
-
cx: "50",
|
|
28427
|
-
cy: "50",
|
|
28428
|
-
r: "45",
|
|
28429
|
-
fill: "none",
|
|
28430
|
-
stroke: "#3b82f6",
|
|
28431
|
-
strokeWidth: "8",
|
|
28432
|
-
strokeDasharray: "150 283",
|
|
28433
|
-
strokeLinecap: "round",
|
|
28434
|
-
className: "transform -rotate-90 origin-center"
|
|
28435
|
-
}
|
|
28436
|
-
)
|
|
28437
|
-
] }),
|
|
28438
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "w-16 h-16 bg-gradient-to-br from-blue-500 to-blue-600 rounded-full animate-pulse" }) })
|
|
28439
|
-
] }) }),
|
|
28440
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-gray-800 mb-2", children: "Loading Dashboard" }),
|
|
28441
|
-
/* @__PURE__ */ jsx("p", { className: "text-gray-600 mb-6", children: "Initializing your workspace..." }),
|
|
28442
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
28443
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center space-x-2 text-sm text-gray-500", children: [
|
|
28444
|
-
/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-blue-500 rounded-full animate-pulse" }),
|
|
28445
|
-
/* @__PURE__ */ jsx("span", { children: "Connecting to services" })
|
|
28446
|
-
] }),
|
|
28447
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center space-x-2 text-sm text-gray-500", children: [
|
|
28448
|
-
/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-blue-500 rounded-full animate-pulse", style: { animationDelay: "0.2s" } }),
|
|
28449
|
-
/* @__PURE__ */ jsx("span", { children: "Loading workspace configurations" })
|
|
28450
|
-
] }),
|
|
28451
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center space-x-2 text-sm text-gray-500", children: [
|
|
28452
|
-
/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-blue-500 rounded-full animate-pulse", style: { animationDelay: "0.4s" } }),
|
|
28453
|
-
/* @__PURE__ */ jsx("span", { children: "Preparing dashboard view" })
|
|
28454
|
-
] })
|
|
28455
|
-
] })
|
|
28456
|
-
] })
|
|
28457
|
-
}
|
|
28458
|
-
) });
|
|
28478
|
+
return /* @__PURE__ */ jsx(LoadingPageCmp, { message: "Loading Dashboard..." });
|
|
28459
28479
|
}
|
|
28460
28480
|
if (errorMessage || displayNamesError) {
|
|
28461
28481
|
return /* @__PURE__ */ jsx("div", { className: "flex h-screen items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "rounded-lg bg-white p-6 shadow-lg", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3 text-red-500", children: [
|
|
@@ -33932,4 +33952,4 @@ var S3Service = class {
|
|
|
33932
33952
|
}
|
|
33933
33953
|
};
|
|
33934
33954
|
|
|
33935
|
-
export { ACTION_NAMES, AIAgentView_default as AIAgentView, AuthCallback, AuthCallbackView_default as AuthCallbackView, AuthProvider, AuthenticatedFactoryView, AuthenticatedHelpView, AuthenticatedHomeView, AuthenticatedTargetsView, BarChart, BaseHistoryCalendar, BottlenecksContent, BreakNotificationPopup, Card2 as Card, CardContent2 as CardContent, CardDescription2 as CardDescription, CardFooter2 as CardFooter, CardHeader2 as CardHeader, CardTitle2 as CardTitle, CycleTimeChart, CycleTimeOverTimeChart, DEFAULT_ANALYTICS_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CONFIG, DEFAULT_DATABASE_CONFIG, DEFAULT_DATE_TIME_CONFIG, DEFAULT_ENDPOINTS_CONFIG, DEFAULT_ENTITY_CONFIG, DEFAULT_SHIFT_CONFIG, DEFAULT_THEME_CONFIG, DEFAULT_VIDEO_CONFIG, DEFAULT_WORKSPACE_CONFIG, DEFAULT_WORKSPACE_POSITIONS, DashboardHeader, DashboardLayout, DashboardOverridesProvider, DashboardProvider, DateDisplay_default as DateDisplay, DateTimeDisplay, DebugAuth, DebugAuthView_default as DebugAuthView, EmptyStateMessage, FactoryView_default as FactoryView, GaugeChart, GridComponentsPlaceholder, Header, HelpView_default as HelpView, HomeView_default as HomeView, HourlyOutputChart2 as HourlyOutputChart, ISTTimer_default as ISTTimer, KPICard, KPIDetailView_default as KPIDetailView, KPIGrid, KPIHeader, KPISection, KPIsOverviewView_default as KPIsOverviewView, LINE_1_UUID, LINE_2_UUID, LargeOutputProgressChart, LeaderboardDetailView_default as LeaderboardDetailView, Legend6 as Legend, LineChart, LineHistoryCalendar, LineMonthlyHistory, LineMonthlyPdfGenerator, LinePdfExportButton, LinePdfGenerator, LineWhatsAppShareButton, LiveTimer, LoadingInline, LoadingOverlay_default as LoadingOverlay, LoadingPage_default as LoadingPage, LoadingSkeleton, LoadingSpinner_default as LoadingSpinner, LoadingState, LoginPage, LoginView_default as LoginView, MainLayout, MetricCard_default as MetricCard, NoWorkspaceData, OptifyeAgentClient, OutputProgressChart, PageHeader, PieChart4 as PieChart, ProfileView_default as ProfileView, RegistryProvider, S3Service, SKUManagementView, SOPComplianceChart, SSEChatClient, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, ShiftDisplay_default as ShiftDisplay, ShiftsView_default as ShiftsView, SideNavBar, SingleVideoStream_default as SingleVideoStream, Skeleton, SlackAPI, SubscriptionManager, SubscriptionManagerProvider, SupabaseProvider, TargetWorkspaceGrid, TargetsView_default as TargetsView, ThreadSidebar, TimeDisplay_default as TimeDisplay, TimePickerDropdown, VideoCard, VideoGridView, VideoPreloader, WORKSPACE_POSITIONS, WhatsAppShareButton, WorkspaceCard, WorkspaceDetailView_default as WorkspaceDetailView, WorkspaceDisplayNameExample, WorkspaceGrid, WorkspaceGridItem, WorkspaceHistoryCalendar, WorkspaceMetricCards, WorkspaceMonthlyDataFetcher, WorkspaceMonthlyPdfGenerator, WorkspacePdfExportButton, WorkspacePdfGenerator, WorkspaceWhatsAppShareButton, actionService, apiUtils, authCoreService, authOTPService, authRateLimitService, cacheService, checkRateLimit2 as checkRateLimit, clearAllRateLimits2 as clearAllRateLimits, clearRateLimit2 as clearRateLimit, clearS3VideoCache, clearS3VideoFromCache, clearWorkspaceDisplayNamesCache, cn, createStreamProxyHandler, createSupabaseClient, createThrottledReload, dashboardService, deleteThread, forceRefreshWorkspaceDisplayNames, formatDateInZone, formatDateTimeInZone, formatISTDate, formatIdleTime, formatTimeInZone, fromUrlFriendlyName, getAllThreadMessages, getAllWorkspaceDisplayNamesAsync, getAnonClient, getCameraNumber, getCompanyMetricsTableName, getConfigurableShortWorkspaceDisplayName, getConfigurableWorkspaceDisplayName, getCurrentShift, getCurrentTimeInZone, getDashboardHeaderTimeInZone, getDaysDifferenceInZone, getDefaultCameraStreamUrl, getDefaultTabForWorkspace, getManufacturingInsights, getMetricsTablePrefix, getOperationalDate, getS3SignedUrl, getS3VideoSrc, getShortWorkspaceDisplayName, getShortWorkspaceDisplayNameAsync, getStoredWorkspaceMappings, getSubscriptionManager, getThreadMessages, getUserThreads, getUserThreadsPaginated, getWorkspaceDisplayName, getWorkspaceDisplayNameAsync, getWorkspaceDisplayNamesMap, getWorkspaceFromUrl, getWorkspaceNavigationParams, identifyCoreUser, initializeCoreMixpanel, isTransitionPeriod, isValidLineInfoPayload, isValidWorkspaceDetailedMetricsPayload, isValidWorkspaceMetricsPayload, isWorkspaceDisplayNamesLoaded, isWorkspaceDisplayNamesLoading, mergeWithDefaultConfig, optifyeAgentClient, preInitializeWorkspaceDisplayNames, preloadS3Video, preloadS3VideoUrl, preloadS3VideosUrl, preloadVideoUrl, preloadVideosUrl, qualityService, realtimeService, refreshWorkspaceDisplayNames, resetCoreMixpanel, resetSubscriptionManager, s3VideoPreloader, skuService, storeWorkspaceMapping, streamProxyConfig, throttledReloadDashboard, toUrlFriendlyName, trackCoreEvent, trackCorePageView, updateThreadTitle, useActiveBreaks, useAllWorkspaceMetrics, useAnalyticsConfig, useAuth, useAuthConfig, useComponentOverride, useCustomConfig, useDashboardConfig, useDashboardMetrics, useDatabaseConfig, useDateFormatter, useDateTimeConfig, useEndpointsConfig, useEntityConfig, useFactoryOverviewMetrics, useFeatureFlags, useFormatNumber, useHistoricWorkspaceMetrics, useHlsStream, useHlsStreamWithCropping, useHookOverride, useLeaderboardMetrics, useLineDetailedMetrics, useLineKPIs, useLineMetrics, useLineWorkspaceMetrics, useMessages, useMetrics, useNavigation, useOverrides, usePageOverride, useRealtimeLineMetrics, useRegistry, useSKUs, useShiftConfig, useShifts, useSubscriptionManager, useSubscriptionManagerSafe, useSupabase, useSupabaseClient, useTargets, useTheme, useThemeConfig, useThreads, useVideoConfig, useWorkspaceConfig, useWorkspaceDetailedMetrics, useWorkspaceDisplayName, useWorkspaceDisplayNames, useWorkspaceDisplayNamesMap, useWorkspaceMetrics, useWorkspaceNavigation, useWorkspaceOperators, videoPreloader, whatsappService, withAuth, withRegistry, workspaceService };
|
|
33955
|
+
export { ACTION_NAMES, AIAgentView_default as AIAgentView, AuthCallback, AuthCallbackView_default as AuthCallbackView, AuthProvider, AuthenticatedFactoryView, AuthenticatedHelpView, AuthenticatedHomeView, AuthenticatedTargetsView, BarChart, BaseHistoryCalendar, BottlenecksContent, BreakNotificationPopup, Card2 as Card, CardContent2 as CardContent, CardDescription2 as CardDescription, CardFooter2 as CardFooter, CardHeader2 as CardHeader, CardTitle2 as CardTitle, CycleTimeChart, CycleTimeOverTimeChart, DEFAULT_ANALYTICS_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CONFIG, DEFAULT_DATABASE_CONFIG, DEFAULT_DATE_TIME_CONFIG, DEFAULT_ENDPOINTS_CONFIG, DEFAULT_ENTITY_CONFIG, DEFAULT_SHIFT_CONFIG, DEFAULT_THEME_CONFIG, DEFAULT_VIDEO_CONFIG, DEFAULT_WORKSPACE_CONFIG, DEFAULT_WORKSPACE_POSITIONS, DashboardHeader, DashboardLayout, DashboardOverridesProvider, DashboardProvider, DateDisplay_default as DateDisplay, DateTimeDisplay, DebugAuth, DebugAuthView_default as DebugAuthView, EmptyStateMessage, FactoryView_default as FactoryView, GaugeChart, GridComponentsPlaceholder, Header, HelpView_default as HelpView, HomeView_default as HomeView, HourlyOutputChart2 as HourlyOutputChart, ISTTimer_default as ISTTimer, KPICard, KPIDetailView_default as KPIDetailView, KPIGrid, KPIHeader, KPISection, KPIsOverviewView_default as KPIsOverviewView, LINE_1_UUID, LINE_2_UUID, LargeOutputProgressChart, LeaderboardDetailView_default as LeaderboardDetailView, Legend6 as Legend, LineChart, LineHistoryCalendar, LineMonthlyHistory, LineMonthlyPdfGenerator, LinePdfExportButton, LinePdfGenerator, LineWhatsAppShareButton, LiveTimer, LoadingInline, LoadingOverlay_default as LoadingOverlay, LoadingPage_default as LoadingPage, LoadingSkeleton, LoadingSpinner_default as LoadingSpinner, LoadingState, LoginPage, LoginView_default as LoginView, MainLayout, MetricCard_default as MetricCard, NoWorkspaceData, OptifyeAgentClient, OutputProgressChart, PageHeader, PieChart4 as PieChart, ProfileView_default as ProfileView, RegistryProvider, S3Service, SKUManagementView, SOPComplianceChart, SSEChatClient, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, ShiftDisplay_default as ShiftDisplay, ShiftsView_default as ShiftsView, SideNavBar, SingleVideoStream_default as SingleVideoStream, Skeleton, SlackAPI, SubscriptionManager, SubscriptionManagerProvider, SupabaseProvider, TargetWorkspaceGrid, TargetsView_default as TargetsView, ThreadSidebar, TimeDisplay_default as TimeDisplay, TimePickerDropdown, VideoCard, VideoGridView, VideoPreloader, WORKSPACE_POSITIONS, WhatsAppShareButton, WorkspaceCard, WorkspaceDetailView_default as WorkspaceDetailView, WorkspaceDisplayNameExample, WorkspaceGrid, WorkspaceGridItem, WorkspaceHistoryCalendar, WorkspaceMetricCards, WorkspaceMonthlyDataFetcher, WorkspaceMonthlyPdfGenerator, WorkspacePdfExportButton, WorkspacePdfGenerator, WorkspaceWhatsAppShareButton, actionService, apiUtils, authCoreService, authOTPService, authRateLimitService, cacheService, checkRateLimit2 as checkRateLimit, clearAllRateLimits2 as clearAllRateLimits, clearRateLimit2 as clearRateLimit, clearS3VideoCache, clearS3VideoFromCache, clearWorkspaceDisplayNamesCache, cn, createStreamProxyHandler, createSupabaseClient, createThrottledReload, dashboardService, deleteThread, forceRefreshWorkspaceDisplayNames, formatDateInZone, formatDateTimeInZone, formatISTDate, formatIdleTime, formatTimeInZone, fromUrlFriendlyName, getAllLineDisplayNames, getAllThreadMessages, getAllWorkspaceDisplayNamesAsync, getAnonClient, getCameraNumber, getCompanyMetricsTableName, getConfigurableShortWorkspaceDisplayName, getConfigurableWorkspaceDisplayName, getConfiguredLineIds, getCurrentShift, getCurrentTimeInZone, getDashboardHeaderTimeInZone, getDaysDifferenceInZone, getDefaultCameraStreamUrl, getDefaultLineId, getDefaultTabForWorkspace, getLineDisplayName, getManufacturingInsights, getMetricsTablePrefix, getOperationalDate, getS3SignedUrl, getS3VideoSrc, getShortWorkspaceDisplayName, getShortWorkspaceDisplayNameAsync, getStoredWorkspaceMappings, getSubscriptionManager, getThreadMessages, getUserThreads, getUserThreadsPaginated, getWorkspaceDisplayName, getWorkspaceDisplayNameAsync, getWorkspaceDisplayNamesMap, getWorkspaceFromUrl, getWorkspaceNavigationParams, identifyCoreUser, initializeCoreMixpanel, isLegacyConfiguration, isTransitionPeriod, isValidFactoryViewConfiguration, isValidLineInfoPayload, isValidWorkspaceDetailedMetricsPayload, isValidWorkspaceMetricsPayload, isWorkspaceDisplayNamesLoaded, isWorkspaceDisplayNamesLoading, mergeWithDefaultConfig, migrateLegacyConfiguration, optifyeAgentClient, preInitializeWorkspaceDisplayNames, preloadS3Video, preloadS3VideoUrl, preloadS3VideosUrl, preloadVideoUrl, preloadVideosUrl, qualityService, realtimeService, refreshWorkspaceDisplayNames, resetCoreMixpanel, resetSubscriptionManager, s3VideoPreloader, skuService, storeWorkspaceMapping, streamProxyConfig, throttledReloadDashboard, toUrlFriendlyName, trackCoreEvent, trackCorePageView, updateThreadTitle, useActiveBreaks, useAllWorkspaceMetrics, useAnalyticsConfig, useAuth, useAuthConfig, useComponentOverride, useCustomConfig, useDashboardConfig, useDashboardMetrics, useDatabaseConfig, useDateFormatter, useDateTimeConfig, useEndpointsConfig, useEntityConfig, useFactoryOverviewMetrics, useFeatureFlags, useFormatNumber, useHistoricWorkspaceMetrics, useHlsStream, useHlsStreamWithCropping, useHookOverride, useLeaderboardMetrics, useLineDetailedMetrics, useLineKPIs, useLineMetrics, useLineWorkspaceMetrics, useMessages, useMetrics, useNavigation, useOverrides, usePageOverride, useRealtimeLineMetrics, useRegistry, useSKUs, useShiftConfig, useShifts, useSubscriptionManager, useSubscriptionManagerSafe, useSupabase, useSupabaseClient, useTargets, useTheme, useThemeConfig, useThreads, useVideoConfig, useWorkspaceConfig, useWorkspaceDetailedMetrics, useWorkspaceDisplayName, useWorkspaceDisplayNames, useWorkspaceDisplayNamesMap, useWorkspaceMetrics, useWorkspaceNavigation, useWorkspaceOperators, videoPreloader, whatsappService, withAuth, withRegistry, workspaceService };
|