Created
July 4, 2015 10:21
-
-
Save aantipov/8797ebe8ab75dfb1d30c to your computer and use it in GitHub Desktop.
Revisions
-
aantipov created this gist
Jul 4, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,113 @@ const _deps = [ '$scope', '$log', '$state', 'notify', 'GuinnessApi', 'campaign', 'campaignUsers', 'teamMembers', 'user' ]; class ManageTeamCtrl { constructor(...args) { // Publish each service on 'this' with '_' prefix. _deps.map((val) => '_' + val).forEach((val, key) => this[val] = args[key]); this._$log.debug('CampaignManageTeamCtrl initialization'); this.actionPromise = false; this.sortFields = [ {title: 'First name', value: 'extended_user.user.first_name'}, {title: 'Last name', value: 'extended_user.user.last_name'}, ]; this.campaignUsers = this._campaignUsers; this.availableSort = this.sortFields[0]; this.availableSortDir = true; this.addedSort = this.sortFields[0]; this.addedSortDir = true; this._currentUserId = this._user.getUserInfo().id; } /** * Check if a user is current user. * * @param campaingUser * @return {boolean} */ isItMe(campaingUser) { return campaingUser.extended_user.user.id === this._currentUserId; } /** * Remove current user from the campaign. * */ removeMyself() { // Check if there are other users. if (this._campaignUsers.length < 2) { this._notify.warning('You can\'t remove yourself because you are the only user assigned to the company'); return; } // Get campaign user id. const campaignUser = _.find(this._campaignUsers, this.isItMe.bind(this)); let successMsg = `You have been successfully removed from campaign <strong>${this._campaign.name}</strong>`; // Remove it from the campaign and redirect to my campaigns list. this.actionPromise = this._GuinnessApi.removeCampaignUser({id: campaignUser.id}) .then(() => { this._$scope.$close(true); return this._$state.go('my_campaign'); }) .then(() => this._notify.success(successMsg)); } /** * Add new team member to the campaign. * * @param teamMember */ addTeamMember(teamMember) { this.actionPromise = this._GuinnessApi.addCampaignUser({ campaign: this._campaign.resource_uri, extended_user: teamMember.extended_user.resource_uri, }) .then((campaignMember) => { this._campaignUsers.push(campaignMember); }); } /** * Get available team members list. * * Those, that are not included to the campaign. */ getAvailableTeamMembers() { return _.filter(this._teamMembers, (teamMember) => { return !this._isUserInCampaign(teamMember); }); } /** * Check if a user is already in the campaign. * * @param teamMember * @return {boolean} * @private */ _isUserInCampaign(teamMember) { return !!_.find(this.campaignUsers, (user) => { return user.extended_user.user.id === teamMember.extended_user.user.id; }); } } ManageTeamCtrl.$inject = _deps; export default ManageTeamCtrl;