mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-16 19:47:43 +01:00
refactor: optimized loading of font icons on the web side (#596)
* refactor: optimized loading of font icons on the web side * refactor: update
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +1,3 @@
|
|||||||
import { useAppStore } from "@/stores/appStore";
|
|
||||||
import logoImg from "@/assets/icon.svg";
|
|
||||||
|
|
||||||
interface FontIconProps {
|
interface FontIconProps {
|
||||||
name: string;
|
name: string;
|
||||||
className?: string;
|
className?: string;
|
||||||
@@ -8,17 +5,11 @@ interface FontIconProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const FontIcon = ({ name, className, style, ...rest }: FontIconProps) => {
|
const FontIcon = ({ name, className, style, ...rest }: FontIconProps) => {
|
||||||
const isTauri = useAppStore((state) => state.isTauri);
|
|
||||||
|
|
||||||
if (isTauri) {
|
|
||||||
return (
|
return (
|
||||||
<svg className={`icon ${className || ""}`} style={style} {...rest}>
|
<svg className={`icon ${className || ""}`} style={style} {...rest}>
|
||||||
<use xlinkHref={`#${name}`} />
|
<use xlinkHref={`#${name}`} />
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
return <img src={logoImg} className={className} alt={"coco"} />;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default FontIcon;
|
export default FontIcon;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect } from "react";
|
||||||
|
|
||||||
const useScript = (src: string, onError?: () => void) => {
|
const useScript = (src: string, onError?: () => void) => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (document.querySelector(`script[src="${src}"]`)) {
|
if (document.querySelector(`script[src="${src}"]`)) {
|
||||||
return; // Prevent duplicate script loading
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const script = document.createElement("script");
|
const script = document.createElement("script");
|
||||||
@@ -12,7 +12,8 @@ const useScript = (src: string, onError?: () => void) => {
|
|||||||
|
|
||||||
script.onerror = () => {
|
script.onerror = () => {
|
||||||
console.error(`Failed to load script: ${src}`);
|
console.error(`Failed to load script: ${src}`);
|
||||||
if (onError) onError();
|
|
||||||
|
onError?.();
|
||||||
};
|
};
|
||||||
|
|
||||||
document.body.appendChild(script);
|
document.body.appendChild(script);
|
||||||
@@ -26,23 +27,8 @@ const useScript = (src: string, onError?: () => void) => {
|
|||||||
export default useScript;
|
export default useScript;
|
||||||
|
|
||||||
export const useIconfontScript = () => {
|
export const useIconfontScript = () => {
|
||||||
const appStore = JSON.parse(localStorage.getItem("app-store") || "{}");
|
// Coco Server Icons
|
||||||
|
useScript("https://at.alicdn.com/t/c/font_4878526_cykw3et0ezd.js");
|
||||||
const [_useLocalFallback, setUseLocalFallback] = useState(false);
|
// Coco App Icons
|
||||||
|
useScript("https://at.alicdn.com/t/c/font_4934333_j1t3b1xyxkk.js");
|
||||||
let baseURL = appStore.state?.endpoint_http;
|
|
||||||
if (!baseURL || baseURL === "undefined") {
|
|
||||||
baseURL = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
useScript("/assets/fonts/icons/iconfont.js");
|
|
||||||
|
|
||||||
useScript(`${baseURL}/assets/fonts/icons/iconfont.js`, () => {
|
|
||||||
console.log(
|
|
||||||
"Remote iconfont loading failed, falling back to local resource"
|
|
||||||
);
|
|
||||||
setUseLocalFallback(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
useScript("/assets/fonts/icons/extension.js");
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user