Skip to content

Commit b4604a6

Browse files
authored
chore(context-menu): context menu feature flag (#7074)
Add and propagate a feature flag
1 parent 220add3 commit b4604a6

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed

packages/compass-components/src/components/compass-components-provider.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ type CompassComponentsProviderProps = {
3434
* zIndex for the stacked elements (modal, toast, popover)
3535
*/
3636
stackedElementsZIndex?: number;
37+
38+
/**
39+
* Set to disable context menus in the application.
40+
*/
41+
disableContextMenus?: boolean;
3742
} & {
3843
onNextGuideGue?: GuideCueProviderProps['onNext'];
3944
onNextGuideCueGroup?: GuideCueProviderProps['onNextGroup'];
@@ -100,6 +105,7 @@ export const CompassComponentsProvider = ({
100105
utmMedium,
101106
stackedElementsZIndex,
102107
popoverPortalContainer: _popoverPortalContainer,
108+
disableContextMenus,
103109
...signalHooksProviderProps
104110
}: CompassComponentsProviderProps) => {
105111
const darkMode = useDarkMode(_darkMode);
@@ -136,7 +142,7 @@ export const CompassComponentsProvider = ({
136142
>
137143
<SignalHooksProvider {...signalHooksProviderProps}>
138144
<ConfirmationModalArea>
139-
<ContextMenuProvider>
145+
<ContextMenuProvider disabled={disableContextMenus}>
140146
<ToastArea>
141147
{typeof children === 'function'
142148
? children({

packages/compass-components/src/components/context-menu.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ export type { ContextMenuItem } from '@mongodb-js/compass-context-menu';
1313

1414
export function ContextMenuProvider({
1515
children,
16+
disabled,
1617
}: {
1718
children: React.ReactNode;
19+
disabled?: boolean;
1820
}) {
1921
return (
20-
<ContextMenuProviderBase menuWrapper={ContextMenu}>
22+
<ContextMenuProviderBase disabled={disabled} menuWrapper={ContextMenu}>
2123
{children}
2224
</ContextMenuProviderBase>
2325
);

packages/compass-context-menu/src/context-menu-provider.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,23 @@ import React, {
66
createContext,
77
useContext,
88
} from 'react';
9+
910
import type { ContextMenuContextType, ContextMenuState } from './types';
10-
import type { EnhancedMouseEvent } from './context-menu-content';
11-
import { getContextMenuContent } from './context-menu-content';
11+
import {
12+
getContextMenuContent,
13+
type EnhancedMouseEvent,
14+
} from './context-menu-content';
1215

1316
export const ContextMenuContext = createContext<ContextMenuContextType | null>(
1417
null
1518
);
1619

1720
export function ContextMenuProvider({
21+
disabled = false,
1822
children,
1923
menuWrapper,
2024
}: {
25+
disabled?: boolean;
2126
children: React.ReactNode;
2227
menuWrapper: React.ComponentType<{
2328
menu: ContextMenuState & { close: () => void };
@@ -47,7 +52,7 @@ export function ContextMenuProvider({
4752

4853
useEffect(() => {
4954
// Don't set up event listeners if we have a parent context
50-
if (parentContext) return;
55+
if (parentContext || disabled) return;
5156

5257
function handleContextMenu(event: MouseEvent) {
5358
event.preventDefault();
@@ -76,7 +81,7 @@ export function ContextMenuProvider({
7681
document.removeEventListener('contextmenu', handleContextMenu);
7782
window.removeEventListener('resize', handleClosingEvent);
7883
};
79-
}, [handleClosingEvent, parentContext]);
84+
}, [disabled, handleClosingEvent, parentContext]);
8085

8186
const value = useMemo(
8287
() => ({

packages/compass-preferences-model/src/feature-flags.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export type FeatureFlags = {
2626
enableDataModeling: boolean;
2727
enableIndexesGuidanceExp: boolean;
2828
showIndexesGuidanceVariant: boolean;
29+
enableContextMenus: boolean;
2930
};
3031

3132
export const featureFlags: Required<{
@@ -140,4 +141,11 @@ export const featureFlags: Required<{
140141
'Used to check if user is in the Indexes Guidance Experiment Variant',
141142
},
142143
},
144+
145+
enableContextMenus: {
146+
stage: 'development',
147+
description: {
148+
short: 'Enable context (right-click) menus',
149+
},
150+
},
143151
};

packages/compass/src/app/components/home.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import type { WorkspaceTab } from '@mongodb-js/compass-workspaces';
3333
import { ConnectionStorageProvider } from '@mongodb-js/connection-storage/provider';
3434
import { ConnectionImportExportProvider } from '@mongodb-js/compass-connection-import-export';
3535
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
36+
import { usePreference } from 'compass-preferences-model/provider';
3637

3738
resetGlobalCSS();
3839

@@ -169,6 +170,7 @@ export default function ThemedHome(
169170
props: HomeWithConnectionsProps
170171
): ReturnType<typeof HomeWithConnections> {
171172
const track = useTelemetry();
173+
const disableContextMenus = !usePreference('enableContextMenus');
172174
return (
173175
<CompassComponentsProvider
174176
onNextGuideGue={(cue) => {
@@ -204,6 +206,7 @@ export default function ThemedHome(
204206
onSignalClose={(id) => {
205207
track('Signal Closed', { id });
206208
}}
209+
disableContextMenus={disableContextMenus}
207210
>
208211
{({ darkMode, portalContainerRef }) => {
209212
return (

0 commit comments

Comments
 (0)