Skip to content

Commit

Permalink
chore: moved usage of compass-preferences-model to compass-preference…
Browse files Browse the repository at this point in the history
…s-model/provider COMPASS-7559 (#5371)

* chore: moved usage of compass-preferences-model to compass-preferences-model/provider

* chore: remove capMaxTimeMSAtPreferenceLimit from main export

* chore: moved initial value derivation back to Preferences class, outside of Storage

* chore: fixes the tests with broken import
  • Loading branch information
himanshusinghs authored Jan 24, 2024
1 parent 849955d commit d941c66
Show file tree
Hide file tree
Showing 60 changed files with 105 additions and 124 deletions.
3 changes: 1 addition & 2 deletions configs/eslint-config-compass/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ module.exports = {
// restrictedProviderImport('@mongodb-js/my-queries-storage'),
// TODO(COMPASS-7412): enable when possible
// restrictedProviderImport('@mongodb-js/atlas-service'),
// TODO(COMPASS-7559): enable when possible
// restrictedProviderImport('compass-preferences-model'),
restrictedProviderImport('compass-preferences-model'),
{
paths: require('module').builtinModules,
message: 'Using Node.js built-in modules in plugins is not allowed.',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
import { changeStageDisabled } from '../../modules/pipeline-builder/stage-editor';
import type { StoreStage } from '../../modules/pipeline-builder/stage-editor';
import { getInsightForStage } from '../../utils/insights';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import { createSearchIndex } from '../../modules/search-indexes';
import type { ServerEnvironment } from '../../modules/env';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
MERGE_STAGE_PREVIEW_TEXT,
OUT_STAGE_PREVIEW_TEXT,
} from '../../../constants';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const bannerStyles = css({
alignItems: 'center',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
useDarkMode,
} from '@mongodb-js/compass-components';
import { connect } from 'react-redux';
import { useIsAIFeatureEnabled } from 'compass-preferences-model';
import { useIsAIFeatureEnabled } from 'compass-preferences-model/provider';

import PipelineHeader from './pipeline-header';
import PipelineOptions from './pipeline-options';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React, { useRef, useEffect, useCallback } from 'react';
import { openToast } from '@mongodb-js/compass-components';
import { GenerativeAIInput } from '@mongodb-js/compass-generative-ai';
import { connect } from 'react-redux';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

import {
changeAIPromptText,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import PipelineStages from './pipeline-stages';
import PipelineActions from './pipeline-actions';
import SavedPipelines from '../../saved-pipelines/saved-pipelines';
import type { RootState } from '../../../modules';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const containerStyles = css({
display: 'flex',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { openCreateIndexModal } from '../../../modules/insights';
import {
usePreference,
useIsAIFeatureEnabled,
} from 'compass-preferences-model';
} from 'compass-preferences-model/provider';
import { showInput as showAIInput } from '../../../modules/pipeline-builder/pipeline-ai';

const containerStyles = css({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
Icon,
} from '@mongodb-js/compass-components';
import { AIExperienceEntry } from '@mongodb-js/compass-generative-ai';
import { useIsAIFeatureEnabled } from 'compass-preferences-model';
import { useIsAIFeatureEnabled } from 'compass-preferences-model/provider';

import type { RootState } from '../../../modules';
import { editPipeline } from '../../../modules/workspace';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import type { RootState } from '../../../modules';
import { collationStringChanged } from '../../../modules/collation-string';
import { maxTimeMSChanged } from '../../../modules/max-time-ms';
import { DEFAULT_MAX_TIME_MS } from '../../../constants';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const pipelineOptionsContainerStyles = css({
paddingTop: spacing[1],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import PipelineExtraSettings from './pipeline-extra-settings';
import type { RootState } from '../../../modules';
import { getIsPipelineInvalidFromBuilderState } from '../../../modules/pipeline-builder/builder-helpers';
import { confirmNewPipeline } from '../../../modules/is-new-pipeline-confirm';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import { hiddenOnNarrowPipelineToolbarStyles } from '../pipeline-toolbar-container';
import ModifySourceBanner from '../../modify-source-banner';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '@mongodb-js/compass-components';

import { DEFAULT_SAMPLE_SIZE, DEFAULT_LARGE_LIMIT } from '../../constants';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const aggregationCommentModeId = 'aggregation-comment-mode';
const aggregationCommentModeDescriptionId =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
MERGE_STAGE_PREVIEW_TEXT,
OUT_STAGE_PREVIEW_TEXT,
} from '../../constants';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const stagePreviewStyles = css({
display: 'flex',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { enableFocusMode } from '../../modules/focus-mode';
import OptionMenu from './option-menu';
import type { StoreStage } from '../../modules/pipeline-builder/stage-editor';
import { getInsightForStage } from '../../utils/insights';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import type { ServerEnvironment } from '../../modules/env';
import { createSearchIndex } from '../../modules/search-indexes';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useCallback } from 'react';
import { withPreferences } from 'compass-preferences-model';
import { withPreferences } from 'compass-preferences-model/provider';
import { connect } from 'react-redux';

import {
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-aggregations/src/plugin.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import Aggregations from './components/aggregations';
import { ConfirmationModalArea } from '@mongodb-js/compass-components';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import type { ConfigureStoreOptions } from './stores/store';

export const AggregationsPlugin: React.FunctionComponent<
Expand Down
4 changes: 2 additions & 2 deletions packages/compass-aggregations/test/configure-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {
import { activateAggregationsPlugin } from '../src/stores/store';
import { mockDataService } from './mocks/data-service';
import type { DataService } from '../src/modules/data-service';
import { defaultPreferencesInstance } from 'compass-preferences-model';
import { ReadOnlyPreferenceAccess } from 'compass-preferences-model/provider';
import { createNoopLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';

export default function configureStore(
Expand All @@ -30,7 +30,7 @@ export default function configureStore(
{
dataService,
instance: {} as any,
preferences: defaultPreferencesInstance,
preferences: new ReadOnlyPreferenceAccess(),
globalAppRegistry: new AppRegistry(),
localAppRegistry: new AppRegistry(),
workspaces: {} as any,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
import type { Signal } from '@mongodb-js/compass-components';
import React from 'react';
import toNS from 'mongodb-ns';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import CollectionHeaderActions from '../collection-header-actions';
import CollectionStats from '../collection-stats';
import type { CollectionState } from '../../modules/collection-tab';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import type {
ConnectionInfo,
ConnectionStorage,
} from '@mongodb-js/connection-storage/renderer';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const TOAST_TIMEOUT_MS = 5000;
const tableStyles = css({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
ConnectionShortInfo,
CommonImportExportState,
} from './common';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

type ExportConnectionsState = CommonImportExportState<ConnectionShortInfo> & {
removeSecrets: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { useConnections } from '../stores/connections-store';
import { cloneDeep } from 'lodash';
import ConnectionList from './connection-list/connection-list';
import { LegacyConnectionsModal } from './legacy-connections-modal';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

type ConnectFn = typeof connect;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { adjustConnectionOptionsBeforeConnect } from '@mongodb-js/connection-for
import { useEffectOnChange, useToast } from '@mongodb-js/compass-components';
import { createLoggerAndTelemetry } from '@mongodb-js/compass-logging';
import type { UserPreferences } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const { debug, mongoLogId, log } = createLoggerAndTelemetry(
'COMPASS-CONNECTIONS'
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/add-data-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
css,
} from '@mongodb-js/compass-components';
import type { MenuAction } from '@mongodb-js/compass-components';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const tooltipContainerStyles = css({
display: 'flex',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

import DocumentList from './document-list';

Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/crud-toolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import type { MenuAction, Signal } from '@mongodb-js/compass-components';
import { ViewSwitcher } from './view-switcher';
import type { DocumentView } from '../stores/crud-store';
import { AddDataMenu } from './add-data-menu';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import UpdateMenu from './update-data-menu';
import DeleteMenu from './delete-data-menu';
import { QueryBar } from '@mongodb-js/compass-query-bar';
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/delete-data-menu.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { Icon, Button, Tooltip } from '@mongodb-js/compass-components';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

type DeleteMenuButtonProps = {
isWritable: boolean;
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/editable-document.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import type { Document } from 'hadron-document';
import HadronDocument from 'hadron-document';
import { DocumentList, css } from '@mongodb-js/compass-components';
import { withPreferences } from 'compass-preferences-model';
import { withPreferences } from 'compass-preferences-model/provider';

import { documentStyles, documentContentStyles } from './readonly-document';
import { getInsightsForDocument } from '../utils';
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/readonly-document.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { DocumentList, css, spacing } from '@mongodb-js/compass-components';
import type Document from 'hadron-document';
import type { TypeCastMap } from 'hadron-type-checker';
import { withPreferences } from 'compass-preferences-model';
import { withPreferences } from 'compass-preferences-model/provider';
import { getInsightsForDocument } from '../utils';
type BSONObject = TypeCastMap['Object'];

Expand Down
2 changes: 1 addition & 1 deletion packages/compass-crud/src/components/update-data-menu.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { Icon, Button, Tooltip } from '@mongodb-js/compass-components';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

type UpdateMenuButtonProps = {
isWritable: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import type {
NamespaceItemProps,
} from './tree-item';
import type { Actions } from './constants';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const CollectionIcon: React.FunctionComponent<{
type: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
type SerializedExplainPlan,
} from '../stores/explain-plan-modal-store';
import { connect } from 'react-redux';
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';

const defaultFormatter = (_: unknown) => String(_);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import React, { useCallback } from 'react';
import { connect } from 'react-redux';
import { withPreferences } from 'compass-preferences-model';
import {
withPreferences,
usePreference,
} from 'compass-preferences-model/provider';
import {
Button,
ErrorSummary,
Expand All @@ -17,7 +20,6 @@ import {
SegmentedControl,
SegmentedControlOption,
} from '@mongodb-js/compass-components';
import { usePreference } from 'compass-preferences-model';

import type { RootState } from '../../modules';
import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useMemo } from 'react';
import { connect } from 'react-redux';
import { IndexKeysBadge } from '@mongodb-js/compass-components';
import { withPreferences } from 'compass-preferences-model';
import { withPreferences } from 'compass-preferences-model/provider';

import type { RootState } from '../../modules';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React, { useEffect, useMemo } from 'react';
import { connect } from 'react-redux';
import type { Document } from 'mongodb';
import type { SearchIndex, SearchIndexStatus } from 'mongodb-data-service';
import { withPreferences } from 'compass-preferences-model';
import { withPreferences } from 'compass-preferences-model/provider';
import { useOpenWorkspace } from '@mongodb-js/compass-workspaces/provider';
import { BadgeVariant } from '@mongodb-js/compass-components';
import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { usePreference } from 'compass-preferences-model';
import { usePreference } from 'compass-preferences-model/provider';
import { redactConnectionString } from 'mongodb-connection-string-url';

export function maybeProtectConnectionString(
Expand Down
5 changes: 0 additions & 5 deletions packages/compass-preferences-model/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
export type { THEMES } from './preferences-schema';
export { getSettingDescription } from './preferences-schema';
export { featureFlags } from './feature-flags';

import type {
UserPreferences,
Expand All @@ -25,12 +23,9 @@ export {
getExampleConfigFile,
} from './global-config';
export type { ParsedGlobalPreferencesResult } from './global-config';
export { usePreference, withPreferences } from './react';
export { capMaxTimeMSAtPreferenceLimit } from './maxtimems';
export {
setupPreferencesAndUser,
getActiveUser,
useIsAIFeatureEnabled,
isAIFeatureEnabled,
} from './utils';
export type { User, UserStorage } from './storage';
Expand Down
49 changes: 0 additions & 49 deletions packages/compass-preferences-model/src/preferences-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -868,47 +868,6 @@ function featureFlagToPreferenceDefinition(
};
}

export function makeComputePreferencesValuesAndStates(
values: AllPreferences,
states: Partial<Record<string, PreferenceState>> = {}
) {
return function _computePreferenceValuesAndStates() {
const originalValues = { ...values };
const originalStates = { ...states };

function deriveValue<K extends keyof AllPreferences>(
key: K
): {
value: AllPreferences[K];
state: PreferenceState;
} {
const descriptor = allPreferencesProps[key];
if (!descriptor.deriveValue) {
return { value: originalValues[key], state: originalStates[key] };
}
return (descriptor.deriveValue as DeriveValueFunction<AllPreferences[K]>)(
// `as unknown` to work around TS bug(?) https://twitter.com/addaleax/status/1572191664252551169
(k) =>
(k as unknown) === key ? originalValues[k] : deriveValue(k).value,
(k) =>
(k as unknown) === key ? originalStates[k] : deriveValue(k).state
);
}

for (const key of Object.keys(allPreferencesProps)) {
// awkward IIFE to make typescript understand that `key` is the *same* key
// in each loop iteration
(<K extends keyof AllPreferences>(key: K) => {
const result = deriveValue(key);
values[key] = result.value;
if (result.state !== undefined) states[key] = result.state;
})(key as keyof AllPreferences);
}

return { values, states };
};
}

export function getPreferencesValidator() {
const preferencesPropsValidator = Object.fromEntries(
Object.entries(storedUserPreferencesProps).map(([key, { validator }]) => [
Expand All @@ -930,14 +889,6 @@ export function getDefaultsForStoredPreferences(): StoredPreferences {
);
}

export function getInitialValuesForStoredPreferences() {
const computeValuesAndStates = makeComputePreferencesValuesAndStates(
getDefaultsForStoredPreferences()
);

return computeValuesAndStates().values;
}

export function getSettingDescription<
Name extends Exclude<keyof AllPreferences, keyof InternalUserPreferences>
>(
Expand Down
Loading

0 comments on commit d941c66

Please sign in to comment.