/* * 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 { emptyFilter } from './empty'; import { Row, Cell } from '../../../types/editable'; export const flatten = function(c: Array, n: Array): Array { return [...c, ...n]; }; export const optimizeCells = (cells: Array = []): Array => cells.filter(emptyFilter); export const optimizeRows = (rows: Array = []): Array => rows.filter(emptyFilter); export const optimizeCell = ({ rows, ...other }: Cell): Cell => ({ ...other, rows: (rows || []) .map( (r: Row): Array => { const { cells = [] } = r; if (cells.length !== 1) { return [r]; } const { rows: cellRows = [], layout }: Cell = cells[0]; if (cellRows.length > 0 && !layout) { return cellRows; } return [r]; } ) .reduce(flatten, []), }); export const optimizeRow = ({ cells, ...other }: Row): Row => ({ ...other, cells: (cells || []) .map((c: Cell) => { const { rows = [] } = c; if (rows.length !== 1 || c.layout) { return [c]; } const { cells: rowCells = [] }: Row = rows[0]; if (rowCells.length === 1) { return rowCells; } return [c]; }) .reduce(flatten, []), });