Skip to content

Commit 9cdd3c1

Browse files
authored
feat: active connections filter COMPASS-7772 (#5785)
1 parent 2a7e780 commit 9cdd3c1

File tree

13 files changed

+1009
-479
lines changed

13 files changed

+1009
-479
lines changed

packages/compass-app-stores/src/stores/instance-store.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,18 @@ export function createInstancesStore(
233233
onTopologyDescriptionChanged
234234
);
235235

236-
on(globalAppRegistry, 'sidebar-expand-database', (dbName: string) => {
237-
void instance.databases.get(dbName)?.fetchCollections({ dataService });
238-
});
236+
on(
237+
globalAppRegistry,
238+
'sidebar-expand-database',
239+
(connectionId: string, databaseId: string) => {
240+
if (connectionId !== instanceConnectionId) {
241+
return;
242+
}
243+
void instance.databases
244+
.get(databaseId)
245+
?.fetchCollections({ dataService });
246+
}
247+
);
239248

240249
on(
241250
globalAppRegistry,

packages/compass-connections-navigation/src/connections-navigation-tree.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
databaseItemActions,
2727
} from './item-actions';
2828

29-
interface ConnectionsNavigationTreeProps {
29+
export interface ConnectionsNavigationTreeProps {
3030
connections: Connection[];
3131
expanded?: Record<string, false | Record<string, boolean>>;
3232
onConnectionExpand?(id: string, isExpanded: boolean): void;
@@ -188,7 +188,7 @@ const ConnectionsNavigationTree: React.FunctionComponent<
188188
const MCContainer = css({
189189
display: 'flex',
190190
flex: '1 0 auto',
191-
height: `calc(100% - ${spacing[3]}px)`,
191+
height: `calc(100% - ${spacing[1600]}px - ${spacing[200]}px)`,
192192
});
193193

194194
const SCContainer = css({

packages/compass-connections-navigation/src/tree-data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import type {
1212
type Collection = {
1313
_id: string;
1414
name: string;
15-
type: string;
15+
type: 'view' | 'collection' | 'timeseries';
16+
sourceName: string | null;
17+
pipeline: unknown[];
1618
};
1719

1820
type Status = 'initial' | 'fetching' | 'refreshing' | 'ready' | 'error';
@@ -228,7 +230,7 @@ const databaseToItems = ({
228230
id: `${connectionId}.${id}`, // id is the namespace of the collection, so includes db as well
229231
level: level + 1,
230232
name,
231-
type: type as 'collection' | 'view' | 'timeseries',
233+
type,
232234
setSize: collectionsLength,
233235
posInSet: collectionIndex + 1,
234236
colorCode,

packages/compass-sidebar/src/components/legacy/navigation-items.spec.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ function renderNavigationItems(
3131
}}
3232
showCreateDatabaseAction={true}
3333
isPerformanceTabSupported={true}
34-
onFilterChange={() => {
35-
/* noop */
36-
}}
3734
{...props}
3835
/>
3936
</WorkspacesProvider>

packages/compass-sidebar/src/components/legacy/navigation-items.tsx

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useMemo } from 'react';
1+
import React, { useCallback, useMemo, useState } from 'react';
22
import { connect } from 'react-redux';
33
import {
44
useHoverState,
@@ -23,9 +23,8 @@ import {
2323
withPreferences,
2424
} from 'compass-preferences-model/provider';
2525
import type { ItemAction } from '@mongodb-js/compass-components';
26-
import DatabaseCollectionFilter from '../database-collection-filter';
26+
import NavigationItemsFilter from '../navigation-items-filter';
2727
import SidebarDatabasesNavigation from './sidebar-databases-navigation';
28-
import { changeFilterRegex } from '../../modules/databases';
2928
import type { RootState } from '../../modules';
3029
import {
3130
useOpenWorkspace,
@@ -40,12 +39,12 @@ const navigationItem = css({
4039
cursor: 'pointer',
4140
color: 'var(--item-color)',
4241
border: 'none',
43-
height: spacing[5],
42+
height: spacing[800],
4443
position: 'relative',
4544

4645
'& .item-action-controls': {
4746
marginLeft: 'auto',
48-
marginRight: spacing[1],
47+
marginRight: spacing[100],
4948
},
5049

5150
'&:hover .item-background': {
@@ -88,16 +87,16 @@ const itemPlaceholderStyles = css({
8887
width: '100%',
8988
display: 'flex',
9089
alignItems: 'center',
91-
paddingLeft: spacing[3],
92-
height: spacing[5],
90+
paddingLeft: spacing[400],
91+
height: spacing[800],
9392
});
9493

9594
const itemWrapper = css({
9695
position: 'relative',
9796
display: 'flex',
9897
alignItems: 'center',
99-
height: spacing[5],
100-
gap: spacing[2],
98+
height: spacing[800],
99+
gap: spacing[200],
101100
zIndex: 1,
102101
});
103102

@@ -114,7 +113,7 @@ const itemButtonWrapper = css({
114113
display: 'flex',
115114
alignItems: 'center',
116115
minWidth: 0,
117-
paddingLeft: spacing[3],
116+
paddingLeft: spacing[400],
118117
});
119118

120119
const signalContainerStyles = css({
@@ -125,7 +124,7 @@ const navigationItemLabel = css({
125124
overflow: 'hidden',
126125
whiteSpace: 'nowrap',
127126
textOverflow: 'ellipsis',
128-
marginLeft: spacing[2],
127+
marginLeft: spacing[200],
129128
});
130129

131130
const navigationItemDisabledDarkModeStyles = css({
@@ -140,6 +139,10 @@ const navigationItemDisabledLightModeStyles = css({
140139
'--item-bg-color-hover': 'var(--item-bg-color)',
141140
});
142141

142+
const databaseCollectionsFilter = css({
143+
margin: `${spacing[100]}px ${spacing[400]}px`,
144+
});
145+
143146
const navigationItemActionIcons = css({ color: 'inherit' });
144147

145148
export function NavigationItem<Actions extends string>({
@@ -199,7 +202,7 @@ export function NavigationItem<Actions extends string>({
199202
return (
200203
<Tooltip
201204
align="right"
202-
spacing={spacing[3]}
205+
spacing={spacing[400]}
203206
isDisabled={!isButtonDisabled || !buttonDisabledMessage}
204207
trigger={({ children: tooltip, ...triggerProps }) => {
205208
const props = mergeProps(triggerProps, navigationItemProps);
@@ -257,7 +260,6 @@ export function NavigationItems({
257260
connectionInfo,
258261
showCreateDatabaseAction,
259262
isPerformanceTabSupported,
260-
onFilterChange,
261263
onAction,
262264
activeWorkspace,
263265
showTooManyCollectionsInsight = false,
@@ -266,7 +268,6 @@ export function NavigationItems({
266268
connectionInfo: ConnectionInfo;
267269
showCreateDatabaseAction: boolean;
268270
isPerformanceTabSupported: boolean;
269-
onFilterChange(regex: RegExp | null): void;
270271
onAction(actionName: string, ...rest: any[]): void;
271272
activeWorkspace?: WorkspaceTab;
272273
showTooManyCollectionsInsight?: boolean;
@@ -278,6 +279,14 @@ export function NavigationItems({
278279
} = useOpenWorkspace();
279280
const { hasWorkspacePlugin } = useWorkspacePlugins();
280281

282+
const [databasesFilterRegex, setDatabasesFilterRegex] =
283+
useState<RegExp | null>(null);
284+
285+
const onDatabasesFilterChange = useCallback(
286+
(filterRegex: RegExp | null) => setDatabasesFilterRegex(filterRegex),
287+
[setDatabasesFilterRegex]
288+
);
289+
281290
const databasesActions = useMemo(() => {
282291
const actions: ItemAction<DatabasesActions>[] = [
283292
{
@@ -356,10 +365,16 @@ export function NavigationItems({
356365
}}
357366
></ContentWithFallback>
358367

359-
<DatabaseCollectionFilter onFilterChange={onFilterChange} />
368+
<NavigationItemsFilter
369+
onFilterChange={onDatabasesFilterChange}
370+
title="Databases and collections filter"
371+
ariaLabel="Databases and collections filter"
372+
searchInputClassName={databaseCollectionsFilter}
373+
/>
360374
<SidebarDatabasesNavigation
361375
connectionInfo={connectionInfo}
362376
activeWorkspace={activeWorkspace ?? undefined}
377+
filterRegex={databasesFilterRegex}
363378
/>
364379
</>
365380
);
@@ -399,9 +414,7 @@ const mapStateToProps = (
399414
};
400415

401416
const MappedNavigationItems = withPreferences(
402-
connect(mapStateToProps, {
403-
onFilterChange: changeFilterRegex,
404-
})(NavigationItems),
417+
connect(mapStateToProps)(NavigationItems),
405418
['readOnly']
406419
);
407420

0 commit comments

Comments
 (0)