Skip to content
Snippets Groups Projects
Commit 4efcd17d authored by Omkar Deshpande's avatar Omkar Deshpande Committed by Jesse Baker
Browse files

Issue #3509483 by omkar-pd, larowlan: Don't show the component preview if the context menu is open

parent 76c239bd
Branches 1.0.x
No related tags found
1 merge request!737#3509483: Don't show the component preview if the context menu is open
Pipeline #436470 failed
...@@ -27,9 +27,12 @@ function removeJsPrefix(input: string): string { ...@@ -27,9 +27,12 @@ function removeJsPrefix(input: string): string {
return input; return input;
} }
const ExposedJsComponent: React.FC<{ component: JSComponent }> = (props) => { const ExposedJsComponent: React.FC<{
component: JSComponent;
onMenuOpenChange?: (open: boolean) => void;
}> = (props) => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { component } = props; const { component, onMenuOpenChange } = props;
const machineName = removeJsPrefix(component.id); const machineName = removeJsPrefix(component.id);
const { data: jsComponent, error } = useGetCodeComponentQuery(machineName); const { data: jsComponent, error } = useGetCodeComponentQuery(machineName);
const layout = useAppSelector(selectLayout); const layout = useAppSelector(selectLayout);
...@@ -90,7 +93,12 @@ const ExposedJsComponent: React.FC<{ component: JSComponent }> = (props) => { ...@@ -90,7 +93,12 @@ const ExposedJsComponent: React.FC<{ component: JSComponent }> = (props) => {
</> </>
); );
return ( return (
<ContextMenu.Root key={component.id}> <ContextMenu.Root
key={component.id}
onOpenChange={(open) => {
onMenuOpenChange?.(open);
}}
>
<ContextMenu.Trigger> <ContextMenu.Trigger>
<SidebarNode <SidebarNode
title={component.name} title={component.name}
...@@ -102,6 +110,7 @@ const ExposedJsComponent: React.FC<{ component: JSComponent }> = (props) => { ...@@ -102,6 +110,7 @@ const ExposedJsComponent: React.FC<{ component: JSComponent }> = (props) => {
</UnifiedMenu.Content> </UnifiedMenu.Content>
} }
selected={machineName === selectedComponent} selected={machineName === selectedComponent}
onMenuOpenChange={onMenuOpenChange}
/> />
</ContextMenu.Trigger> </ContextMenu.Trigger>
<UnifiedMenu.Content <UnifiedMenu.Content
......
...@@ -27,6 +27,7 @@ const ListItem: React.FC<{ ...@@ -27,6 +27,7 @@ const ListItem: React.FC<{
}> = (props) => { }> = (props) => {
const { item, type } = props; const { item, type } = props;
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const [isMenuOpen, setIsMenuOpen] = useState(false);
const layout = useAppSelector(selectLayout); const layout = useAppSelector(selectLayout);
const [previewingComponent, setPreviewingComponent] = useState< const [previewingComponent, setPreviewingComponent] = useState<
XBComponent | Section XBComponent | Section
...@@ -73,7 +74,9 @@ const ListItem: React.FC<{ ...@@ -73,7 +74,9 @@ const ListItem: React.FC<{
}; };
const handleMouseEnter = (component: XBComponent | Section) => { const handleMouseEnter = (component: XBComponent | Section) => {
setPreviewingComponent(component); if (!isMenuOpen) {
setPreviewingComponent(component);
}
}; };
const renderItem = () => { const renderItem = () => {
...@@ -83,7 +86,10 @@ const ListItem: React.FC<{ ...@@ -83,7 +86,10 @@ const ListItem: React.FC<{
) { ) {
return ( return (
<div> <div>
<ExposedJsComponent component={item as JSComponent} /> <ExposedJsComponent
component={item as JSComponent}
onMenuOpenChange={setIsMenuOpen}
/>
</div> </div>
); );
} }
...@@ -123,7 +129,7 @@ const ListItem: React.FC<{ ...@@ -123,7 +129,7 @@ const ListItem: React.FC<{
className={styles.componentPreviewTooltipContent} className={styles.componentPreviewTooltipContent}
> >
<Theme> <Theme>
{previewingComponent && ( {previewingComponent && !isMenuOpen && (
<ComponentPreview componentListItem={previewingComponent} /> <ComponentPreview componentListItem={previewingComponent} />
)} )}
</Theme> </Theme>
......
...@@ -38,6 +38,7 @@ const SidebarNode = React.forwardRef< ...@@ -38,6 +38,7 @@ const SidebarNode = React.forwardRef<
dropdownMenuContent?: React.ReactNode; dropdownMenuContent?: React.ReactNode;
open?: boolean; open?: boolean;
className?: string; className?: string;
onMenuOpenChange?: (open: boolean) => void;
} & React.HTMLAttributes<HTMLDivElement> } & React.HTMLAttributes<HTMLDivElement>
>( >(
( (
...@@ -50,6 +51,7 @@ const SidebarNode = React.forwardRef< ...@@ -50,6 +51,7 @@ const SidebarNode = React.forwardRef<
dropdownMenuContent = null, dropdownMenuContent = null,
open = false, open = false,
className, className,
onMenuOpenChange,
...props ...props
}, },
ref, ref,
...@@ -90,7 +92,11 @@ const SidebarNode = React.forwardRef< ...@@ -90,7 +92,11 @@ const SidebarNode = React.forwardRef<
</Flex> </Flex>
</Flex> </Flex>
{dropdownMenuContent && ( {dropdownMenuContent && (
<DropdownMenu.Root> <DropdownMenu.Root
onOpenChange={(open) => {
onMenuOpenChange?.(open);
}}
>
<DropdownMenu.Trigger> <DropdownMenu.Trigger>
<button aria-label="Open contextual menu"> <button aria-label="Open contextual menu">
<span className={styles.dots}> <span className={styles.dots}>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment