From c7ad45f069a102b5ea2abd5e605c5f1a617ff3c9 Mon Sep 17 00:00:00 2001 From: Eizock <> Date: Tue, 10 Jan 2023 14:02:46 +0000 Subject: [PATCH] Add Moonraker (Klipper) widget --- public/locales/en/common.json | 7 +++ src/widgets/components.js | 1 + src/widgets/moonraker/component.jsx | 78 +++++++++++++++++++++++++++++ src/widgets/moonraker/widget.js | 20 ++++++++ src/widgets/widgets.js | 2 + 5 files changed, 108 insertions(+) create mode 100644 src/widgets/moonraker/component.jsx create mode 100644 src/widgets/moonraker/widget.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 032c1dfe..510b2b7e 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -412,5 +412,12 @@ "memory": "Active Memory", "wanUpload": "WAN Upload", "wanDownload": "WAN Download" + }, + "moonraker": { + "printer_state": "Printer State", + "print_status": "Print Status", + "print_progress": "Progress", + "layers": "Layers", + "filename": "Filename" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 10277732..d9240460 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -23,6 +23,7 @@ const components = { mastodon: dynamic(() => import("./mastodon/component")), miniflux: dynamic(() => import("./miniflux/component")), mikrotik: dynamic(() => import("./mikrotik/component")), + moonraker: dynamic(() => import("./moonraker/component")), navidrome: dynamic(() => import("./navidrome/component")), nextdns: dynamic(() => import("./nextdns/component")), npm: dynamic(() => import("./npm/component")), diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx new file mode 100644 index 00000000..632e88cd --- /dev/null +++ b/src/widgets/moonraker/component.jsx @@ -0,0 +1,78 @@ +import { useTranslation } from "next-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: mr_print_stats, error: mre_print_stats } = useWidgetAPI(widget, "print_stats"); + const { data: mr_display_status, error: mre_display_status } = useWidgetAPI(widget, "display_status"); + const { data: mr_webhooks, error: mre_webhooks } = useWidgetAPI(widget, "webhooks"); + + if (mre_print_stats || mre_display_status || mre_webhooks) { + const finalError = mre_print_stats ?? mre_display_status ?? mre_webhooks; + return ; + } + + if (!mr_print_stats || !mr_display_status || !mr_webhooks) { + return ( + +
+ +
+ + + +
+ +
+
+ ); + } + + const filename = "-"; + if(!mr_print_stats.result.status.print_stats.filename == "") { + filename = mr_print_stats.result.status.print_stats.filename; + } + + if (mr_webhooks.result.status.webhooks.state == "shutdown") { + return ( + +
+ +
+ + + +
+ +
+
+ ); + } + + const current_layer = "-"; + const total_layer = "-"; + if(!mr_print_stats.result.status.print_stats.info.current_layer == "") { + current_layer = mr_print_stats.result.status.print_stats.info.current_layer; + total_layer = mr_print_stats.result.status.print_stats.info.total_layer; + } + + return ( + +
+ +
+ + + +
+ +
+
+ ); +} diff --git a/src/widgets/moonraker/widget.js b/src/widgets/moonraker/widget.js new file mode 100644 index 00000000..314a8670 --- /dev/null +++ b/src/widgets/moonraker/widget.js @@ -0,0 +1,20 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/printer/objects/query?{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + print_stats: { + endpoint: "print_stats", + }, + display_status: { + endpoint: "display_status", + }, + webhooks: { + endpoint: "webhooks", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 3e73e55f..091a616f 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -18,6 +18,7 @@ import lidarr from "./lidarr/widget"; import mastodon from "./mastodon/widget"; import miniflux from "./miniflux/widget"; import mikrotik from "./mikrotik/widget"; +import moonraker from "./moonraker/widget"; import navidrome from "./navidrome/widget"; import nextdns from "./nextdns/widget"; import npm from "./npm/widget"; @@ -75,6 +76,7 @@ const widgets = { mastodon, miniflux, mikrotik, + moonraker, navidrome, nextdns, npm,