// import { addTask } from '../actions' import client from '../client' const folders = (state = {}, action) => { let file, files, folders, folder, openFolders, folder_id, filesAreLoaded switch (action.type) { case 'LOAD_FOLDERS': return { ...state, folders: action.folders, } case 'LOAD_FILES': if (! action.files.length) { return state } folder_id = action.files[0].folder_id folders = state.folders.map( (folder) => { if (folder.id === folder_id) { folder.files = action.files } return folder }) return { ...state, folders } case 'ADD_FOLDER': folders = [ action.folder ].concat(state.folders) return { ...state, folders } case 'LOAD_OPEN_FOLDERS': return { ...state, openFolders: action.folders, } case 'OPEN_FOLDER': openFolders = state.openFolders folder = action.folder folder_id = folder.id if (openFolders.indexOf(folder.id) === -1) { openFolders = openFolders.concat(folder.id) localStorage['openFolders'] = JSON.stringify(openFolders) } filesAreLoaded = state.folders.some( (folder) => { if (folder.id === folder_id && folder.files) { return true } return false }) if (! filesAreLoaded) { client.file.index({ folder_id }).then( (files) => { action.cb && action.cb(files) }) } return { ...state, openFolders, } case 'CLOSE_FOLDER': folder = action.folder openFolders = state.openFolders.filter( folder_id => folder_id !== folder.id ) localStorage['openFolders'] = JSON.stringify(openFolders) return { ...state, openFolders, } case 'ADD_FILES': files = action.files folder_id = Number(files[0] && files[0].folder_id) folders = state.folders.map( (folder) => { if (folder.id === folder_id) { folder.files = ( folder.files || [] ).concat(files) return Object.assign({}, folder) } else { return folder } }) return { ...state, folders } case 'ADD_FILE': file = action.file folders = state.folders.map( (folder) => { if (folder.id === file.folder_id) { folder.files = folder.files || [] folder.files.push(file) return Object.assign({}, folder) } else { return folder } }) return { ...state, folders } case 'UPDATE_FILE': file = action.file folders = state.folders.map( (folder) => { if (folder.id === file.folder_id && folder.files) { folder.files = folder.files.map( f => f.id == file.id ? file : f ) return Object.assign({}, folder) } else { return folder } }) return { ...state, folders: folders } default: return state } } export default folders