From 945ea5e69fbff1e872ecabcd5caed3beb16543c5 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 27 Oct 2016 18:03:14 +0200 Subject: [PATCH] Update modules. --- src/modules/statuses.js | 2 +- src/modules/users.js | 38 +++++++ src/services/api/api.service.js | 195 +++++++++++++++++--------------- 3 files changed, 144 insertions(+), 91 deletions(-) create mode 100644 src/modules/users.js diff --git a/src/modules/statuses.js b/src/modules/statuses.js index b1a77061..8109d906 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -82,7 +82,7 @@ const addStatusesToTimeline = (addedStatuses, showImmediately, { statuses, visib visibleStatuses: newVisibleStatuses, newStatusCount: newNewStatusCount, maxId: newStatuses[0].id, - minVisibleId: last(newVisibleStatuses).id, + minVisibleId: (last(newVisibleStatuses) || { id: undefined }).id, faves: unionBy(faves, addedFaves, 'id') } } diff --git a/src/modules/users.js b/src/modules/users.js new file mode 100644 index 00000000..e7ebf305 --- /dev/null +++ b/src/modules/users.js @@ -0,0 +1,38 @@ +import apiService from '../services/api/api.service.js' + +const users = { + state: { + currentUser: false, + loggingIn: false + }, + mutations: { + setCurrentUser (state, user) { + state.currentUser = user + }, + beginLogin (state) { + state.loggingIn = true + }, + endLogin (state) { + state.loggingIn = false + } + }, + actions: { + loginUser ({commit, state}, userCredentials) { + commit('beginLogin') + apiService.verifyCredentials(userCredentials) + .then((response) => { + if (response.ok) { + response.json() + .then((user) => commit('setCurrentUser', user)) + } + commit('endLogin') + }) + .catch((error) => { + console.log(error) + commit('endLogin') + }) + } + } +} + +export default users diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 3eb8c62a..ac27865f 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -1,101 +1,116 @@ -const LOGIN_URL='/api/account/verify_credentials.json'; -const FRIENDS_TIMELINE_URL='/api/statuses/friends_timeline.json'; -const PUBLIC_TIMELINE_URL='/api/statuses/public_timeline.json'; -const PUBLIC_AND_EXTERNAL_TIMELINE_URL='/api/statuses/public_and_external_timeline.json'; -const CONVERSATION_URL = '/api/statusnet/conversation/'; -const STATUS_UPDATE_URL = '/api/statuses/update.json'; -const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'; -const FAVORITE_URL = '/api/favorites/create'; -const UNFAVORITE_URL = '/api/favorites/destroy'; +/* eslint-env browser */ +const LOGIN_URL = '/api/account/verify_credentials.json' +// const FRIENDS_TIMELINE_URL='/api/statuses/friends_timeline.json'; +// const PUBLIC_TIMELINE_URL='/api/statuses/public_timeline.json'; +// const PUBLIC_AND_EXTERNAL_TIMELINE_URL='/api/statuses/public_and_external_timeline.json'; +// const CONVERSATION_URL = '/api/statusnet/conversation/'; +// const STATUS_UPDATE_URL = '/api/statuses/update.json'; +// const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'; +// const FAVORITE_URL = '/api/favorites/create'; +// const UNFAVORITE_URL = '/api/favorites/destroy'; -const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'}; +// const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'}; -import { param, ajax } from 'jquery'; -import { merge } from 'lodash'; +// import { param, ajax } from 'jquery'; +// import { merge } from 'lodash'; -// TODO: This should probably be in redux. -let authHeaders = {}; - -const apiServiceFactory = ($http) => { - // Public - const fetchConversation = (id) => { - return $http.get(`${CONVERSATION_URL}/${id}.json?count=100`); - }; - - const fetchTimeline = ({timeline, since = false, until = false}) => { - const timelineUrls = { - public: PUBLIC_TIMELINE_URL, - friends: FRIENDS_TIMELINE_URL, - 'public-and-external': PUBLIC_AND_EXTERNAL_TIMELINE_URL - }; - - let url = timelineUrls[timeline]; - - if(since) { - url += `?since_id=${since}`; - } - - if(until) { - url += `?max_id=${until}`; - } - - return fetch(url, { headers: authHeaders }).then((data) => data.json()); - }; - - // Need credentials - const verifyCredentials = (user) => { - const base64 = btoa(`${user.username}:${user.password}`); - authHeaders = { "Authorization": `Basic ${base64}` }; - 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, +const apiService = { + verifyCredentials: (user) => { + const base64 = btoa(`${user.username}:${user.password}`) + const authHeaders = { 'Authorization': `Basic ${base64}` } + return fetch(LOGIN_URL, { method: 'POST', headers: authHeaders - }); - }; + }) + // return $http.post(LOGIN_URL, null, { headers: authHeaders }); + } +} - const favorite = (id) => $http.post(`${FAVORITE_URL}/${id}.json`, null, {headers: authHeaders}); - const unfavorite = (id) => $http.post(`${UNFAVORITE_URL}/${id}.json`, null, {headers: authHeaders}); +export default apiService - // This was impossible to get to work with $http. You're supposed to set Content-Type - // undefined in the header so it sends the correct header. It would always send a json - // content type. This method from jQuery worked right away... - // Also, this method is only available as XML output. OLOLOLOLO - const uploadMedia = (formData) => ajax({ - url: MEDIA_UPLOAD_URL, - data: formData, - type: 'POST', - processData: false, - contentType: false, - headers: authHeaders - }); +// // TODO: This should probably be in redux. +// let authHeaders = {}; - const apiService = { - verifyCredentials, - fetchConversation, - postStatus, - uploadMedia, - favorite, - unfavorite, - fetchTimeline - }; +// const apiServiceFactory = ($http) => { +// // Public +// const fetchConversation = (id) => { +// return $http.get(`${CONVERSATION_URL}/${id}.json?count=100`); +// }; - return apiService; -}; +// const fetchTimeline = ({timeline, since = false, until = false}) => { +// const timelineUrls = { +// public: PUBLIC_TIMELINE_URL, +// friends: FRIENDS_TIMELINE_URL, +// 'public-and-external': PUBLIC_AND_EXTERNAL_TIMELINE_URL +// }; -apiServiceFactory.$inject = ['$http']; +// let url = timelineUrls[timeline]; -export default apiServiceFactory; +// if(since) { +// url += `?since_id=${since}`; +// } + +// if(until) { +// url += `?max_id=${until}`; +// } + +// return fetch(url, { headers: authHeaders }).then((data) => data.json()); +// }; + +// // Need credentials +// const verifyCredentials = (user) => { +// const base64 = btoa(`${user.username}:${user.password}`); +// authHeaders = { "Authorization": `Basic ${base64}` }; +// 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 favorite = (id) => $http.post(`${FAVORITE_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 +// // undefined in the header so it sends the correct header. It would always send a json +// // content type. This method from jQuery worked right away... +// // Also, this method is only available as XML output. OLOLOLOLO +// const uploadMedia = (formData) => ajax({ +// url: MEDIA_UPLOAD_URL, +// data: formData, +// type: 'POST', +// processData: false, +// contentType: false, +// headers: authHeaders +// }); + +// const apiService = { +// verifyCredentials, +// fetchConversation, +// postStatus, +// uploadMedia, +// favorite, +// unfavorite, +// fetchTimeline +// }; + +// return apiService; +// }; + +// apiServiceFactory.$inject = ['$http']; + +// export default apiServiceFactory;