Skip to content

Commit fce4c2f

Browse files
committed
Create a players modal service to keep it DRY
1 parent e1956e1 commit fce4c2f

File tree

8 files changed

+117
-114
lines changed

8 files changed

+117
-114
lines changed

app/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
<script src="scripts/stats/stats-ctrl.js"></script>
9999
<script src="scripts/communities/communities.service.js"></script>
100100
<script src="scripts/communities/communities.ctrl.js"></script>
101+
<script src="scripts/players/players-modal.service.js"></script>
101102
<script src="scripts/manager/manager-ctrl.js"></script>
102103
<script src="scripts/manager/game-ctrl.js"></script>
103104
<script src="scripts/manager/game-drtv.js"></script>

app/partials/modals/addNewPlayer.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<h3>Player Details <!-- <button ng-model="isAdmin" class="btn btn-sm btn-default" btn-checkbox btn-checkbox-true="true" btn-checkbox-false="false"><span class="glyphicon glyphicon-edit"></span></button> --></h3>
33
</div>
44
<div class="modal-body">
5-
<player-details player="player"></player-details>
5+
<player-details player="modalCtrl.player"></player-details>
66
</div>
77
<div class="modal-footer">
8-
<button class="btn btn-primary" ng-click="ok()"><i class="fa fa-check"></i> OK</button>
9-
<button class="btn btn-warning" ng-click="cancel()"><i class="fa fa-remove"></i> Cancel</button>
8+
<button class="btn btn-primary" ng-click="modalCtrl.ok()"><i class="fa fa-check"></i> OK</button>
9+
<button class="btn btn-warning" ng-click="modalCtrl.cancel()"><i class="fa fa-remove"></i> Cancel</button>
1010
</div>

app/partials/tmpls/player-details-tmpl.html

+13-13
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,39 @@
22
<div class="form-group">
33
<label class="col-sm-4 control-label" for="playerName">Added on</label>
44
<div class="col-sm-8">
5-
<input class="form-control" type="text" id="playerName" name="playerName" ng-model="player.createDate" disabled="disabled"/>
5+
<input class="form-control" type="text" id="playerName" name="playerName" ng-model="pCtrl.player.createDate" disabled="disabled"/>
66
</div>
77
</div>
88
<div class="form-group">
99
<label class="col-sm-4 control-label" for="playerName">Name</label>
1010
<div class="col-sm-8">
11-
<input class="form-control" type="text" id="playerName" name="playerName" ng-model="player.name" disabled="disabled" ng-disabled="!isAdmin()"/>
11+
<input class="form-control" type="text" id="playerName" name="playerName" ng-model="pCtrl.player.name" disabled="disabled" ng-disabled="!pCtrl.isAdmin()"/>
1212
</div>
1313
</div>
1414
<div class="form-group">
1515
<label class="col-sm-4 control-label" for="playerEmail">Email</label>
1616
<div class="col-sm-8">
17-
<input class="form-control" type="email" id="playerEmail" name="playerEmail" ng-model="player.email" disabled="disabled" ng-disabled="!isAdmin()"/>
17+
<input class="form-control" type="email" id="playerEmail" name="playerEmail" ng-model="pCtrl.player.email" disabled="disabled" ng-disabled="!pCtrl.isAdmin()"/>
1818
</div>
1919
</div>
2020
<div class="form-group">
2121
<label class="col-sm-4 control-label" for="playerPhone">Phone</label>
2222
<div class="col-sm-8">
23-
<input class="form-control" type="tel" id="playerPhone" name="playerPhone" ng-model="player.phone" disabled="disabled" ng-disabled="!isAdmin()"/>
23+
<input class="form-control" type="tel" id="playerPhone" name="playerPhone" ng-model="pCtrl.player.phone" disabled="disabled" ng-disabled="!pCtrl.isAdmin()"/>
2424
</div>
2525
</div>
2626
<div class="form-group">
2727
<label class="col-sm-4 control-label" for="playerBalance">Balance</label>
2828
<div class="col-sm-8">
29-
<input class="form-control" type="number" step="10" id="playerBalance" name="playerBalance" ng-model="player.balance" disabled="disabled"/>
29+
<input class="form-control" type="number" step="10" id="playerBalance" name="playerBalance" ng-model="pCtrl.player.balance" disabled="disabled"/>
3030
</div>
3131
</div>
3232
</form>
3333

