iterative/vscode-dvc

View on GitHub
extension/src/experiments/model/decorationProvider.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { EventEmitter, FileDecoration, ThemeColor, Uri } from 'vscode'
import { DecoratableTreeItemScheme, getDecoratableUri } from '../../tree'
import { BaseDecorationProvider } from '../../tree/decorationProvider'

export class DecorationProvider extends BaseDecorationProvider {
  private static DecorationFiltered: FileDecoration = {
    color: new ThemeColor('gitDecoration.ignoredResourceForeground'),
    tooltip: 'Filtered'
  }

  private errors = new Set<string>()
  private filtered = new Set<string>()

  constructor(decorationsChanged?: EventEmitter<Uri[]>) {
    super(DecoratableTreeItemScheme.EXPERIMENTS, decorationsChanged)
  }

  public provideFileDecoration(uri: Uri): FileDecoration | undefined {
    if (this.errors.has(uri.fsPath)) {
      return DecorationProvider.DecorationError
    }
    if (this.filtered.has(uri.fsPath)) {
      return DecorationProvider.DecorationFiltered
    }
  }

  public setState(
    labels: string[],
    filtered: Set<string>,
    errors: Set<string>
  ) {
    const urisToUpdate: Uri[] = []

    for (const label of labels) {
      urisToUpdate.push(
        getDecoratableUri(label, DecoratableTreeItemScheme.EXPERIMENTS)
      )
    }

    this.filtered = filtered
    this.errors = errors
    this.decorationsChanged.fire(urisToUpdate)
  }
}