[ABANDONED] React/Redux front end for the Flexor social network.
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.

61 lines
1.8 KiB

5 years ago
4 years ago
5 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
  1. import { apiFetch } from '../api'
  2. import { setEntities } from '../actions/entities'
  3. import { startRequest, finishRequest } from '../actions/requests'
  4. import { AppThunkAction, Entity, RequestKey, EntityType } from '../types'
  5. import { normalize } from '../utils/normalization'
  6. export const fetchUser = (id: string): AppThunkAction => {
  7. return async dispatch => {
  8. dispatch(startRequest(RequestKey.FetchUser))
  9. try {
  10. const user = await apiFetch<Entity>({
  11. path: `/v1/user/${id}`
  12. })
  13. const users = normalize([user], EntityType.User)
  14. dispatch(setEntities(users.entities))
  15. dispatch(finishRequest(RequestKey.FetchUser, true))
  16. } catch (err) {
  17. dispatch(finishRequest(RequestKey.FetchUser, false))
  18. throw err
  19. }
  20. }
  21. }
  22. export const subscribe = (id: string): AppThunkAction => {
  23. return async dispatch => {
  24. dispatch(startRequest(RequestKey.Subscribe))
  25. try {
  26. await apiFetch<Entity>({
  27. path: `/v1/user/${id}/subscribe`,
  28. method: 'post',
  29. })
  30. dispatch(finishRequest(RequestKey.Subscribe, true))
  31. } catch (err) {
  32. dispatch(finishRequest(RequestKey.Subscribe, false))
  33. throw err
  34. }
  35. }
  36. }
  37. export const unsubscribe = (id: string): AppThunkAction => {
  38. return async dispatch => {
  39. dispatch(startRequest(RequestKey.Unsubscribe))
  40. try {
  41. await apiFetch<Entity>({
  42. path: `/v1/user/${id}/unsubscribe`,
  43. method: 'post',
  44. })
  45. dispatch(finishRequest(RequestKey.Unsubscribe, true))
  46. } catch (err) {
  47. dispatch(finishRequest(RequestKey.Unsubscribe, false))
  48. throw err
  49. }
  50. }
  51. }