diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index 101713f91..f1663ca2c 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -164,6 +164,7 @@ const permissions = shield( UpdateBadge: isAdmin, DeleteBadge: isAdmin, CreateSocialMedia: isAuthenticated, + UpdateSocialMedia: isAuthenticated, DeleteSocialMedia: isAuthenticated, // AddBadgeRewarded: isAdmin, // RemoveBadgeRewarded: isAdmin, diff --git a/backend/src/schema/resolvers/socialMedia.js b/backend/src/schema/resolvers/socialMedia.js index 0bc03ea74..b0b99d93e 100644 --- a/backend/src/schema/resolvers/socialMedia.js +++ b/backend/src/schema/resolvers/socialMedia.js @@ -10,7 +10,7 @@ export default { const session = context.driver.session() await session.run( `MATCH (owner:User {id: $userId}), (socialMedia:SocialMedia {id: $socialMediaId}) - MERGE (socialMedia)<-[:OWNED]-(owner) + MERGE (socialMedia)<-[:OWNED]-(owner) RETURN owner`, { userId: context.user.id, @@ -26,5 +26,20 @@ export default { return socialMedia }, + UpdateSocialMedia: async (object, params, context, resolveInfo) => { + const session = context.driver.session() + await session.run( + `MATCH (owner:User {id: $userId}), (socialMedia:SocialMedia {id: $socialMediaId}) + WHERE (socialMedia)<-[:OWNED]-(owner) + SET socialMedia.url = $socialMediaUrl + RETURN owner`, + { + userId: context.user.id, + socialMediaId: params.id, + socialMediaUrl: params.url, + }, + ) + session.close() + }, }, } diff --git a/webapp/pages/settings/my-social-media.vue b/webapp/pages/settings/my-social-media.vue index f62097c28..296aa6801 100644 --- a/webapp/pages/settings/my-social-media.vue +++ b/webapp/pages/settings/my-social-media.vue @@ -4,13 +4,13 @@ :schema="formSchema" @input="handleInput" @input-valid="handleInputValid" - @submit="handleAddSocialMedia" + @submit="handleSubmitSocialMedia" > - - {{ editingLink === '' ? $t('settings.social-media.submit') : $t('actions.save') }} + {{ editingLink.id ? $t('actions.save') : $t('settings.social-media.submit') }} - + {{ $t('actions.cancel') }} @@ -80,7 +80,7 @@ export default { }, }, disabled: true, - editingLink: '', + editingLink: {}, } }, computed: { @@ -103,7 +103,7 @@ export default { setCurrentUser: 'auth/SET_USER', }), handleCancel() { - this.editingLink = '' + this.editingLink = {} this.formData.socialMediaLink = '' this.disabled = true }, @@ -117,37 +117,66 @@ export default { this.disabled = false } }, - async handleAddSocialMedia() { - const mutation = gql` - mutation($url: String!) { - CreateSocialMedia(url: $url) { - id - url + async handleSubmitSocialMedia() { + if (!this.editingLink.id) { + const mutation = gql` + mutation($url: String!) { + CreateSocialMedia(url: $url) { + id + url + } } - } - ` - const variables = { url: this.formData.socialMediaLink } + ` + const variables = { url: this.formData.socialMediaLink } + + this.$apollo + .mutate({ + mutation, + variables, + update: (store, { data }) => { + const socialMedia = [...this.currentUser.socialMedia, data.CreateSocialMedia] + this.setCurrentUser({ + ...this.currentUser, + socialMedia, + }) + }, + }) + .then(() => { + this.$toast.success(this.$t('settings.social-media.successAdd')) + this.formData.socialMediaLink = '' + this.disabled = true + }) + .catch(error => { + this.$toast.error(error.message) + }) + } else { + const mutation = gql` + mutation($id: ID!, $url: String!) { + UpdateSocialMedia(id: $id, url: $url) { + id + url + } + } + ` + const variables = { id: this.editingLink.id, url: this.formData.socialMediaLink } + + this.$apollo + .mutate({ + mutation, + variables, + //update + }) + .then(() => { + this.$toast.success('updated!') + this.formData.socialMediaLink = '' + this.editingLink = {} + this.disabled = true + }) + .catch(error => { + this.$toast.error(error.message) + }) + } - this.$apollo - .mutate({ - mutation, - variables, - update: (store, { data }) => { - const socialMedia = [...this.currentUser.socialMedia, data.CreateSocialMedia] - this.setCurrentUser({ - ...this.currentUser, - socialMedia, - }) - }, - }) - .then(() => { - this.$toast.success(this.$t('settings.social-media.successAdd')) - this.formData.socialMediaLink = '' - this.disabled = true - }) - .catch(error => { - this.$toast.error(error.message) - }) }, handleDeleteSocialMedia(link) { this.$apollo @@ -181,7 +210,7 @@ export default { }) }, handleEditSocialMedia(link) { - this.editingLink = link.id + this.editingLink = link this.formData.socialMediaLink = link.url this.disabled = false },