reducer.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*
  2. * <<
  3. * Davinci
  4. * ==
  5. * Copyright (C) 2016 - 2017 EDP
  6. * ==
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. * >>
  19. */
  20. import produce from 'immer'
  21. import { ActionTypes, EmptySchedule, EmptyWeChatWorkSchedule } from './constants'
  22. import { ScheduleActionType } from './actions'
  23. export const initialState = {
  24. schedules: [],
  25. editingSchedule: EmptySchedule,
  26. loading: {
  27. table: false,
  28. schedule: false,
  29. edit: false
  30. },
  31. suggestMails: [],
  32. vizs: false,
  33. portalDashboards: {} // @TODO refactor to viz reducer
  34. }
  35. const scheduleReducer = (state = initialState, action: ScheduleActionType) =>
  36. produce(state, (draft) => {
  37. switch (action.type) {
  38. case ActionTypes.LOAD_SCHEDULES:
  39. case ActionTypes.DELETE_SCHEDULE:
  40. draft.loading.table = true
  41. break
  42. case ActionTypes.LOAD_SCHEDULES_SUCCESS:
  43. draft.schedules = action.payload.schedules
  44. draft.loading.table = false
  45. break
  46. case ActionTypes.DELETE_SCHEDULE_SUCCESS:
  47. draft.schedules = draft.schedules.filter(
  48. ({ id }) => id !== action.payload.id
  49. )
  50. draft.loading.table = false
  51. break
  52. case ActionTypes.LOAD_SCHEDULES_FAILURE:
  53. case ActionTypes.DELETE_SCHEDULE_FAILURE:
  54. draft.loading.table = false
  55. break
  56. case ActionTypes.LOAD_SCHEDULE_DETAIL:
  57. draft.loading.schedule = true
  58. break
  59. case ActionTypes.LOAD_SCHEDULE_DETAIL_SUCCESS:
  60. draft.editingSchedule = action.payload.schedule
  61. draft.loading.schedule = false
  62. break
  63. case ActionTypes.LOAD_SCHEDULE_DETAIL_FAILURE:
  64. draft.loading.schedule = false
  65. break
  66. case ActionTypes.ADD_SCHEDULE:
  67. case ActionTypes.EDIT_SCHEDULE:
  68. draft.loading.edit = true
  69. break
  70. case ActionTypes.ADD_SCHEDULE_SUCCESS:
  71. draft.schedules.unshift(action.payload.result)
  72. draft.loading.edit = false
  73. break
  74. case ActionTypes.EDIT_SCHEDULE_SUCCESS:
  75. draft.schedules.splice(
  76. draft.schedules.findIndex(
  77. ({ id }) => id === action.payload.result.id
  78. ),
  79. 1,
  80. action.payload.result
  81. )
  82. draft.loading.edit = false
  83. break
  84. case ActionTypes.ADD_SCHEDULE_FAILURE:
  85. case ActionTypes.EDIT_SCHEDULE_FAILURE:
  86. draft.loading.edit = false
  87. break
  88. case ActionTypes.RESET_SCHEDULE_STATE:
  89. return initialState
  90. case ActionTypes.CHANGE_SCHEDULE_STATUS_SUCCESS:
  91. draft.schedules.splice(
  92. draft.schedules.findIndex(
  93. ({ id }) => id === action.payload.schedule.id
  94. ),
  95. 1,
  96. action.payload.schedule
  97. )
  98. break
  99. case ActionTypes.CHANGE_SCHEDULE_JOB_TYPE:
  100. draft.editingSchedule = action.payload.jobType === 'email' ? EmptySchedule : EmptyWeChatWorkSchedule
  101. break
  102. case ActionTypes.LOAD_SUGGEST_MAILS_SUCCESS:
  103. draft.suggestMails = action.payload.mails
  104. break
  105. case ActionTypes.LOAD_SUGGEST_MAILS_FAILURE:
  106. draft.suggestMails = []
  107. break
  108. case ActionTypes.LOAD_PORTAL_DASHBOARDS_SUCCESS:
  109. draft.portalDashboards[action.payload.portalId] = action.payload.dashboards
  110. break
  111. // @FIXME
  112. case ActionTypes.LOAD_VIZS_SUCCESS:
  113. draft.vizs = action.payload.result
  114. break
  115. }
  116. })
  117. export default scheduleReducer