forked from thoughtworks/build-your-own-radar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathradar.js
114 lines (95 loc) · 2.55 KB
/
radar.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
105
106
107
108
109
110
111
112
113
114
const MalformedDataError = require('../exceptions/malformedDataError')
const ExceptionMessages = require('../util/exceptionMessages')
const _ = {
map: require('lodash/map'),
uniqBy: require('lodash/uniqBy'),
sortBy: require('lodash/sortBy'),
}
const Radar = function () {
const config = require('../config')
const featureToggles = config().featureToggles
let self, quadrants, blipNumber, addingQuadrant, alternatives, currentSheetName, rings
blipNumber = 0
addingQuadrant = 0
quadrants = featureToggles.UIRefresh2022
? [
{ order: 'first', startAngle: 0 },
{ order: 'second', startAngle: -90 },
{ order: 'third', startAngle: 90 },
{ order: 'fourth', startAngle: -180 },
]
: [
{ order: 'first', startAngle: 90 },
{ order: 'second', startAngle: 0 },
{ order: 'third', startAngle: -90 },
{ order: 'fourth', startAngle: -180 },
]
alternatives = []
currentSheetName = ''
self = {}
rings = {}
function setNumbers(blips) {
blips.forEach(function (blip) {
++blipNumber
blip.setBlipText(blipNumber)
blip.setId(blipNumber)
})
}
self.addAlternative = function (sheetName) {
alternatives.push(sheetName)
}
self.getAlternatives = function () {
return alternatives
}
self.setCurrentSheet = function (sheetName) {
currentSheetName = sheetName
}
self.getCurrentSheet = function () {
return currentSheetName
}
self.addQuadrant = function (quadrant) {
if (addingQuadrant >= 4) {
throw new MalformedDataError(ExceptionMessages.TOO_MANY_QUADRANTS)
}
quadrants[addingQuadrant].quadrant = quadrant
setNumbers(quadrant.blips())
addingQuadrant++
}
self.addRings = function (allRings) {
rings = allRings
}
function allQuadrants() {
if (addingQuadrant < 4) {
throw new MalformedDataError(ExceptionMessages.LESS_THAN_FOUR_QUADRANTS)
}
return _.map(quadrants, 'quadrant')
}
function allBlips() {
return allQuadrants().reduce(function (blips, quadrant) {
return blips.concat(quadrant.blips())
}, [])
}
self.rings = function () {
if (featureToggles.UIRefresh2022) {
return rings
}
return _.sortBy(
_.map(
_.uniqBy(allBlips(), function (blip) {
return blip.ring().name()
}),
function (blip) {
return blip.ring()
},
),
function (ring) {
return ring.order()
},
)
}
self.quadrants = function () {
return quadrants
}
return self
}
module.exports = Radar