From 0fef7db4a273fa0c6da565a99cd3c113d3cefd92 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 23 Sep 2024 23:19:18 -0700 Subject: [PATCH] Support specify vehicle ID --- docs/widgets/services/lubelogger.md | 4 ++++ public/locales/en/common.json | 5 ++++- src/utils/config/service-helpers.js | 6 ++++++ src/widgets/lubelogger/component.jsx | 31 +++++++++++++++++++++++++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/docs/widgets/services/lubelogger.md b/docs/widgets/services/lubelogger.md index 2efdf591..1e0a37f3 100644 --- a/docs/widgets/services/lubelogger.md +++ b/docs/widgets/services/lubelogger.md @@ -5,7 +5,10 @@ description: LubeLogger Widget Configuration Learn more about [LubeLogger](https://github.com/hargata/lubelog). +The widget comes in two 'flavors', one shows data for all vehicles or for just a specific vehicle with the `vehicleID` parameter. + Allowed fields: `["vehicles", "serviceRecords", "reminders"]`. +For the single-vehicle version: `["vehicle", "serviceRecords", "reminders", "nextReminder"] ```yaml widget: @@ -13,4 +16,5 @@ widget: url: https://lubelogger.host.or.ip username: lubeloggerusername password: lubeloggerpassword + vehicleID: 1 # optional, changes to single-vehicle version ``` diff --git a/public/locales/en/common.json b/public/locales/en/common.json index f3d1309c..3aea07eb 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -947,8 +947,11 @@ "disaster": "Disaster" }, "lubelogger": { + "vehicle": "Vehicle", "vehicles": "Vehicles", "serviceRecords": "Service Records", - "reminders": "Reminders" + "reminders": "Reminders", + "nextReminder": "Next Reminder", + "none": "None" } } diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 0dfbc944..dfae80ff 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -442,6 +442,9 @@ export function cleanServiceGroups(groups) { namespace, podSelector, + // lubelogger + vehicleID, + // mjpeg fit, stream, @@ -627,6 +630,9 @@ export function cleanServiceGroups(groups) { if (type === "technitium") { if (range !== undefined) cleanedService.widget.range = range; } + if (type === "lubelogger") { + if (vehicleID !== undefined) cleanedService.widget.vehicleID = vehicleID; + } } return cleanedService; diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx index 7e23b4f8..48995073 100644 --- a/src/widgets/lubelogger/component.jsx +++ b/src/widgets/lubelogger/component.jsx @@ -1,10 +1,13 @@ +import { useTranslation } from "react-i18next"; + import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; export default function Component({ service }) { + const { t } = useTranslation(); const { widget } = service; - const { data: vehicleInfo, error } = useWidgetAPI(widget, "vehicleinfo"); + let { data: vehicleInfo, error } = useWidgetAPI(widget, "vehicleinfo"); if (error) { return ; @@ -20,12 +23,38 @@ export default function Component({ service }) { ); } + const { vehicleID } = widget; + if (vehicleID) { + vehicleInfo = vehicleInfo.filter((v) => v.vehicleData.id === vehicleID); + } const totalReminders = vehicleInfo.reduce( (acc, val) => acc + val.veryUrgentReminderCount + val.urgentReminderCount + val.notUrgentReminderCount, 0, ); const totalServiceRecords = vehicleInfo.reduce((acc, val) => acc + val.serviceRecordCount, 0); + if (vehicleID) { + if (vehicleInfo.length === 0) { + error = { message: "Vehicle not found" }; + return ; + } + + const nextReminder = vehicleInfo[0].nextReminder + ? t("common.date", { value: vehicleInfo[0].nextReminder.dueDate }) + : t("lubelogger.none"); + return ( + + + + + + + ); + } + return (