mirror of
https://github.com/Chevron7Locked/kima-hub.git
synced 2026-06-19 07:37:17 +00:00
d396d8b9ef
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.
42 lines
1.4 KiB
TypeScript
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;
|
|
}
|