diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index 077e6c5c..1836e9b7 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -2,7 +2,7 @@ import { useTranslation } from "react-i18next"; import { useEffect, useState, useRef, useCallback, useContext } from "react"; import classNames from "classnames"; -import { resolveIcon } from "./services/item"; +import ResolvedIcon from "./resolvedicon"; import { SettingsContext } from "utils/contexts/settings"; @@ -135,7 +135,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear )} onClick={handleItemClick}>
- {r.icon && resolveIcon(r.icon)} + {r.icon && } {r.abbr && r.abbr}
diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx new file mode 100644 index 00000000..d5aa8c88 --- /dev/null +++ b/src/components/resolvedicon.jsx @@ -0,0 +1,35 @@ +import Image from "next/future/image"; + +export default function ResolvedIcon({ icon }) { + // direct or relative URLs + if (icon.startsWith("http") || icon.startsWith("/")) { + return logo; + } + + // mdi- prefixed, material design icons + if (icon.startsWith("mdi-")) { + const iconName = icon.replace("mdi-", "").replace(".svg", ""); + return ( +
+ ); + } + + // fallback to dashboard-icons + const iconName = icon.replace(".png", ""); + return ( + logo + ); +} \ No newline at end of file diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 2220f9df..13b745fd 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -1,8 +1,7 @@ -import Image from "next/future/image"; import classNames from "classnames"; import List from "components/services/list"; -import resolveIcon from "utils/icon-resolver"; +import ResolvedIcon from "components/resolvedicon"; export default function ServicesGroup({ services, layout }) { return ( @@ -14,11 +13,12 @@ export default function ServicesGroup({ services, layout }) { )} >
- {layout?.icon && - logo - } -

{services.name} -

+ {layout?.icon && +
+ +
+ } +

{services.name}

diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index fc1ef9a4..56ed2b4b 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -6,7 +6,7 @@ import Widget from "./widget"; import Docker from "widgets/docker/component"; import { SettingsContext } from "utils/contexts/settings"; -import resolveIcon from "utils/icon-resolver"; +import ResolvedIcon from "components/resolvedicon"; export default function Item({ service }) { const hasLink = service.href && service.href !== "#"; @@ -41,10 +41,12 @@ export default function Item({ service }) { rel="noreferrer" className="flex-shrink-0 flex items-center justify-center w-12 " > - {resolveIcon(service.icon)} + ) : ( -
{resolveIcon(service.icon)}
+
+ +
))} {hasLink ? ( diff --git a/src/utils/icon-resolver.js b/src/utils/icon-resolver.js deleted file mode 100644 index c88fae09..00000000 --- a/src/utils/icon-resolver.js +++ /dev/null @@ -1,15 +0,0 @@ -export default function resolveIcon(icon) { - if (icon.startsWith("http")) { - return `/api/proxy?url=${encodeURIComponent(icon)}`; - } - - if (icon.startsWith("/")) { - return icon; - } - - if (icon.endsWith(".png")) { - return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}`; - } - - return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}.png`; -} \ No newline at end of file