Basic status posting.

This commit is contained in:
Roger Braun 2016-10-30 16:53:58 +01:00
parent 8630f91a13
commit 7980558461
6 changed files with 117 additions and 22 deletions

View file

@ -0,0 +1,20 @@
import statusPoster from '../../services/status_poster/status_poster.service.js'
const PostStatusForm = {
data() {
return {
newStatus: { }
}
},
methods: {
postStatus(newStatus) {
statusPoster.postStatus({
status: newStatus.status,
store: this.$store
})
this.newStatus = { }
}
}
}
export default PostStatusForm

View file

@ -0,0 +1,20 @@
<template>
<div class="post-status-form">
<form v-on:submit.prevent="postStatus(newStatus)">
<div class="form-group" >
<textarea v-model="newStatus.status" placeholder="Just landed in L.A." rows="3" class="form-control"></textarea>
</div>
<div class="attachments">
<div class="attachment" v-for="file in newStatus.files">
<img class="thumbnail media-upload" :src="file.image"></img>
</div>
</div>
<div class='form-bottom'>
<media-upload files="newStatus.files"></media-upload>
<button type="submit" class="btn btn-default" >Submit</button>
</div>
</form>
</div>
</template>
<script src="./post_status_form.js"></script>

View file

@ -1,4 +1,5 @@
import LoginForm from '../login_form/login_form.vue' import LoginForm from '../login_form/login_form.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
const UserPanel = { const UserPanel = {
computed: { computed: {
@ -11,7 +12,8 @@ const UserPanel = {
} }
}, },
components: { components: {
LoginForm LoginForm,
PostStatusForm
} }
} }

View file

@ -29,7 +29,7 @@
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<post-status-form></post-status-form> <post-status-form v-if='user'></post-status-form>
</div> </div>
</div> </div>
<login-form v-if='!user'></login-form> <login-form v-if='!user'></login-form>

View file

@ -5,8 +5,8 @@ const PUBLIC_TIMELINE_URL = '/api/statuses/public_timeline.json'
const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_timeline.json' const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_timeline.json'
const FAVORITE_URL = '/api/favorites/create' const FAVORITE_URL = '/api/favorites/create'
const UNFAVORITE_URL = '/api/favorites/destroy' const UNFAVORITE_URL = '/api/favorites/destroy'
const STATUS_UPDATE_URL = '/api/statuses/update.json'
// const CONVERSATION_URL = '/api/statusnet/conversation/'; // const CONVERSATION_URL = '/api/statusnet/conversation/';
// const STATUS_UPDATE_URL = '/api/statuses/update.json';
// const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'; // const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload';
// const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'}; // const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'};
@ -57,11 +57,30 @@ const unfavorite = ({ id, credentials }) => {
}) })
} }
const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => {
const idsText = mediaIds.join(',')
const form = new FormData()
form.append('status', status)
form.append('source', 'Pleroma FE')
form.append('media_ids', idsText)
if (inReplyToStatusId) {
form.append('in_reply_to_status_id', inReplyToStatusId)
}
return fetch(STATUS_UPDATE_URL, {
body: form,
method: 'POST',
headers: authHeaders(credentials)
})
}
const apiService = { const apiService = {
verifyCredentials, verifyCredentials,
fetchTimeline, fetchTimeline,
favorite, favorite,
unfavorite unfavorite,
postStatus
} }
export default apiService export default apiService
@ -102,24 +121,6 @@ export default apiService
// return $http.post(LOGIN_URL, null, { headers: authHeaders }); // return $http.post(LOGIN_URL, null, { headers: authHeaders });
// }; // };
// const postStatus = ({status, mediaIds, in_reply_to_status_id}) => {
// const idsText = mediaIds.join(',');
// const form = new FormData();
// form.append('status', status);
// form.append('source', 'The Wired FE');
// form.append('media_ids', idsText);
// if(in_reply_to_status_id) {
// form.append('in_reply_to_status_id', in_reply_to_status_id);
// };
// return fetch(STATUS_UPDATE_URL, {
// body: form,
// method: 'POST',
// headers: authHeaders
// });
// };
// const unfavorite = (id) => $http.post(`${UNFAVORITE_URL}/${id}.json`, null, {headers: authHeaders}); // const unfavorite = (id) => $http.post(`${UNFAVORITE_URL}/${id}.json`, null, {headers: authHeaders});
// // This was impossible to get to work with $http. You're supposed to set Content-Type // // This was impossible to get to work with $http. You're supposed to set Content-Type

View file

@ -0,0 +1,52 @@
import { map } from 'lodash'
import apiService from '../api/api.service.js'
const postStatus = ({ store, status, media = [], inReplyToStatusId = undefined }) => {
const mediaIds = map(media, 'id')
return apiService.postStatus({credentials: store.state.users.currentUser.credentials, status, mediaIds, inReplyToStatusId})
.then((data) => data.json())
.then((data) => {
store.commit('addNewStatuses',
{ statuses: [data], timeline: 'friends', showImmediately: true })
})
}
const statusPosterService = {
postStatus
}
export default statusPosterService
// const statusPosterServiceFactory = (apiService, $ngRedux) => {
// const postStatus = ({status, media = [], in_reply_to_status_id = undefined}) => {
// const mediaIds = map(media, 'id');
// return apiService.postStatus({status, mediaIds, in_reply_to_status_id}).
// then((data) => data.json()).
// then((data) => {
// $ngRedux.dispatch({type: 'ADD_NEW_STATUSES', data: { statuses: [data], timeline: 'friends', showImmediately: true }});
// });
// };
// const uploadMedia = (formData) => {
// return apiService.uploadMedia(formData).then((xml) => {
// return {
// id: xml.getElementsByTagName('media_id')[0].textContent,
// url: xml.getElementsByTagName('media_url')[0].textContent,
// image: xml.getElementsByTagName('atom:link')[0].getAttribute('href')
// };
// });
// };
// const statusPosterService = {
// postStatus,
// uploadMedia
// };
// return statusPosterService;
// };
// statusPosterServiceFactory.$inject = ['apiService', '$ngRedux'];
// export default statusPosterServiceFactory;