You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.6 KiB

  1. import fetch from 'isomorphic-fetch'
  2. export const SET_TIMELINE = 'SET_TIMELINE';
  3. export const ADD_STATUS = 'ADD_STATUS';
  4. export const PUBLISH = 'PUBLISH';
  5. export const PUBLISH_START = 'PUBLISH_START';
  6. export const PUBLISH_SUCC = 'PUBLISH_SUCC';
  7. export const PUBLISH_ERROR = 'PUBLISH_ERROR';
  8. export function setTimeline(timeline, statuses) {
  9. return {
  10. type: SET_TIMELINE,
  11. timeline: timeline,
  12. statuses: statuses
  13. };
  14. }
  15. export function addStatus(timeline, status) {
  16. return {
  17. type: ADD_STATUS,
  18. timeline: timeline,
  19. status: status
  20. };
  21. }
  22. export function publishStart() {
  23. return {
  24. type: PUBLISH_START
  25. };
  26. }
  27. export function publishError(error) {
  28. return {
  29. type: PUBLISH_ERROR,
  30. error: error
  31. };
  32. }
  33. export function publishSucc(status) {
  34. return {
  35. type: PUBLISH_SUCC,
  36. status: status
  37. };
  38. }
  39. export function publish(text, in_reply_to_id) {
  40. return function (dispatch, getState) {
  41. const access_token = getState().getIn(['meta', 'access_token']);
  42. var data = new FormData();
  43. data.append('status', text);
  44. if (in_reply_to_id !== null) {
  45. data.append('in_reply_to_id', in_reply_to_id);
  46. }
  47. dispatch(publishStart());
  48. return fetch('/api/statuses', {
  49. method: 'POST',
  50. headers: {
  51. 'Authorization': `Bearer ${access_token}`
  52. },
  53. body: data
  54. }).then(function (response) {
  55. return response.json();
  56. }).then(function (json) {
  57. if (json.error) {
  58. dispatch(publishError(json.error));
  59. } else {
  60. dispatch(publishSucc(json));
  61. }
  62. }).catch(function (error) {
  63. dispatch(publishError(error));
  64. });
  65. };
  66. }