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