Memoize context menu provider

This commit is contained in:
jeffvli 2023-07-24 14:40:03 -07:00
parent 2aaf3c34c8
commit 2072f9554e

View file

@ -83,7 +83,7 @@ const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const remote = isElectron() ? window.electron.remote : null; const remote = isElectron() ? window.electron.remote : null;
export interface ContextMenuProviderProps { export interface ContextMenuProviderProps {
children: React.ReactNode; children: ReactNode;
} }
export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => {
@ -107,9 +107,19 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => {
const handlePlayQueueAdd = usePlayQueueAdd(); const handlePlayQueueAdd = usePlayQueueAdd();
const openContextMenu = (args: OpenContextMenuProps) => { const openContextMenu = useCallback(
const { xPos, yPos, menuItems, data, type, tableApi, dataNodes, context, resetGridCache } = (args: OpenContextMenuProps) => {
args; const {
xPos,
yPos,
menuItems,
data,
type,
tableApi,
dataNodes,
context,
resetGridCache,
} = args;
const serverType = data[0]?.serverType || useAuthStore.getState().currentServer?.type; const serverType = data[0]?.serverType || useAuthStore.getState().currentServer?.type;
let validMenuItems = menuItems; let validMenuItems = menuItems;
@ -143,9 +153,11 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => {
yPos: calculatedYPos, yPos: calculatedYPos,
}); });
setOpened(true); setOpened(true);
}; },
[menuRect.height, menuRect.width, setCtx, viewport.height, viewport.width],
);
const closeContextMenu = () => { const closeContextMenu = useCallback(() => {
setOpened(false); setOpened(false);
setCtx({ setCtx({
data: [], data: [],
@ -156,7 +168,7 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => {
xPos: 0, xPos: 0,
yPos: 0, yPos: 0,
}); });
}; }, [setCtx]);
useContextMenuEvents({ useContextMenuEvents({
closeContextMenu, closeContextMenu,
@ -763,13 +775,16 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => {
const mergedRef = useMergedRef(ref, clickOutsideRef); const mergedRef = useMergedRef(ref, clickOutsideRef);
return ( const providerValue = useMemo(
<ContextMenuContext.Provider () => ({
value={{
closeContextMenu, closeContextMenu,
openContextMenu, openContextMenu,
}} }),
> [closeContextMenu, openContextMenu],
);
return (
<ContextMenuContext.Provider value={providerValue}>
<Portal> <Portal>
<AnimatePresence> <AnimatePresence>
{opened && ( {opened && (