forked from AkkomaGang/akkoma-fe
parent
df51d08814
commit
75fdc72e22
6 changed files with 48 additions and 2 deletions
|
@ -3,4 +3,5 @@ $main-background: white;
|
|||
$darkened-background: whitesmoke;
|
||||
$green: #0fa00f;
|
||||
$blue: #0095ff;
|
||||
$red: #ff0000;
|
||||
|
||||
|
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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'></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>
|
||||
|
|
|
@ -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 })
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,11 @@ describe('Statuses.prepareStatus', () => {
|
|||
|
||||
expect(prepareStatus(nsfw).nsfw).to.eq(false)
|
||||
})
|
||||
|
||||
it('sets deleted flag to false', () => {
|
||||
const aStatus = makeMockStatus({id: 1, text: 'Hello oniichan'})
|
||||
expect(prepareStatus(aStatus).deleted).to.eq(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('Statuses.findMaxId', () => {
|
||||
|
|
Loading…
Reference in a new issue