Skip to content

Commit 0dd9f90

Browse files
authored
Merge pull request #7697 from BacLuc/edit-own-collaboration
Allow to edit abbreviation + color and to leave camp for own collaboration
2 parents b3da408 + 40093a1 commit 0dd9f90

File tree

4 files changed

+55
-22
lines changed

4 files changed

+55
-22
lines changed

frontend/src/components/collaborator/CollaboratorEdit.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<CollaboratorForm
6666
:collaboration="entityData"
6767
:status="collaborator.status"
68-
:readonly-role="isLastManager"
68+
:readonly-role="isLastManager || !isManager"
6969
:initial-collaboration="collaborator"
7070
>
7171
<template #statusChange>
@@ -131,6 +131,7 @@ import { errorToMultiLineToast } from '@/components/toast/toasts.js'
131131
import CollaboratorListItem from '@/components/collaborator/CollaboratorListItem.vue'
132132
import PromptEntityDelete from '@/components/prompt/PromptEntityDelete.vue'
133133
import campCollaborationDisplayName from '../../../../common/helpers/campCollaborationDisplayName'
134+
import isOwnCampCollaboration from './isOwnCampCollaboration.js'
134135
135136
export default {
136137
name: 'CollaboratorEdit',
@@ -173,10 +174,7 @@ export default {
173174
)
174175
},
175176
isOwnCampCollaboration() {
176-
if (!(typeof this.collaborator.user === 'function')) {
177-
return false
178-
}
179-
return this.$store.state.auth.user?.id === this.collaborator.user().id
177+
return isOwnCampCollaboration(this.collaborator, this.$store.state.auth)
180178
},
181179
name() {
182180
return campCollaborationDisplayName(this.collaborator, this.$tc.bind(this), false)

frontend/src/components/collaborator/CollaboratorList.vue

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
<template>
22
<v-list class="mx-n2">
3-
<transition-group v-if="isManager" name="list">
3+
<transition-group name="list">
44
<div v-for="collaborator in sortedCollaborators" :key="collaborator._meta.self">
5-
<CollaboratorEdit :collaborator="collaborator" :inactive="inactive" />
5+
<CollaboratorEdit
6+
v-if="isManager || isOwnCollaborationMap[collaborator._meta.self]"
7+
:collaborator="collaborator"
8+
:inactive="inactive"
9+
/>
10+
<CollaboratorListItem
11+
v-else
12+
:key="collaborator._meta.self"
13+
:collaborator="collaborator"
14+
:inactive="inactive"
15+
/>
616
</div>
717
</transition-group>
8-
<template v-else>
9-
<CollaboratorListItem
10-
v-for="collaborator in sortedCollaborators"
11-
:key="collaborator._meta.self"
12-
:collaborator="collaborator"
13-
:inactive="inactive"
14-
/>
15-
</template>
1618
</v-list>
1719
</template>
1820

@@ -21,6 +23,7 @@ import CollaboratorEdit from '@/components/collaborator/CollaboratorEdit.vue'
2123
import CollaboratorListItem from '@/components/collaborator/CollaboratorListItem.vue'
2224
import { sortBy } from 'lodash-es'
2325
import campCollaborationDisplayName from '@/common/helpers/campCollaborationDisplayName.js'
26+
import isOwnCampCollaboration from './isOwnCampCollaboration.js'
2427
2528
const ROLE_ORDER = ['manager', 'member', 'guest']
2629
@@ -44,6 +47,17 @@ export default {
4447
campCollaborationDisplayName(c, this.$tc.bind(this)).toLowerCase()
4548
)
4649
},
50+
51+
isOwnCollaborationMap() {
52+
const result = {}
53+
this.collaborators.forEach((collaborator) => {
54+
result[collaborator._meta.self] = isOwnCampCollaboration(
55+
collaborator,
56+
this.$store.state.auth
57+
)
58+
})
59+
return result
60+
},
4761
},
4862
}
4963
</script>

frontend/src/components/collaborator/PromptCollaboratorDeactivate.vue

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import DialogBase from '@/components/dialog/DialogBase.vue'
3535
import campCollaborationDisplayName from '@/common/helpers/campCollaborationDisplayName.js'
3636
import { errorToMultiLineToast } from '@/components/toast/toasts'
3737
import PopoverPrompt from '@/components/prompt/PopoverPrompt.vue'
38+
import isOwnCampCollaboration from './isOwnCampCollaboration.js'
3839
3940
export default {
4041
name: 'PromptCollaboratorDeactivate',
@@ -45,10 +46,7 @@ export default {
4546
},
4647
computed: {
4748
isOwnCampCollaboration() {
48-
if (!(typeof this.entity.user === 'function')) {
49-
return false
50-
}
51-
return this.$store.state.auth.user?.id === this.entity.user().id
49+
return isOwnCampCollaboration(this.entity, this.$store.state.auth)
5250
},
5351
displayName() {
5452
return campCollaborationDisplayName(this.entity, this.$tc.bind(this))
@@ -65,9 +63,13 @@ export default {
6563
.catch((e) => this.$toast.error(errorToMultiLineToast(e)))
6664
6765
// User left camp -> navigate to camp-overview
68-
promise.then(
69-
() => this.isOwnCampCollaboration && this.$router.push({ name: 'camps' })
70-
)
66+
promise.then(() => {
67+
if (!this.isOwnCampCollaboration) {
68+
return
69+
}
70+
this.api.get().camps().$reload()
71+
this.$router.push({ name: 'camps' })
72+
})
7173
7274
return promise
7375
},
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @typedef Collaborator {
3+
* user: () => { id: string },
4+
* }
5+
*
6+
* @typedef Auth {
7+
* user: { id: string },
8+
* }
9+
*
10+
* @param {Collaborator} collaborator
11+
* @param {Auth} auth
12+
* @returns {boolean}
13+
*/
14+
export default function isOwnCampCollaboration(collaborator, auth) {
15+
if (!(typeof collaborator.user === 'function')) {
16+
return false
17+
}
18+
return auth.user?.id === collaborator.user().id
19+
}

0 commit comments

Comments
 (0)