diff --git a/webapp/components/DeleteAccount/DeleteAccount.spec.js b/webapp/components/DeleteData/DeleteData.spec.js similarity index 78% rename from webapp/components/DeleteAccount/DeleteAccount.spec.js rename to webapp/components/DeleteData/DeleteData.spec.js index b2cbeb1b3..139316ed2 100644 --- a/webapp/components/DeleteAccount/DeleteAccount.spec.js +++ b/webapp/components/DeleteData/DeleteData.spec.js @@ -1,5 +1,5 @@ -import { config, mount, createLocalVue } from '@vue/test-utils' -import DeleteAccount from './DeleteAccount.vue' +import { mount, createLocalVue } from '@vue/test-utils' +import DeleteData from './DeleteData.vue' import Styleguide from '@human-connection/styleguide' import Vuex from 'vuex' @@ -7,20 +7,18 @@ const localVue = createLocalVue() localVue.use(Vuex) localVue.use(Styleguide) -config.stubs['b-switch'] = '' -config.stubs['b-checkbox'] = '' -describe('DeleteAccount.vue', () => { +describe('DeleteData.vue', () => { let mocks let wrapper let getters let actions let deleteAccountBtn let enableDeletionInput - let enablePostDeletionInput - let enableCommentDeletionInput + let enableContributionDeletionCheckbox + let enableCommentDeletionCheckbox const deleteAccountName = 'Delete MyAccount' - const deletePostsMessage = 'Delete my 2 posts' + const deleteContributionsMessage = 'Delete my 2 posts' const deleteCommentsMessage = 'Delete my 3 comments' beforeEach(() => { @@ -31,7 +29,7 @@ describe('DeleteAccount.vue', () => { .fn() .mockResolvedValueOnce({ data: { - DeleteAccount: { + DeleteData: { id: 'u343', }, }, @@ -62,7 +60,7 @@ describe('DeleteAccount.vue', () => { getters, actions, }) - return mount(DeleteAccount, { mocks, localVue, store }) + return mount(DeleteData, { mocks, localVue, store }) } beforeEach(() => { @@ -111,9 +109,9 @@ describe('DeleteAccount.vue', () => { }) it("deletes a user's posts if requested", () => { - mocks.$t.mockImplementation(() => deletePostsMessage) - enablePostDeletionInput = wrapper.find('.enable-post-deletion-input input') - enablePostDeletionInput.setValue(deletePostsMessage) + mocks.$t.mockImplementation(() => deleteContributionsMessage) + enableContributionDeletionCheckbox = wrapper.findAll('.checkbox-container input').at(0) + enableContributionDeletionCheckbox.trigger('click') deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ @@ -127,8 +125,8 @@ describe('DeleteAccount.vue', () => { it("deletes a user's comments if requested", () => { mocks.$t.mockImplementation(() => deleteCommentsMessage) - enableCommentDeletionInput = wrapper.find('.enable-comment-deletion-input input') - enableCommentDeletionInput.setValue(deleteCommentsMessage) + enableCommentDeletionCheckbox = wrapper.findAll('.checkbox-container input').at(1) + enableCommentDeletionCheckbox.trigger('click') deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ @@ -141,12 +139,12 @@ describe('DeleteAccount.vue', () => { }) it("deletes a user's posts and comments if requested", () => { - mocks.$t.mockImplementation(() => deletePostsMessage) - enablePostDeletionInput = wrapper.find('.enable-post-deletion-input input') - enablePostDeletionInput.setValue(deletePostsMessage) + mocks.$t.mockImplementation(() => deleteContributionsMessage) + enableContributionDeletionCheckbox = wrapper.findAll('.checkbox-container input').at(0) + enableContributionDeletionCheckbox.trigger('click') mocks.$t.mockImplementation(() => deleteCommentsMessage) - enableCommentDeletionInput = wrapper.find('.enable-comment-deletion-input input') - enableCommentDeletionInput.setValue(deleteCommentsMessage) + enableCommentDeletionCheckbox = wrapper.findAll('.checkbox-container input').at(1) + enableCommentDeletionCheckbox.trigger('click') deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ @@ -163,7 +161,7 @@ describe('DeleteAccount.vue', () => { expect(mocks.$toast.success).toHaveBeenCalledTimes(1) }) - it('updates the user in the store', async () => { + it('redirect the user to the homepage', async () => { await deleteAccountBtn.trigger('click') expect(mocks.$router.history.push).toHaveBeenCalledWith('/') }) diff --git a/webapp/components/DeleteAccount/DeleteAccount.vue b/webapp/components/DeleteData/DeleteData.vue similarity index 52% rename from webapp/components/DeleteAccount/DeleteAccount.vue rename to webapp/components/DeleteData/DeleteData.vue index 872be24f5..5f0e781d7 100644 --- a/webapp/components/DeleteAccount/DeleteAccount.vue +++ b/webapp/components/DeleteData/DeleteData.vue @@ -4,10 +4,10 @@ - + - + {{ $t('settings.deleteUserAccount.name') }} @@ -20,62 +20,33 @@ - + + + {{ + $t('settings.deleteUserAccount.contributionsCount', { + count: currentUser.contributionsCount, }) - " - > - - - - - - - - + + + + {{ + $t('settings.deleteUserAccount.commentsCount', { + count: currentUser.commentsCount, }) - " - > - - - - - - - - - - - + }} + + + + + - + - + {{ $t('settings.deleteUserAccount.name') }} @@ -111,16 +77,12 @@ import { mapGetters, mapActions } from 'vuex' import gql from 'graphql-tag' export default { - name: 'DeleteAccount', + name: 'DeleteData', data() { return { deleteContributions: false, deleteComments: false, deleteEnabled: false, - isLoading: false, - enableDeletionValue: '', - deleteContributionsValue: '', - deleteCommentsValue: '', } }, computed: { @@ -135,23 +97,6 @@ export default { enableDeletion() { if (this.enableDeletionValue === this.currentUser.name) { this.deleteEnabled = true - this.focused = false - } - if ( - this.deleteContributionsValue === - this.$t('settings.deleteUserAccount.contributionsCount', { - count: this.currentUser.contributionsCount, - }) - ) { - this.deleteContributions = true - } - if ( - this.deleteCommentsValue === - this.$t('settings.deleteUserAccount.commentsCount', { - count: this.currentUser.commentsCount, - }) - ) { - this.deleteComments = true } }, handleSubmit() { @@ -190,9 +135,72 @@ export default { color: $color-danger; } -.enable-deletion-input input:focus, -.enable-post-deletion-input input:focus, -.enable-comment-deletion-input input:focus { +.checkbox-container { + display: block; + position: relative; + padding-left: 35px; + cursor: pointer; + font-size: $font-size-large; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox-container input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +.checkmark { + position: absolute; + top: 0; + left: 0; + height: 20px; + width: 20px; + border: 2px solid $background-color-inverse-softer; + background-color: $background-color-base; + border-radius: $border-radius-x-large; +} + +.checkbox-container:hover input ~ .checkmark { + background-color: $background-color-softest; +} + +/* When the checkbox is checked, add a blue background */ +.checkbox-container input:checked ~ .checkmark { + background-color: $background-color-danger-active; +} + +/* Create the checkmark/indicator (hidden when not checked) */ +.checkmark:after { + content: ''; + position: absolute; + display: none; +} + +/* Show the checkmark when checked */ +.checkbox-container input:checked ~ .checkmark:after { + display: block; +} + +/* Style the checkmark/indicator */ +.checkbox-container .checkmark:after { + left: 6px; + top: 3px; + width: 5px; + height: 10px; + border: solid $background-color-base; + border-width: 0 $border-size-large $border-size-large 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.enable-deletion-input input:focus { border-color: $border-color-danger; } @@ -204,7 +212,7 @@ b.is-danger { color: $text-color-danger; } -.ds-card-footer { +.delete-data-footer { border-top: $border-size-base solid $border-color-softest; background-color: $background-color-danger-inverse; } diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 68f495ca5..6d10bd7e7 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -74,13 +74,13 @@ "name": "Daten herunterladen" }, "deleteUserAccount": { - "name": "Mein Benutzerkonto löschen", + "name": "Daten löschen", "contributionsCount": "Meine {count} Beiträge löschen", "commentsCount": "Meine {count} Kommentare löschen", - "accountDescription": "Seien Sie sich bewusst, dass Ihre Beiträge und Kommentare für unsere Community wichtig sind. Wenn du sie trotzdem löschen möchtest, musst du dies unten auswählen.", - "accountWarning": "Dein Benutzerkonto, die Beiträge, etc. kannst Du nach dem Löschen WEDER VERWALTEN NOCH WIEDERHERSTELLEN!", + "accountDescription": "Sie dir bewusst, dass deine Beiträge und Kommentare für unsere Community wichtig sind. Wenn du sie trotzdem löschen möchtest, musst du sie unten markieren.", + "accountWarning": "Dein Konto, Beiträge oder Kommentare kannst Du nach dem Löschen WEDER VERWALTEN NOCH WIEDERHERSTELLEN!", "success": "Konto erfolgreich gelöscht", - "pleaseConfirm": "Zerstörerische Aktion! Geben Sie {confirm} ein, um zu bestätigen." + "pleaseConfirm": "Zerstörerische Aktion! Gib {confirm} ein, um zu bestätigen." }, "organizations": { "name": "Meine Organisationen" diff --git a/webapp/locales/en.json b/webapp/locales/en.json index f56970db2..77d6cc57b 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -74,11 +74,11 @@ "name": "Download Data" }, "deleteUserAccount": { - "name": "Delete my User Account", + "name": "Delete Data", "contributionsCount": "Delete my {count} posts", "commentsCount": "Delete my {count} comments", - "accountDescription": "Be aware that your Post and Comments are important to our community. If you still want to delete them, you have to choose so below.", - "accountWarning": "You CAN'T MANAGE and CAN'T RECOVER your Account, Posts... after deleting your account!", + "accountDescription": "Be aware that your Post and Comments are important to our community. If you still choose to delete them, you have to mark them below.", + "accountWarning": "You CAN'T MANAGE and CAN'T RECOVER your Account, Posts, or Comments after deleting your account!", "success": "Account successfully deleted", "pleaseConfirm": "Destructive action! Type {confirm} to confirm" }, diff --git a/webapp/pages/settings/delete-account.vue b/webapp/pages/settings/delete-account.vue index 944abef17..e1872bf4c 100644 --- a/webapp/pages/settings/delete-account.vue +++ b/webapp/pages/settings/delete-account.vue @@ -1,13 +1,13 @@ - +