Skip to content

Commit a09702c

Browse files
authored
chore(my-queries): make feature flag ready for saving user data COMPASS-9657 (#7264)
* make feature flag ready for saving user data * didn't understand it before but now should be better * fixes * unnecessary * put entrypoint back * more * fix * working w aggs * preferences schema * check * run checks * providers * don't need them? * package lock * put back package upgrades * take out storage providers until actual implementation * checks
1 parent a779283 commit a09702c

File tree

12 files changed

+67
-36
lines changed

12 files changed

+67
-36
lines changed

package-lock.json

Lines changed: 10 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compass-aggregations/src/components/pipeline-toolbar/pipeline-header/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import {
88
InteractivePopover,
99
} from '@mongodb-js/compass-components';
1010
import { connect } from 'react-redux';
11+
import { usePreference } from 'compass-preferences-model/provider';
1112

1213
import PipelineStages from './pipeline-stages';
1314
import PipelineActions from './pipeline-actions';
1415
import SavedPipelines from '../../saved-pipelines/saved-pipelines';
1516
import type { RootState } from '../../../modules';
16-
import { usePipelineStorage } from '@mongodb-js/my-queries-storage/provider';
1717

1818
const containerStyles = css({
1919
display: 'flex',
@@ -110,9 +110,7 @@ export const PipelineHeader: React.FunctionComponent<PipelineHeaderProps> = ({
110110
isOptionsVisible,
111111
isOpenPipelineVisible,
112112
}) => {
113-
// TODO: remove direct check for storage existing, breaks single source of
114-
// truth rule and exposes services to UI, this breaks the rules for locators
115-
const isSavingAggregationsEnabled = !!usePipelineStorage();
113+
const isSavingAggregationsEnabled = usePreference('enableMyQueries');
116114
return (
117115
<div className={containerStyles} data-testid="pipeline-header">
118116
{isOpenPipelineVisible && isSavingAggregationsEnabled && (

packages/compass-aggregations/src/components/pipeline-toolbar/pipeline-settings/index.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { connect } from 'react-redux';
3-
import { Button, Icon, css, spacing } from '@mongodb-js/compass-components';
3+
import { Button, css, Icon, spacing } from '@mongodb-js/compass-components';
44
import { exportToLanguage } from '../../../modules/export-to-language';
55
import { SaveMenu } from './pipeline-menus';
66
import PipelineName from './pipeline-name';
@@ -10,7 +10,8 @@ import { getIsPipelineInvalidFromBuilderState } from '../../../modules/pipeline-
1010
import { confirmNewPipeline } from '../../../modules/is-new-pipeline-confirm';
1111
import { hiddenOnNarrowPipelineToolbarStyles } from '../pipeline-toolbar-container';
1212
import ModifySourceBanner from '../../modify-source-banner';
13-
import { usePipelineStorage } from '@mongodb-js/my-queries-storage/provider';
13+
14+
import { usePreference } from 'compass-preferences-model/provider';
1415

1516
const containerStyles = css({
1617
display: 'flex',
@@ -47,9 +48,7 @@ export const PipelineSettings: React.FunctionComponent<
4748
onExportToLanguage,
4849
onCreateNewPipeline,
4950
}) => {
50-
// TODO: remove direct check for storage existing, breaks single source of
51-
// truth rule and exposes services to UI, this breaks the rules for locators
52-
const enableSavedAggregationsQueries = !!usePipelineStorage();
51+
const enableSavedAggregationsQueries = usePreference('enableMyQueries');
5352
const isPipelineNameDisplayed =
5453
!editViewName && !!enableSavedAggregationsQueries;
5554

packages/compass-preferences-model/src/compass-web-preferences-access.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const editablePreferences: (keyof UserPreferences)[] = [
1818
'enableGenAIFeaturesAtlasOrg',
1919
'enableGenAIFeaturesAtlasProject',
2020
'enableDataModeling',
21+
'enableMyQueries',
2122
];
2223

2324
export class CompassWebPreferencesAccess implements PreferencesAccess {

packages/compass-preferences-model/src/preferences-schema.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export type UserConfigurablePreferences = PermanentFeatureFlags &
9292
enableExplainPlan: boolean;
9393
enableAtlasSearchIndexes: boolean;
9494
enableImportExport: boolean;
95+
enableMyQueries: boolean;
9596
enableAggregationBuilderRunPipeline: boolean;
9697
enableAggregationBuilderExtraOptions: boolean;
9798
enableGenAISampleDocumentPassing: boolean;
@@ -851,6 +852,18 @@ export const storedUserPreferencesProps: Required<{
851852
type: 'boolean',
852853
},
853854

855+
enableMyQueries: {
856+
ui: true,
857+
cli: true,
858+
global: true,
859+
description: {
860+
short:
861+
'Enable My Queries feature to save and manage favorite queries and aggregations',
862+
},
863+
validator: z.boolean().default(true),
864+
type: 'boolean',
865+
},
866+
854867
enableAggregationBuilderRunPipeline: {
855868
ui: true,
856869
cli: true,

packages/compass-query-bar/src/components/query-bar.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import {
1414
createAIPlaceholderHTMLPlaceholder,
1515
} from '@mongodb-js/compass-generative-ai';
1616
import { connect } from '../stores/context';
17-
import { useIsAIFeatureEnabled } from 'compass-preferences-model/provider';
17+
import {
18+
useIsAIFeatureEnabled,
19+
usePreference,
20+
} from 'compass-preferences-model/provider';
1821
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
1922

2023
import {
@@ -202,8 +205,11 @@ export const QueryBar: React.FunctionComponent<QueryBarProps> = ({
202205

203206
const favoriteQueryStorageAvailable = !!useFavoriteQueryStorageAccess();
204207
const recentQueryStorageAvailable = !!useRecentQueryStorageAccess();
208+
const isMyQueriesEnabled = usePreference('enableMyQueries');
205209
const enableSavedAggregationsQueries =
206-
favoriteQueryStorageAvailable && recentQueryStorageAvailable;
210+
favoriteQueryStorageAvailable &&
211+
recentQueryStorageAvailable &&
212+
isMyQueriesEnabled;
207213

208214
return (
209215
<form

packages/compass-sidebar/src/components/multiple-connections/navigation/navigation.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ export function Navigation({
102102
const { openMyQueriesWorkspace, openDataModelingWorkspace } =
103103
useOpenWorkspace();
104104
const isDataModelingEnabled = usePreference('enableDataModeling');
105+
const isMyQueriesEnabled = usePreference('enableMyQueries');
105106
return (
106107
<div>
107-
{hasWorkspacePlugin('My Queries') && (
108+
{hasWorkspacePlugin('My Queries') && isMyQueriesEnabled && (
108109
<NavigationItem
109110
onClick={openMyQueriesWorkspace}
110111
glyph="CurlyBraces"

packages/compass-web/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
"@mongodb-js/compass-indexes": "^5.71.1",
9090
"@mongodb-js/compass-logging": "^1.7.13",
9191
"@mongodb-js/compass-query-bar": "^8.73.1",
92+
"@mongodb-js/compass-saved-aggregations-queries": "^1.72.1",
9293
"@mongodb-js/compass-schema": "^6.73.1",
9394
"@mongodb-js/compass-schema-validation": "^6.72.1",
9495
"@mongodb-js/compass-sidebar": "^5.72.1",

packages/compass-web/sandbox/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React, { useCallback, useLayoutEffect, useRef } from 'react';
22
import ReactDOM from 'react-dom';
33
import {
4-
resetGlobalCSS,
5-
css,
64
Body,
5+
css,
76
openToast,
7+
resetGlobalCSS,
88
} from '@mongodb-js/compass-components';
99
import type { AllPreferences } from 'compass-preferences-model';
1010
import { CompassWeb } from '../src/index';
@@ -137,6 +137,7 @@ const App = () => {
137137
isAtlas && !!enableGenAIFeaturesAtlasOrg,
138138
optInGenAIFeatures: isAtlas && !!optInGenAIFeatures,
139139
enableDataModeling: true,
140+
enableMyQueries: false,
140141
}}
141142
onTrack={sandboxTelemetry.track}
142143
onDebug={sandboxLogger.debug}

packages/compass-web/src/entrypoint.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,20 @@ import WorkspacesPlugin, {
1515
WorkspacesProvider,
1616
} from '@mongodb-js/compass-workspaces';
1717
import {
18-
DatabasesWorkspaceTab,
1918
CollectionsWorkspaceTab,
19+
CreateNamespacePlugin,
20+
DatabasesWorkspaceTab,
21+
DropNamespacePlugin,
22+
RenameCollectionPlugin,
2023
} from '@mongodb-js/compass-databases-collections';
2124
import { CompassComponentsProvider, css } from '@mongodb-js/compass-components';
2225
import {
23-
WorkspaceTab as CollectionWorkspace,
2426
CollectionTabsProvider,
27+
WorkspaceTab as CollectionWorkspace,
2528
} from '@mongodb-js/compass-collection';
2629
import {
27-
CompassSidebarPlugin,
2830
AtlasClusterConnectionsOnlyProvider,
31+
CompassSidebarPlugin,
2932
} from '@mongodb-js/compass-sidebar';
3033
import CompassQueryBarPlugin from '@mongodb-js/compass-query-bar';
3134
import { CompassDocumentsPlugin } from '@mongodb-js/compass-crud';
@@ -40,13 +43,8 @@ import { CompassGlobalWritesPlugin } from '@mongodb-js/compass-global-writes';
4043
import { CompassGenerativeAIPlugin } from '@mongodb-js/compass-generative-ai';
4144
import ExplainPlanCollectionTabModal from '@mongodb-js/compass-explain-plan';
4245
import ExportToLanguageCollectionTabModal from '@mongodb-js/compass-export-to-language';
43-
import {
44-
CreateNamespacePlugin,
45-
DropNamespacePlugin,
46-
RenameCollectionPlugin,
47-
} from '@mongodb-js/compass-databases-collections';
48-
import { PreferencesProvider } from 'compass-preferences-model/provider';
4946
import type { AllPreferences } from 'compass-preferences-model/provider';
47+
import { PreferencesProvider } from 'compass-preferences-model/provider';
5048
import FieldStorePlugin from '@mongodb-js/compass-field-store';
5149
import { AtlasServiceProvider } from '@mongodb-js/atlas-service/provider';
5250
import { AtlasAiServiceProvider } from '@mongodb-js/compass-generative-ai/provider';
@@ -55,13 +53,14 @@ import { TelemetryProvider } from '@mongodb-js/compass-telemetry/provider';
5553
import CompassConnections from '@mongodb-js/compass-connections';
5654
import { AtlasCloudConnectionStorageProvider } from './connection-storage';
5755
import { AtlasCloudAuthServiceProvider } from './atlas-auth-service';
58-
import type { LogFunction, DebugFunction } from './logger';
56+
import type { DebugFunction, LogFunction } from './logger';
5957
import { useCompassWebLogger } from './logger';
6058
import { type TelemetryServiceOptions } from '@mongodb-js/compass-telemetry';
6159
import { WebWorkspaceTab as WelcomeWorkspaceTab } from '@mongodb-js/compass-welcome';
6260
import { useCompassWebPreferences } from './preferences';
6361
import { DataModelingWorkspaceTab as DataModelingWorkspace } from '@mongodb-js/compass-data-modeling';
6462
import { DataModelStorageServiceProviderInMemory } from '@mongodb-js/compass-data-modeling/web';
63+
import { WorkspaceTab as MyQueriesWorkspace } from '@mongodb-js/compass-saved-aggregations-queries';
6564
import { CompassAssistantProvider } from '@mongodb-js/compass-assistant';
6665
import { CompassAssistantDrawerWithConnections } from './compass-assistant-drawer';
6766
import { APP_NAMES_FOR_PROMPT } from '@mongodb-js/compass-assistant';
@@ -188,6 +187,7 @@ function CompassWorkspace({
188187
CollectionsWorkspaceTab,
189188
CollectionWorkspace,
190189
DataModelingWorkspace,
190+
MyQueriesWorkspace,
191191
]}
192192
>
193193
<CollectionTabsProvider
@@ -287,6 +287,7 @@ const CompassWeb = ({
287287
onDebug,
288288
});
289289
const preferencesAccess = useCompassWebPreferences(initialPreferences);
290+
// TODO (COMPASS-9565): My Queries feature flag will be used to conditionally provide storage providers
290291
const initialWorkspaceRef = useRef(initialWorkspace);
291292
const initialWorkspaceTabsRef = useRef(
292293
initialWorkspaceRef.current ? [initialWorkspaceRef.current] : []

0 commit comments

Comments
 (0)