@@ -44,7 +44,10 @@ import {
4444import { PreferencesProvider } from 'compass-preferences-model/provider' ;
4545import type { AllPreferences } from 'compass-preferences-model/provider' ;
4646import FieldStorePlugin from '@mongodb-js/compass-field-store' ;
47- import { AtlasServiceProvider } from '@mongodb-js/atlas-service/provider' ;
47+ import {
48+ AtlasServiceProvider ,
49+ useAtlasServiceContext ,
50+ } from '@mongodb-js/atlas-service/provider' ;
4851import { AtlasAiServiceProvider } from '@mongodb-js/compass-generative-ai/provider' ;
4952import { LoggerProvider } from '@mongodb-js/compass-logging/provider' ;
5053import { TelemetryProvider } from '@mongodb-js/compass-telemetry/provider' ;
@@ -55,9 +58,22 @@ import type { LogFunction, DebugFunction } from './logger';
5558import { useCompassWebLogger } from './logger' ;
5659import { type TelemetryServiceOptions } from '@mongodb-js/compass-telemetry' ;
5760import { WebWorkspaceTab as WelcomeWorkspaceTab } from '@mongodb-js/compass-welcome' ;
61+ import { WorkspaceTab as MyQueriesWorkspace } from '@mongodb-js/compass-saved-aggregations-queries' ;
5862import { useCompassWebPreferences } from './preferences' ;
5963import { DataModelingWorkspaceTab as DataModelingWorkspace } from '@mongodb-js/compass-data-modeling' ;
6064import { DataModelStorageServiceProviderInMemory } from '@mongodb-js/compass-data-modeling/web' ;
65+ import {
66+ CompassFavoriteQueryStorage ,
67+ CompassPipelineStorage ,
68+ CompassRecentQueryStorage ,
69+ } from '@mongodb-js/my-queries-storage' ;
70+ import {
71+ PipelineStorageProvider ,
72+ FavoriteQueryStorageProvider ,
73+ RecentQueryStorageProvider ,
74+ type FavoriteQueryStorageAccess ,
75+ type RecentQueryStorageAccess ,
76+ } from '@mongodb-js/my-queries-storage/provider' ;
6177
6278export type TrackFunction = (
6379 event : string ,
@@ -78,6 +94,57 @@ const WithAtlasProviders: React.FC = ({ children }) => {
7894 ) ;
7995} ;
8096
97+ const WithStorageProviders : React . FC < { orgId : string ; projectId : string } > = ( {
98+ children,
99+ orgId,
100+ projectId,
101+ } ) => {
102+ const atlasService = useAtlasServiceContext ( ) ;
103+ console . log ( 'atlasService' , atlasService ) ;
104+ const authenticatedFetch = atlasService . authenticatedFetch ;
105+ // TODO: use non-hardcoded endpoint
106+ const getResourceUrl = atlasService . tempEndpoint ;
107+ const pipelineStorage = useRef (
108+ new CompassPipelineStorage ( {
109+ orgId,
110+ projectId,
111+ getResourceUrl,
112+ authenticatedFetch,
113+ } )
114+ ) ;
115+ const favoriteQueryStorage = useRef < FavoriteQueryStorageAccess > ( {
116+ getStorage ( options ) {
117+ return new CompassFavoriteQueryStorage ( {
118+ ...options ,
119+ orgId,
120+ projectId,
121+ getResourceUrl,
122+ authenticatedFetch,
123+ } ) ;
124+ } ,
125+ } ) ;
126+ const recentQueryStorage = useRef < RecentQueryStorageAccess > ( {
127+ getStorage ( options ) {
128+ return new CompassRecentQueryStorage ( {
129+ ...options ,
130+ orgId,
131+ projectId,
132+ getResourceUrl,
133+ authenticatedFetch,
134+ } ) ;
135+ } ,
136+ } ) ;
137+ return (
138+ < PipelineStorageProvider value = { pipelineStorage . current } >
139+ < FavoriteQueryStorageProvider value = { favoriteQueryStorage . current } >
140+ < RecentQueryStorageProvider value = { recentQueryStorage . current } >
141+ { children }
142+ </ RecentQueryStorageProvider >
143+ </ FavoriteQueryStorageProvider >
144+ </ PipelineStorageProvider >
145+ ) ;
146+ } ;
147+
81148type CompassWorkspaceProps = Pick <
82149 React . ComponentProps < typeof WorkspacesPlugin > ,
83150 'initialWorkspaceTabs' | 'onActiveWorkspaceTabChange'
@@ -178,6 +245,7 @@ function CompassWorkspace({
178245 CollectionsWorkspaceTab ,
179246 CollectionWorkspace ,
180247 DataModelingWorkspace ,
248+ MyQueriesWorkspace ,
181249 ] }
182250 >
183251 < CollectionTabsProvider
@@ -358,63 +426,65 @@ const CompassWeb = ({
358426 < LoggerProvider value = { logger } >
359427 < TelemetryProvider options = { telemetryOptions . current } >
360428 < WithAtlasProviders >
361- < DataModelStorageServiceProviderInMemory >
362- < AtlasCloudConnectionStorageProvider
363- orgId = { orgId }
364- projectId = { projectId }
365- >
366- < CompassConnections
367- appName = { appName ?? 'Compass Web' }
368- onFailToLoadConnections = { onFailToLoadConnections }
369- onExtraConnectionDataRequest = { ( ) => {
370- return Promise . resolve ( [ { } , null ] as [
371- Record < string , unknown > ,
372- null
373- ] ) ;
374- } }
375- onAutoconnectInfoRequest = { ( connectionStore ) => {
376- if ( autoconnectId ) {
377- return connectionStore . loadAll ( ) . then (
378- ( connections ) => {
379- return connections . find (
380- ( connectionInfo ) =>
381- connectionInfo . id === autoconnectId
382- ) ;
383- } ,
384- ( err ) => {
385- const { log, mongoLogId } = logger ;
386- log . warn (
387- mongoLogId ( 1_001_000_329 ) ,
388- 'Compass Web' ,
389- 'Could not load connections when trying to autoconnect' ,
390- { err : err . message }
391- ) ;
392- return undefined ;
393- }
394- ) ;
395- }
396- return Promise . resolve ( undefined ) ;
397- } }
429+ < WithStorageProviders orgId = { orgId } projectId = { projectId } >
430+ < DataModelStorageServiceProviderInMemory >
431+ < AtlasCloudConnectionStorageProvider
432+ orgId = { orgId }
433+ projectId = { projectId }
398434 >
399- < CompassInstanceStorePlugin >
400- < FieldStorePlugin >
401- < WithConnectionsStore >
402- < CompassWorkspace
403- initialWorkspaceTabs = {
404- initialWorkspaceTabsRef . current
405- }
406- onActiveWorkspaceTabChange = {
407- onActiveWorkspaceTabChange
435+ < CompassConnections
436+ appName = { appName ?? 'Compass Web' }
437+ onFailToLoadConnections = { onFailToLoadConnections }
438+ onExtraConnectionDataRequest = { ( ) => {
439+ return Promise . resolve ( [ { } , null ] as [
440+ Record < string , unknown > ,
441+ null
442+ ] ) ;
443+ } }
444+ onAutoconnectInfoRequest = { ( connectionStore ) => {
445+ if ( autoconnectId ) {
446+ return connectionStore . loadAll ( ) . then (
447+ ( connections ) => {
448+ return connections . find (
449+ ( connectionInfo ) =>
450+ connectionInfo . id === autoconnectId
451+ ) ;
452+ } ,
453+ ( err ) => {
454+ const { log, mongoLogId } = logger ;
455+ log . warn (
456+ mongoLogId ( 1_001_000_329 ) ,
457+ 'Compass Web' ,
458+ 'Could not load connections when trying to autoconnect' ,
459+ { err : err . message }
460+ ) ;
461+ return undefined ;
408462 }
409- onOpenConnectViaModal = { onOpenConnectViaModal }
410- > </ CompassWorkspace >
411- </ WithConnectionsStore >
412- </ FieldStorePlugin >
413- < CompassGenerativeAIPlugin projectId = { projectId } />
414- </ CompassInstanceStorePlugin >
415- </ CompassConnections >
416- </ AtlasCloudConnectionStorageProvider >
417- </ DataModelStorageServiceProviderInMemory >
463+ ) ;
464+ }
465+ return Promise . resolve ( undefined ) ;
466+ } }
467+ >
468+ < CompassInstanceStorePlugin >
469+ < FieldStorePlugin >
470+ < WithConnectionsStore >
471+ < CompassWorkspace
472+ initialWorkspaceTabs = {
473+ initialWorkspaceTabsRef . current
474+ }
475+ onActiveWorkspaceTabChange = {
476+ onActiveWorkspaceTabChange
477+ }
478+ onOpenConnectViaModal = { onOpenConnectViaModal }
479+ > </ CompassWorkspace >
480+ </ WithConnectionsStore >
481+ </ FieldStorePlugin >
482+ < CompassGenerativeAIPlugin projectId = { projectId } />
483+ </ CompassInstanceStorePlugin >
484+ </ CompassConnections >
485+ </ AtlasCloudConnectionStorageProvider >
486+ </ DataModelStorageServiceProviderInMemory >
487+ </ WithStorageProviders >
418488 </ WithAtlasProviders >
419489 </ TelemetryProvider >
420490 </ LoggerProvider >
0 commit comments