Skip to content

Commit

Permalink
Move Project/Version types; use tuple.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed Feb 1, 2018
1 parent 1c41d7c commit 41535d7
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 26 deletions.
Expand Up @@ -2,7 +2,8 @@ import * as PropTypes from 'prop-types'
import React, { ClassAttributes, ReactElement, StatelessComponent } from 'react'
import { Component } from 'react'
import {Icon, LockIcon} from '../../components'
import {FromProjectVersionType} from '../../utils/prop-types-util'
import { FromProjectVersion, FromProjectVersionType
} from '../../utils/prop-types-util'
import {
SortableContainer,
SortableElement,
Expand Down Expand Up @@ -62,18 +63,6 @@ export class Item extends Component<ItemProps, {}> {

const SortableItem = SortableElement(Item as any) as any

type EntityStatus = 'READONLY' | 'ACTIVE' | 'OBSOLETE'

interface VersionDto {
id: string
status: EntityStatus
}

interface FromProjectVersion {
projectSlug: string,
version: VersionDto
}

interface ItemsProps {
items: FromProjectVersion[]
removeVersion: (...args: any[]) => any
Expand Down
Expand Up @@ -21,7 +21,7 @@ import {
} from '../../actions/version-actions'
import {
ProjectType, LocaleType, FromProjectVersionType, processStatusType
} from '../../utils/prop-types-util.js'
} from '../../utils/prop-types-util'
import {isProcessEnded, IGNORE_CHECK, FUZZY} from '../../utils/EnumValueUtils'
import {getVersionLanguageSettingsUrl} from '../../utils/UrlHelper'
import {
Expand Down
Expand Up @@ -12,7 +12,7 @@ import Toggle from 'react-toggle'

import {
ProjectType, FromProjectVersionType
} from '../../utils/prop-types-util.js'
} from '../../utils/prop-types-util'

const DO_NOT_RENDER = undefined
const ALL = 'ALL'
Expand Down
@@ -1,3 +1,4 @@
import { tuple } from './tuple'

export const processStatusCodes = [
'NotAccepted', 'Waiting', 'Running', 'Finished', 'Cancelled', 'Failed']
Expand All @@ -7,27 +8,30 @@ const isStatusCodeEnded = statusCode => {
statusCode === 'Failed'
}
/**
* @param {{statusCode: string}} processStatus
* @returns {boolean} whether a process status represents an ended process
* @returns whether a process status represents an ended process
*/
export function isProcessEnded (processStatus) {
export function isProcessEnded (processStatus: {statusCode: string}) {
return processStatus && isStatusCodeEnded(processStatus.statusCode)
}

export const entityStatuses = ['READONLY', 'ACTIVE', 'OBSOLETE']
export const entityStatuses = tuple('READONLY', 'ACTIVE', 'OBSOLETE')
export type EntityStatus = typeof entityStatuses[number]

export function isEntityStatusReadOnly (status) {
return status === 'READONLY'
}

export const internalTMChoice = ['SelectNone', 'SelectAny', 'SelectSome']
export const internalTMChoice = tuple('SelectNone', 'SelectAny', 'SelectSome')
export type InternalTMChoice = typeof internalTMChoice[number]

/**
*
* @param {boolean} isFromAllProjects if we want to search TM from all projects
* @param {Array.<string>} fromVersions
* @returns {*}
* @param isFromAllProjects if we want to search TM from all projects
* @param fromVersions
*/
export function toInternalTMSource (isFromAllProjects, fromVersions) {
export function toInternalTMSource (isFromAllProjects: boolean, fromVersions: string[]): {
choice: InternalTMChoice;
projectIterationIds?: string[];
} {
if (isFromAllProjects) {
return {
choice: 'SelectAny'
Expand Down
@@ -1,5 +1,5 @@
import * as PropTypes from 'prop-types'
import {processStatusCodes, entityStatuses} from './EnumValueUtils'
import {processStatusCodes, entityStatuses, EntityStatus} from './EnumValueUtils'

export const entityStatusPropType = PropTypes.oneOf(entityStatuses)

Expand All @@ -8,6 +8,12 @@ export const versionDtoPropType = PropTypes.shape({
status: entityStatusPropType
})

export interface VersionDto {
id: string,
// TODO does entityStatusPropType implicitly have isRequired?
status?: EntityStatus,
}

export const ProjectType = PropTypes.shape({
id: PropTypes.string.isRequired,
status: PropTypes.string.isRequired,
Expand All @@ -26,6 +32,11 @@ export const FromProjectVersionType = PropTypes.shape({
version: versionDtoPropType.isRequired
})

export interface FromProjectVersion {
projectSlug: string,
version: VersionDto
}

export const processStatusCodeType = PropTypes.oneOf(processStatusCodes)

export const processStatusType = PropTypes.shape({
Expand Down
23 changes: 23 additions & 0 deletions server/zanata-frontend/src/app/utils/tuple.ts
@@ -0,0 +1,23 @@
/* tslint:disable:max-line-length */

// TypeScript wizardry thanks to jcalz:
// https://stackoverflow.com/a/45486495/14379
// https://gist.github.com/jcalz/381562d282ebaa9b41217d1b31e2c211
export type Lit = string | number | boolean | undefined | null | void | {};

// infers a tuple type for up to twelve values (add more here if you need them)
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit, H extends Lit, I extends Lit, J extends Lit, K extends Lit, L extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L): [A, B, C, D, E, F, G, H, I, J, K, L];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit, H extends Lit, I extends Lit, J extends Lit, K extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K): [A, B, C, D, E, F, G, H, I, J, K];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit, H extends Lit, I extends Lit, J extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J): [A, B, C, D, E, F, G, H, I, J];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit, H extends Lit, I extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I): [A, B, C, D, E, F, G, H, I];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit, H extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): [A, B, C, D, E, F, G, H];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit, G extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F, g: G): [A, B, C, D, E, F, G];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit, F extends Lit>(a: A, b: B, c: C, d: D, e: E, f: F): [A, B, C, D, E, F];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit, E extends Lit>(a: A, b: B, c: C, d: D, e: E): [A, B, C, D, E];
export function tuple<A extends Lit, B extends Lit, C extends Lit, D extends Lit>(a: A, b: B, c: C, d: D): [A, B, C, D];
export function tuple<A extends Lit, B extends Lit, C extends Lit>(a: A, b: B, c: C): [A, B, C];
export function tuple<A extends Lit, B extends Lit>(a: A, b: B): [A, B];
export function tuple<A extends Lit>(a: A): [A];
export function tuple(...args: any[]): any[] {
return args;
}

0 comments on commit 41535d7

Please sign in to comment.