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.

414 lines
9.5 KiB

7 years ago
  1. import api from '../api';
  2. import { importFetchedAccounts, importFetchedStatus } from './importer';
  3. export const REBLOG_REQUEST = 'REBLOG_REQUEST';
  4. export const REBLOG_SUCCESS = 'REBLOG_SUCCESS';
  5. export const REBLOG_FAIL = 'REBLOG_FAIL';
  6. export const FAVOURITE_REQUEST = 'FAVOURITE_REQUEST';
  7. export const FAVOURITE_SUCCESS = 'FAVOURITE_SUCCESS';
  8. export const FAVOURITE_FAIL = 'FAVOURITE_FAIL';
  9. export const UNREBLOG_REQUEST = 'UNREBLOG_REQUEST';
  10. export const UNREBLOG_SUCCESS = 'UNREBLOG_SUCCESS';
  11. export const UNREBLOG_FAIL = 'UNREBLOG_FAIL';
  12. export const UNFAVOURITE_REQUEST = 'UNFAVOURITE_REQUEST';
  13. export const UNFAVOURITE_SUCCESS = 'UNFAVOURITE_SUCCESS';
  14. export const UNFAVOURITE_FAIL = 'UNFAVOURITE_FAIL';
  15. export const REBLOGS_FETCH_REQUEST = 'REBLOGS_FETCH_REQUEST';
  16. export const REBLOGS_FETCH_SUCCESS = 'REBLOGS_FETCH_SUCCESS';
  17. export const REBLOGS_FETCH_FAIL = 'REBLOGS_FETCH_FAIL';
  18. export const FAVOURITES_FETCH_REQUEST = 'FAVOURITES_FETCH_REQUEST';
  19. export const FAVOURITES_FETCH_SUCCESS = 'FAVOURITES_FETCH_SUCCESS';
  20. export const FAVOURITES_FETCH_FAIL = 'FAVOURITES_FETCH_FAIL';
  21. export const PIN_REQUEST = 'PIN_REQUEST';
  22. export const PIN_SUCCESS = 'PIN_SUCCESS';
  23. export const PIN_FAIL = 'PIN_FAIL';
  24. export const UNPIN_REQUEST = 'UNPIN_REQUEST';
  25. export const UNPIN_SUCCESS = 'UNPIN_SUCCESS';
  26. export const UNPIN_FAIL = 'UNPIN_FAIL';
  27. export const BOOKMARK_REQUEST = 'BOOKMARK_REQUEST';
  28. export const BOOKMARK_SUCCESS = 'BOOKMARKED_SUCCESS';
  29. export const BOOKMARK_FAIL = 'BOOKMARKED_FAIL';
  30. export const UNBOOKMARK_REQUEST = 'UNBOOKMARKED_REQUEST';
  31. export const UNBOOKMARK_SUCCESS = 'UNBOOKMARKED_SUCCESS';
  32. export const UNBOOKMARK_FAIL = 'UNBOOKMARKED_FAIL';
  33. export function reblog(status) {
  34. return function (dispatch, getState) {
  35. dispatch(reblogRequest(status));
  36. api(getState).post(`/api/v1/statuses/${status.get('id')}/reblog`).then(function (response) {
  37. // The reblog API method returns a new status wrapped around the original. In this case we are only
  38. // interested in how the original is modified, hence passing it skipping the wrapper
  39. dispatch(importFetchedStatus(response.data.reblog));
  40. dispatch(reblogSuccess(status));
  41. }).catch(function (error) {
  42. dispatch(reblogFail(status, error));
  43. });
  44. };
  45. };
  46. export function unreblog(status) {
  47. return (dispatch, getState) => {
  48. dispatch(unreblogRequest(status));
  49. api(getState).post(`/api/v1/statuses/${status.get('id')}/unreblog`).then(response => {
  50. dispatch(importFetchedStatus(response.data));
  51. dispatch(unreblogSuccess(status));
  52. }).catch(error => {
  53. dispatch(unreblogFail(status, error));
  54. });
  55. };
  56. };
  57. export function reblogRequest(status) {
  58. return {
  59. type: REBLOG_REQUEST,
  60. status: status,
  61. skipLoading: true,
  62. };
  63. };
  64. export function reblogSuccess(status) {
  65. return {
  66. type: REBLOG_SUCCESS,
  67. status: status,
  68. skipLoading: true,
  69. };
  70. };
  71. export function reblogFail(status, error) {
  72. return {
  73. type: REBLOG_FAIL,
  74. status: status,
  75. error: error,
  76. skipLoading: true,
  77. };
  78. };
  79. export function unreblogRequest(status) {
  80. return {
  81. type: UNREBLOG_REQUEST,
  82. status: status,
  83. skipLoading: true,
  84. };
  85. };
  86. export function unreblogSuccess(status) {
  87. return {
  88. type: UNREBLOG_SUCCESS,
  89. status: status,
  90. skipLoading: true,
  91. };
  92. };
  93. export function unreblogFail(status, error) {
  94. return {
  95. type: UNREBLOG_FAIL,
  96. status: status,
  97. error: error,
  98. skipLoading: true,
  99. };
  100. };
  101. export function favourite(status) {
  102. return function (dispatch, getState) {
  103. dispatch(favouriteRequest(status));
  104. api(getState).post(`/api/v1/statuses/${status.get('id')}/favourite`).then(function (response) {
  105. dispatch(importFetchedStatus(response.data));
  106. dispatch(favouriteSuccess(status));
  107. }).catch(function (error) {
  108. dispatch(favouriteFail(status, error));
  109. });
  110. };
  111. };
  112. export function unfavourite(status) {
  113. return (dispatch, getState) => {
  114. dispatch(unfavouriteRequest(status));
  115. api(getState).post(`/api/v1/statuses/${status.get('id')}/unfavourite`).then(response => {
  116. dispatch(importFetchedStatus(response.data));
  117. dispatch(unfavouriteSuccess(status));
  118. }).catch(error => {
  119. dispatch(unfavouriteFail(status, error));
  120. });
  121. };
  122. };
  123. export function favouriteRequest(status) {
  124. return {
  125. type: FAVOURITE_REQUEST,
  126. status: status,
  127. skipLoading: true,
  128. };
  129. };
  130. export function favouriteSuccess(status) {
  131. return {
  132. type: FAVOURITE_SUCCESS,
  133. status: status,
  134. skipLoading: true,
  135. };
  136. };
  137. export function favouriteFail(status, error) {
  138. return {
  139. type: FAVOURITE_FAIL,
  140. status: status,
  141. error: error,
  142. skipLoading: true,
  143. };
  144. };
  145. export function unfavouriteRequest(status) {
  146. return {
  147. type: UNFAVOURITE_REQUEST,
  148. status: status,
  149. skipLoading: true,
  150. };
  151. };
  152. export function unfavouriteSuccess(status) {
  153. return {
  154. type: UNFAVOURITE_SUCCESS,
  155. status: status,
  156. skipLoading: true,
  157. };
  158. };
  159. export function unfavouriteFail(status, error) {
  160. return {
  161. type: UNFAVOURITE_FAIL,
  162. status: status,
  163. error: error,
  164. skipLoading: true,
  165. };
  166. };
  167. export function bookmark(status) {
  168. return function (dispatch, getState) {
  169. dispatch(bookmarkRequest(status));
  170. api(getState).post(`/api/v1/statuses/${status.get('id')}/bookmark`).then(function (response) {
  171. dispatch(importFetchedStatus(response.data));
  172. dispatch(bookmarkSuccess(status, response.data));
  173. }).catch(function (error) {
  174. dispatch(bookmarkFail(status, error));
  175. });
  176. };
  177. };
  178. export function unbookmark(status) {
  179. return (dispatch, getState) => {
  180. dispatch(unbookmarkRequest(status));
  181. api(getState).post(`/api/v1/statuses/${status.get('id')}/unbookmark`).then(response => {
  182. dispatch(importFetchedStatus(response.data));
  183. dispatch(unbookmarkSuccess(status, response.data));
  184. }).catch(error => {
  185. dispatch(unbookmarkFail(status, error));
  186. });
  187. };
  188. };
  189. export function bookmarkRequest(status) {
  190. return {
  191. type: BOOKMARK_REQUEST,
  192. status: status,
  193. };
  194. };
  195. export function bookmarkSuccess(status, response) {
  196. return {
  197. type: BOOKMARK_SUCCESS,
  198. status: status,
  199. response: response,
  200. };
  201. };
  202. export function bookmarkFail(status, error) {
  203. return {
  204. type: BOOKMARK_FAIL,
  205. status: status,
  206. error: error,
  207. };
  208. };
  209. export function unbookmarkRequest(status) {
  210. return {
  211. type: UNBOOKMARK_REQUEST,
  212. status: status,
  213. };
  214. };
  215. export function unbookmarkSuccess(status, response) {
  216. return {
  217. type: UNBOOKMARK_SUCCESS,
  218. status: status,
  219. response: response,
  220. };
  221. };
  222. export function unbookmarkFail(status, error) {
  223. return {
  224. type: UNBOOKMARK_FAIL,
  225. status: status,
  226. error: error,
  227. };
  228. };
  229. export function fetchReblogs(id) {
  230. return (dispatch, getState) => {
  231. dispatch(fetchReblogsRequest(id));
  232. api(getState).get(`/api/v1/statuses/${id}/reblogged_by`).then(response => {
  233. dispatch(importFetchedAccounts(response.data));
  234. dispatch(fetchReblogsSuccess(id, response.data));
  235. }).catch(error => {
  236. dispatch(fetchReblogsFail(id, error));
  237. });
  238. };
  239. };
  240. export function fetchReblogsRequest(id) {
  241. return {
  242. type: REBLOGS_FETCH_REQUEST,
  243. id,
  244. };
  245. };
  246. export function fetchReblogsSuccess(id, accounts) {
  247. return {
  248. type: REBLOGS_FETCH_SUCCESS,
  249. id,
  250. accounts,
  251. };
  252. };
  253. export function fetchReblogsFail(id, error) {
  254. return {
  255. type: REBLOGS_FETCH_FAIL,
  256. error,
  257. };
  258. };
  259. export function fetchFavourites(id) {
  260. return (dispatch, getState) => {
  261. dispatch(fetchFavouritesRequest(id));
  262. api(getState).get(`/api/v1/statuses/${id}/favourited_by`).then(response => {
  263. dispatch(importFetchedAccounts(response.data));
  264. dispatch(fetchFavouritesSuccess(id, response.data));
  265. }).catch(error => {
  266. dispatch(fetchFavouritesFail(id, error));
  267. });
  268. };
  269. };
  270. export function fetchFavouritesRequest(id) {
  271. return {
  272. type: FAVOURITES_FETCH_REQUEST,
  273. id,
  274. };
  275. };
  276. export function fetchFavouritesSuccess(id, accounts) {
  277. return {
  278. type: FAVOURITES_FETCH_SUCCESS,
  279. id,
  280. accounts,
  281. };
  282. };
  283. export function fetchFavouritesFail(id, error) {
  284. return {
  285. type: FAVOURITES_FETCH_FAIL,
  286. error,
  287. };
  288. };
  289. export function pin(status) {
  290. return (dispatch, getState) => {
  291. dispatch(pinRequest(status));
  292. api(getState).post(`/api/v1/statuses/${status.get('id')}/pin`).then(response => {
  293. dispatch(importFetchedStatus(response.data));
  294. dispatch(pinSuccess(status));
  295. }).catch(error => {
  296. dispatch(pinFail(status, error));
  297. });
  298. };
  299. };
  300. export function pinRequest(status) {
  301. return {
  302. type: PIN_REQUEST,
  303. status,
  304. skipLoading: true,
  305. };
  306. };
  307. export function pinSuccess(status) {
  308. return {
  309. type: PIN_SUCCESS,
  310. status,
  311. skipLoading: true,
  312. };
  313. };
  314. export function pinFail(status, error) {
  315. return {
  316. type: PIN_FAIL,
  317. status,
  318. error,
  319. skipLoading: true,
  320. };
  321. };
  322. export function unpin (status) {
  323. return (dispatch, getState) => {
  324. dispatch(unpinRequest(status));
  325. api(getState).post(`/api/v1/statuses/${status.get('id')}/unpin`).then(response => {
  326. dispatch(importFetchedStatus(response.data));
  327. dispatch(unpinSuccess(status));
  328. }).catch(error => {
  329. dispatch(unpinFail(status, error));
  330. });
  331. };
  332. };
  333. export function unpinRequest(status) {
  334. return {
  335. type: UNPIN_REQUEST,
  336. status,
  337. skipLoading: true,
  338. };
  339. };
  340. export function unpinSuccess(status) {
  341. return {
  342. type: UNPIN_SUCCESS,
  343. status,
  344. skipLoading: true,
  345. };
  346. };
  347. export function unpinFail(status, error) {
  348. return {
  349. type: UNPIN_FAIL,
  350. status,
  351. error,
  352. skipLoading: true,
  353. };
  354. };