Implement confirm modal for leaving a group

This commit is contained in:
Wolfgang Huß 2022-09-14 14:12:06 +02:00
parent 13727729a5
commit ff8f3fed7a
4 changed files with 57 additions and 4 deletions

View File

@ -15,12 +15,13 @@
</template> </template>
<script> <script>
import { mapMutations } from 'vuex'
import { joinGroupMutation, leaveGroupMutation } from '~/graphql/groups' import { joinGroupMutation, leaveGroupMutation } from '~/graphql/groups'
export default { export default {
name: 'JoinLeaveButton', name: 'JoinLeaveButton',
props: { props: {
groupId: { type: String, required: true }, group: { type: Object, required: true },
userId: { type: String, required: true }, userId: { type: String, required: true },
isMember: { type: Boolean, required: true }, isMember: { type: Boolean, required: true },
disabled: { type: Boolean, default: false }, disabled: { type: Boolean, default: false },
@ -58,12 +59,54 @@ export default {
}, },
}, },
methods: { methods: {
...mapMutations({
commitModalData: 'modal/SET_OPEN',
}),
onHover() { onHover() {
if (!this.disabled && !this.localLoading) { if (!this.disabled && !this.localLoading) {
this.hovered = true this.hovered = true
} }
}, },
async toggle() { toggle() {
if (this.isMember) {
this.openLeaveModal()
} else {
this.joinLeave()
}
},
openLeaveModal() {
this.commitModalData(this.leaveModalData())
},
leaveModalData() {
return {
name: 'confirm',
data: {
type: '',
resource: { id: '' },
modalData: {
titleIdent: 'group.leaveModal.title',
messageIdent: 'group.leaveModal.message',
messageParams: {
name: this.group.name,
},
buttons: {
confirm: {
danger: true,
icon: 'sign-out',
textIdent: 'group.leaveModal.confirmButton',
callback: this.joinLeave,
},
cancel: {
icon: 'close',
textIdent: 'actions.cancel',
callback: () => {},
},
},
},
},
}
},
async joinLeave() {
const join = !this.isMember const join = !this.isMember
const mutation = join ? joinGroupMutation : leaveGroupMutation const mutation = join ? joinGroupMutation : leaveGroupMutation
@ -73,7 +116,7 @@ export default {
try { try {
const { data } = await this.$apollo.mutate({ const { data } = await this.$apollo.mutate({
mutation, mutation,
variables: { groupId: this.groupId, userId: this.userId }, variables: { groupId: this.group.id, userId: this.userId },
}) })
const joinedLeftGroupResult = join ? data.JoinGroup : data.LeaveGroup const joinedLeftGroupResult = join ? data.JoinGroup : data.LeaveGroup
this.$emit('update', joinedLeftGroupResult) this.$emit('update', joinedLeftGroupResult)

View File

@ -385,6 +385,11 @@
"iAmMember": "Bin Mitglied", "iAmMember": "Bin Mitglied",
"join": "Beitreten" "join": "Beitreten"
}, },
"leaveModal": {
"confirmButton": "Verlassen",
"message": "Eine Gruppe zu verlassen ist möglicherweise nicht rückgängig zu machen!<br>Gruppe <b>„{name}“</b> verlassen!",
"title": "Möchtest du wirklich die Gruppe verlassen?"
},
"membersCount": "Mitglieder", "membersCount": "Mitglieder",
"membersListTitle": "Gruppenmitglieder", "membersListTitle": "Gruppenmitglieder",
"role": "Deine Rolle in der Gruppe", "role": "Deine Rolle in der Gruppe",

View File

@ -385,6 +385,11 @@
"iAmMember": "I'm a member", "iAmMember": "I'm a member",
"join": "Join" "join": "Join"
}, },
"leaveModal": {
"confirmButton": "Leave",
"message": "Leaving a group may be irreversible!<br>Leave group <b>“{name}”</b>!",
"title": "Do you really want to leave the group?"
},
"membersCount": "Members", "membersCount": "Members",
"membersListTitle": "Group Members", "membersListTitle": "Group Members",
"role": "Your role in the group", "role": "Your role in the group",

View File

@ -91,7 +91,7 @@
@update="updateFollow" @update="updateFollow"
/> --> /> -->
<join-leave-button <join-leave-button
:groupId="group && group.id ? group.id : ''" :group="group || {}"
:userId="currentUser.id" :userId="currentUser.id"
:isMember="isGroupMember" :isMember="isGroupMember"
:disabled="isGroupOwner" :disabled="isGroupOwner"