Skip to content

Commit bee7fbe

Browse files
committed
refactor TemporaryStateManager with interface
1 parent 064e02d commit bee7fbe

3 files changed

Lines changed: 16 additions & 5 deletions

File tree

src/features/views/envManagersView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
InternalEnvironmentManager,
1212
InternalPackageManager,
1313
} from '../../internal.api';
14-
import { TemporaryStateManager } from './temporaryStateManager';
14+
import { ITemporaryStateManager } from './temporaryStateManager';
1515
import {
1616
EnvInfoTreeItem,
1717
EnvManagerTreeItem,
@@ -37,7 +37,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
3737
private selected: Map<string, string> = new Map();
3838
private disposables: Disposable[] = [];
3939

40-
public constructor(public providers: EnvironmentManagers, private stateManager: TemporaryStateManager) {
40+
public constructor(public providers: EnvironmentManagers, private stateManager: ITemporaryStateManager) {
4141
this.treeView = window.createTreeView<EnvTreeItem>('env-managers', {
4242
treeDataProvider: this,
4343
});

src/features/views/projectView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ProjectViews } from '../../common/localize';
1414
import { createSimpleDebounce } from '../../common/utils/debounce';
1515
import { onDidChangeConfiguration } from '../../common/workspace.apis';
1616
import { EnvironmentManagers, PythonProjectManager } from '../../internal.api';
17-
import { TemporaryStateManager } from './temporaryStateManager';
17+
import { ITemporaryStateManager } from './temporaryStateManager';
1818
import {
1919
GlobalProjectItem,
2020
NoProjectEnvironment,
@@ -43,7 +43,7 @@ export class ProjectView implements TreeDataProvider<ProjectTreeItem> {
4343
public constructor(
4444
private envManagers: EnvironmentManagers,
4545
private projectManager: PythonProjectManager,
46-
private stateManager: TemporaryStateManager,
46+
private stateManager: ITemporaryStateManager,
4747
) {
4848
this.treeView = window.createTreeView<ProjectTreeItem>('python-projects', {
4949
treeDataProvider: this,

src/features/views/temporaryStateManager.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,23 @@ import { Disposable, Event, EventEmitter } from 'vscode';
22

33
const DEFAULT_TIMEOUT_MS = 2000;
44

5+
/**
6+
* Interface for managing temporary state on tree items.
7+
*/
8+
export interface ITemporaryStateManager {
9+
readonly onDidChangeState: Event<{ itemId: string; stateKey: string }>;
10+
setState(itemId: string, stateKey: string): void;
11+
clearState(itemId: string, stateKey: string): void;
12+
hasState(itemId: string, stateKey: string): boolean;
13+
updateContextValue(itemId: string, currentContext: string, stateKeys: string[], separator?: string): string;
14+
}
15+
516
/**
617
* Manages temporary state for tree items that auto-clears after a timeout.
718
* Useful for visual feedback like showing a checkmark after copying,
819
* or highlighting a recently selected environment.
920
*/
10-
export class TemporaryStateManager implements Disposable {
21+
export class TemporaryStateManager implements ITemporaryStateManager, Disposable {
1122
private activeItems: Map<string, Set<string>> = new Map();
1223
private timeouts: Map<string, NodeJS.Timeout> = new Map();
1324
private readonly _onDidChangeState = new EventEmitter<{ itemId: string; stateKey: string }>();

0 commit comments

Comments
 (0)