akkoma-fe/src/components/post_status_form/post_status_form.js

79 lines
1.8 KiB
JavaScript
Raw Normal View History

2016-10-30 15:53:58 +00:00
import statusPoster from '../../services/status_poster/status_poster.service.js'
2016-11-06 18:30:35 +00:00
import MediaUpload from '../media_upload/media_upload.vue'
2016-11-25 17:21:25 +00:00
import fileTypeService from '../../services/file_type/file_type.service.js'
2016-11-06 18:30:35 +00:00
2016-11-07 14:04:27 +00:00
import { reject, map, uniqBy } from 'lodash'
2016-11-03 16:17:32 +00:00
const buildMentionsString = ({user, attentions}, currentUser) => {
let allAttentions = [...attentions]
allAttentions.unshift(user)
allAttentions = uniqBy(allAttentions, 'id')
allAttentions = reject(allAttentions, {id: currentUser.id})
let mentions = map(allAttentions, (attention) => {
return `@${attention.screen_name}`
})
return mentions.join(' ') + ' '
}
2016-10-30 15:53:58 +00:00
const PostStatusForm = {
2016-11-03 15:59:27 +00:00
props: [
2016-11-03 16:17:32 +00:00
'replyTo',
'repliedUser',
'attentions',
'submitDisabled'
2016-11-03 15:59:27 +00:00
],
2016-11-06 18:30:35 +00:00
components: {
MediaUpload
},
2016-11-03 15:59:27 +00:00
data () {
this.submitDisabled = false
2016-11-03 16:17:32 +00:00
let statusText = ''
if (this.replyTo) {
const currentUser = this.$store.state.users.currentUser
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
}
2016-10-30 15:53:58 +00:00
return {
2016-11-03 16:17:32 +00:00
newStatus: {
2016-11-06 18:30:35 +00:00
status: statusText,
files: []
2016-11-03 16:17:32 +00:00
}
2016-10-30 15:53:58 +00:00
}
},
methods: {
2016-11-03 15:59:27 +00:00
postStatus (newStatus) {
2016-10-30 15:53:58 +00:00
statusPoster.postStatus({
status: newStatus.status,
2016-11-06 18:30:35 +00:00
media: newStatus.files,
2016-11-03 15:59:27 +00:00
store: this.$store,
inReplyToStatusId: this.replyTo
2016-10-30 15:53:58 +00:00
})
2016-11-06 18:30:35 +00:00
this.newStatus = {
status: '',
files: []
}
2016-11-03 16:35:49 +00:00
this.$emit('posted')
2016-11-06 18:30:35 +00:00
},
addMediaFile (fileInfo) {
this.newStatus.files.push(fileInfo)
this.enableSubmit()
},
disableSubmit () {
this.submitDisabled = true
},
enableSubmit () {
this.submitDisabled = false
2016-11-25 17:21:25 +00:00
},
type (fileInfo) {
return fileTypeService.fileType(fileInfo.mimetype)
2016-10-30 15:53:58 +00:00
}
}
}
export default PostStatusForm