import React from 'react';
import type { LoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
import { createLoggerAndTelemetryLocator } from '@mongodb-js/compass-logging/provider';
import type AppRegistry from 'hadron-app-registry';
import { registerHadronPlugin } from 'hadron-app-registry';
import type { MongoDBInstance } from 'mongodb-instance-model';
import { InstanceContext } from './provider';
import { dataServiceLocator } from 'mongodb-data-service/provider';
import type { DataService } from 'mongodb-data-service';
import { createInstanceStore } from './stores';
interface InstanceStoreProviderProps {
children: React.ReactNode;
instance: MongoDBInstance;
}
function InstanceStoreProvider({
children,
instance,
}: InstanceStoreProviderProps) {
return (
{children}
);
}
export const CompassInstanceStorePlugin = registerHadronPlugin<
{ children: React.ReactNode },
{ logger: () => LoggerAndTelemetry; dataService: () => DataService }
>(
{
name: 'CompassInstanceStore',
component: InstanceStoreProvider as React.FunctionComponent<
Omit
>,
activate(
_: unknown,
{
dataService,
logger,
globalAppRegistry,
}: {
dataService: DataService;
logger: LoggerAndTelemetry;
globalAppRegistry: AppRegistry;
}
) {
const store = createInstanceStore({
dataService,
logger,
globalAppRegistry,
});
// TODO(COMPASS-7442): Remove the store register/register calls
globalAppRegistry.registerStore('App.InstanceStore', store);
return {
store,
deactivate: () => {
globalAppRegistry.deregisterStore('App.InstanceStore');
store.deactivate();
},
};
},
},
{
logger: createLoggerAndTelemetryLocator('COMPASS-INSTANCE-STORE'),
dataService: dataServiceLocator,
}
);