Skip to content

Commit 1b4d8fd

Browse files
authored
chore(web): make sure that onTrackRef always set to latest prop value (#7049)
1 parent ad9d50b commit 1b4d8fd

File tree

4 files changed

+26
-37
lines changed

4 files changed

+26
-37
lines changed

packages/compass-web/sandbox/sandbox-logger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import createDebug from 'debug';
2-
import type { LogMessage } from '../src/logger-and-telemetry';
2+
import type { LogMessage } from '../src/logger';
33

44
const logging: LogMessage[] = ((globalThis as any).logging = []);
55

packages/compass-web/src/entrypoint.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,19 @@ import { TelemetryProvider } from '@mongodb-js/compass-telemetry/provider';
5151
import CompassConnections from '@mongodb-js/compass-connections';
5252
import { AtlasCloudConnectionStorageProvider } from './connection-storage';
5353
import { AtlasCloudAuthServiceProvider } from './atlas-auth-service';
54-
import type {
55-
TrackFunction,
56-
LogFunction,
57-
DebugFunction,
58-
} from './logger-and-telemetry';
59-
import { useCompassWebLoggerAndTelemetry } from './logger-and-telemetry';
54+
import type { LogFunction, DebugFunction } from './logger';
55+
import { useCompassWebLogger } from './logger';
6056
import { type TelemetryServiceOptions } from '@mongodb-js/compass-telemetry';
6157
import { WebWorkspaceTab as WelcomeWorkspaceTab } from '@mongodb-js/compass-welcome';
6258
import { useCompassWebPreferences } from './preferences';
6359
import { WorkspaceTab as DataModelingWorkspace } from '@mongodb-js/compass-data-modeling';
6460
import { DataModelStorageServiceProviderInMemory } from '@mongodb-js/compass-data-modeling/web';
6561

62+
export type TrackFunction = (
63+
event: string,
64+
properties: Record<string, any>
65+
) => void;
66+
6667
const WithAtlasProviders: React.FC = ({ children }) => {
6768
return (
6869
<AtlasCloudAuthServiceProvider>
@@ -269,7 +270,7 @@ const CompassWeb = ({
269270
onFailToLoadConnections,
270271
}: CompassWebProps) => {
271272
const appRegistry = useRef(new AppRegistry());
272-
const logger = useCompassWebLoggerAndTelemetry({
273+
const logger = useCompassWebLogger({
273274
onLog,
274275
onDebug,
275276
});
@@ -285,6 +286,7 @@ const CompassWeb = ({
285286
: initialAutoconnectId ?? undefined;
286287

287288
const onTrackRef = useRef(onTrack);
289+
onTrackRef.current = onTrack;
288290

289291
const telemetryOptions = useRef<TelemetryServiceOptions>({
290292
sendTrack: (event: string, properties: Record<string, any> | undefined) => {

packages/compass-web/src/logger-and-telemetry.spec.tsx renamed to packages/compass-web/src/logger.spec.tsx

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,22 @@ import {
44
LoggerProvider,
55
useLogger,
66
} from '@mongodb-js/compass-logging/provider';
7-
import type {
8-
DebugFunction,
9-
LogFunction,
10-
TrackFunction,
11-
} from './logger-and-telemetry';
12-
import { useCompassWebLoggerAndTelemetry } from './logger-and-telemetry';
13-
import { renderHook, cleanup } from '@mongodb-js/testing-library-compass';
7+
import type { DebugFunction, LogFunction } from './logger';
8+
import { useCompassWebLogger } from './logger';
9+
import { renderHook } from '@mongodb-js/testing-library-compass';
1410
import Sinon from 'sinon';
1511
import { expect } from 'chai';
1612

17-
describe('useCompassWebLoggerAndTelemetry', function () {
18-
function renderLoggerAndTelemetryHook({
13+
describe('useCompassWebLogger', function () {
14+
function renderLoggerHook({
1915
onDebug,
2016
onLog,
2117
}: {
22-
onTrack?: TrackFunction;
2318
onDebug?: DebugFunction;
2419
onLog?: LogFunction;
2520
} = {}) {
2621
const Wrapper: React.FunctionComponent = ({ children }) => {
27-
const logger = useCompassWebLoggerAndTelemetry({
22+
const logger = useCompassWebLogger({
2823
onDebug,
2924
onLog,
3025
});
@@ -39,20 +34,17 @@ describe('useCompassWebLoggerAndTelemetry', function () {
3934
);
4035
}
4136

42-
beforeEach(cleanup);
43-
4437
it('should call callback props when logger is called', function () {
4538
const logs: any[] = [];
4639
const onLog = Sinon.stub().callsFake((entry) => logs.push(entry));
47-
const onTrack = Sinon.stub();
4840
const onDebug = Sinon.stub();
4941

5042
const {
51-
result: { current: loggerAndTelemetry },
52-
} = renderLoggerAndTelemetryHook({ onLog, onTrack, onDebug });
43+
result: { current: logger },
44+
} = renderLoggerHook({ onLog, onDebug });
5345

54-
loggerAndTelemetry.debug('foo bar');
55-
loggerAndTelemetry.log.info(mongoLogId(123), 'Ctx', 'msg', { attr: 1 });
46+
logger.debug('foo bar');
47+
logger.log.info(mongoLogId(123), 'Ctx', 'msg', { attr: 1 });
5648

5749
expect(onDebug).to.have.been.calledOnceWith('TEST', 'foo bar');
5850
expect(logs).to.deep.equal([

packages/compass-web/src/logger-and-telemetry.tsx renamed to packages/compass-web/src/logger.tsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ import { PassThrough } from 'stream';
44
import { mongoLogId } from '@mongodb-js/compass-logging/provider';
55
import { useRef } from 'react';
66

7-
export type TrackFunction = (
8-
event: string,
9-
properties: Record<string, any>
10-
) => void;
11-
127
export type LogMessage = {
138
id: number;
149
t: { $date: string };
@@ -53,7 +48,7 @@ function createCompassWebDebugger(
5348
);
5449
}
5550

56-
export class CompassWebLoggerAndTelemetry implements Logger {
51+
export class CompassWebLogger implements Logger {
5752
log: Logger['log'];
5853

5954
debug: Debugger;
@@ -81,19 +76,19 @@ export class CompassWebLoggerAndTelemetry implements Logger {
8176
mongoLogId = mongoLogId;
8277

8378
createLogger = (component: string): Logger => {
84-
return new CompassWebLoggerAndTelemetry(component, this.callbackRef);
79+
return new CompassWebLogger(component, this.callbackRef);
8580
};
8681
}
8782

88-
export function useCompassWebLoggerAndTelemetry(callbacks: {
83+
export function useCompassWebLogger(callbacks: {
8984
onLog?: LogFunction;
9085
onDebug?: DebugFunction;
91-
}): CompassWebLoggerAndTelemetry {
86+
}): CompassWebLogger {
9287
const callbackRef = useRef(callbacks);
9388
callbackRef.current = callbacks;
94-
const loggerAndTelemetryRef = useRef<CompassWebLoggerAndTelemetry>();
89+
const loggerAndTelemetryRef = useRef<CompassWebLogger>();
9590
if (!loggerAndTelemetryRef.current) {
96-
loggerAndTelemetryRef.current = new CompassWebLoggerAndTelemetry(
91+
loggerAndTelemetryRef.current = new CompassWebLogger(
9792
'COMPASS-WEB',
9893
callbackRef
9994
);

0 commit comments

Comments
 (0)