58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
import { createContext, useEffect, useState } from "react";
|
|
import AnythingLLM from "./media/logo/anything-llm.png";
|
|
import AnythingLLMDark from "./media/logo/anything-llm-dark.png";
|
|
import DefaultLoginLogoLight from "./media/illustrations/login-logo.svg";
|
|
import DefaultLoginLogoDark from "./media/illustrations/login-logo-light.svg";
|
|
import System from "./models/system";
|
|
|
|
export const REFETCH_LOGO_EVENT = "refetch-logo";
|
|
export const LogoContext = createContext();
|
|
|
|
export function LogoProvider({ children }) {
|
|
const [logo, setLogo] = useState("");
|
|
const [loginLogo, setLoginLogo] = useState("");
|
|
const [isCustomLogo, setIsCustomLogo] = useState(false);
|
|
const DefaultLoginLogo =
|
|
localStorage.getItem("theme") !== "default"
|
|
? DefaultLoginLogoDark
|
|
: DefaultLoginLogoLight;
|
|
|
|
async function fetchInstanceLogo() {
|
|
try {
|
|
const { isCustomLogo, logoURL } = await System.fetchLogo();
|
|
if (logoURL) {
|
|
setLogo(logoURL);
|
|
setLoginLogo(isCustomLogo ? logoURL : DefaultLoginLogo);
|
|
setIsCustomLogo(isCustomLogo);
|
|
} else {
|
|
localStorage.getItem("theme") !== "default"
|
|
? setLogo(AnythingLLMDark)
|
|
: setLogo(AnythingLLM);
|
|
setLoginLogo(DefaultLoginLogo);
|
|
setIsCustomLogo(false);
|
|
}
|
|
} catch (err) {
|
|
localStorage.getItem("theme") !== "default"
|
|
? setLogo(AnythingLLMDark)
|
|
: setLogo(AnythingLLM);
|
|
setLoginLogo(DefaultLoginLogo);
|
|
setIsCustomLogo(false);
|
|
console.error("Failed to fetch logo:", err);
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
fetchInstanceLogo();
|
|
window.addEventListener(REFETCH_LOGO_EVENT, fetchInstanceLogo);
|
|
return () => {
|
|
window.removeEventListener(REFETCH_LOGO_EVENT, fetchInstanceLogo);
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<LogoContext.Provider value={{ logo, setLogo, loginLogo, isCustomLogo }}>
|
|
{children}
|
|
</LogoContext.Provider>
|
|
);
|
|
}
|