/
RequestDetail.coffee
143 lines (111 loc) · 5.38 KB
/
RequestDetail.coffee
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
Controller = require './Controller'
Request = require '../models/Request'
RequestDeployStatus = require '../models/RequestDeployStatus'
Tasks = require '../collections/Tasks'
RequestTasks = require '../collections/RequestTasks'
RequestHistoricalTasks = require '../collections/RequestHistoricalTasks'
RequestDeployHistory = require '../collections/RequestDeployHistory'
RequestHistory = require '../collections/RequestHistory'
RequestDetailView = require '../views/request'
ExpandableTableSubview = require '../views/expandableTableSubview'
SimpleSubview = require '../views/simpleSubview'
class RequestDetailController extends Controller
templates:
header: require '../templates/requestDetail/requestHeader'
requestHistoryMsg: require '../templates/requestDetail/requestHistoryMsg'
stats: require '../templates/requestDetail/requestStats'
activeTasks: require '../templates/requestDetail/requestActiveTasks'
scheduledTasks: require '../templates/requestDetail/requestScheduledTasks'
# Subview templates
taskHistory: require '../templates/requestDetail/requestHistoricalTasks'
deployHistory: require '../templates/requestDetail/requestDeployHistory'
requestHistory: require '../templates/requestDetail/requestHistory'
initialize: ({@requestId}) ->
@title @requestId
#
# Data stuff
#
@models.request = new Request id: @requestId
@models.activeDeployStats = new RequestDeployStatus
requestId: @requestId
deployId: undefined
@collections.activeTasks = new RequestTasks [],
requestId: @requestId
state: 'active'
@collections.scheduledTasks = new Tasks [],
requestId: @requestId
state: 'scheduled'
@collections.requestHistory = new RequestHistory [], {@requestId}
@collections.taskHistory = new RequestHistoricalTasks [], {@requestId}
@collections.deployHistory = new RequestDeployHistory [], {@requestId}
#
# Subviews
#
@subviews.header = new SimpleSubview
model: @models.request
template: @templates.header
# would have used header subview for this info,
# but header expects a request model that
# no longer exists if a request is deleted
@subviews.requestHistoryMsg = new SimpleSubview
collection: @collections.requestHistory
template: @templates.requestHistoryMsg
@subviews.stats = new SimpleSubview
model: @models.activeDeployStats
template: @templates.stats
@subviews.activeTasks = new SimpleSubview
collection: @collections.activeTasks
template: @templates.activeTasks
@subviews.scheduledTasks = new SimpleSubview
collection: @collections.scheduledTasks
template: @templates.scheduledTasks
extraRenderData: (subView) =>
{ request: @models.request.toJSON() }
@subviews.taskHistory = new ExpandableTableSubview
collection: @collections.taskHistory
template: @templates.taskHistory
@subviews.deployHistory = new ExpandableTableSubview
collection: @collections.deployHistory
template: @templates.deployHistory
@subviews.requestHistory = new ExpandableTableSubview
collection: @collections.requestHistory
template: @templates.requestHistory
#
# The stats stuff depends on info we get from @models.request
#
@models.request.on 'sync', =>
activeDeploy = @models.request.get 'activeDeploy'
if activeDeploy?.id? and not @models.activeDeployStats.deployId
@models.activeDeployStats.deployId = activeDeploy.id
@models.activeDeployStats.fetch()
#
# Main view & stuff
#
@setView new RequestDetailView _.extend {@requestId, @subviews},
model: @models.request
@refresh()
app.showView @view
refresh: ->
requestFetch = @models.request.fetch()
requestFetch.error =>
# ignore 404 so we can still display info about
# deleted requests (show in `requestHistoryMsg`)
@ignore404
app.caughtError()
if @models.activeDeployStats.deployId?
@models.activeDeployStats.fetch().error @ignore404
@collections.activeTasks.fetch().error @ignore404
@collections.scheduledTasks.fetch().error @ignore404
@collections.scheduledTasks.fetch({reset: true}).error @ignore404
if @collections.requestHistory.currentPage is 1
requestHistoryFetch = @collections.requestHistory.fetch()
requestHistoryFetch.error => @ignore404
requestFetch.error =>
requestHistoryFetch.done =>
if @collections.requestHistory.length is 0
app.router.notFound()
if @collections.taskHistory.currentPage is 1
@collections.taskHistory.fetch().error @ignore404
if @collections.deployHistory.currentPage is 1
@collections.deployHistory.fetch().error @ignore404
module.exports = RequestDetailController