diff options
| author | lambadalambda <gitgud@rogerbraun.net> | 2016-12-05 07:09:35 -0500 |
|---|---|---|
| committer | lambadalambda <gitgud@rogerbraun.net> | 2016-12-05 07:09:35 -0500 |
| commit | be5fe03972879add14ce2ca6b37524b32adbf1b8 (patch) | |
| tree | ad05cec7702c10dd8f34d1e906a06c5c74a9c766 /src | |
| parent | 3c702feacae761d51c40417bdcc15fe13a26a85b (diff) | |
| parent | 75fdc72e222dee612137e4521dab1e44191948bb (diff) | |
Merge branch 'feature/delete_status' into 'develop'
Implements feature status delete
Fixes issue #4
See merge request !6
Diffstat (limited to 'src')
| -rw-r--r-- | src/_variables.scss | 1 | ||||
| -rw-r--r-- | src/components/status/status.js | 10 | ||||
| -rw-r--r-- | src/components/status/status.vue | 14 | ||||
| -rw-r--r-- | src/modules/statuses.js | 11 | ||||
| -rw-r--r-- | src/services/api/api.service.js | 9 |
5 files changed, 43 insertions, 2 deletions
diff --git a/src/_variables.scss b/src/_variables.scss index c317fd32..d2b7065d 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -3,4 +3,5 @@ $main-background: white; $darkened-background: whitesmoke; $green: #0fa00f; $blue: #0095ff; +$red: #ff0000; diff --git a/src/components/status/status.js b/src/components/status/status.js index 0bf2ecde..8b2561cf 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -20,7 +20,9 @@ const Status = { }, loggedIn () { return !!this.$store.state.users.currentUser - } + }, + deleted () { return this.statusoid.deleted }, + canDelete () { return this.statusoid.user.rights.delete_others_notice || this.statusoid.user.id == this.$store.state.users.currentUser.id } }, components: { Attachment, @@ -31,6 +33,12 @@ const Status = { methods: { toggleReplying () { this.replying = !this.replying + }, + deleteStatus () { + const confirmed = confirm('Do you really want to delete this status?') + if (confirmed) { + this.$store.dispatch('deleteStatus', { id: this.status.id }) + } } } } diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 9c32e7cb..6b9bca5b 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -1,5 +1,5 @@ <template> - <div class="status-el"> + <div class="status-el" v-if="!status.deleted"> <div v-if="retweet" class="media container retweet-info"> <div class="media-left"> <i class='fa icon-retweet retweeted'></i> @@ -52,6 +52,11 @@ </div> <retweet-button :status=status></retweet-button> <favorite-button :status=status></favorite-button> + <div v-if="canDelete"> + <a href="#" v-on:click.prevent="deleteStatus"> + <i class='fa icon-cancel delete-status'></i> + </a> + </div> </div> <post-status-form v-if="replying" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying"></post-status-form> @@ -125,4 +130,11 @@ .status-el:last-child .status { border: none } + + .icon-cancel,.delete-status { + cursor: pointer; + &:hover { + color: $red; + } + } </style> diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 7ce07c96..a5a0374e 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -45,6 +45,9 @@ export const prepareStatus = (status) => { status.nsfw = !!status.text.match(nsfwRegex) } + // Set deleted flag + status.deleted = false + // To make the array reactive status.attachments = status.attachments || [] @@ -235,6 +238,10 @@ export const mutations = { const newStatus = find(state.allStatuses, status) newStatus.repeated = value }, + setDeleted (state, { status }) { + const newStatus = find(state.allStatuses, status) + newStatus.deleted = true + }, setLoading (state, { timeline, value }) { state.timelines[timeline].loading = value }, @@ -250,6 +257,10 @@ const statuses = { addNewStatuses ({ rootState, commit }, { statuses, showImmediately = false, timeline = false, noIdUpdate = false }) { commit('addNewStatuses', { statuses, showImmediately, timeline, noIdUpdate, user: rootState.users.currentUser }) }, + deleteStatus ({ rootState, commit }, status) { + commit('setDeleted', { status }) + apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials }) + }, favorite ({ rootState, commit }, status) { // Optimistic favoriting... commit('setFavorited', { status, value: true }) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 47895d3b..a78ab5c9 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -7,6 +7,7 @@ const FAVORITE_URL = '/api/favorites/create' const UNFAVORITE_URL = '/api/favorites/destroy' const RETWEET_URL = '/api/statuses/retweet' const STATUS_UPDATE_URL = '/api/statuses/update.json' +const STATUS_DELETE_URL = '/api/statuses/destroy' const STATUS_URL = '/api/statuses/show' const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload' const CONVERSATION_URL = '/api/statusnet/conversation' @@ -118,6 +119,13 @@ const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => { }) } +const deleteStatus = ({ id, credentials }) => { + return fetch(`${STATUS_DELETE_URL}/${id}.json`, { + headers: authHeaders(credentials), + method: 'POST' + }) +} + const uploadMedia = ({formData, credentials}) => { return fetch(MEDIA_UPLOAD_URL, { body: formData, @@ -139,6 +147,7 @@ const apiService = { unfavorite, retweet, postStatus, + deleteStatus, uploadMedia } |
