2025-05-16 12:03:43 +08:00
|
|
|
import { useEffect, useState } from 'react';
|
2025-04-08 15:24:12 +08:00
|
|
|
|
2025-05-16 12:03:43 +08:00
|
|
|
const useScript = (src: string, onError?: () => void) => {
|
2025-04-08 15:24:12 +08:00
|
|
|
useEffect(() => {
|
|
|
|
|
if (document.querySelector(`script[src="${src}"]`)) {
|
|
|
|
|
return; // Prevent duplicate script loading
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const script = document.createElement('script');
|
|
|
|
|
script.src = src;
|
|
|
|
|
script.async = true;
|
2025-05-16 12:03:43 +08:00
|
|
|
|
|
|
|
|
script.onerror = () => {
|
|
|
|
|
console.error(`Failed to load script: ${src}`);
|
|
|
|
|
if (onError) onError();
|
|
|
|
|
};
|
|
|
|
|
|
2025-04-08 15:24:12 +08:00
|
|
|
document.body.appendChild(script);
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
document.body.removeChild(script);
|
|
|
|
|
};
|
2025-05-16 12:03:43 +08:00
|
|
|
}, [src, onError]);
|
2025-04-08 15:24:12 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default useScript;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export const useIconfontScript = () => {
|
2025-04-25 14:54:32 +08:00
|
|
|
const appStore = JSON.parse(localStorage.getItem("app-store") || "{}");
|
|
|
|
|
|
2025-05-16 12:03:43 +08:00
|
|
|
const [useLocalFallback, setUseLocalFallback] = useState(false);
|
|
|
|
|
|
2025-04-25 14:54:32 +08:00
|
|
|
let baseURL = appStore.state?.endpoint_http
|
|
|
|
|
if (!baseURL || baseURL === "undefined") {
|
|
|
|
|
baseURL = "";
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-16 12:03:43 +08:00
|
|
|
if (useLocalFallback || baseURL === "") {
|
|
|
|
|
useScript('/assets/fonts/icons/iconfont.js');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
useScript(`${baseURL}/assets/fonts/icons/iconfont.js`, () => {
|
|
|
|
|
console.log("Remote iconfont loading failed, falling back to local resource");
|
|
|
|
|
setUseLocalFallback(true);
|
|
|
|
|
});
|
2025-04-08 15:24:12 +08:00
|
|
|
};
|