3434
<div class="loader" ng-show="loading">Loading...</div>
3535
<div ng-hide="loading">
36-
<button class="btn btn-info refresh-data-btn" analytics-on analytics-event="Player Performance" analytics-category="Actions" analytics-label="{{ player.name }}">Refresh <span class="fa fa-refresh"></span></button>
37-
<table class="table table-striped table-hover" ng-hide="player.balance == 0">
36+
<button class="btn btn-info refresh-data-btn" analytics-on analytics-event="Player Performance" analytics-category="Actions" analytics-label="{{ pCtrl.player.name }}">Refresh <span class="fa fa-refresh"></span></button>
37+
<table class="table table-striped table-hover" ng-hide="pCtrl.player.balance == 0">
3838
<thead>
3939
<tr>
4040
<th>Date</th>
@@ -44,7 +44,7 @@
4444
</tr>
4545
</thead>
4646
<tbody>
47-
<tr ng-repeat="game in player.games" ng-class="{'success': (game.players[ 0 ].balance > 0), 'danger': (game.players[ 0 ].balance < 0)}">
47+
<tr ng-repeat="game in pCtrl.player.games" ng-class="{'success': (game.players[ 0 ].balance > 0), 'danger': (game.players[ 0 ].balance < 0)}">
4848
<td>{{ game.date | date:'y-MM-dd' }}</td>
4949
<td>
5050
<span ng-class="{'label label-success': (game.players[0].buyout > game.players[0].buyin), 'label label-danger': (game.players[0].buyout < game.players[0].buyin), 'label label-default': (game.players[0].buyout == game.players[0].buyin)}">{{ game.players[0].buyout - game.players[0].buyin }}</span>
@@ -58,12 +58,12 @@
5858
</tr>
5959
</tbody>
6060
<tfoot>
61-
<tr ng-class="{'success': player.games[player.games.length - 1].balance > 0, 'danger': player.games[player.games.length - 1].balance < 0}">
62-
<th>Played {{ player.games.length }} games</th>
63-
<th>{{ player.winningSessions }} winning sessions <span class="badge">{{ player.winningSessions / player.games.length | percentage:1 }}</span></th>
64-
<th>Average winnings (in BBs): <span class="badge">{{ player.avgWinning | number:2 }}</span></th>
61+
<tr ng-class="{'success': pCtrl.player.games[pCtrl.player.games.length - 1].balance > 0, 'danger': pCtrl.player.games[pCtrl.player.games.length - 1].balance < 0}">
62+
<th>Played {{ pCtrl.player.games.length }} games</th>
63+
<th>{{ pCtrl.player.winningSessions }} winning sessions <span class="badge">{{ pCtrl.player.winningSessions / pCtrl.player.games.length | percentage:1 }}</span></th>
64+
<th>Average winnings (in BBs): <span class="badge">{{ pCtrl.player.avgWinning | number:2 }}</span></th>
6565
<th>
66-
{{ player.games[player.games.length - 1].balance }}
66+
{{ pCtrl.player.games[pCtrl.player.games.length - 1].balance }}
6767
</th>
6868
</tr>
6969
</tfoot>

app/scripts/manager/manager-ctrl.js

+17-30
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
angular.module( 'pokerManager' ).
66
controller( 'PokerManagerCtrl', PokerManagerController );
77

8-
PokerManagerController.$inject = [ '$scope', '$modal', '$filter', '$analytics', 'toaster', 'Utils', 'Players', 'Games' ];
8+
PokerManagerController.$inject = [ '$scope', '$filter', '$analytics', 'toaster', 'Utils', 'Players', 'Games', 'playerModal' ];
99

