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 (