Home Reference Source

application/redux/actions/user-actions.js

  1. import BaseService from './../../services/base-service';
  2.  
  3. class UserService extends BaseService {
  4.  
  5. fetch(opts) {
  6. return this.get('/v3/user', opts);
  7. }
  8.  
  9. fetchOne(id) {
  10. return this.get('/v3/user/' + id);
  11. }
  12.  
  13. create(data) {
  14. return this.post('/v3/user', data);
  15. }
  16.  
  17. update(id, data) {
  18. return this.put('/v3/user/' + id, data);
  19. }
  20.  
  21. remove(uuid) {
  22. return this.delete('/v3/user/' + uuid);
  23. }
  24.  
  25. updateMe(data) {
  26. return this.put('/v3/me', data);
  27. }
  28.  
  29. search(query) {
  30. return this.get('/v3/search', data);
  31. }
  32. }
  33.  
  34. const service = new UserService;
  35.  
  36. /**
  37. * Action types
  38. */
  39. export const USERS_REQUEST = 'USERS_REQUEST';
  40. export const USERS_RECEIVE = 'USERS_RECEIVE';
  41. export const USER_RECEIVE = 'USER_RECEIVE';
  42. export const USER_SELECTED = 'USER_SELECTED';
  43. export const USERS_INVALIDATE = 'USERS_INVALIDATE';
  44.  
  45. export const USERS_RECEIVE_PAGINATION = 'USERS_RECEIVE_PAGINATION';
  46.  
  47. /**
  48. * Action creators
  49. */
  50. export function usersReceivePagination(pagination) {
  51. return {
  52. type: USERS_RECEIVE_PAGINATION,
  53. payload: {
  54. before: pagination.get('before'),
  55. current: pagination.get('current'),
  56. first: pagination.get('first'),
  57. last: pagination.get('last'),
  58. limit: pagination.get('limit'),
  59. next: pagination.get('next'),
  60. total_items: pagination.get('total_items'),
  61. total_pages: pagination.get('total_pages'),
  62. }
  63. };
  64. }
  65.  
  66. export function usersRequest(params = {}) {
  67. return {
  68. type: USERS_REQUEST,
  69. payload: {
  70. params: params
  71. }
  72. };
  73. }
  74.  
  75. export function usersReceive(items) {
  76.  
  77. return {
  78. type: USERS_RECEIVE,
  79. payload: {
  80. users: items ? items : []
  81. }
  82. };
  83. }
  84.  
  85. export function userReceive(user) {
  86. return {
  87. type: USER_RECEIVE,
  88. payload: {
  89. user: user ? user : {}
  90. }
  91. };
  92. }
  93.  
  94. export function userSetSelected(user) {
  95. return {
  96. type: USER_SELECTED,
  97. payload: {
  98. selected: user ? user : false
  99. }
  100. };
  101. }
  102.  
  103. export function usersInvalidate() {
  104. return {
  105. type: USERS_INVALIDATE,
  106. payload: {
  107. }
  108. };
  109. }
  110.  
  111. export function userUpdate(id, data) {
  112. return function(dispatch, getState) {
  113. dispatch(usersRequest({}));
  114.  
  115. return service.update(id, data)
  116. .then(response => {
  117. return dispatch(userReceive(response.first()));
  118. });
  119. }
  120. }
  121.  
  122. export function userUpdateMe(data) {
  123. return function(dispatch, getState) {
  124. dispatch(usersRequest({}));
  125. return service.updateMe(data)
  126. .then(response => {
  127. return response.first();
  128. });
  129. }
  130. }
  131.  
  132. export function userCreate(data) {
  133. return function(dispatch, getState) {
  134. dispatch(usersRequest({}));
  135.  
  136. return service.create(data)
  137. .then(response => {
  138. return dispatch(userReceive(response.first()));
  139. });
  140. }
  141. }
  142.  
  143. export function usersShouldFetch(state) {
  144. const users = state.users;
  145. if (!users.items.length) {
  146. return true;
  147. } else if (users.isFetching) {
  148. return false;
  149. }
  150.  
  151. return users.didInvalidate;
  152. }
  153.  
  154. export function usersMaybeFetch(params = {}) {
  155. return function(dispatch, getState) {
  156. const users = getState().users.items;
  157.  
  158. if (getState().users.isFetching) {
  159. return Promise.resolve();
  160. }
  161.  
  162. if (!users.items || !users.items.size) {
  163. return dispatch(usersFetch(params));
  164. }
  165.  
  166. return Promise.resolve();
  167. }
  168. };
  169.  
  170. export function usersSearch(params = {}) {
  171. return function(dispatch, getState) {
  172. dispatch(usersRequest(params));
  173.  
  174. params.per_page = params.per_page ? params.per_page : 20;
  175. params.order = params.order ? params.order : "name";
  176. params.dir = params.dir ? params.dir : "asc";
  177.  
  178. // default page
  179. let page = 0;
  180.  
  181. if (params.page) {
  182. // specific page is requested
  183. page = params.page;
  184. } else if (getState().users.pagination.current) {
  185. // existing pagination
  186. page = getState().users.pagination.current;
  187. }
  188.  
  189. if (page) {
  190. params.page = page;
  191. }
  192.  
  193. return service.search(params)
  194. .then(response => {
  195. dispatch(usersReceivePagination(response));
  196. return dispatch(usersReceive(response.get('items')));
  197. });
  198. };
  199. };
  200.  
  201. export function usersFetch(params = {}) {
  202. return function(dispatch, getState) {
  203. dispatch(usersRequest(params));
  204.  
  205. params.per_page = params.per_page ? params.per_page : 20;
  206. params.order = params.order ? params.order : "name";
  207. params.dir = params.dir ? params.dir : "asc";
  208.  
  209. // default page
  210. let page = 0;
  211.  
  212. if (params.page) {
  213. // specific page is requested
  214. page = params.page;
  215. } else if (getState().users.pagination.current) {
  216. // existing pagination
  217. page = getState().users.pagination.current;
  218. }
  219.  
  220. if (page) {
  221. params.page = page;
  222. }
  223.  
  224. return service.fetch(params)
  225. .then(response => {
  226. dispatch(usersReceivePagination(response));
  227. return dispatch(usersReceive(response.get('items')));
  228. });
  229. };
  230. }
  231.  
  232. export function usersFetchOne(id) {
  233. return function (dispatch, getState) {
  234. dispatch(usersRequest({}));
  235.  
  236. return service.fetchOne(id)
  237. .then(response => {
  238. return dispatch(userReceive(response.first()));
  239. });
  240. }
  241. }
  242.  
  243. export function usersRemove(uuid) {
  244. return function (dispatch, getState) {
  245. dispatch(usersInvalidate());
  246.  
  247. return service.remove(uuid);
  248. }
  249. }