workspaceContentList.js 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {
  2. SET,
  3. UPDATE,
  4. WORKSPACE,
  5. WORKSPACE_CONTENT,
  6. FOLDER,
  7. WORKSPACE_CONTENT_ARCHIVED,
  8. WORKSPACE_CONTENT_DELETED
  9. } from '../action-creator.sync.js'
  10. export default function workspaceContentList (state = [], action) {
  11. switch (action.type) {
  12. case `${SET}/${WORKSPACE_CONTENT}`:
  13. return action.workspaceContentList
  14. .sort((a, b) => a.slug < b.slug ? -1 : 1)
  15. .map(wsc => ({
  16. id: wsc.content_id,
  17. label: wsc.label,
  18. slug: wsc.slug,
  19. type: wsc.content_type,
  20. idWorkspace: wsc.workspace_id,
  21. isArchived: wsc.is_archived,
  22. idParent: wsc.parent_id,
  23. isDeleted: wsc.is_deleted,
  24. showInUi: wsc.show_in_ui,
  25. statusSlug: wsc.status,
  26. subContentTypeSlug: wsc.sub_content_type_slug
  27. }))
  28. case `${UPDATE}/${WORKSPACE}/Filter`: // not used anymore ?
  29. return {...state, filter: action.filterList}
  30. case `${SET}/${WORKSPACE}/${FOLDER}/Content`:
  31. const setFolderContent = (contentItem, action) => {
  32. if (contentItem.id === action.folderId) return {...contentItem, content: action.content}
  33. if (contentItem.type === 'folder') return {...contentItem, content: contentItem.content.map(c => setFolderContent(c, action))}
  34. return contentItem
  35. }
  36. return {
  37. ...state,
  38. content: state.content.map(c => setFolderContent(c, action))
  39. }
  40. case `${SET}/${WORKSPACE_CONTENT_ARCHIVED}`:
  41. return state.map(wsc => wsc.idWorkspace === action.idWorkspace && wsc.id === action.idContent
  42. ? {...wsc, isArchived: true}
  43. : wsc
  44. )
  45. case `${SET}/${WORKSPACE_CONTENT_DELETED}`:
  46. return state.map(wsc => wsc.idWorkspace === action.idWorkspace && wsc.id === action.idContent
  47. ? {...wsc, isDeleted: true}
  48. : wsc
  49. )
  50. default:
  51. return state
  52. }
  53. }