workspace.js 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import {
  2. WORKSPACE,
  3. FOLDER
  4. } from '../action-creator.sync.js'
  5. const serializeWorkspace = data => ({
  6. id: data.id,
  7. title: data.title,
  8. content: data.content,
  9. ownerId: data.owner_id
  10. })
  11. export default function user (state = {
  12. id: -1,
  13. title: '',
  14. ownerId: '',
  15. content: [],
  16. filter: []
  17. }, action) {
  18. switch (action.type) {
  19. case `Set/${WORKSPACE}`:
  20. return {
  21. ...serializeWorkspace(action.workspace),
  22. filter: action.filterStr ? action.filterStr.split(';') : []
  23. }
  24. case `Update/${WORKSPACE}/Filter`:
  25. return {...state, filter: action.filterList}
  26. case `Set/${WORKSPACE}/${FOLDER}/Content`:
  27. const setFolderContent = (contentItem, action) => {
  28. if (contentItem.id === action.folderId) return {...contentItem, content: action.content}
  29. if (contentItem.type === 'folder') return {...contentItem, content: contentItem.content.map(c => setFolderContent(c, action))}
  30. return contentItem
  31. }
  32. return {
  33. ...state,
  34. content: state.content.map(c => setFolderContent(c, action))
  35. }
  36. default:
  37. return state
  38. }
  39. }