10-
function PokerManagerController( $scope, $modal, $filter, $analytics, toaster, utils, Players, Games ) {
10+
function PokerManagerController( $scope, $filter, $analytics, toaster, utils, Players, Games, playerModal ) {
1111
'use strict';
1212

1313
var vm = this;
@@ -176,36 +176,23 @@ angular.module( 'pokerManager' ).
176176
}
177177

178178
function openPlayerDetailsDialog( player ) {
179-
var isNew = ( typeof( player ) === 'undefined' || player === null );
180-
181179
vm.closePlayersControl();
182-
183-
if (isNew) {
184-
player = Players.create();
185-
}
186-
var modalInstance = $modal.open( {
187-
templateUrl: './partials/modals/addNewPlayer.html',
188-
controller: 'ModalPlayerDetailsCtrl',
189-
resolve: {
190-
player: function() {
191-
return player;
180+
181+
playerModal.open( player )
182+
.then( function ( savedPlayer ) {
183+
// If new -> update default values
184+
if ( savedPlayer.isNew ) {
185+
savedPlayer.buyin = 0;
186+
savedPlayer.isPlaying = false;
187+
// Update changed fields
192188
}
193-
}
194-
} );
195-
196-
modalInstance.result.then( function( savedPlayer ) {
197-
// If new -> update default values
198-
if ( isNew ) {
199-
savedPlayer.buyin = 0;
200-
savedPlayer.isPlaying = false;
201-
// Update changed fields
202-
}
203-
204-
player = savedPlayer;
205-
206-
// Model.savePlayer( player );
207-
Players.update( player ).$promise.then( playerSaved );
208-
} );
189+
190+
player = savedPlayer;
191+
192+
// Model.savePlayer( player );
193+
return Players.update( player ).$promise;
194+
} )
195+
.then( playerSaved );
209196
}
210197

211198
$scope.$watch( function () {

app/scripts/manager/player-details-ctrl.js

+22-21
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
11
(function () {
2+
'use strict';
23
/**
34
* Player Modal's controller
45
*/
5-
angular.module( 'pokerManager' ).
6-
controller( 'ModalPlayerDetailsCtrl', modalPlayerDetailsController ).
7-
controller( 'PlayerDetailsCtrl', playerDetailsController );
6+
angular.module( 'pokerManager' )
7+
.controller( 'ModalPlayerDetailsCtrl', ModalPlayerDetailsController )
8+
.controller( 'PlayerDetailsCtrl', PlayerDetailsController );
89

9-
modalPlayerDetailsController.$inject = [ '$scope', '$http', '$modalInstance', 'player' ];
10+
ModalPlayerDetailsController.$inject = [ '$scope', '$http', '$modalInstance', 'player' ];
1011

11-
function modalPlayerDetailsController( $scope, $http, $modalInstance, player ) {
12-
'use strict';
13-
14-
$scope.player = player;
15-
16-
$scope.ok = function() {
17-
$modalInstance.close($scope.player);
18-
};
19-
20-
$scope.cancel = function() {
12+
function ModalPlayerDetailsController( $scope, $http, $modalInstance, player ) {
13+
var vm = this;
14+
15+
vm.player = player;
16+
vm.ok = okFn;
17+
vm.cancel = cancelFn;
18+
19+
function okFn() {
20+
$modalInstance.close(vm.player);
21+
}
22+
23+
function cancelFn() {
2124
$modalInstance.dismiss('cancel');
22-
};
25+
}
2326
}
2427

25-
playerDetailsController.$inject = [ '$scope', 'Utils' ];
28+
PlayerDetailsController.$inject = [ 'Utils' ];
2629

27-
function playerDetailsController( $scope, utils ) {
28-
'use strict';
30+
function PlayerDetailsController( utils ) {
31+
this.loading = true;
2932

30-
$scope.loading = true;
31-
32-
$scope.isAdmin = function() {
33+
this.isAdmin = function() {
3334
//return ( window.location.pathname.indexOf( 'manage.html' ) > -1 );
3435
return true;
3536
};

app/scripts/manager/player-details-drtv.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,26 @@ angular.module( 'pokerManager' ).
1616
player: '='
1717
},
1818
controller: 'PlayerDetailsCtrl',
19+
controllerAs: 'pCtrl',
20+
bindToController: true,
1921
templateUrl: 'partials/tmpls/player-details-tmpl.html',
2022
link: postLinkFn
2123
};
2224

2325
function postLinkFn( scope, element, attrs, ctrl ) {
24-
var chartData = createData( scope.player ),
26+
var chartData = createData( ctrl.player ),
2527
chartHolder = angular.element('<div/>'),
26-
chartObj = createChartObject( scope.player.name, chartData ),
28+
chartObj = createChartObject( ctrl.player.name, chartData ),
2729
refreshBtn = element.find( '.refresh-data-btn' );
2830

2931
function refreshData() {
30-
scope.loading = false;
32+
ctrl.loading = false;
3133

3234
// Calculate extra data
33-
scope.player.winningSessions = winningSessions( scope.player );
34-
scope.player.avgWinning = avgWinning( scope.player, true );
35+
ctrl.player.winningSessions = winningSessions( ctrl.player );
36+
ctrl.player.avgWinning = avgWinning( ctrl.player, true );
3537

36-
chartData = createData( scope.player );
38+
chartData = createData( ctrl.player );
3739

3840
chartHolder.highcharts().destroy();
3941

@@ -54,8 +56,10 @@ angular.module( 'pokerManager' ).
5456
chartHolder.highcharts( chartObj );
5557
}, 0, false);
5658

57-
if ( !scope.player.isNew ) {
58-
scope.player = Players.get( { playerId: scope.player.id }, refreshData );
59+
if ( !ctrl.player.isNew ) {
60+
ctrl.player = Players.get( { playerId: ctrl.player.id }, refreshData );
61+
} else {
62+
ctrl.loading = false;
5963
}
6064

6165
refreshBtn.on( 'click', refreshData );
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
(function () {
2+
angular
3+
.module( 'pokerManager' )
4+
.service( 'playerModal', PlayerModal );
5+
6+
PlayerModal.$inject = [ '$modal', 'Players' ];
7+
function PlayerModal( $modal, Players ) {
8+
this.$modal = $modal;
9+
this.Players = Players;
10+
}
11+
12+
PlayerModal.prototype = {
13+
open: function ( player ) {
14+
var isNew = ( typeof( player ) === 'undefined' || player === null );
15+
16+
if (isNew) {
17+
player = this.Players.create();
18+
}
19+
var modalInstance = this.$modal.open( {
20+
templateUrl: './partials/modals/addNewPlayer.html',
21+
controller: 'ModalPlayerDetailsCtrl',
22+
controllerAs: 'modalCtrl',
23+
bindToController: true,
24+
resolve: {
25+
player: function() {
26+
return player;
27+
}
28+
}
29+
} );
30+
31+
return modalInstance.result;
32+
}
33+
};
34+
}());

app/scripts/stats/stats-ctrl.js

+15-39
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
angular.module( 'pokerManager' ).
66
controller( 'PokerStatsCtrl', PokerStatsController );
77

8-
PokerStatsController.$inject = [ '$modal', '$filter', 'Utils', 'Games', 'Players' ];
8+
PokerStatsController.$inject = [ '$filter', 'Utils', 'Games', 'Players', 'playerModal' ];
99

10-
function PokerStatsController( $modal, $filter, utils, Games, Players ) {
10+
function PokerStatsController( $filter, utils, Games, Players, playerModal ) {
1111
'use strict';
1212

1313
var vm = this;
@@ -57,7 +57,7 @@ angular.module( 'pokerManager' ).
5757
function playerSaved( savedPlayer ) {
5858
// console.log('savedPlayer = ' + savedPlayer);
5959
var isNew = true,
60-
playerIdx, len,
60+
playerIdx,
6161
players = vm.displayGames.players;
6262

6363
isNew = players.some( function ( player ) {
@@ -181,43 +181,19 @@ angular.module( 'pokerManager' ).
181181
}
182182

183183
function openPlayerDetailsDialog( player ) {
184-
var isNew = ( player === null );
185-
186-
if ( isNew ) {
187-
player = {
188-
name: '',
189-
balance: 0,
190-
isPlaying: false,
191-
buyin: 0,
192-
currentChipCount: 0,
193-
email: '',
194-
phone:'',
195-
id: 0,
196-
createDate: $filter( 'date' )( vm.today, 'y-MM-dd' ),
197-
isNew: true
198-
};
199-
}
200-
var modalInstance = $modal.open( {
201-
templateUrl: './partials/modals/addNewPlayer.html',
202-
controller: 'ModalPlayerDetailsCtrl',
203-
resolve: {
204-
player: function() {
205-
return player;
184+
playerModal.open( player )
185+
.then( function ( savedPlayer ) {
186+
// If new -> update default values
187+
if ( isNew ) {
188+
savedPlayer.buyin = 0;
189+
savedPlayer.isPlaying = false;
206190
}
207-
}
208-
} );
209-
210-
modalInstance.result.then( function ( savedPlayer ) {
211-
// If new -> update default values
212-
if ( isNew ) {
213-
savedPlayer.buyin = 0;
214-
savedPlayer.isPlaying = false;
215-
}
216-
217-
player = savedPlayer;
218-
219-
Players.update( player ).$promise.then( playerSaved );
220-
} );
191+
192+
player = savedPlayer;
193+
194+
return Players.update( player ).$promise;
195+
} )
196+
.then( playerSaved );;
221197
}
222198
}
223199
})();

0 commit comments

Comments
 (0)