/
bannersStore.js
92 lines (79 loc) · 2.61 KB
/
bannersStore.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
/** @jsx React.DOM */
var Reflux = require('reflux');
var _ = require('lodash');
var actions = require('../actions/actions');
var bannersStore = Reflux.createStore({
data: { banners: [] },
getInitialState: function() {
return this.data;
},
init: function() {
var salesforce = new RemoteObjectModel.Banner();
// fetch 5 record from the Banner__c custom object
salesforce.retrieve({ limit: 5 }, function(err, records, event){
if (err) console.log('Darn error: ' + err);
if (!err) {
records.forEach(function(record) {
var banner = {
"id": record.get("Id"),
"name": record.get("Name"),
"imageUrl": record.get("Image_URL__c"),
"targetUrl": record.get("Target_URL__c"),
"active": record.get("Active__c")
}
this.data.banners.push(banner);
}.bind(this));
// set scope
this.trigger();
}
}.bind(this));
// register addBanner action & bind to addBanner function
this.listenTo(actions.addBanner, this.addBanner);
// register toggleStatus action & bind to togggle function
this.listenTo(actions.toggleStatus, this.toggle);
},
// returns the array of banners from state
getBanners: function() {
return this.data.banners;
},
// returns a banner by id
getBanner: function(bannerId) {
return _.where(this.data.banners, { 'id': bannerId })[0];
},
// creates banner in sfdc & pushes it to the state of banners
addBanner: function(banner) {
// construct the object for salesforce
var details = {
Name: banner.name,
Image_URL__c: banner.imageUrl,
Target_URL__c: banner.targetUrl,
Active__c: 'Yes'
}
var sfdcBanner = new RemoteObjectModel.Banner();
sfdcBanner.create(details, function(err) {
if (err) console.log('Darn error: ' + err);
if (!err) {
banner.id = sfdcBanner.get('Id');
this.data.banners.push(banner);
this.trigger();
}
}.bind(this));
},
// callback for toggle action to update in sfdc
toggle: function(bannerId) {
var banner = _.where(this.data.banners, { 'id': bannerId })[0];
// toggle the banner status in the obect
banner.active = banner.active === 'Yes' ? 'No' : 'Yes';
// update the banner in sfdc
var sfdcBanner = new RemoteObjectModel.Banner({
Id: bannerId,
Active__c: banner.active
});
sfdcBanner.update(function(err, ids) {
if (err) console.log('Darn error: ' + err);
});
// pass the data on to any listeners -- see toggleStatus in view.js)
this.trigger();
}
});
module.exports = bannersStore;