Add project entry deletion by user
This commit is contained in:
parent
d5364d8d9d
commit
735d2d9afa
|
|
@ -1,7 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="project-entry">
|
<div class="project-entry">
|
||||||
<more-options-widget class="project-entry__more" data-cy="project-entry-more">
|
<more-options-widget class="project-entry__more" data-cy="project-entry-more">
|
||||||
<li class="popover-links__link"><a @click="editProjectEntry()" data-cy="edit-project-entry">Eintrag bearbeiten</a></li>
|
<li class="popover-links__link"><a @click="editProjectEntry()" data-cy="edit-project-entry">Eintrag bearbeiten</a>
|
||||||
|
</li>
|
||||||
|
<li class="popover-links__link"><a @click="deleteProjectEntry()" data-cy="delete-project-entry">Eintrag löschen</a>
|
||||||
|
</li>
|
||||||
</more-options-widget>
|
</more-options-widget>
|
||||||
|
|
||||||
<h3 class="project-entry__heading">Tätigkeit</h3>
|
<h3 class="project-entry__heading">Tätigkeit</h3>
|
||||||
|
|
@ -31,6 +34,9 @@
|
||||||
import DocumentBlock from '@/components/content-blocks/DocumentBlock';
|
import DocumentBlock from '@/components/content-blocks/DocumentBlock';
|
||||||
import MoreOptionsWidget from '@/components/MoreOptionsWidget';
|
import MoreOptionsWidget from '@/components/MoreOptionsWidget';
|
||||||
|
|
||||||
|
import DELETE_PROJECT_ENTRY_MUTATION from '@/graphql/gql/mutations/deleteProjectEntry.gql';
|
||||||
|
import PROJECT_QUERY from '@/graphql/gql/projectQuery.gql';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
DocumentBlock,
|
DocumentBlock,
|
||||||
|
|
@ -41,6 +47,30 @@
|
||||||
methods: {
|
methods: {
|
||||||
editProjectEntry() {
|
editProjectEntry() {
|
||||||
this.$store.dispatch('editProjectEntry', this.id);
|
this.$store.dispatch('editProjectEntry', this.id);
|
||||||
|
},
|
||||||
|
deleteProjectEntry() {
|
||||||
|
const projectEntry = this; // otherwise we run into scope errors
|
||||||
|
this.$apollo.mutate({
|
||||||
|
mutation: DELETE_PROJECT_ENTRY_MUTATION,
|
||||||
|
variables: {
|
||||||
|
input: {
|
||||||
|
id: this.id
|
||||||
|
}
|
||||||
|
},
|
||||||
|
update(store, {data: {deleteProjectEntry: {success}}}) {
|
||||||
|
if (success) {
|
||||||
|
const query = PROJECT_QUERY;
|
||||||
|
const variables = {
|
||||||
|
slug: projectEntry.$route.params.slug
|
||||||
|
};
|
||||||
|
const data = store.readQuery({query, variables});
|
||||||
|
if (data) {
|
||||||
|
data.project.entries.edges.splice(data.project.entries.edges.findIndex(edge => edge.node.id === projectEntry.id), 1);
|
||||||
|
store.writeQuery({query, variables, data});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
mutation DeleteProjectEntry($input: DeleteProjectEntryInput!) {
|
||||||
|
deleteProjectEntry(input: $input) {
|
||||||
|
success
|
||||||
|
errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#{
|
||||||
|
# "input": {
|
||||||
|
# "id": "Um9vbU5vZGU6MjY="
|
||||||
|
# }
|
||||||
|
#}
|
||||||
|
|
@ -13,6 +13,7 @@ from portfolio.serializers import ProjectSerializer, ProjectEntrySerializer
|
||||||
def check_owner(user, project):
|
def check_owner(user, project):
|
||||||
return user.id != project.student.id
|
return user.id != project.student.id
|
||||||
|
|
||||||
|
|
||||||
class MutateProject(relay.ClientIDMutation):
|
class MutateProject(relay.ClientIDMutation):
|
||||||
errors = graphene.List(graphene.String)
|
errors = graphene.List(graphene.String)
|
||||||
project = graphene.Field(ProjectNode)
|
project = graphene.Field(ProjectNode)
|
||||||
|
|
@ -49,7 +50,6 @@ class AddProject(MutateProject):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
|
|
||||||
data = kwargs.get('project')
|
data = kwargs.get('project')
|
||||||
data['student'] = info.context.user.id
|
data['student'] = info.context.user.id
|
||||||
|
|
||||||
|
|
@ -124,10 +124,29 @@ class DeleteProject(relay.ClientIDMutation):
|
||||||
return cls(success=True)
|
return cls(success=True)
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteProjectEntry(relay.ClientIDMutation):
|
||||||
|
class Input:
|
||||||
|
id = graphene.ID(required=True)
|
||||||
|
|
||||||
|
success = graphene.Boolean()
|
||||||
|
errors = graphene.List(graphene.String)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
|
id = kwargs.get('id')
|
||||||
|
project_entry = get_object(ProjectEntry, id)
|
||||||
|
user = info.context.user
|
||||||
|
|
||||||
|
if project_entry.project.student != user:
|
||||||
|
raise PermissionDenied('Permission denied: Incorrect project')
|
||||||
|
project_entry.delete()
|
||||||
|
return cls(success=True)
|
||||||
|
|
||||||
|
|
||||||
class PortfolioMutations:
|
class PortfolioMutations:
|
||||||
add_project = AddProject.Field()
|
add_project = AddProject.Field()
|
||||||
update_project = UpdateProject.Field()
|
update_project = UpdateProject.Field()
|
||||||
delete_project = DeleteProject.Field()
|
delete_project = DeleteProject.Field()
|
||||||
add_project_entry = AddProjectEntry.Field()
|
add_project_entry = AddProjectEntry.Field()
|
||||||
update_project_entry = UpdateProjectEntry.Field()
|
update_project_entry = UpdateProjectEntry.Field()
|
||||||
|
delete_project_entry = DeleteProjectEntry.Field()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue