mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-05-07 03:18:25 +00:00
112 lines
2.9 KiB
TypeScript
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 "";
|
|
}
|
|
}
|