2017-06-02 20:55:02 +00:00
|
|
|
|
<template lang="pug">
|
2017-09-22 21:47:16 +00:00
|
|
|
|
// @TODO: Move this to a member directory
|
2017-06-02 20:55:02 +00:00
|
|
|
|
div
|
2017-09-25 18:02:12 +00:00
|
|
|
|
remove-member-modal(:member-to-remove='memberToRemove', :group-id='this.groupId' @member-removed='memberRemoved')
|
|
|
|
|
|
b-modal#members-modal(:title="$t('createGuild')", size='md', :hide-footer='true')
|
2017-06-06 05:21:37 +00:00
|
|
|
|
.header-wrap(slot="modal-header")
|
|
|
|
|
|
.row
|
|
|
|
|
|
.col-6
|
2017-06-08 21:27:22 +00:00
|
|
|
|
h1(v-once) {{$t('members')}}
|
2017-06-06 05:21:37 +00:00
|
|
|
|
.col-6
|
2017-08-03 20:04:03 +00:00
|
|
|
|
button(type="button" aria-label="Close" class="close", @click='close()')
|
2017-06-06 05:21:37 +00:00
|
|
|
|
span(aria-hidden="true") ×
|
|
|
|
|
|
.row
|
|
|
|
|
|
.form-group.col-6
|
|
|
|
|
|
input.form-control.search(type="text", :placeholder="$t('search')", v-model='searchTerm')
|
2017-09-12 04:00:34 +00:00
|
|
|
|
.col-5.offset-1
|
2017-06-06 05:21:37 +00:00
|
|
|
|
span.dropdown-label {{ $t('sortBy') }}
|
|
|
|
|
|
b-dropdown(:text="$t('sort')", right=true)
|
2017-06-08 21:27:22 +00:00
|
|
|
|
b-dropdown-item(v-for='sortOption in sortOptions', @click='sort(sortOption.value)', :key='sortOption.value') {{sortOption.text}}
|
2017-09-25 18:02:12 +00:00
|
|
|
|
.row(v-if='invites.length > 0')
|
|
|
|
|
|
.col-6.offset-3.nav
|
|
|
|
|
|
.nav-item(@click='viewMembers()', :class="{active: selectedPage === 'members'}") {{ $t('members') }}
|
|
|
|
|
|
.nav-item(@click='viewInvites()', :class="{active: selectedPage === 'invites'}") {{ $t('invites') }}
|
|
|
|
|
|
div(v-if='selectedPage === "members"')
|
|
|
|
|
|
.row(v-for='(member, index) in sortedMembers')
|
|
|
|
|
|
.col-11.no-padding-left
|
|
|
|
|
|
member-details(:member='member')
|
|
|
|
|
|
.col-1.actions
|
|
|
|
|
|
b-dropdown(right=true)
|
|
|
|
|
|
.svg-icon.inline.dots(slot='button-content', v-html="icons.dots")
|
|
|
|
|
|
b-dropdown-item(@click='removeMember(member, index)', v-if='isLeader')
|
|
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.removeIcon", v-if='isLeader')
|
|
|
|
|
|
span.text {{$t('removeMember')}}
|
2017-10-13 04:40:53 +00:00
|
|
|
|
b-dropdown-item(@click='sendMessage(member)')
|
2017-09-25 18:02:12 +00:00
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.messageIcon")
|
|
|
|
|
|
span.text {{$t('sendMessage')}}
|
|
|
|
|
|
b-dropdown-item(@click='sort(option.value)', v-if='isLeader')
|
|
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.starIcon")
|
|
|
|
|
|
span.text {{$t('promoteToLeader')}}
|
2017-10-24 22:41:36 +00:00
|
|
|
|
b-dropdown-item(@click='addManager(member._id)', v-if='isLeader && groupIsSubscribed')
|
2017-09-25 18:02:12 +00:00
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.starIcon")
|
|
|
|
|
|
span.text {{$t('addManager')}}
|
2017-10-24 22:41:36 +00:00
|
|
|
|
b-dropdown-item(@click='removeManager(member._id)', v-if='isLeader && groupIsSubscribed')
|
2017-09-25 18:02:12 +00:00
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.removeIcon")
|
|
|
|
|
|
span.text {{$t('removeManager2')}}
|
|
|
|
|
|
.row(v-if='groupId === "challenge"')
|
|
|
|
|
|
.col-12.text-center
|
|
|
|
|
|
button.btn.btn-secondary(@click='loadMoreMembers()') {{ $t('loadMore') }}
|
|
|
|
|
|
.row.gradient(v-if='members.length > 3')
|
|
|
|
|
|
div(v-if='selectedPage === "invites"')
|
2017-10-05 19:41:03 +00:00
|
|
|
|
.row(v-for='(member, index) in invites')
|
2017-09-25 18:02:12 +00:00
|
|
|
|
.col-11.no-padding-left
|
|
|
|
|
|
member-details(:member='member')
|
2017-10-05 19:41:03 +00:00
|
|
|
|
.col-1.actions
|
|
|
|
|
|
b-dropdown(right=true)
|
|
|
|
|
|
.svg-icon.inline.dots(slot='button-content', v-html="icons.dots")
|
|
|
|
|
|
b-dropdown-item(@click='removeInvite(member, index)', v-if='isLeader')
|
|
|
|
|
|
span.dropdown-icon-item
|
|
|
|
|
|
.svg-icon.inline(v-html="icons.removeIcon", v-if='isLeader')
|
|
|
|
|
|
span.text {{$t('removeInvite')}}
|
2017-09-25 18:02:12 +00:00
|
|
|
|
.modal-footer
|
|
|
|
|
|
button.btn.btn-primary(@click='close()') {{ $t('close') }}
|
2017-06-02 20:55:02 +00:00
|
|
|
|
</template>
|
|
|
|
|
|
|
2017-09-12 04:00:34 +00:00
|
|
|
|
<style lang='scss'>
|
|
|
|
|
|
#members-modal {
|
|
|
|
|
|
.small-text, .character-name {
|
|
|
|
|
|
color: #878190;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.no-padding-left, .modal-body {
|
|
|
|
|
|
padding-left: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.member-details {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.actions .dropdown-toggle::after {
|
|
|
|
|
|
content: none !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|
|
|
2017-06-27 20:02:55 +00:00
|
|
|
|
<style lang='scss' scoped>
|
2017-06-08 21:27:22 +00:00
|
|
|
|
header {
|
|
|
|
|
|
background-color: #edecee;
|
|
|
|
|
|
border-radius: 4px 4px 0 0;
|
|
|
|
|
|
}
|
2017-06-06 05:21:37 +00:00
|
|
|
|
|
2017-06-08 21:27:22 +00:00
|
|
|
|
.header-wrap {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
}
|
2017-06-06 05:21:37 +00:00
|
|
|
|
|
2017-06-08 21:27:22 +00:00
|
|
|
|
h1 {
|
|
|
|
|
|
color: #4f2a93;
|
|
|
|
|
|
}
|
2017-06-06 05:21:37 +00:00
|
|
|
|
|
2017-06-08 21:27:22 +00:00
|
|
|
|
.actions {
|
|
|
|
|
|
padding-top: 5em;
|
2017-06-06 05:21:37 +00:00
|
|
|
|
|
2017-09-12 04:00:34 +00:00
|
|
|
|
.dots {
|
|
|
|
|
|
height: 16px;
|
|
|
|
|
|
width: 4px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-group {
|
|
|
|
|
|
margin-left: -2em;
|
|
|
|
|
|
margin-top: -2em;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-06-08 21:27:22 +00:00
|
|
|
|
.action-icon {
|
|
|
|
|
|
margin-right: 1em;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-06-27 20:02:55 +00:00
|
|
|
|
|
|
|
|
|
|
#members-modal_modal_body {
|
|
|
|
|
|
padding: 0;
|
2017-07-29 22:08:36 +00:00
|
|
|
|
max-height: 450px;
|
2017-06-27 20:02:55 +00:00
|
|
|
|
|
|
|
|
|
|
.col-8 {
|
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.member-details {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.member-stats {
|
|
|
|
|
|
width: 382px;
|
|
|
|
|
|
height: 147px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.gradient {
|
|
|
|
|
|
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), #ffffff);
|
2017-07-29 22:08:36 +00:00
|
|
|
|
height: 50px;
|
2017-06-27 20:02:55 +00:00
|
|
|
|
width: 100%;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
bottom: 0px;
|
2017-07-29 22:08:36 +00:00
|
|
|
|
margin-left: -15px;
|
2017-06-27 20:02:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-09 15:13:40 +00:00
|
|
|
|
.dropdown-icon-item .svg-icon {
|
2017-07-29 22:08:36 +00:00
|
|
|
|
width: 20px;
|
2017-06-27 20:02:55 +00:00
|
|
|
|
}
|
2017-09-25 18:02:12 +00:00
|
|
|
|
|
|
|
|
|
|
.nav {
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
margin-bottom: .5em;
|
|
|
|
|
|
margin-top: .5em;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.nav-item {
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
|
padding: .5em;
|
|
|
|
|
|
color: #878190;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.nav-item:hover, .nav-item.active {
|
|
|
|
|
|
color: #4f2a93;
|
|
|
|
|
|
border-bottom: 2px solid #4f2a93;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
2017-06-06 05:21:37 +00:00
|
|
|
|
</style>
|
|
|
|
|
|
|
2017-06-02 20:55:02 +00:00
|
|
|
|
<script>
|
2017-08-09 16:56:48 +00:00
|
|
|
|
import sortBy from 'lodash/sortBy';
|
2017-08-23 03:58:13 +00:00
|
|
|
|
import { mapState } from 'client/libs/store';
|
2017-06-06 05:21:37 +00:00
|
|
|
|
|
2017-09-25 18:02:12 +00:00
|
|
|
|
import removeMemberModal from 'client/components/members/removeMemberModal';
|
2017-06-08 21:36:56 +00:00
|
|
|
|
import MemberDetails from '../memberDetails';
|
2017-06-27 20:02:55 +00:00
|
|
|
|
import removeIcon from 'assets/members/remove.svg';
|
|
|
|
|
|
import messageIcon from 'assets/members/message.svg';
|
|
|
|
|
|
import starIcon from 'assets/members/star.svg';
|
2017-09-12 04:00:34 +00:00
|
|
|
|
import dots from 'assets/svg/dots.svg';
|
2017-06-02 20:55:02 +00:00
|
|
|
|
|
|
|
|
|
|
export default {
|
2017-08-23 03:58:13 +00:00
|
|
|
|
props: ['hideBadge'],
|
2017-06-02 20:55:02 +00:00
|
|
|
|
components: {
|
2017-06-08 21:36:56 +00:00
|
|
|
|
MemberDetails,
|
2017-09-25 18:02:12 +00:00
|
|
|
|
removeMemberModal,
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
|
|
|
|
|
data () {
|
|
|
|
|
|
return {
|
2017-08-09 16:56:48 +00:00
|
|
|
|
sortOption: '',
|
2017-09-25 18:02:12 +00:00
|
|
|
|
selectedPage: 'members',
|
2017-06-08 21:27:22 +00:00
|
|
|
|
members: [],
|
2017-09-25 18:02:12 +00:00
|
|
|
|
invites: [],
|
|
|
|
|
|
memberToRemove: {},
|
2017-06-08 21:27:22 +00:00
|
|
|
|
sortOptions: [
|
|
|
|
|
|
{
|
2017-08-09 16:56:48 +00:00
|
|
|
|
value: 'level',
|
2017-06-08 21:27:22 +00:00
|
|
|
|
text: this.$t('tier'),
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
value: 'name',
|
|
|
|
|
|
text: this.$t('name'),
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
2017-08-09 16:56:48 +00:00
|
|
|
|
value: 'lvl',
|
2017-06-08 21:27:22 +00:00
|
|
|
|
text: this.$t('level'),
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
value: 'class',
|
|
|
|
|
|
text: this.$t('class'),
|
|
|
|
|
|
},
|
|
|
|
|
|
],
|
|
|
|
|
|
searchTerm: '',
|
2017-06-27 20:02:55 +00:00
|
|
|
|
icons: Object.freeze({
|
|
|
|
|
|
removeIcon,
|
|
|
|
|
|
messageIcon,
|
|
|
|
|
|
starIcon,
|
2017-09-12 04:00:34 +00:00
|
|
|
|
dots,
|
2017-06-27 20:02:55 +00:00
|
|
|
|
}),
|
2017-09-01 21:26:10 +00:00
|
|
|
|
userIdToMessage: '',
|
2017-06-02 20:55:02 +00:00
|
|
|
|
};
|
|
|
|
|
|
},
|
2017-09-12 17:56:06 +00:00
|
|
|
|
mounted () {
|
|
|
|
|
|
this.getMembers();
|
|
|
|
|
|
},
|
2017-08-09 16:56:48 +00:00
|
|
|
|
computed: {
|
2017-08-23 03:58:13 +00:00
|
|
|
|
...mapState({user: 'user.data'}),
|
|
|
|
|
|
isLeader () {
|
2017-09-12 17:56:06 +00:00
|
|
|
|
if (!this.group || !this.group.leader) return false;
|
2017-08-23 03:58:13 +00:00
|
|
|
|
return this.user._id === this.group.leader || this.user._id === this.group.leader._id;
|
|
|
|
|
|
},
|
|
|
|
|
|
groupIsSubscribed () {
|
|
|
|
|
|
return this.group.purchased.active;
|
|
|
|
|
|
},
|
|
|
|
|
|
group () {
|
|
|
|
|
|
return this.$store.state.memberModalOptions.group;
|
|
|
|
|
|
},
|
2017-08-30 21:19:17 +00:00
|
|
|
|
groupId () {
|
|
|
|
|
|
return this.$store.state.memberModalOptions.groupId || this.group._id;
|
|
|
|
|
|
},
|
2017-09-22 21:47:16 +00:00
|
|
|
|
challengeId () {
|
|
|
|
|
|
return this.$store.state.memberModalOptions.challengeId;
|
|
|
|
|
|
},
|
2017-08-09 16:56:48 +00:00
|
|
|
|
sortedMembers () {
|
|
|
|
|
|
let sortedMembers = this.members;
|
2017-09-25 18:02:12 +00:00
|
|
|
|
|
|
|
|
|
|
if (this.searchTerm) {
|
|
|
|
|
|
sortedMembers = sortedMembers.filter(member => {
|
2017-11-02 17:36:08 +00:00
|
|
|
|
return member.profile.name.toLowerCase().indexOf(this.searchTerm.toLowerCase()) !== -1;
|
2017-09-25 18:02:12 +00:00
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-09 16:56:48 +00:00
|
|
|
|
if (!this.sortOption) return sortedMembers;
|
|
|
|
|
|
|
|
|
|
|
|
sortedMembers = sortBy(this.members, [(member) => {
|
|
|
|
|
|
if (this.sortOption === 'tier') {
|
|
|
|
|
|
if (!member.contributor) return;
|
|
|
|
|
|
return member.contributor.level;
|
|
|
|
|
|
} else if (this.sortOption === 'name') {
|
|
|
|
|
|
return member.profile.name;
|
|
|
|
|
|
} else if (this.sortOption === 'lvl') {
|
|
|
|
|
|
return member.stats.lvl;
|
|
|
|
|
|
} else if (this.sortOption === 'class') {
|
|
|
|
|
|
return member.stats.class;
|
|
|
|
|
|
}
|
|
|
|
|
|
}]);
|
|
|
|
|
|
|
2017-09-25 18:02:12 +00:00
|
|
|
|
return sortedMembers;
|
2017-08-09 16:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
|
},
|
2017-08-30 21:19:17 +00:00
|
|
|
|
watch: {
|
|
|
|
|
|
groupId () {
|
|
|
|
|
|
// @TOOD: We might not need this since groupId is computed now
|
|
|
|
|
|
this.getMembers();
|
|
|
|
|
|
},
|
|
|
|
|
|
group () {
|
|
|
|
|
|
this.getMembers();
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2017-06-02 20:55:02 +00:00
|
|
|
|
methods: {
|
2017-10-13 04:40:53 +00:00
|
|
|
|
sendMessage (member) {
|
|
|
|
|
|
this.$root.$emit('habitica::new-inbox-message', {
|
|
|
|
|
|
userIdToMessage: member._id,
|
|
|
|
|
|
userName: member.profile.name,
|
|
|
|
|
|
});
|
2017-09-01 21:26:10 +00:00
|
|
|
|
},
|
2017-06-08 21:27:22 +00:00
|
|
|
|
async getMembers () {
|
2017-08-30 21:19:17 +00:00
|
|
|
|
let groupId = this.groupId;
|
2017-08-07 20:26:17 +00:00
|
|
|
|
if (groupId && groupId !== 'challenge') {
|
2017-07-31 19:54:52 +00:00
|
|
|
|
let members = await this.$store.dispatch('members:getGroupMembers', {
|
2017-08-01 18:52:49 +00:00
|
|
|
|
groupId,
|
2017-07-31 19:54:52 +00:00
|
|
|
|
includeAllPublicFields: true,
|
|
|
|
|
|
});
|
|
|
|
|
|
this.members = members;
|
2017-09-25 18:02:12 +00:00
|
|
|
|
|
|
|
|
|
|
let invites = await this.$store.dispatch('members:getGroupInvites', {
|
|
|
|
|
|
groupId,
|
|
|
|
|
|
includeAllPublicFields: true,
|
|
|
|
|
|
});
|
|
|
|
|
|
this.invites = invites;
|
2017-08-07 20:26:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-23 03:58:13 +00:00
|
|
|
|
if (this.$store.state.memberModalOptions.viewingMembers.length > 0) {
|
2017-09-12 17:56:06 +00:00
|
|
|
|
this.members = this.$store.state.memberModalOptions.viewingMembers;
|
2017-07-31 19:54:52 +00:00
|
|
|
|
}
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-06-08 21:27:22 +00:00
|
|
|
|
async clickMember (uid, forceShow) {
|
2017-06-02 20:55:02 +00:00
|
|
|
|
let user = this.$store.state.user.data;
|
|
|
|
|
|
|
|
|
|
|
|
if (user._id === uid && !forceShow) {
|
|
|
|
|
|
if (this.$route.name === 'tasks') {
|
|
|
|
|
|
this.$route.router.go('options.profile.avatar');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.$route.router.go('tasks');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-06-08 21:27:22 +00:00
|
|
|
|
await this.$store.dispatch('members:selectMember', {
|
|
|
|
|
|
memberId: uid,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2017-11-08 17:40:37 +00:00
|
|
|
|
this.$root.$emit('bv::show::modal', 'members-modal');
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-09-25 18:02:12 +00:00
|
|
|
|
async removeMember (member, index) {
|
2017-06-02 20:55:02 +00:00
|
|
|
|
this.memberToRemove = member;
|
2017-09-25 18:02:12 +00:00
|
|
|
|
this.memberToRemove.index = index;
|
2017-11-08 17:40:37 +00:00
|
|
|
|
this.$root.$emit('bv::show::modal', 'remove-member');
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-09-25 18:02:12 +00:00
|
|
|
|
memberRemoved () {
|
|
|
|
|
|
this.members.splice(this.memberToRemove.index, 1);
|
|
|
|
|
|
this.group.memberCount -= 1;
|
|
|
|
|
|
this.memberToRemove = {};
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-11-08 17:40:37 +00:00
|
|
|
|
async quickReply (uid) {
|
|
|
|
|
|
this.memberToReply = uid;
|
|
|
|
|
|
await this.$store.dispatch('members:selectMember', {
|
|
|
|
|
|
memberId: uid,
|
|
|
|
|
|
});
|
|
|
|
|
|
this.$root.$emit('bv::show::modal', 'private-message'); // MemberModalCtrl
|
|
|
|
|
|
},
|
2017-06-08 21:27:22 +00:00
|
|
|
|
async addManager (memberId) {
|
2017-10-13 04:40:53 +00:00
|
|
|
|
await this.$store.dispatch('guilds:addManager', {
|
|
|
|
|
|
groupId: this.groupId,
|
2017-06-08 21:27:22 +00:00
|
|
|
|
memberId,
|
|
|
|
|
|
});
|
2017-10-13 04:40:53 +00:00
|
|
|
|
alert(this.$t('managerAdded'));
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-06-08 21:27:22 +00:00
|
|
|
|
async removeManager (memberId) {
|
2017-10-13 04:40:53 +00:00
|
|
|
|
await this.$store.dispatch('guilds:removeManager', {
|
|
|
|
|
|
groupId: this.groupId,
|
2017-06-08 21:27:22 +00:00
|
|
|
|
memberId,
|
|
|
|
|
|
});
|
2017-10-13 04:40:53 +00:00
|
|
|
|
alert(this.$t('managerRemoved'));
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
2017-08-03 20:04:03 +00:00
|
|
|
|
close () {
|
2017-11-08 17:40:37 +00:00
|
|
|
|
this.$root.$emit('bv::hide::modal', 'members-modal');
|
2017-08-03 20:04:03 +00:00
|
|
|
|
},
|
2017-08-09 16:56:48 +00:00
|
|
|
|
sort (option) {
|
|
|
|
|
|
this.sortOption = option;
|
|
|
|
|
|
},
|
2017-09-22 21:47:16 +00:00
|
|
|
|
async loadMoreMembers () {
|
|
|
|
|
|
const lastMember = this.members[this.members.length - 1];
|
|
|
|
|
|
if (!lastMember) return;
|
|
|
|
|
|
|
|
|
|
|
|
let newMembers = await this.$store.dispatch('members:getChallengeMembers', {
|
|
|
|
|
|
challengeId: this.challengeId,
|
|
|
|
|
|
lastMemberId: lastMember._id,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
this.members = this.members.concat(newMembers);
|
|
|
|
|
|
},
|
2017-09-25 18:02:12 +00:00
|
|
|
|
viewMembers () {
|
|
|
|
|
|
this.selectedPage = 'members';
|
|
|
|
|
|
},
|
|
|
|
|
|
viewInvites () {
|
|
|
|
|
|
this.selectedPage = 'invites';
|
|
|
|
|
|
},
|
2017-10-05 19:41:03 +00:00
|
|
|
|
async removeInvite (member, index) {
|
|
|
|
|
|
this.invites.splice(index, 1);
|
|
|
|
|
|
await this.$store.dispatch('members:removeMember', {
|
|
|
|
|
|
memberId: member._id,
|
|
|
|
|
|
groupId: this.groupId,
|
|
|
|
|
|
});
|
|
|
|
|
|
this.viewMembers();
|
|
|
|
|
|
},
|
2017-06-02 20:55:02 +00:00
|
|
|
|
},
|
|
|
|
|
|
};
|
|
|
|
|
|
</script>
|