summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/Composer/Composer.vue2
-rw-r--r--src/components/Composer/SubmitStatusButton.vue2
-rw-r--r--src/store/timeline.js134
-rw-r--r--src/types/Mastodon.js2
4 files changed, 74 insertions, 66 deletions
diff --git a/src/components/Composer/Composer.vue b/src/components/Composer/Composer.vue
index 77067035..083d1f7c 100644
--- a/src/components/Composer/Composer.vue
+++ b/src/components/Composer/Composer.vue
@@ -110,7 +110,7 @@
<VisibilitySelect :type.sync="type" />
<div class="emptySpace" />
- <SubmitStatusButton :type="type" :disabled="canPost || loading" @click="createPost" />
+ <SubmitStatusButton :type="type" :disabled="!canPost || loading" @click="createPost" />
<!-- <NcButton :value="currentVisibilityPostLabel"
:disabled="!canPost"
diff --git a/src/components/Composer/SubmitStatusButton.vue b/src/components/Composer/SubmitStatusButton.vue
index 792c2eae..831b7d89 100644
--- a/src/components/Composer/SubmitStatusButton.vue
+++ b/src/components/Composer/SubmitStatusButton.vue
@@ -23,7 +23,7 @@
<template>
<NcButton :value="currentVisibilityPostLabel"
- :disabled="!disabled"
+ :disabled="disabled"
native-type="submit"
type="primary"
@click.prevent="handleClick">
diff --git a/src/store/timeline.js b/src/store/timeline.js
index 43737e64..1a3a9a73 100644
--- a/src/store/timeline.js
+++ b/src/store/timeline.js
@@ -112,56 +112,52 @@ const mutations = {
* @param state
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- likePost(state, { post, parentAnnounce }) {
- if (typeof state.timeline[post.id] !== 'undefined') {
+ likePost(state, { post }) {
+ if (state.timeline[post.id] !== undefined) {
Vue.set(state.timeline[post.id], 'favourited', true)
}
- if (typeof parentAnnounce.id !== 'undefined') {
- Vue.set(state.timeline[parentAnnounce.id].cache[parentAnnounce.object], 'favourited', true)
+ if (post.reblog !== null && state.timeline[post.reblog.id] !== undefined) {
+ Vue.set(state.timeline[post.reblog.id], 'favourited', true)
}
},
/**
* @param state
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- unlikePost(state, { post, parentAnnounce }) {
- if (typeof state.timeline[post.id] !== 'undefined') {
+ unlikePost(state, { post }) {
+ if (state.timeline[post.id] !== undefined) {
Vue.set(state.timeline[post.id], 'favourited', false)
}
- if (typeof parentAnnounce.id !== 'undefined') {
- Vue.set(state.timeline[parentAnnounce.id].cache[parentAnnounce.object].object, 'favourited', false)
+ if (post.reblog !== null && state.timeline[post.reblog.id] !== undefined) {
+ Vue.set(state.timeline[post.reblog.id], 'favourited', false)
}
},
/**
* @param state
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- boostPost(state, { post, parentAnnounce }) {
- if (typeof state.timeline[post.id] !== 'undefined') {
+ boostPost(state, { post }) {
+ if (state.timeline[post.id] !== undefined) {
Vue.set(state.timeline[post.id], 'reblogged', true)
}
- if (typeof parentAnnounce.id !== 'undefined') {
- Vue.set(state.timeline[parentAnnounce.id].cache[parentAnnounce.object].object, 'reblogged', true)
+ if (post.reblog !== null && state.timeline[post.reblog.id] !== undefined) {
+ Vue.set(state.timeline[post.reblog.id], 'reblogged', true)
}
},
/**
* @param state
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- unboostPost(state, { post, parentAnnounce }) {
- if (typeof state.timeline[post.id] !== 'undefined') {
+ unboostPost(state, { post }) {
+ if (state.timeline[post.id] !== undefined) {
Vue.set(state.timeline[post.id], 'reblogged', false)
}
- if (typeof parentAnnounce.id !== 'undefined') {
- Vue.set(state.timeline[parentAnnounce.id].cache[parentAnnounce.object].object, 'reblogged', false)
+ if (post.reblog !== null && state.timeline[post.reblog.id] !== undefined) {
+ Vue.set(state.timeline[post.reblog.id], 'reblogged', false)
}
},
}
@@ -231,7 +227,7 @@ const actions = {
async post(context, post) {
try {
const { data } = await axios.post(generateUrl('apps/social/api/v1/statuses'), post)
- logger.info('Post created with token ' + data.id)
+ logger.info('Post created', data.id)
} catch (error) {
showError('Failed to create a post')
logger.error('Failed to create a post', { error })
@@ -241,84 +237,96 @@ const actions = {
* @param context
* @param {import('../types/Mastodon.js').Status} post
*/
- postDelete(context, post) {
- return axios.delete(generateUrl(`apps/social/api/v1/post?id=${post.uri}`)).then((response) => {
+ async postDelete(context, post) {
+ try {
context.commit('removePost', post)
+ const response = await axios.delete(generateUrl(`apps/social/api/v1/post?id=${post.uri}`))
logger.info('Post deleted with token ' + response.data.result.token)
- }).catch((error) => {
+ } catch (error) {
+ context.commit('addToTimeline', [post])
showError('Failed to delete the post')
logger.error('Failed to delete the post', { error })
- })
+ }
},
/**
* @param context
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- postLike(context, { post, parentAnnounce }) {
- return new Promise((resolve, reject) => {
- axios.post(generateUrl(`apps/social/api/v1/post/like?postId=${post.uri}`)).then((response) => {
- context.commit('likePost', { post, parentAnnounce })
- resolve(response)
- }).catch((error) => {
- showError('Failed to like post')
- logger.error('Failed to like post', { error })
- reject(error)
- })
- })
+ async postLike(context, { post }) {
+ try {
+ context.commit('likePost', { post })
+ const response = await axios.post(generateUrl(`apps/social/api/v1/statuses/${post.id}/favourite`))
+ logger.info('Post liked')
+ context.commit('addToTimeline', [response.data])
+ return response
+ } catch (error) {
+ context.commit('unlikePost', { post })
+ showError('Failed to like post')
+ logger.error('Failed to like post', { error })
+ }
},
/**
* @param context
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- postUnlike(context, { post, parentAnnounce }) {
- return axios.delete(generateUrl(`apps/social/api/v1/post/like?postId=${post.uri}`)).then((response) => {
- context.commit('unlikePost', { post, parentAnnounce })
+ async postUnlike(context, { post }) {
+ try {
// Remove post from list if we are in the 'liked' timeline
if (state.type === 'liked') {
context.commit('removePost', post)
}
- }).catch((error) => {
+ context.commit('unlikePost', { post })
+ const response = await axios.post(generateUrl(`apps/social/api/v1/statuses/${post.id}/unfavourite`))
+ logger.info('Post unliked')
+ context.commit('addToTimeline', [response.data])
+ return response
+ } catch (error) {
+ // Readd post from list if we are in the 'liked' timeline
+ if (state.type === 'liked') {
+ context.commit('addToTimeline', [post])
+ }
+ context.commit('likePost', { post })
showError('Failed to unlike post')
logger.error('Failed to unlike post', { error })
- })
+ }
},
/**
* @param context
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- postBoost(context, { post, parentAnnounce }) {
- return new Promise((resolve, reject) => {
- axios.post(generateUrl(`apps/social/api/v1/post/boost?postId=${post.uri}`)).then((response) => {
- context.commit('boostPost', { post, parentAnnounce })
- logger.info('Post boosted with token ' + response.data.result.token)
- resolve(response)
- }).catch((error) => {
- showError('Failed to create a boost post')
- logger.error('Failed to create a boost post', { error })
- reject(error)
- })
- })
+ async postBoost(context, { post }) {
+ try {
+ context.commit('boostPost', { post })
+ const response = await axios.post(generateUrl(`apps/social/api/v1/statuses/${post.id}/reblog`))
+ logger.info('Post boosted')
+ context.commit('addToTimeline', [response.data])
+ return response
+ } catch (error) {
+ context.commit('unboostPost', { post })
+ showError('Failed to create a boost post')
+ logger.error('Failed to create a boost post', { error })
+ }
},
/**
* @param context
* @param {object} root0
* @param {import('../types/Mastodon.js').Status} root0.post
- * @param {object} root0.parentAnnounce
*/
- postUnBoost(context, { post, parentAnnounce }) {
- return axios.delete(generateUrl(`apps/social/api/v1/post/boost?postId=${post.uri}`)).then((response) => {
- context.commit('unboostPost', { post, parentAnnounce })
- logger.info('Boost deleted with token ' + response.data.result.token)
- }).catch((error) => {
+ async postUnBoost(context, { post }) {
+ try {
+ context.commit('unboostPost', { post })
+ const response = await axios.post(generateUrl(`apps/social/api/v1/statuses/${post.id}/unreblog`))
+ logger.info('Boost deleted')
+ context.commit('addToTimeline', [response.data])
+ return response
+ } catch (error) {
+ context.commit('boostPost', { post })
showError('Failed to delete the boost')
logger.error('Failed to delete the boost', { error })
- })
+ }
},
refreshTimeline(context) {
return this.dispatch('fetchTimeline')
diff --git a/src/types/Mastodon.js b/src/types/Mastodon.js
index a1d2d02c..9d1970b4 100644
--- a/src/types/Mastodon.js
+++ b/src/types/Mastodon.js
@@ -144,7 +144,7 @@
* @property {boolean} [muted] - Ex: false
* @property {boolean} [bookmarked] - Ex: false
* @property {string} content - Ex: "<p>&quot;I lost my inheritance with one wrong digit on my sort code&quot;</p><p><a href=\"https://www.theguardian.com/money/2019/dec/07/i-lost-my-193000-inheritance-with-one-wrong-digit-on-my-sort-code\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://www.</span><span class=\"ellipsis\">theguardian.com/money/2019/dec</span><span class=\"invisible\">/07/i-lost-my-193000-inheritance-with-one-wrong-digit-on-my-sort-code</span}</p>"
- * @property {Status} [reblog] - Ex: null
+ * @property {Status?} reblog - Ex: null
* @property {object} [application] -
* @property {string} application.name - Ex: "Web"
* @property {string} [application.website] - Ex: null