Skip to content

Commit fa93431

Browse files
committed
Complete changes simulating zero client-server-db latency
Fix a missed error message that wasn't going through $rootScope.onError Remove some noisy console.log statements
1 parent 2a59bc7 commit fa93431

File tree

9 files changed

+65
-48
lines changed

9 files changed

+65
-48
lines changed

apps/trolls_goals/public/js/areas.js

+14-6
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,29 @@ areasModule.factory('AreaFactory', function($resource, $rootScope) {
3434
});
3535
}
3636
else {
37+
$rootScope.areas.push(area);
38+
$rootScope.calculateDomainAreaMap();
3739
Area.save(area, function(a) {
3840
console.log('successfully added area!', a);
39-
$rootScope.areas.push(a);
41+
area._id = a._id;
4042
$rootScope.records[a._id] = {};
41-
$rootScope.calculateDomainAreaMap();
4243
}, function(response) {
4344
$rootScope.onError('creating an area', response.data.error);
45+
$rootScope.areas = _.without($rootScope.areas, area);
46+
$rootScope.calculateDomainAreaMap();
4447
});
4548
}
4649
$rootScope.newArea();
4750
};
4851

4952
$rootScope.deleteArea = function(area) {
53+
$rootScope.handleDeletedArea(area, true);
5054
area.$delete({ id: area._id }, function(success) {
5155
console.log('successfully deleted area!', area);
52-
$rootScope.handleDeletedArea(area, true);
5356
}, function(response) {
5457
$rootScope.onError('deleting an area', response.data.error);
58+
$rootScope.areas.push(area);
59+
$rootScope.calculateDomainAreaMap();
5560
});
5661
};
5762

@@ -60,17 +65,20 @@ areasModule.factory('AreaFactory', function($resource, $rootScope) {
6065
return _area.name === area.name;
6166
});
6267
if (recalculate) { $rootScope.calculateDomainAreaMap(); }
63-
}
68+
};
69+
70+
$rootScope.handleAddedArea = function(area, recalculate) {
71+
$rootScope.areas.push(area);
72+
if (recalculate) { $rootScope.calculateDomainAreaMap(); }
73+
};
6474

6575
var Area = $resource('/api/area/:id', null,
6676
{ query: { method: 'GET', isArray: true, cache: true }
6777
, update: { method: 'PUT' } }
6878
);
6979
Area.list = function(cb) {
70-
console.log('Area.list called');
7180
if (_.isUndefined($rootScope.areas)) {
7281
Area.query(function(areas) {
73-
console.log('Area.list cb');
7482
$rootScope.areas = areas;
7583
if (_.isFunction(cb)) { cb(); }
7684
}, function(response) {

apps/trolls_goals/public/js/crud_tooltip.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -371,16 +371,13 @@ angular.module('crudTooltip', [ 'ui.bootstrap.position' ])
371371
templateUrl: function(tElem, tAttrs) { return template_map[tAttrs.templateUrl]; },
372372
link: function (scope, element, attrs) {
373373
//console.log('link called with', scope, element, attrs);
374-
scope.closePopup = function() {
374+
scope.closePopup = function($event) {
375375
var trigger = element.prev();
376376
$timeout(function() {
377377
trigger.triggerHandler('click');
378378
});
379-
}
380-
381-
element.bind('click', function($event) {
382379
$event.stopPropagation();
383-
});
380+
}
384381
}
385382
};
386383
})

apps/trolls_goals/public/js/domains.js

+22-11
Original file line numberDiff line numberDiff line change
@@ -44,40 +44,51 @@ domainsModule.factory('DomainFactory', function($resource, $rootScope) {
4444
});
4545
}
4646
else {
47-
Domain.save(domain, function(d) {
47+
var domain_copy = _.clone(domain);
48+
domain._id = 'ffffffffffffffffffffffff'; // create a temporary ID
49+
$rootScope.domains.push(domain);
50+
$rootScope.calculateDomainAreaMap();
51+
Domain.save(domain_copy, function(d) {
4852
console.log('successfully added domain!', d);
49-
$rootScope.domains.push(d);
53+
domain._id = d._id;
5054
$rootScope.calculateDomainAreaMap();
5155
}, function(response) {
5256
$rootScope.onError('creating a domain', response.data.error);
57+
$rootScope.domains = _.without($rootScope.domains, domain);
58+
$rootScope.calculateDomainAreaMap();
5359
});
5460
}
5561
$rootScope.newDomain();
5662
};
5763

5864
$rootScope.deleteDomain = function(domain) {
65+
var deleted_areas = [];
66+
$rootScope.domains = _.reject($rootScope.domains, function(_domain) {
67+
return _domain.name === domain.name;
68+
});
69+
_.each($rootScope.domain_area_map[domain._id], function(area) {
70+
deleted_areas.push(area);
71+
$rootScope.handleDeletedArea(area, false);
72+
});
73+
$rootScope.calculateDomainAreaMap();
5974
domain.$delete({ id: domain._id }, function(success) {
6075
console.log('successfully deleted domain!', domain);
61-
$rootScope.domains = _.reject($rootScope.domains, function(_domain) {
62-
return _domain.name === domain.name;
63-
});
64-
_.each($rootScope.domain_area_map[domain._id], function(area) {
65-
$rootScope.handleDeletedArea(area, false);
66-
});
67-
$rootScope.calculateDomainAreaMap();
6876
}, function(response) {
6977
$rootScope.onError('deleting a domain', response.data.error);
78+
$rootScope.domains.push(domain);
79+
_.each(deleted_areas, function(area) {
80+
$rootScope.handleAddedArea(area, false);
81+
});
82+
$rootScope.calculateDomainAreaMap();
7083
});
7184
};
7285

7386
var Domain = $resource('/api/domain/:id', null,
7487
{ update: { method: 'PUT' } }
7588
);
7689
Domain.list = function(cb) {
77-
console.log('Domain.list called');
7890
if (_.isUndefined($rootScope.domains)) {
7991
Domain.query(function(domains) {
80-
console.log('Domain.list cb');
8192
$rootScope.domains = domains;
8293
if (_.isFunction(cb)) { cb(); }
8394
}, function(response) {

apps/trolls_goals/public/js/records.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,15 @@ recordsModule.factory('RecordFactory', function($resource, $rootScope) {
4545
};
4646

4747
$rootScope.deleteRecord = $rootScope.deleteRecord || function(record) {
48+
$rootScope.records[record.area][record.day] = _.reject($rootScope.records[record.area][record.day], function(_record) {
49+
return _record._id === record._id;
50+
});
4851
record.$delete({ id: record._id }, function(success) {
4952
console.log('successfully deleted record!', record);
50-
$rootScope.records[record.area][record.day] = _.reject($rootScope.records[record.area][record.day], function(_record) {
51-
return _record._id === record._id;
52-
});
5353
}, function(response) {
5454
$rootScope.onError('deleting a record', response.data.error);
55+
// recreate not-actually-deleted record
56+
$rootScope.records[record.area][record.day].push(record);
5557
});
5658
};
5759

apps/trolls_goals/public/js/records_table.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ recordsTableModule.directive('recordsTable', function($rootScope, RecordFactory)
3030
}
3131
});
3232
}, function(response) {
33-
console.error(response.data.error);
34-
$rootScope.error = response.data.error;
33+
$rootScope.onError('fetching ' + scope.domain.name + ' records', response.data.error);
3534
});
3635
});
3736
}

