forked from Echo3ToEcho7/app-catalog
-
Notifications
You must be signed in to change notification settings - Fork 193
/
TeamBoardApp.js
129 lines (112 loc) · 4.44 KB
/
TeamBoardApp.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
(function() {
var Ext = window.Ext4 || window.Ext;
Ext.define('Rally.apps.teamboard.TeamBoardApp', {
extend: 'Rally.app.App',
requires: [
'Rally.apps.teamboard.TeamBoardCard',
'Rally.apps.teamboard.TeamBoardColumn',
'Rally.apps.teamboard.TeamBoardProjectRecordsLoader',
'Rally.apps.teamboard.TeamBoardSettings',
'Rally.apps.teamboard.TeamBoardUtil',
'Rally.data.ModelFactory',
'Rally.ui.cardboard.CardBoard',
'Rally.ui.cardboard.plugin.Scrollable'
],
config: {
defaultSettings: {
cardFields: 'OfficeLocation,Phone',
groupBy: 'Role'
}
},
cls: 'team-board-app',
settingsScope: 'workspace',
launch: function() {
Rally.data.ModelFactory.getModel({
type: 'User',
scope: this,
success: this._onUserModelLoaded
});
},
getSettingsFields: function() {
return Rally.apps.teamboard.TeamBoardSettings.getFields(this.userModel);
},
_onUserModelLoaded: function(userModel) {
this.userModel = userModel;
Rally.apps.teamboard.TeamBoardProjectRecordsLoader.load(this.getSetting('teamOids'), this._onTeamsLoaded, this);
},
_showNoDataMessage: function(msg){
this.add({
xtype: 'component',
cls: 'no-data',
html: '<p>' + msg + '</p>'
});
},
_onTeamsLoaded: function(teams) {
if (teams.length === 0) {
this._showNoDataMessage('You do not have access to any of the teams chosen to be shown in this app');
this._publishComponentReady();
return;
}
this.add(this._getCardboardConfig(teams));
},
_getCardboardConfig: function(teams) {
var groupBy = this.getSetting('groupBy');
groupBy = groupBy && this.userModel.hasField(groupBy) ? groupBy : undefined;
return {
xtype: 'rallycardboard',
attribute: 'TeamMemberships',
cardConfig: {
xtype: 'rallyteamboardcard',
fields: this.getSetting('cardFields') ? this.getSetting('cardFields').split(',') : [],
groupBy: groupBy
},
context: this.getContext(),
columns: Ext.Array.map(teams, function(team) {
return {
xtype: 'rallyteamcolumn',
columnHeaderConfig: {
xtype: 'rallycardboardcolumnheader',
headerTpl: Rally.apps.teamboard.TeamBoardUtil.linkToAdminPage(team, team.get('_refObjectName'), 'users')
},
groupBy: groupBy,
value: team.get('_ref')
};
}, this),
listeners: {
load: this._onBoardLoad,
toggle: this._publishContentUpdated,
recordupdate: this._publishContentUpdatedNoDashboardLayout,
recordcreate: this._publishContentUpdatedNoDashboardLayout,
scope: this
},
plugins: [
{
ptype: 'rallyscrollablecardboard',
containerEl: this.getEl()
}
],
readOnly: !Rally.environment.getContext().getPermissions().isWorkspaceOrSubscriptionAdmin(),
storeConfig: {
filters: [ {property: 'Disabled', value: 'false'} ],
sorters: [ {direction: 'ASC', property: 'FirstName'} ]
},
types: ['User']
};
},
_onBoardLoad: function(){
this._publishContentUpdated();
this._publishComponentReady();
},
_publishComponentReady: function() {
if (Rally.BrowserTest) {
Rally.BrowserTest.publishComponentReady(this);
}
},
_publishContentUpdated: function() {
this.fireEvent('contentupdated');
},
_publishContentUpdatedNoDashboardLayout: function() {
this.fireEvent('contentupdated', {dashboardLayout: false});
}
});
})();