24 lines
837 B
TypeScript
24 lines
837 B
TypeScript
import { createContext, useContext, ReactNode } from 'react';
|
|
import { getContrastColor } from '../common/utils';
|
|
|
|
const color = decodeURIComponent(new URLSearchParams(location.search).get("themeColor") || "#1fe1f9");
|
|
const fgColor = getContrastColor(color);
|
|
// 判断是否是iframe上下文
|
|
const embed = window.location !== window.parent.location;
|
|
const WidgetContext = createContext({ color, fgColor, embed });
|
|
|
|
|
|
function WidgetProvider({ children }: { children: ReactNode }) {
|
|
|
|
return <WidgetContext.Provider value={{ color, fgColor, embed }} >{children}</WidgetContext.Provider>;
|
|
}
|
|
|
|
function useWidget() {
|
|
const context = useContext(WidgetContext);
|
|
if (context === undefined) {
|
|
throw new Error('useWidget must be used within a WidgetProvider');
|
|
}
|
|
return context;
|
|
}
|
|
|
|
export { WidgetProvider, useWidget }; |