This repository was archived by the owner on Mar 4, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathemail.controller.js
135 lines (123 loc) · 4.08 KB
/
email.controller.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
130
131
132
133
134
135
import angular from 'angular'
(function () {
'use strict'
angular.module('tc.settings').controller('EmailSettingsController', EmailSettingsController)
EmailSettingsController.$inject = ['$rootScope', 'userData', 'ProfileService', 'UserPreferencesService', 'logger', 'CONSTANTS', 'toaster', '$q', '$scope']
function EmailSettingsController($rootScope, userData, ProfileService, UserPreferencesService, logger, CONSTANTS, toaster, $q, $scope) {
var vm = this
vm.loading = false
vm.saving = false
vm.isDirty = isDirty
vm.save = save
activate()
function activate() {
vm.newsletters = [
{
id: 'TOPCODER_NL_GEN',
name: 'General Newsletter',
desc: 'News summary from all tracks and programs',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_DESIGN',
name: 'Design Newsletter',
desc: 'Website, mobile, and product design; UI and UX',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_DEV',
name: 'Development Newsletter',
desc: 'Software architecture, component assembly, application development, and bug hunting',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_DATA',
name: 'Data Science Newsletter',
desc: 'Algorithm and data structures, statistical analysis',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_IOS',
name: 'iOS Community Newsletter',
desc: 'Mobile app design and development for iOS, with Swift emphasis',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_TCO',
name: 'TCO Newsletter',
desc: 'Our annual online and onsite tournament to celebrate and reward the community',
enabled: false,
dirty: false
},
{
id: 'TOPCODER_NL_PREDIX',
name: 'Predix Community Newsletter',
desc: 'Design and development on GE’s platform for the Industrial Internet of Things',
enabled: false,
dirty: false
}
]
vm.loading = true
return UserPreferencesService.getEmailPreferences(userData).then(function(subscription) {
vm.loading = false
if (!subscription) {
// add member to the list with default preferences
UserPreferencesService.saveEmailPreferences(userData).then(function(resp) {
logger.debug(JSON.stringify(resp))
validateState(resp)
}).catch(function(err) {
// no error to user
//TODO some error alert to community admin
logger.debug('error in adding user to member list')
})
} else {
if (subscription) {
validateState(subscription)
}
}
})
}
function validateState(subscription) {
vm.newsletters.forEach(function(newsletter) {
if (subscription[newsletter.id]) {
newsletter.enabled = true
}
})
}
function isDirty() {
var dirty = false
vm.newsletters.forEach(function(newsletter) {
if (newsletter.dirty){
dirty = true
}
})
return dirty
}
function save() {
vm.saving = true
var preferences = {}
vm.newsletters.forEach(function(newsletter) {
preferences[newsletter.id] = newsletter.enabled
})
UserPreferencesService.saveEmailPreferences(userData, preferences).then(function(resp) {
vm.loading = false
vm.saving = false
// reset dirty state for all newsletter options
vm.newsletters.forEach(function(newsletter) {
newsletter.dirty = false
})
toaster.pop('success', 'Success!', 'Preferences updated.')
}).catch(function(err) {
logger.error('Could not update email preferences', err)
vm.loading = false
vm.saving = false
toaster.pop('error', 'Whoops!', 'Something went wrong. Please try again later.')
})
}
}
})()