Home Reference Source

application/redux/actions/container-actions.js

  1. import BaseService from './../../services/base-service';
  2. import {parseSrn} from './../../util/strings';
  3.  
  4. class ContainerService extends BaseService {
  5.  
  6. fetch(opts) {
  7. return this.get('/v3/container', opts);
  8. }
  9.  
  10. fetchOne(id) {
  11. return this.get('/v3/container/' + id);
  12. }
  13.  
  14. create(data) {
  15. return this.post('/v3/container', data);
  16. }
  17.  
  18. update(id, data) {
  19. return this.put('/v3/container/' + id, data);
  20. }
  21.  
  22. remove(id) {
  23. return this.delete('/v3/container/' + id);
  24. }
  25.  
  26. checkout(srn) {
  27. return this.post('/v3/lock-request', {'srn': srn});
  28. }
  29.  
  30. checkin(uuid, lockUuid) {
  31. return this.delete('/v3/lock-request/' + lockUuid);
  32. }
  33. }
  34.  
  35. const service = new ContainerService;
  36.  
  37. /**
  38. * Action types
  39. */
  40. export const CONTAINERS_REQUEST = 'CONTAINERS_REQUEST';
  41. export const CONTAINERS_RECEIVE = 'CONTAINERS_RECEIVE';
  42. export const CONTAINER_RECEIVE = 'CONTAINER_RECEIVE';
  43. export const CONTAINER_SELECTED = 'CONTAINER_SELECTED';
  44. export const CONTAINERS_INVALIDATE = 'CONTAINERS_INVALIDATE';
  45.  
  46. export const CONTAINERS_RECEIVE_PAGINATION = 'CONTAINERS_RECEIVE_PAGINATION';
  47.  
  48. /**
  49. * Action creators
  50. */
  51. export function containersReceivePagination(pagination) {
  52. return {
  53. type: CONTAINERS_RECEIVE_PAGINATION,
  54. payload: {
  55. before: pagination.get('before'),
  56. current: pagination.get('current'),
  57. first: pagination.get('first'),
  58. last: pagination.get('last'),
  59. limit: pagination.get('limit'),
  60. next: pagination.get('next'),
  61. total_items: pagination.get('total_items'),
  62. total_pages: pagination.get('total_pages'),
  63. }
  64. };
  65. }
  66.  
  67. export function containersRequest(params = {}) {
  68. return {
  69. type: CONTAINERS_REQUEST,
  70. payload: {
  71. params: params
  72. }
  73. };
  74. }
  75.  
  76. export function containersReceive(items) {
  77.  
  78. return {
  79. type: CONTAINERS_RECEIVE,
  80. payload: {
  81. containers: items ? items : []
  82. }
  83. };
  84. }
  85.  
  86. export function containerReceive(item) {
  87. return {
  88. type: CONTAINER_RECEIVE,
  89. payload: {
  90. container: item ? item : {}
  91. }
  92. };
  93. }
  94.  
  95. export function containerSetSelected(container) {
  96. return {
  97. type: CONTAINER_SELECTED,
  98. payload: {
  99. selected: container ? container : false
  100. }
  101. };
  102. }
  103.  
  104. export function containersInvalidate() {
  105. return {
  106. type: CONTAINERS_INVALIDATE,
  107. payload: {
  108. }
  109. };
  110. }
  111.  
  112. export function containersShouldFetch(state) {
  113. const containers = state.containers;
  114. if (!containers.items.length) {
  115. return true;
  116. } else if (containers.isFetching) {
  117. return false;
  118. } else if (containers.didInvalidate) {
  119. return true;
  120. }
  121.  
  122. return containers.didInvalidate;
  123. }
  124.  
  125. export function containersMaybeFetch(params = {}) {
  126. return function(dispatch, getState) {
  127. const containers = getState().containers;
  128.  
  129. if (!containers.items || !containers.items.size || containers.didInvalidate) {
  130. return dispatch(containersFetch(params));
  131. }
  132.  
  133. return Promise.resolve();
  134. }
  135. };
  136.  
  137. export function containersFetch(params = {}) {
  138. return function(dispatch, getState) {
  139. dispatch(containersRequest(params));
  140.  
  141. params.per_page = params.per_page ? params.per_page : 20;
  142. params.order = params.order ? params.order : "title";
  143. params.dir = params.dir ? params.dir : "asc";
  144.  
  145. return service.fetch(params)
  146. .then(response => {
  147. dispatch(containersReceivePagination(response));
  148. return dispatch(containersReceive(response.get('items')));
  149. });
  150. };
  151. }
  152.  
  153. export function containerFetchOne(id) {
  154. return function (dispatch, getState) {
  155. dispatch(containersRequest({}));
  156.  
  157. return service.fetchOne(id)
  158. .then(response => {
  159. return dispatch(containerReceive(response.first()));
  160. });
  161. };
  162. }
  163.  
  164. export function containerCreate(container = {}) {
  165. return function(dispatch, getState) {
  166. return service.create(container)
  167. .then(response => {
  168. dispatch(containerSetSelected(response.first().get('uuid')));
  169. console.log(response.first().get('uuid'));
  170. return dispatch(containerReceive(response.first()));
  171. });
  172. }
  173. }
  174.  
  175. export function containerUpdate(id, container = {}) {
  176. return function(dispatch, getState) {
  177. return service.update(id, container)
  178. .then(response => {
  179. return dispatch(containerReceive(response.first()));
  180. });
  181. }
  182. }
  183.  
  184. export function containersRemove(uuids) {
  185. return function(dispatch, getState) {
  186. dispatch(containersInvalidate());
  187.  
  188. return service.remove(uuids);
  189. }
  190. }
  191.  
  192. export function containersCheckOut(srn) {
  193. return function(dispatch, getState) {
  194. return service.checkout(srn)
  195. .then((data) => {
  196. return parseSrn(srn);
  197. });
  198. }
  199. }
  200.  
  201. export function containersCheckIn(uuid, lockUuid) {
  202. return function(dispatch, getState) {
  203. return service.checkin(uuid, lockUuid);
  204. }
  205. }