Files
upstream-plane/apps/web/app/compat/next/script.tsx
upstream-mirror 23059a1de3
Some checks failed
CodeQL / Analyze (javascript) (push) Failing after 16s
CodeQL / Analyze (python) (push) Failing after 3s
i18n sync check / check:sync (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 16s
Branch Build CE / Build-Push Admin Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Web Manifest (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Proxy Manifest (push) Has been cancelled
Branch Build CE / Merge Space Manifest (push) Has been cancelled
Branch Build CE / Prepare AIO Assets (push) Has been cancelled
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Live Collaboration Manifest (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge API Server Manifest (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge AIO Manifest (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
snapshot of https://github.com/makeplane/plane.git @ d868349a55de79979eb8b98701bf1702c67ad634 (2026-09-15)
2026-09-15 15:14:58 +05:00

60 lines
1.6 KiB
TypeScript

/**
* Copyright (c) 2023-present Plane Software, Inc. and contributors
* SPDX-License-Identifier: AGPL-3.0-only
* See the LICENSE file for details.
*/
import { useEffect } from "react";
type ScriptProps = {
src?: string;
id?: string;
strategy?: "beforeInteractive" | "afterInteractive" | "lazyOnload" | "worker";
onLoad?: () => void;
onError?: () => void;
children?: string;
defer?: boolean;
[key: string]: any;
};
// Minimal shim for next/script that creates a script tag
function Script({ src, id, strategy: _strategy, onLoad, onError, children, ...rest }: ScriptProps) {
useEffect(() => {
if (src) {
const script = document.createElement("script");
if (id) script.id = id;
script.src = src;
if (onLoad) script.onload = onLoad;
if (onError) script.onerror = onError;
Object.keys(rest).forEach((key) => {
script.setAttribute(key, rest[key]);
});
document.body.appendChild(script);
return () => {
if (script.parentNode) {
document.body.removeChild(script);
}
};
} else if (children) {
const script = document.createElement("script");
if (id) script.id = id;
script.textContent = children;
Object.keys(rest).forEach((key) => {
script.setAttribute(key, rest[key]);
});
document.body.appendChild(script);
return () => {
if (script.parentNode) {
document.body.removeChild(script);
}
};
}
}, [src, id, children, onLoad, onError, rest]);
return null;
}
export default Script;