mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-12-18 20:04:17 +01:00
Google drive oss. Shouldn't have any effect on pr deployment. Mainly the removal of the old integration via backend. I have added the picker service and lazy loading of the required google dependency scripts when the necessary environment variables have been implemented. --------- Co-authored-by: Connor Yoh <connor@stirlingpdf.com> Co-authored-by: James Brunton <jbrunton96@gmail.com>
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
/**
|
|
* Utility for dynamically loading external scripts
|
|
*/
|
|
|
|
interface ScriptLoadOptions {
|
|
src: string;
|
|
id?: string;
|
|
async?: boolean;
|
|
defer?: boolean;
|
|
onLoad?: () => void;
|
|
}
|
|
|
|
const loadedScripts = new Set<string>();
|
|
|
|
export function loadScript({ src, id, async = true, defer = false, onLoad }: ScriptLoadOptions): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
// Check if already loaded
|
|
const scriptId = id || src;
|
|
if (loadedScripts.has(scriptId)) {
|
|
resolve();
|
|
return;
|
|
}
|
|
|
|
// Check if script already exists in DOM
|
|
const existingScript = id ? document.getElementById(id) : document.querySelector(`script[src="${src}"]`);
|
|
if (existingScript) {
|
|
loadedScripts.add(scriptId);
|
|
resolve();
|
|
return;
|
|
}
|
|
|
|
// Create and append script
|
|
const script = document.createElement('script');
|
|
script.src = src;
|
|
if (id) script.id = id;
|
|
script.async = async;
|
|
script.defer = defer;
|
|
|
|
script.onload = () => {
|
|
loadedScripts.add(scriptId);
|
|
if (onLoad) onLoad();
|
|
resolve();
|
|
};
|
|
|
|
script.onerror = () => {
|
|
reject(new Error(`Failed to load script: ${src}`));
|
|
};
|
|
|
|
document.head.appendChild(script);
|
|
});
|
|
}
|
|
|
|
export function isScriptLoaded(idOrSrc: string): boolean {
|
|
return loadedScripts.has(idOrSrc);
|
|
}
|