From 1fb9a56362fa017be985cecd8ad94b9a4d22fdce Mon Sep 17 00:00:00 2001 From: Florian Date: Tue, 5 Nov 2024 15:06:02 +0100 Subject: [PATCH] add teslamate widget --- public/locales/en/common.json | 5 +++++ src/widgets/components.js | 1 + src/widgets/teslamate/component.jsx | 32 +++++++++++++++++++++++++++++ src/widgets/teslamate/widget.js | 20 ++++++++++++++++++ src/widgets/widgets.js | 2 ++ 5 files changed, 60 insertions(+) create mode 100644 src/widgets/teslamate/component.jsx create mode 100644 src/widgets/teslamate/widget.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index fd52aef4..dc6b3769 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -959,5 +959,10 @@ "tasks7d": "Tasks Due This Week", "tasksOverdue": "Overdue Tasks", "tasksInProgress": "Tasks In Progress" + }, + "teslamate": { + "car_name": "Car name", + "odometer": "Odometer", + "battery_level": "Battery level" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 62bd479f..e4c2b389 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -115,6 +115,7 @@ const components = { tandoor: dynamic(() => import("./tandoor/component")), tautulli: dynamic(() => import("./tautulli/component")), technitium: dynamic(() => import("./technitium/component")), + teslamate: dynamic(() => import("./teslamate/component")), tdarr: dynamic(() => import("./tdarr/component")), traefik: dynamic(() => import("./traefik/component")), transmission: dynamic(() => import("./transmission/component")), diff --git a/src/widgets/teslamate/component.jsx b/src/widgets/teslamate/component.jsx new file mode 100644 index 00000000..5f5e2d1c --- /dev/null +++ b/src/widgets/teslamate/component.jsx @@ -0,0 +1,32 @@ +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 { widget } = service; + const { data: statusData, error: statusError } = useWidgetAPI(widget, "status"); + + if (statusError) { + return ; + } + + if (!statusData) { + return ( + + + + + + ); + } + + return ( + <> + + + + + + + ); +} diff --git a/src/widgets/teslamate/widget.js b/src/widgets/teslamate/widget.js new file mode 100644 index 00000000..62bac664 --- /dev/null +++ b/src/widgets/teslamate/widget.js @@ -0,0 +1,20 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; + +const widget = { + api: "{url}/api/v1/cars/{car_id}/{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + status: { + endpoint: "status", + map: (data) => ({ + car_name: asJson(data).data.car.car_name, + odometer: asJson(data).data.status.odometer, + battery_level: asJson(data).data.status.battery_details.battery_level, + }), + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index faff57eb..78c294f7 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -123,6 +123,7 @@ import xteve from "./xteve/widget"; import urbackup from "./urbackup/widget"; import romm from "./romm/widget"; import zabbix from "./zabbix/widget"; +import teslamate from "./teslamate/widget" const widgets = { adguard, @@ -236,6 +237,7 @@ const widgets = { tandoor, tautulli, technitium, + teslamate, tdarr, traefik, transmission,