/*
* This file is part of ORY Editor.
*
* ORY Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ORY Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with ORY Editor. If not, see .
*
* @license LGPL-3.0
* @copyright 2016-2018 Aeneas Rekkas
* @author Aeneas Rekkas
*
*/
import { CELL_CREATE_FALLBACK } from '../../actions/cell';
import { cellOrder } from './helper/order';
import { decorate } from './helper/tree';
import { cells } from './tree';
import { createCell } from '../../types/editable';
import { EditorState } from '../../types/editor';
import { AnyAction } from 'redux';
export const rawEditableReducer = (
state: EditorState = {
id: null,
cells: [],
config: {
whitelist: [],
},
},
action: AnyAction
) => {
let newCells = decorate(cells(state.cells, action));
// eslint-disable-next-line default-case
switch (action.type) {
case CELL_CREATE_FALLBACK:
if (action.editable === state.id) {
const c = {
...createCell(),
content: {
plugin: action.fallback,
state: action.fallback.createInitialState(),
},
id: action.ids.cell,
};
newCells = decorate(cells([c], action));
}
break;
default:
break;
}
return {
...state,
cells: newCells,
cellOrder: cellOrder(newCells || []),
};
};
export const editable = rawEditableReducer;