iterative/vscode-dvc

View on GitHub
webview/src/util/array.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import isEqual from 'lodash.isequal'
import { BaseType } from './objects'
import { DraggedInfo } from '../shared/components/dragDrop/dragDropSlice'

export const pushIf = <T>(array: T[], condition: boolean, elements: T[]) =>
  condition && array.push(...elements)

export const keepEqualOldReferencesInArray = <T extends BaseType>(
  oldArray: T[],
  newArray: T[]
): T[] =>
  newArray.map(item => oldArray.find(oldItem => isEqual(oldItem, item)) || item)

export const changeOrderWithDraggedInfo = (
  order: string[],
  dragged: DraggedInfo
) => {
  if (!dragged) {
    return order
  }
  const newOrder = [...order]
  const draggedIndex = Number.parseInt(dragged.itemIndex, 10)

  newOrder.splice(draggedIndex, 1)
  newOrder.push(dragged.itemId)
  return newOrder
}