chirpstack/ui/src/views/helpers.ts
2025-03-13 15:09:03 +00:00

112 lines
2.9 KiB
TypeScript

import { notification } from "antd";
import { format } from "date-fns";
import * as google_protobuf_timestamp_pb from "google-protobuf/google/protobuf/timestamp_pb";
import { MacVersion, RegParamsRevision } from "@chirpstack/chirpstack-api-grpc-web/common/common_pb";
import { useRef, useEffect } from "react";
export function formatMacVersion(m: MacVersion) {
switch (m) {
case MacVersion.LORAWAN_1_0_0:
return "LoRaWAN 1.0.0";
case MacVersion.LORAWAN_1_0_1:
return "LoRaWAN 1.0.1";
case MacVersion.LORAWAN_1_0_2:
return "LoRaWAN 1.0.2";
case MacVersion.LORAWAN_1_0_3:
return "LoRaWAN 1.0.3";
case MacVersion.LORAWAN_1_0_4:
return "LoRaWAN 1.0.4";
case MacVersion.LORAWAN_1_1_0:
return "LoRaWAN 1.1.0";
}
return "";
}
export function formatRegParamsRevision(r: RegParamsRevision) {
switch (r) {
case RegParamsRevision.A:
return "A";
case RegParamsRevision.B:
return "B";
case RegParamsRevision.RP002_1_0_0:
return "RP002-1.0.0";
case RegParamsRevision.RP002_1_0_1:
return "RP002-1.0.1";
case RegParamsRevision.RP002_1_0_2:
return "RP002-1.0.2";
case RegParamsRevision.RP002_1_0_3:
return "RP002-1.0.3";
case RegParamsRevision.RP002_1_0_4:
return "RP002-1.0.4";
}
return "";
}
export function getEnumName(enums: { [key: number]: string }, index: number) {
for (const [k, v] of Object.entries(enums)) {
// This is weird. 'typeof v' returns 'number', but 'v === 0' errors
// that v (string) can't be compared to number.
const vUnknown = v as unknown;
const vNumber = vUnknown as number;
if (vNumber === index) {
return k;
}
}
return "";
}
export function onFinishFailed() {
notification.error({
message: "Validation errors",
description: "Please inspect input fields for errors",
duration: 3,
});
}
/**
* Sets the Document Title in Reverse Order
* @example
* ```
* useTitle("Tenants", "Tenant", "Edit"); // Edit | Tenant | Tenants | ChirpStack LoRaWAN® Network-Server
* ```
*/
export function useTitle(...v: unknown[]) {
const documentDefined = typeof document !== "undefined";
useEffect(() => {
if (!documentDefined) return;
const title = ["ChirpStack LoRaWAN® Network-Server", ...v].reverse().join(" | ");
if (document.title !== title) {
document.title = title;
}
return () => {
document.title = "ChirpStack LoRaWAN® Network-Server";
};
}, [documentDefined, v]);
}
export function format_dt(dt?: google_protobuf_timestamp_pb.Timestamp): string {
if (dt) {
const ts = new Date(0);
ts.setUTCSeconds(dt.getSeconds());
return format(ts, "yyyy-MM-dd HH:mm:ss");
} else {
return "";
}
}
export function format_dt_from_secs(secs?: number): string {
if (secs) {
const ts = new Date(0);
ts.setUTCSeconds(secs);
return format(ts, "yyyy-MM-dd HH:mm:ss");
} else {
return "";
}
}