Add iframe widget
This commit is contained in:
parent
defa53dfe6
commit
5993cefa60
@ -366,6 +366,14 @@ export function cleanServiceGroups(groups) {
|
|||||||
firstDayInWeek,
|
firstDayInWeek,
|
||||||
view,
|
view,
|
||||||
maxEvents,
|
maxEvents,
|
||||||
|
src,
|
||||||
|
sizes,
|
||||||
|
referrerPolicy,
|
||||||
|
allowPolicy,
|
||||||
|
allowFullscreen,
|
||||||
|
loadingStrategy,
|
||||||
|
allowScrolling,
|
||||||
|
border
|
||||||
} = cleanedService.widget;
|
} = cleanedService.widget;
|
||||||
|
|
||||||
let fieldsList = fields;
|
let fieldsList = fields;
|
||||||
@ -413,6 +421,17 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (app) cleanedService.widget.app = app;
|
if (app) cleanedService.widget.app = app;
|
||||||
if (podSelector) cleanedService.widget.podSelector = podSelector;
|
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 (["opnsense", "pfsense"].includes(type)) {
|
||||||
if (wan) cleanedService.widget.wan = wan;
|
if (wan) cleanedService.widget.wan = wan;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ const components = {
|
|||||||
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
||||||
cloudflared: dynamic(() => import("./cloudflared/component")),
|
cloudflared: dynamic(() => import("./cloudflared/component")),
|
||||||
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
||||||
|
iframe: dynamic(() => import("./iframe/component")),
|
||||||
customapi: dynamic(() => import("./customapi/component")),
|
customapi: dynamic(() => import("./customapi/component")),
|
||||||
deluge: dynamic(() => import("./deluge/component")),
|
deluge: dynamic(() => import("./deluge/component")),
|
||||||
diskstation: dynamic(() => import("./diskstation/component")),
|
diskstation: dynamic(() => import("./diskstation/component")),
|
||||||
|
|||||||
43
src/widgets/iframe/component.jsx
Normal file
43
src/widgets/iframe/component.jsx
Normal file
@ -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 (
|
||||||
|
<Container service={service}>
|
||||||
|
<Block>
|
||||||
|
<iframe
|
||||||
|
src={widget.src}
|
||||||
|
id={refreshTimer}
|
||||||
|
key={refreshTimer}
|
||||||
|
title="Iframe"
|
||||||
|
allow={widget?.allowPolicy}
|
||||||
|
allowfullscreen={widget?.allowfullscreen}
|
||||||
|
referrerpolicy={widget?.referrerPolicy}
|
||||||
|
loading={widget?.loadingStrategy}
|
||||||
|
scrolling={widget?.allowScrolling}
|
||||||
|
frameBorder={widget?.border}
|
||||||
|
style={{ width: "100%", scrollingDisableStyle }}
|
||||||
|
className={`h-${widget.sizes?.xs} sm:h-${widget.sizes?.sm} md:h-${widget.sizes?.md} lg:h-${widget.sizes?.lg} xl:h-${widget.sizes?.xl} 2xl:h-${widget.sizes?.["2xl"]} ${scrollingDisableStyle}`}
|
||||||
|
/>
|
||||||
|
</Block>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
14
src/widgets/iframe/components/block.jsx
Normal file
14
src/widgets/iframe/components/block.jsx
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
export default function Block({ children }) {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames(
|
||||||
|
"bg-theme-200/50 dark:bg-theme-900/20 rounded m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
|
||||||
|
"service-block"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
4
src/widgets/iframe/widget.js
Normal file
4
src/widgets/iframe/widget.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
const widget = {
|
||||||
|
};
|
||||||
|
|
||||||
|
export default widget;
|
||||||
Loading…
Reference in New Issue
Block a user