diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index 04f9e883..dfed996e 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -366,6 +366,14 @@ export function cleanServiceGroups(groups) {
firstDayInWeek,
view,
maxEvents,
+ src,
+ sizes,
+ referrerPolicy,
+ allowPolicy,
+ allowFullscreen,
+ loadingStrategy,
+ allowScrolling,
+ border
} = cleanedService.widget;
let fieldsList = fields;
@@ -413,6 +421,17 @@ export function cleanServiceGroups(groups) {
if (app) cleanedService.widget.app = app;
if (podSelector) cleanedService.widget.podSelector = podSelector;
}
+ if (type === "iframe") {
+ if (src) cleanedService.widget.src = src
+ if (src) cleanedService.widget.sizes = sizes
+ if (src) cleanedService.widget.referrerPolicy = referrerPolicy
+ if (src) cleanedService.widget.allowPolicy = allowPolicy
+ if (src) cleanedService.widget.allowFullscreen = allowFullscreen
+ if (src) cleanedService.widget.loadingStrategy = loadingStrategy
+ if (src) cleanedService.widget.allowScrolling = allowScrolling
+ if (src) cleanedService.widget.border = border
+ if (src) cleanedService.widget.refreshInterval = refreshInterval
+ }
if (["opnsense", "pfsense"].includes(type)) {
if (wan) cleanedService.widget.wan = wan;
}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 9d311b97..99da81ea 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -15,6 +15,7 @@ const components = {
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
cloudflared: dynamic(() => import("./cloudflared/component")),
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
+ iframe: dynamic(() => import("./iframe/component")),
customapi: dynamic(() => import("./customapi/component")),
deluge: dynamic(() => import("./deluge/component")),
diskstation: dynamic(() => import("./diskstation/component")),
diff --git a/src/widgets/iframe/component.jsx b/src/widgets/iframe/component.jsx
new file mode 100644
index 00000000..9f2551ed
--- /dev/null
+++ b/src/widgets/iframe/component.jsx
@@ -0,0 +1,43 @@
+import { useState, useEffect } from "react";
+
+import Block from "./components/block";
+
+import Container from "components/services/widget/container";
+
+export default function Component({ service }) {
+ const [refreshTimer, setRefreshTimer] = useState(0);
+
+ const { widget } = service;
+ useEffect(() => {
+ const refreshInterval = setInterval(
+ () => {setRefreshTimer(refreshTimer + 1)},
+ widget?.refreshInterval
+ );
+ return () => clearInterval(refreshInterval)
+ }, [refreshTimer]);
+
+ const scrollingDisableStyle = widget.scrolling
+ ? "pointer-events:none; overflow: hidden;"
+ : "";
+
+ return (
+