iterative/vscode-dvc

View on GitHub
extension/src/experiments/model/sortBy/quickPick.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { SortDefinition } from '.'
import { definedAndNonEmpty } from '../../../util/array'
import { quickPickManyValues, quickPickValue } from '../../../vscode/quickPick'
import { Title } from '../../../vscode/title'
import { Toast } from '../../../vscode/toast'
import { ColumnLike } from '../../columns/like'
import { pickFromColumnLikes } from '../../columns/quickPick'

export const pickSortToAdd = async (columns: ColumnLike[] | undefined) => {
  const picked = await pickFromColumnLikes(columns, {
    title: Title.SELECT_COLUMN_SORT
  })
  if (picked === undefined) {
    return
  }
  const descending = await quickPickValue<boolean>(
    [
      { label: 'Ascending', value: false },
      { label: 'Descending', value: true }
    ],
    { title: Title.SELECT_SORT_DIRECTION }
  )
  if (descending === undefined) {
    return
  }
  return {
    descending,
    path: picked.path
  }
}

export const pickSortsToRemove = (
  sorts: SortDefinition[]
): Thenable<SortDefinition[] | undefined> => {
  if (!definedAndNonEmpty(sorts)) {
    return Toast.showError('There are no sorts to remove.')
  }

  return quickPickManyValues<SortDefinition>(
    sorts.map(sort => ({
      description: sort.descending ? 'descending' : 'ascending',
      label: sort.path,
      value: sort
    })),
    {
      title: Title.SELECT_SORTS_TO_REMOVE
    }
  )
}