extension/src/experiments/model/status/index.ts
import { Color } from './colors'
import { Experiment, isRunning } from '../../webview/contract'
export const MAX_SELECTED_EXPERIMENTS = 7
export const UNSELECTED = 0
export type ColoredStatus = Record<string, Color | typeof UNSELECTED>
const getSelectedCount = (status: ColoredStatus): number =>
Object.values(status).filter(Boolean).length
export const canSelect = (status: ColoredStatus): boolean =>
getSelectedCount(status) < MAX_SELECTED_EXPERIMENTS
export const tooManySelected = (experiments: Experiment[]): boolean =>
experiments.length > MAX_SELECTED_EXPERIMENTS
const getEpoch = (timestamp: string | null | undefined) =>
new Date(timestamp || 0).getTime()
const compareTimestamps = (a: Experiment, b: Experiment) =>
getEpoch(b.Created) - getEpoch(a.Created)
export const limitToMaxSelected = (experiments: Experiment[]) =>
[...experiments]
.sort((a, b) => {
if (a.executorStatus === b.executorStatus) {
return compareTimestamps(a, b)
}
return isRunning(a.executorStatus) ? -1 : 1
})
.slice(0, MAX_SELECTED_EXPERIMENTS)