Skip to content

Commit 40a754e

Browse files
authored
fix: better handle last_seen: "disable" (#357)
1 parent ef2c5b3 commit 40a754e

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

mocks/bridgeInfo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export const BRIDGE_INFO: Message<Zigbee2MQTTAPI["bridge/info"]> = {
1313
elapsed: true,
1414
ext_pan_id: [170, 187, 204, 221, 238, 255, 0, 0],
1515
last_seen: "ISO_8601_local",
16+
// last_seen: "disable",
1617
log_console_json: false,
1718
log_debug_namespace_ignore: "",
1819
log_debug_to_mqtt_frontend: false,

src/components/device-page/tabs/DeviceInfo.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,11 @@ export default function DeviceInfo({ sourceIdx, device }: DeviceInfoProps) {
294294
<div className="stat px-3">
295295
<div className="stat-title">{t(($) => $.last_seen)}</div>
296296
<div className="stat-value text-xl">
297-
<LastSeen config={bridgeConfig.advanced.last_seen} lastSeen={deviceState.last_seen} />
297+
<LastSeen
298+
config={bridgeConfig.advanced.last_seen}
299+
lastSeen={deviceState.last_seen}
300+
fallback={t(($) => $.disabled, { ns: "common" })}
301+
/>
298302
</div>
299303
<div className="stat-desc">
300304
{t(($) => $.availability, { ns: "availability" })}

src/components/value-decorators/LastSeen.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { type JSX, memo } from "react";
1+
import { memo, type ReactNode } from "react";
22
import { useTranslation } from "react-i18next";
33
import type { LastSeenConfig } from "../../types.js";
44
import TimeAgo from "./TimeAgo.js";
55

66
type LastSeenProps = {
77
lastSeen: unknown;
88
config: LastSeenConfig;
9+
fallback?: ReactNode;
910
};
1011

1112
const getLastSeenDate = (lastSeen: unknown, lastSeenConfig: LastSeenConfig): Date | undefined => {
@@ -30,7 +31,7 @@ const getLastSeenDate = (lastSeen: unknown, lastSeenConfig: LastSeenConfig): Dat
3031
}
3132
};
3233

33-
const LastSeen = memo(({ lastSeen, config }: LastSeenProps): JSX.Element => {
34+
const LastSeen = memo(({ lastSeen, config, fallback = null }: LastSeenProps) => {
3435
const { i18n } = useTranslation();
3536
const lastSeenDate = getLastSeenDate(lastSeen, config);
3637

@@ -39,7 +40,7 @@ const LastSeen = memo(({ lastSeen, config }: LastSeenProps): JSX.Element => {
3940
<TimeAgo datetime={lastSeenDate} locale={i18n.language} />
4041
</span>
4142
) : (
42-
<span>N/A</span>
43+
fallback
4344
);
4445
});
4546

src/pages/DevicesPage.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,13 @@ export default function DevicesPage(): JSX.Element {
245245
row: {
246246
original: { sourceIdx, state },
247247
},
248-
}) => <LastSeen lastSeen={state.last_seen} config={bridgeInfo[sourceIdx].config.advanced.last_seen} />,
248+
}) => (
249+
<LastSeen
250+
lastSeen={state.last_seen}
251+
config={bridgeInfo[sourceIdx].config.advanced.last_seen}
252+
fallback={t(($) => $.disabled, { ns: "common" })}
253+
/>
254+
),
249255
// don't want to compare by minute (`accessorFn`), as that creates visual mismatches with `<LastSeen />`
250256
sortingFn: (rowA, rowB) => {
251257
const a = getLastSeenEpoch(rowA.original.state.last_seen, bridgeInfo[rowA.original.sourceIdx].config.advanced.last_seen);

0 commit comments

Comments
 (0)