Memoize context menu provider
This commit is contained in:
parent
2aaf3c34c8
commit
2072f9554e
1 changed files with 55 additions and 40 deletions
|
@ -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 && (
|
||||
|
|
Reference in a new issue