apps/trolls_goals/public/tmpl/area_tooltip.html

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
ng-init="$root.backupArea(item)">
33
<div class="arrow"></div>
44
<div class="popover-inner">
5-
<div ng-enter="$root.saveArea(item); closePopup();"
6-
ng-ctrl-delete="$root.deleteArea(item); closePopup();"
7-
ng-escape="$root.revertArea(item); closePopup();">
5+
<div ng-enter="$root.saveArea(item); closePopup($event);"
6+
ng-ctrl-delete="$root.deleteArea(item); closePopup($event);"
7+
ng-escape="$root.revertArea(item); closePopup($event);">
88
<div class="input-group" title="Name of this area">
99
<span class="input-group-addon bold" focus-next-when-clicked>Name</span>
1010
<input type="text" class="form-control" ng-model="item.name" focus-on-load />
@@ -35,22 +35,22 @@
3535
<input type="hidden" ng-model="item.start_day" />
3636
</div>
3737
<div class="crud_buttons">
38-
<button class="btn btn-primary" ng-click="$root.saveArea(item); closePopup();" title="{{mode}} (Enter)">
38+
<button class="btn btn-primary" ng-click="$root.saveArea(item); closePopup($event);" title="{{mode}} (Enter)">
3939
{{mode}}
4040
<span class="glyphicon glyphicon-ok"></span>
4141
</button>
4242
<button ng-if="mode === 'Update'" class="btn btn-danger"
43-
ng-click="$root.deleteArea(item); closePopup();" title="Delete (Ctrl + Delete)">
43+
ng-click="$root.deleteArea(item); closePopup($event);" title="Delete (Ctrl + Delete)">
4444
Delete
4545
<span class="glyphicon glyphicon-trash"></span>
4646
</button>
4747
<button ng-if="mode === 'Update'" class="btn btn-warning float-right"
48-
ng-click="$root.revertArea(item); closePopup();" title="Discard Changes (Esc)">
48+
ng-click="$root.revertArea(item); closePopup($event);" title="Discard Changes (Esc)">
4949
Discard
5050
<span class="glyphicon glyphicon-remove"></span>
5151
</button>
5252
<button ng-if="mode !== 'Update'" class="btn btn-warning float-right"
53-
ng-click="$root.newArea(); closePopup();" title="Cancel (Esc)">
53+
ng-click="$root.newArea(); closePopup($event);" title="Cancel (Esc)">
5454
Cancel
5555
<span class="glyphicon glyphicon-remove"></span>
5656
</button>

