forked from ibi-group/datatools-ui
/
index.js
104 lines (99 loc) · 2.85 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// @flow
import type {Feed, FeedVersion, Project} from '../../types'
import type {ManagerUserState, ProjectsState} from '../../types/reducers'
export function findProjectByFeedSource (
allProjects: ?Array<Project>,
feedSourceId: string
): ?Project {
return allProjects
? allProjects.find(p => {
if (!p.feedSources) {
return false
}
return p.feedSources.findIndex(fs => fs.id === feedSourceId) !== -1
})
: null
}
export function getChartMax (maxValue: number): number {
return maxValue < 100 ? maxValue : Math.ceil(maxValue / 100) * 100
}
export function getChartPeriod (maxValue: number): number {
return maxValue > 20000
? 5000
: maxValue > 1000
? 1000
: maxValue > 300
? 100
: maxValue > 100
? 30
: maxValue > 20
? 10
: 3
}
export function isEditingDisabled (
user: ManagerUserState,
feedSource: Feed,
project: Project
): boolean {
// If any of the args or null,
return (
!user ||
!feedSource ||
!project ||
// or the user does not have permission, editing is disabled.
!user.permissions ||
!user.permissions.hasFeedPermission(
project.organizationId,
project.id,
feedSource.id,
'edit-gtfs'
)
)
}
/**
* Helper function to get the index of various things from the project state.
*/
export function getIndexesFromFeed ({
errorType,
feedSourceId,
feedVersionId,
projectId,
state
}: {
errorType?: string,
feedSourceId?: string,
feedVersionId?: FeedVersion,
projectId: string,
state: ProjectsState
}): {
errorIndex: number,
projectIndex: number,
sourceIndex: number,
versionIndex: number
} {
const projectIndex = state.all.findIndex(p => p.id === projectId)
if (!feedSourceId || projectIndex < 0) {
return { projectIndex, sourceIndex: -2, versionIndex: -2, errorIndex: -2 }
}
const project = state.all[projectIndex]
if (!project.feedSources) {
return { projectIndex, sourceIndex: -2, versionIndex: -2, errorIndex: -2 }
}
const sourceIndex = project.feedSources.findIndex(s => s.id === feedSourceId)
if (!feedVersionId || sourceIndex < 0 || !project.feedSources) {
return { projectIndex, sourceIndex, versionIndex: -2, errorIndex: -2 }
}
const feedSource = project.feedSources[sourceIndex]
if (!feedSource.feedVersions) {
return { projectIndex, sourceIndex, versionIndex: -2, errorIndex: -2 }
}
const versionIndex = feedSource.feedVersions.findIndex(v => v.id === feedVersionId)
if (!errorType || !feedSource.feedVersions || versionIndex < 0) {
return { projectIndex, sourceIndex, versionIndex, errorIndex: -2 }
}
const feedVersion = feedSource.feedVersions[versionIndex]
const errorIndex = feedVersion.validationResult.error_counts.findIndex(
e => e.type === errorType
)
return { errorIndex, projectIndex, sourceIndex, versionIndex }
}