commit: 945ea5e69fbff1e872ecabcd5caed3beb16543c5
parent: 43eece2539d47437f0c5515d42c7a40ee0401ac4
Author: Roger Braun <roger@rogerbraun.net>
Date: Thu, 27 Oct 2016 18:03:14 +0200
Update modules.
Diffstat:
3 files changed, 153 insertions(+), 100 deletions(-)
diff --git 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
@@ -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
@@ -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';
-
-const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'};
-
-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,
+/* 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'};
+
+// import { param, ajax } from 'jquery';
+// import { merge } from 'lodash';
+
+const apiService = {
+ verifyCredentials: (user) => {
+ const base64 = btoa(`${user.username}:${user.password}`)
+ const authHeaders = { 'Authorization': `Basic ${base64}` }
+ return fetch(LOGIN_URL, {
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;
+ })
+ // return $http.post(LOGIN_URL, null, { headers: authHeaders });
+ }
+}
+
+export default apiService
+
+// // 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,
+// 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;