Files
kima-hub/frontend/lib/activity-panel-settings-context.tsx
Your Name d396d8b9ef fix(artist): improve popular tracks matching and cover art fallback
Add three-tier title matching (exact, normalized, stripped) to catch
remaster/deluxe/single suffixes. Use artist hero image as cover art
fallback for unowned tracks. Optimize lyrics endpoint to skip full
track query on cache hit. Clean up player and activity panel state.
2026-02-28 21:32:59 -06:00

42 lines
1.4 KiB
TypeScript

"use client";
import { createContext, useContext, useState, useCallback, ReactNode } from "react";
export type SettingsOwner = "lyrics" | "discover" | null;
interface ActivityPanelSettingsContextType {
settingsContent: ReactNode | null;
settingsOwner: SettingsOwner;
setSettingsContent: (content: ReactNode | null, owner?: SettingsOwner) => void;
}
const ActivityPanelSettingsContext = createContext<ActivityPanelSettingsContextType | undefined>(
undefined
);
export function ActivityPanelSettingsProvider({ children }: { children: ReactNode }) {
const [settingsContent, setContent] = useState<ReactNode | null>(null);
const [settingsOwner, setOwner] = useState<SettingsOwner>(null);
const setSettingsContent = useCallback((content: ReactNode | null, owner: SettingsOwner = null) => {
setContent(content);
setOwner(content ? owner : null);
}, []);
return (
<ActivityPanelSettingsContext.Provider value={{ settingsContent, settingsOwner, setSettingsContent }}>
{children}
</ActivityPanelSettingsContext.Provider>
);
}
export function useActivityPanelSettings() {
const context = useContext(ActivityPanelSettingsContext);
if (!context) {
throw new Error(
"useActivityPanelSettings must be used within ActivityPanelSettingsProvider"
);
}
return context;
}