@larva.io/webcomponents
Version:
Fentrica SmartUnits WebComponents package
266 lines (265 loc) • 9.69 kB
JavaScript
/*!
* (C) Fentrica http://fentrica.com - Seee LICENSE.md
*/
import { h } from "@stencil/core";
import { getEventMessage, getLogLevel, LogLevel, Qualify, ReportEvent } from "@larva.io/report-definitions";
import ReportHelpers from "./report-codes-helper";
import moment from "moment";
import pick from "lodash-es/pick";
import omit from "lodash-es/omit";
import values from "lodash-es/values";
import orderBy from "lodash-es/orderBy";
import { config } from "../../../global/config";
export class LogModal {
constructor() {
this.config = config;
/**
* Larva sub-components request event
*/
this.logreceived = false;
/**
* Larva sub-components request event
*/
this.logdata = [];
this.logcount = 0;
}
/**
* Request response method
*/
async response(data) {
if (this.modal) {
this.modal.setAttribute('icon-small', '');
}
this.logreceived = true;
this.logdata = data.logs;
this.logcount = data.count;
}
componentDidLoad() {
this.request.emit(); // request logs
}
/**
* Display Larva Error
*/
async error(data, timeout = 5000) {
this.logreceived = true;
let msg = 'error_messages.';
if (typeof data === 'string') {
msg += data;
}
else if (data && data.message && typeof data.message === 'string') {
msg += data.message;
}
else {
msg += 'UNKNOWN_ERROR';
}
const translate = h("lar-translate", { t: msg });
// this.notify.create(translate, 'danger', timeout); // @TODO: error notify
}
// @ts-ignore
static parseData(data, eventCode) {
let ret = {};
if (data && ReportHelpers.isSecurityEvent(eventCode)) { // alarm zone info
ret = pick(data, ['name', 'sn', 'io', 'state', 'zone']);
}
else {
ret = omit(data, ['user', 'flow']);
}
return values(ret).toString();
}
renderLogList() {
const logs = [];
const logdata = orderBy(this.logdata, 'createdAt', 'desc');
const formatDateTime = this.config.get('formatDateTime', 'DD.MM.YYYY HH:mm');
if (logdata.length === 0) {
logs.push(h("lar-list-header", null, h("lar-translate", { t: "log.nologs" })));
return logs;
}
let prevMonth;
let prevYear;
logdata.forEach(logitem => {
let color = 'tertiary';
let icon = 'info';
const date = moment(new Date(logitem.createdAt));
const month = date.month() + 1;
const year = date.year();
const code = Number(logitem.code);
const logLevel = getLogLevel(code);
const message = getEventMessage(code);
const qualify = Number(logitem.qualify);
if (prevMonth !== month || prevYear !== year) {
logs.push(h("lar-list-header", null, h("lar-translate", { t: 'date.months.' + month }), " ", year));
prevMonth = month;
prevYear = year;
}
if (logLevel === LogLevel.ERROR) {
color = 'danger';
}
else if (logLevel === LogLevel.WARNING) {
color = 'warning';
}
// if issue is resolved issue, change color to green
if (qualify === Qualify.RESTORE) {
color = 'success';
}
if (ReportHelpers.isUserEvent(code)) {
icon = 'user';
}
else if (ReportHelpers.isSecurityEvent(code)) {
icon = 'warning';
if (ReportHelpers.isFireAlarm(code)) {
icon = 'fire_alarm';
}
if (ReportHelpers.isMedicalAlarm(code)) {
icon = 'medical_alarm';
}
if (ReportHelpers.isPanicAlarm(code)) {
icon = 'panic_alarm';
}
if (ReportHelpers.isOtherAreaAlarm(code)) {
icon = 'other_alarm';
}
}
else if (ReportHelpers.isCloudEvent(code)) {
icon = 'cloud';
}
else if (ReportHelpers.isSystemEvent(code)) {
icon = 'device';
}
logs.push(h("lar-list-item", null, h("div", { slot: "start", class: "circle" }, h("lar-icon", { icon: icon, color: color })), h("div", null, h("div", { class: "date" }, h("small", null, moment(new Date(logitem.createdAt)).format(formatDateTime))), h("h4", null, h("lar-translate", { t: 'log_entries.' + code, fallback: message })), h("div", null, logitem.data && logitem.data.user &&
h("small", null, logitem.data.user.firstname, " ", logitem.data.user.lastname)), logitem.data &&
h("div", null, h("small", null, LogModal.parseData(logitem.data, code))), qualify === Qualify.RESTORE &&
h("div", null, h("small", null, h("lar-badge", { color: "success" }, code === ReportEvent.SECURITY_PARTIAL_ARMED_DISARMED || code === ReportEvent.SECURITY_ARMED_DISARMED
? // if arm arm/disarm event then NEW = disrarm, RESTORE = arm
h("lar-translate", { t: "log.armed" })
:
h("lar-translate", { t: "log.resolved" })))))));
});
return logs;
}
render() {
return [
h("div", { key: 'ff4fda3f33471cd7c103e7bea437448152fe69e5' }, this.logreceived &&
h("lar-list", { key: '28f2ec6bdce7fc267bbf2e09e3943c2ca233e087' }, this.renderLogList()))
];
}
static get is() { return "lar-log-modal"; }
static get encapsulation() { return "shadow"; }
static get originalStyleUrls() {
return {
"$": ["log-modal.scss"]
};
}
static get styleUrls() {
return {
"$": ["log-modal.css"]
};
}
static get properties() {
return {
"modal": {
"type": "any",
"mutable": false,
"complexType": {
"original": "HTMLLarModalElement",
"resolved": "HTMLLarModalElement",
"references": {
"HTMLLarModalElement": {
"location": "global",
"id": "global::HTMLLarModalElement"
}
}
},
"required": false,
"optional": true,
"docs": {
"tags": [],
"text": ""
},
"getter": false,
"setter": false,
"reflect": false,
"attribute": "modal"
}
};
}
static get states() {
return {
"logreceived": {},
"logdata": {}
};
}
static get events() {
return [{
"method": "request",
"name": "request",
"bubbles": true,
"cancelable": true,
"composed": true,
"docs": {
"tags": [],
"text": "Larva sub-components request event"
},
"complexType": {
"original": "any",
"resolved": "any",
"references": {}
}
}];
}
static get methods() {
return {
"response": {
"complexType": {
"signature": "(data: InputMessage) => Promise<void>",
"parameters": [{
"name": "data",
"type": "InputMessage",
"docs": ""
}],
"references": {
"Promise": {
"location": "global",
"id": "global::Promise"
},
"InputMessage": {
"location": "import",
"path": "./log-interface",
"id": "src/components/internal/log-modal/log-interface.tsx::InputMessage"
}
},
"return": "Promise<void>"
},
"docs": {
"text": "Request response method",
"tags": []
}
},
"error": {
"complexType": {
"signature": "(data: any, timeout?: number) => Promise<void>",
"parameters": [{
"name": "data",
"type": "any",
"docs": ""
}, {
"name": "timeout",
"type": "number",
"docs": ""
}],
"references": {
"Promise": {
"location": "global",
"id": "global::Promise"
}
},
"return": "Promise<void>"
},
"docs": {
"text": "Display Larva Error",
"tags": []
}
}
};
}
}
//# sourceMappingURL=log-modal.js.map