apps/trolls_goals/public/tmpl/domain_tooltip.html

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
ng-init="$root.backupDomain(item)">
33
<div class="arrow"></div>
44
<div class="popover-inner">
5-
<div ng-enter="$root.saveDomain(item); closePopup();"
6-
ng-ctrl-delete="$root.deleteDomain(item); closePopup();"
7-
ng-escape="$root.revertDomain(item); closePopup();">
5+
<div ng-enter="$root.saveDomain(item); closePopup($event);"
6+
ng-ctrl-delete="$root.deleteDomain(item); closePopup($event);"
7+
ng-escape="$root.revertDomain(item); closePopup($event);">
88
<div class="input-group" title="Name of this domain">
99
<span class="input-group-addon bold" focus-next-when-clicked>Name</span>
1010
<input type="text" class="form-control" ng-model="item.name" focus-on-load />
@@ -21,22 +21,22 @@
2121
</select>
2222
</div>
2323
<div class="crud_buttons">
24-
<button class="btn btn-primary" ng-click="$root.saveDomain(item); closePopup();" title="{{mode}} (Enter)">
24+
<button class="btn btn-primary" ng-click="$root.saveDomain(item); closePopup($event);" title="{{mode}} (Enter)">
2525
{{mode}}
2626
<span class="glyphicon glyphicon-ok"></span>
2727
</button>
2828
<button ng-if="mode === 'Update'" class="btn btn-danger"
29-
ng-click="$root.deleteDomain(item); closePopup();" title="Delete (Ctrl + Delete)">
29+
ng-click="$root.deleteDomain(item); closePopup($event);" title="Delete (Ctrl + Delete)">
3030
Delete
3131
<span class="glyphicon glyphicon-trash"></span>
3232
</button>
3333
<button ng-if="mode === 'Update'" class="btn btn-warning float-right"
34-
ng-click="$root.revertDomain(item); closePopup();" title="Discard Changes (Esc)">
34+
ng-click="$root.revertDomain(item); closePopup($event);" title="Discard Changes (Esc)">
3535
Discard
3636
<span class="glyphicon glyphicon-remove"></span>
3737
</button>
3838
<button ng-if="mode !== 'Update'" class="btn btn-warning float-right"
39-
ng-click="$root.newDomain(); closePopup();" title="Cancel (Esc)">
39+
ng-click="$root.newDomain(); closePopup($event);" title="Cancel (Esc)">
4040
Cancel
4141
<span class="glyphicon glyphicon-remove"></span>
4242
</button>

apps/trolls_goals/public/tmpl/record_tooltip.html

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
ng-init="$root.backupRecord(item)">
33
<div class="arrow"></div>
44
<div class="popover-inner">
5-
<div ng-enter="$root.saveRecord(item); closePopup();"
6-
ng-ctrl-delete="$root.deleteRecord(item); closePopup();"
7-
ng-escape="$root.revertRecord(item); closePopup();">
5+
<div ng-enter="$root.saveRecord(item); closePopup($event);"
6+
ng-ctrl-delete="$root.deleteRecord(item); closePopup($event);"
7+
ng-escape="$root.revertRecord(item); closePopup($event);">
88
<input type="text" placeholder="Details" class="form-control" ng-model="item.details" focus-on-load />
99
</div>
1010
<div class="crud_buttons">
11-
<button class="btn btn-primary" ng-click="$root.saveRecord(item); closePopup();" title="{{mode}} (Enter)">
11+
<button class="btn btn-primary" ng-click="$root.saveRecord(item); closePopup($event);" title="{{mode}} (Enter)">
1212
{{mode}}
1313
<span class="glyphicon glyphicon-ok"></span>
1414
</button>
1515
<button class="btn btn-danger" title="Delete (Ctrl + Delete)"
16-
ng-click="$root.deleteRecord(item); closePopup();">
16+
ng-click="$root.deleteRecord(item); closePopup($event);">
1717
Delete
1818
<span class="glyphicon glyphicon-trash"></span>
1919
</button>
2020
<button class="btn btn-warning"
21-
ng-click="$root.revertRecord(item); closePopup();" title="Discard Changes (Esc)">
21+
ng-click="$root.revertRecord(item); closePopup($event);" title="Discard Changes (Esc)">
2222
Discard
2323
<span class="glyphicon glyphicon-remove"></span>
2424
</button>

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rpwm-server",
3-
"version": "1.0.1-37",
3+
"version": "1.0.1-40",
44
"private": true,
55
"dependencies": {
66
"async": "latest",

0 commit comments

Comments
 (0)