myio-js-library 0.1.188 → 0.1.190
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.cjs +144 -99
- package/dist/index.js +144 -99
- package/dist/myio-js-library.umd.js +144 -99
- package/dist/myio-js-library.umd.min.js +1 -1
- package/package.json +1 -1
|
@@ -23952,6 +23952,9 @@
|
|
|
23952
23952
|
transition: all 0.2s ease;
|
|
23953
23953
|
font-weight: 600;
|
|
23954
23954
|
font-size: 13px;
|
|
23955
|
+
position: relative;
|
|
23956
|
+
z-index: 10;
|
|
23957
|
+
pointer-events: auto;
|
|
23955
23958
|
}
|
|
23956
23959
|
|
|
23957
23960
|
.annotations-create-btn:hover {
|
|
@@ -23959,15 +23962,22 @@
|
|
|
23959
23962
|
box-shadow: 0 6px 20px rgba(108, 92, 231, 0.4);
|
|
23960
23963
|
}
|
|
23961
23964
|
|
|
23965
|
+
.annotations-create-btn:active {
|
|
23966
|
+
transform: translateY(0);
|
|
23967
|
+
box-shadow: 0 2px 8px rgba(108, 92, 231, 0.3);
|
|
23968
|
+
}
|
|
23969
|
+
|
|
23962
23970
|
.annotations-create-btn__icon {
|
|
23963
23971
|
font-size: 28px;
|
|
23964
23972
|
line-height: 1;
|
|
23973
|
+
pointer-events: none;
|
|
23965
23974
|
}
|
|
23966
23975
|
|
|
23967
23976
|
.annotations-create-btn__text {
|
|
23968
23977
|
font-size: 11px;
|
|
23969
23978
|
text-transform: uppercase;
|
|
23970
23979
|
letter-spacing: 0.5px;
|
|
23980
|
+
pointer-events: none;
|
|
23971
23981
|
}
|
|
23972
23982
|
|
|
23973
23983
|
/* New Annotation Modal Overlay */
|
|
@@ -25296,18 +25306,29 @@
|
|
|
25296
25306
|
}
|
|
25297
25307
|
isOverdue(annotation) {
|
|
25298
25308
|
if (!annotation.dueDate || annotation.status === "archived") return false;
|
|
25299
|
-
|
|
25309
|
+
try {
|
|
25310
|
+
const dueDate = new Date(annotation.dueDate);
|
|
25311
|
+
if (isNaN(dueDate.getTime())) return false;
|
|
25312
|
+
return dueDate < /* @__PURE__ */ new Date();
|
|
25313
|
+
} catch (e) {
|
|
25314
|
+
return false;
|
|
25315
|
+
}
|
|
25300
25316
|
}
|
|
25301
25317
|
formatDate(isoString) {
|
|
25302
25318
|
if (!isoString) return "-";
|
|
25303
|
-
|
|
25304
|
-
|
|
25305
|
-
|
|
25306
|
-
|
|
25307
|
-
|
|
25308
|
-
|
|
25309
|
-
|
|
25310
|
-
|
|
25319
|
+
try {
|
|
25320
|
+
const date = new Date(isoString);
|
|
25321
|
+
if (isNaN(date.getTime())) return "-";
|
|
25322
|
+
return date.toLocaleDateString("pt-BR", {
|
|
25323
|
+
day: "2-digit",
|
|
25324
|
+
month: "2-digit",
|
|
25325
|
+
year: "numeric",
|
|
25326
|
+
hour: "2-digit",
|
|
25327
|
+
minute: "2-digit"
|
|
25328
|
+
});
|
|
25329
|
+
} catch (e) {
|
|
25330
|
+
return "-";
|
|
25331
|
+
}
|
|
25311
25332
|
}
|
|
25312
25333
|
renderCard(annotation) {
|
|
25313
25334
|
const canModify = canModifyAnnotation(annotation, this.permissions);
|
|
@@ -25368,7 +25389,7 @@
|
|
|
25368
25389
|
const typeColor = ANNOTATION_TYPE_COLORS[annotation.type];
|
|
25369
25390
|
const importanceColor = IMPORTANCE_COLORS[annotation.importance];
|
|
25370
25391
|
const statusColor = STATUS_COLORS[annotation.status];
|
|
25371
|
-
const date =
|
|
25392
|
+
const date = this.formatDate(annotation.createdAt);
|
|
25372
25393
|
const truncatedText = annotation.text.length > 50 ? annotation.text.substring(0, 50) + "..." : annotation.text;
|
|
25373
25394
|
return `
|
|
25374
25395
|
<div class="annotation-row ${annotation.status === "archived" ? "annotation-row--archived" : ""}" data-id="${annotation.id}">
|
|
@@ -25430,9 +25451,13 @@
|
|
|
25430
25451
|
// ============================================
|
|
25431
25452
|
attachEventListeners() {
|
|
25432
25453
|
const openModalBtn = this.container.querySelector("#open-new-annotation-modal");
|
|
25433
|
-
|
|
25434
|
-
|
|
25435
|
-
|
|
25454
|
+
if (openModalBtn) {
|
|
25455
|
+
openModalBtn.onclick = () => {
|
|
25456
|
+
this.showNewAnnotationModal();
|
|
25457
|
+
};
|
|
25458
|
+
} else {
|
|
25459
|
+
console.warn("[AnnotationsTab] Create button not found");
|
|
25460
|
+
}
|
|
25436
25461
|
this.setupMultiselectDropdown("filter-status", (values) => {
|
|
25437
25462
|
if (values.includes("all") || values.length === 0) {
|
|
25438
25463
|
this.filters.statusList = void 0;
|
|
@@ -25670,16 +25695,14 @@
|
|
|
25670
25695
|
</div>
|
|
25671
25696
|
</div>
|
|
25672
25697
|
|
|
25673
|
-
<!-- Due Date
|
|
25698
|
+
<!-- Due Date -->
|
|
25674
25699
|
<div class="annotations-form__field" style="margin-bottom: 16px;">
|
|
25675
25700
|
<label class="annotations-form__label">Data Limite (opcional)</label>
|
|
25676
25701
|
<input
|
|
25677
|
-
type="
|
|
25702
|
+
type="datetime-local"
|
|
25678
25703
|
class="annotations-form__input"
|
|
25679
25704
|
id="new-annotation-due-date"
|
|
25680
|
-
|
|
25681
|
-
readonly
|
|
25682
|
-
style="cursor: pointer;"
|
|
25705
|
+
style="cursor: text;"
|
|
25683
25706
|
>
|
|
25684
25707
|
</div>
|
|
25685
25708
|
</div>
|
|
@@ -25728,24 +25751,6 @@
|
|
|
25728
25751
|
});
|
|
25729
25752
|
}
|
|
25730
25753
|
const dueDateInput = overlay.querySelector("#new-annotation-due-date");
|
|
25731
|
-
if (dueDateInput) {
|
|
25732
|
-
try {
|
|
25733
|
-
this.modalDateRangePicker = await createDateRangePicker2(dueDateInput, {
|
|
25734
|
-
includeTime: true,
|
|
25735
|
-
timePrecision: "minute",
|
|
25736
|
-
locale: "pt-BR",
|
|
25737
|
-
parentEl: overlay.querySelector(".annotations-modal"),
|
|
25738
|
-
onApply: (result) => {
|
|
25739
|
-
dueDateInput.setAttribute("data-due-date", result.startISO);
|
|
25740
|
-
}
|
|
25741
|
-
});
|
|
25742
|
-
} catch (error) {
|
|
25743
|
-
console.warn("[AnnotationsTab] Modal DateRangePicker initialization failed:", error);
|
|
25744
|
-
dueDateInput.type = "datetime-local";
|
|
25745
|
-
dueDateInput.removeAttribute("readonly");
|
|
25746
|
-
dueDateInput.style.cursor = "text";
|
|
25747
|
-
}
|
|
25748
|
-
}
|
|
25749
25754
|
const closeModal = () => {
|
|
25750
25755
|
this.modalDateRangePicker?.destroy?.();
|
|
25751
25756
|
this.modalDateRangePicker = null;
|
|
@@ -25763,11 +25768,15 @@
|
|
|
25763
25768
|
const selectedImportance = overlay.querySelector(".importance-option.selected");
|
|
25764
25769
|
const importance = parseInt(selectedImportance?.dataset.importance || "3");
|
|
25765
25770
|
let dueDate;
|
|
25766
|
-
|
|
25767
|
-
|
|
25768
|
-
|
|
25769
|
-
|
|
25770
|
-
|
|
25771
|
+
if (dueDateInput?.value) {
|
|
25772
|
+
try {
|
|
25773
|
+
const dateValue = new Date(dueDateInput.value);
|
|
25774
|
+
if (!isNaN(dateValue.getTime())) {
|
|
25775
|
+
dueDate = dateValue.toISOString();
|
|
25776
|
+
}
|
|
25777
|
+
} catch (e) {
|
|
25778
|
+
console.warn("[AnnotationsTab] Invalid due date value:", dueDateInput.value);
|
|
25779
|
+
}
|
|
25771
25780
|
}
|
|
25772
25781
|
const text = textArea.value.trim();
|
|
25773
25782
|
if (text) {
|
|
@@ -26014,12 +26023,12 @@
|
|
|
26014
26023
|
</div>
|
|
26015
26024
|
<div class="annotation-detail__field">
|
|
26016
26025
|
<div class="annotation-detail__label">Data de Cria\xE7\xE3o</div>
|
|
26017
|
-
<div class="annotation-detail__value">${
|
|
26026
|
+
<div class="annotation-detail__value">${this.formatDate(annotation.createdAt)}</div>
|
|
26018
26027
|
</div>
|
|
26019
26028
|
${annotation.dueDate ? `
|
|
26020
26029
|
<div class="annotation-detail__field">
|
|
26021
26030
|
<div class="annotation-detail__label">Data Limite</div>
|
|
26022
|
-
<div class="annotation-detail__value">${
|
|
26031
|
+
<div class="annotation-detail__value">${this.formatDate(annotation.dueDate)}</div>
|
|
26023
26032
|
</div>
|
|
26024
26033
|
` : ""}
|
|
26025
26034
|
<div class="annotation-detail__field">
|
|
@@ -26030,7 +26039,7 @@
|
|
|
26030
26039
|
<div class="annotation-detail__field">
|
|
26031
26040
|
<div class="annotation-detail__label">Reconhecido por</div>
|
|
26032
26041
|
<div class="annotation-detail__value">
|
|
26033
|
-
${annotation.acknowledgedBy?.name} em ${
|
|
26042
|
+
${annotation.acknowledgedBy?.name} em ${this.formatDate(annotation.acknowledgedAt || "")}
|
|
26034
26043
|
</div>
|
|
26035
26044
|
</div>
|
|
26036
26045
|
` : ""}
|
|
@@ -26038,7 +26047,7 @@
|
|
|
26038
26047
|
<div class="annotation-detail__history-title">Hist\xF3rico (${annotation.history.length} eventos)</div>
|
|
26039
26048
|
${annotation.history.map((h) => `
|
|
26040
26049
|
<div class="annotation-detail__history-item">
|
|
26041
|
-
<strong>${h.action}</strong> por ${h.userName} em ${
|
|
26050
|
+
<strong>${h.action}</strong> por ${h.userName} em ${this.formatDate(h.timestamp)}
|
|
26042
26051
|
</div>
|
|
26043
26052
|
`).join("")}
|
|
26044
26053
|
</div>
|
|
@@ -34049,35 +34058,53 @@
|
|
|
34049
34058
|
summary.byCategory = [entrada, lojas, areaComum];
|
|
34050
34059
|
summary.totalDevices = entrada.deviceCount + lojas.deviceCount + areaComumDeviceCount;
|
|
34051
34060
|
summary.totalConsumption = state5.grandTotal || entrada.consumption;
|
|
34052
|
-
const
|
|
34053
|
-
if (
|
|
34054
|
-
summary.byStatus =
|
|
34061
|
+
const widgetAggregation = receivedData?.deviceStatusAggregation;
|
|
34062
|
+
if (widgetAggregation && widgetAggregation.hasData) {
|
|
34063
|
+
summary.byStatus = {
|
|
34064
|
+
normal: widgetAggregation.normal || 0,
|
|
34065
|
+
alert: widgetAggregation.alert || 0,
|
|
34066
|
+
failure: widgetAggregation.failure || 0,
|
|
34067
|
+
standby: widgetAggregation.standby || 0,
|
|
34068
|
+
offline: widgetAggregation.offline || 0,
|
|
34069
|
+
noConsumption: widgetAggregation.noConsumption || 0,
|
|
34070
|
+
normalDevices: widgetAggregation.normalDevices || [],
|
|
34071
|
+
alertDevices: widgetAggregation.alertDevices || [],
|
|
34072
|
+
failureDevices: widgetAggregation.failureDevices || [],
|
|
34073
|
+
standbyDevices: widgetAggregation.standbyDevices || [],
|
|
34074
|
+
offlineDevices: widgetAggregation.offlineDevices || [],
|
|
34075
|
+
noConsumptionDevices: widgetAggregation.noConsumptionDevices || []
|
|
34076
|
+
};
|
|
34055
34077
|
} else {
|
|
34056
|
-
const
|
|
34057
|
-
|
|
34058
|
-
|
|
34059
|
-
summary.byStatus = {
|
|
34060
|
-
normal: statusData.normal || 0,
|
|
34061
|
-
alert: statusData.alert || 0,
|
|
34062
|
-
failure: statusData.failure || 0,
|
|
34063
|
-
standby: statusData.standby || 0,
|
|
34064
|
-
offline: statusData.offline || 0,
|
|
34065
|
-
noConsumption: statusData.noConsumption || statusData.zeroConsumption || 0
|
|
34066
|
-
};
|
|
34078
|
+
const statusAggregation = this._aggregateDeviceStatusFromOrchestrator(domain);
|
|
34079
|
+
if (statusAggregation.hasData) {
|
|
34080
|
+
summary.byStatus = statusAggregation.byStatus;
|
|
34067
34081
|
} else {
|
|
34068
|
-
|
|
34069
|
-
|
|
34070
|
-
|
|
34071
|
-
|
|
34072
|
-
|
|
34073
|
-
|
|
34074
|
-
|
|
34075
|
-
|
|
34076
|
-
|
|
34077
|
-
|
|
34078
|
-
|
|
34079
|
-
|
|
34080
|
-
summary.byStatus
|
|
34082
|
+
const totalDevices = summary.totalDevices;
|
|
34083
|
+
const statusData = receivedData?.statusCounts || receivedData?.deviceStatus || null;
|
|
34084
|
+
if (statusData && typeof statusData === "object") {
|
|
34085
|
+
summary.byStatus = {
|
|
34086
|
+
normal: statusData.normal || 0,
|
|
34087
|
+
alert: statusData.alert || 0,
|
|
34088
|
+
failure: statusData.failure || 0,
|
|
34089
|
+
standby: statusData.standby || 0,
|
|
34090
|
+
offline: statusData.offline || 0,
|
|
34091
|
+
noConsumption: statusData.noConsumption || statusData.zeroConsumption || 0
|
|
34092
|
+
};
|
|
34093
|
+
} else {
|
|
34094
|
+
summary.byStatus = {
|
|
34095
|
+
normal: Math.floor(totalDevices * 0.75),
|
|
34096
|
+
alert: Math.floor(totalDevices * 0.06),
|
|
34097
|
+
failure: Math.floor(totalDevices * 0.02),
|
|
34098
|
+
standby: Math.floor(totalDevices * 0.02),
|
|
34099
|
+
offline: Math.floor(totalDevices * 0.03),
|
|
34100
|
+
noConsumption: Math.floor(totalDevices * 0.12)
|
|
34101
|
+
};
|
|
34102
|
+
const statusSum = Object.values(summary.byStatus).reduce((a, b) => {
|
|
34103
|
+
return typeof b === "number" ? a + b : a;
|
|
34104
|
+
}, 0);
|
|
34105
|
+
if (statusSum !== totalDevices && totalDevices > 0) {
|
|
34106
|
+
summary.byStatus.normal += totalDevices - statusSum;
|
|
34107
|
+
}
|
|
34081
34108
|
}
|
|
34082
34109
|
}
|
|
34083
34110
|
}
|
|
@@ -35385,35 +35412,53 @@
|
|
|
35385
35412
|
}
|
|
35386
35413
|
summary.totalDevices = summary.byCategory.reduce((sum, cat) => sum + cat.deviceCount, 0);
|
|
35387
35414
|
summary.totalConsumption = state5.entrada?.total || 0;
|
|
35388
|
-
const
|
|
35389
|
-
if (
|
|
35390
|
-
summary.byStatus =
|
|
35415
|
+
const widgetAggregation = receivedData?.deviceStatusAggregation;
|
|
35416
|
+
if (widgetAggregation && widgetAggregation.hasData) {
|
|
35417
|
+
summary.byStatus = {
|
|
35418
|
+
normal: widgetAggregation.normal || 0,
|
|
35419
|
+
alert: widgetAggregation.alert || 0,
|
|
35420
|
+
failure: widgetAggregation.failure || 0,
|
|
35421
|
+
standby: widgetAggregation.standby || 0,
|
|
35422
|
+
offline: widgetAggregation.offline || 0,
|
|
35423
|
+
noConsumption: widgetAggregation.noConsumption || 0,
|
|
35424
|
+
normalDevices: widgetAggregation.normalDevices || [],
|
|
35425
|
+
alertDevices: widgetAggregation.alertDevices || [],
|
|
35426
|
+
failureDevices: widgetAggregation.failureDevices || [],
|
|
35427
|
+
standbyDevices: widgetAggregation.standbyDevices || [],
|
|
35428
|
+
offlineDevices: widgetAggregation.offlineDevices || [],
|
|
35429
|
+
noConsumptionDevices: widgetAggregation.noConsumptionDevices || []
|
|
35430
|
+
};
|
|
35391
35431
|
} else {
|
|
35392
|
-
const
|
|
35393
|
-
|
|
35394
|
-
|
|
35395
|
-
summary.byStatus = {
|
|
35396
|
-
normal: statusData.normal || 0,
|
|
35397
|
-
alert: statusData.alert || 0,
|
|
35398
|
-
failure: statusData.failure || 0,
|
|
35399
|
-
standby: statusData.standby || 0,
|
|
35400
|
-
offline: statusData.offline || 0,
|
|
35401
|
-
noConsumption: statusData.noConsumption || statusData.zeroConsumption || 0
|
|
35402
|
-
};
|
|
35432
|
+
const statusAggregation = this._aggregateDeviceStatusFromOrchestrator(domain);
|
|
35433
|
+
if (statusAggregation.hasData) {
|
|
35434
|
+
summary.byStatus = statusAggregation.byStatus;
|
|
35403
35435
|
} else {
|
|
35404
|
-
|
|
35405
|
-
|
|
35406
|
-
|
|
35407
|
-
|
|
35408
|
-
|
|
35409
|
-
|
|
35410
|
-
|
|
35411
|
-
|
|
35412
|
-
|
|
35413
|
-
|
|
35414
|
-
|
|
35415
|
-
|
|
35416
|
-
summary.byStatus
|
|
35436
|
+
const totalDevices = summary.totalDevices;
|
|
35437
|
+
const statusData = receivedData?.statusCounts || receivedData?.deviceStatus || null;
|
|
35438
|
+
if (statusData && typeof statusData === "object") {
|
|
35439
|
+
summary.byStatus = {
|
|
35440
|
+
normal: statusData.normal || 0,
|
|
35441
|
+
alert: statusData.alert || 0,
|
|
35442
|
+
failure: statusData.failure || 0,
|
|
35443
|
+
standby: statusData.standby || 0,
|
|
35444
|
+
offline: statusData.offline || 0,
|
|
35445
|
+
noConsumption: statusData.noConsumption || statusData.zeroConsumption || 0
|
|
35446
|
+
};
|
|
35447
|
+
} else {
|
|
35448
|
+
summary.byStatus = {
|
|
35449
|
+
normal: Math.floor(totalDevices * 0.8),
|
|
35450
|
+
alert: Math.floor(totalDevices * 0.05),
|
|
35451
|
+
failure: Math.floor(totalDevices * 0.02),
|
|
35452
|
+
standby: Math.floor(totalDevices * 0.02),
|
|
35453
|
+
offline: Math.floor(totalDevices * 0.03),
|
|
35454
|
+
noConsumption: Math.floor(totalDevices * 0.08)
|
|
35455
|
+
};
|
|
35456
|
+
const statusSum = Object.values(summary.byStatus).reduce((a, b) => {
|
|
35457
|
+
return typeof b === "number" ? a + b : a;
|
|
35458
|
+
}, 0);
|
|
35459
|
+
if (statusSum !== totalDevices && totalDevices > 0) {
|
|
35460
|
+
summary.byStatus.normal += totalDevices - statusSum;
|
|
35461
|
+
}
|
|
35417
35462
|
}
|
|
35418
35463
|
}
|
|
35419
35464
|
}
|