person: suggest entities for resources

This commit is contained in:
nobohan 2021-11-28 22:53:36 +01:00
parent 4abb1a7a57
commit 60422f5eee
3 changed files with 47 additions and 3 deletions

View File

@ -109,7 +109,7 @@ export default {
.filter((e) => e !== null)
.filter((e) => e.type === 'person')
.filter(
(p) => !state.accompanyingCourse.participations.map((p) => p.person.id).includes(p.id)
(p) => !state.accompanyingCourse.participations.map((pa) => pa.person.id).includes(p.id)
)
}),
...mapGetters([

View File

@ -248,7 +248,7 @@ export default {
});
},
addSuggestedEntity(e) {
this.$store.dispatch('addRequestor', { result: e, type: e.type }) //TODO check person | thirdparty
this.$store.dispatch('addRequestor', { result: e, type: e.type })
.catch(({name, violations}) => {
if (name === 'ValidationException' || name === 'AccessException') {
violations.forEach((violation) => this.$toast.open({message: violation}));

View File

@ -18,6 +18,18 @@
@remove="removeResource">
</resource-item>
</div>
<div v-if="suggestedEntities.length > 0">
<ul class="list-suggest add-items">
<li v-for="p in suggestedEntities" :key="uniqueId(p)" @click="addSuggestedEntity(p)">
<span class="badge bg-primary" style="cursor: pointer;">
<i class="fa fa-plus fa-fw text-success"></i>
{{ p.text }}
</span>
</li>
</ul>
</div>
<div>
<add-persons
buttonTitle="resources.add_resources"
@ -57,7 +69,26 @@ export default {
},
computed: mapState({
resources: state => state.accompanyingCourse.resources,
counter: state => state.accompanyingCourse.resources.length
counter: state => state.accompanyingCourse.resources.length,
suggestedEntities: state => [
state.accompanyingCourse.requestor,
...state.accompanyingCourse.participations.map(p => p.person),
]
.filter((e) => e !== null)
.filter(
(e) => {
if (e.type === 'person') {
return !state.accompanyingCourse.resources
.filter((r) => r.resource.type === 'person')
.map((r) => r.resource.id).includes(e.id)
}
if (e.type === 'thirdparty') {
return !state.accompanyingCourse.resources
.filter((r) => r.resource.type === 'thirdparty')
.map((r) => r.resource.id).includes(e.id)
}
}
)
}),
methods: {
removeResource(item) {
@ -86,6 +117,19 @@ export default {
);
this.$refs.addPersons.resetSearch(); // to cast child method
modal.showModal = false;
},
addSuggestedEntity(e) {
this.$store.dispatch('addResource', { result: e, type: e.type})
.catch(({name, violations}) => {
if (name === 'ValidationException' || name === 'AccessException') {
violations.forEach((violation) => this.$toast.open({message: violation}));
} else {
this.$toast.open({message: 'An error occurred'})
}
})
},
uniqueId(e) {
return `${e.type}-${e.id}`;
}
}
}