| import wrapString from './wrapString'; |
| import wrapWord from './wrapWord'; |
| |
| /** |
| * Wrap a single cell value into a list of lines |
| * |
| * Always wraps on newlines, for the remainder uses either word or string wrapping |
| * depending on user configuration. |
| * |
| * @param {string} cellValue |
| * @param {number} columnWidth |
| * @param {boolean} useWrapWord |
| * @returns {Array} |
| */ |
| export default (cellValue, columnWidth, useWrapWord) => { |
| // First split on literal newlines |
| const cellLines = cellValue.split('\n'); |
| |
| // Then iterate over the list and word-wrap every remaining line if necessary. |
| for (let lineNr = 0; lineNr < cellLines.length;) { |
| let lineChunks; |
| |
| if (useWrapWord) { |
| lineChunks = wrapWord(cellLines[lineNr], columnWidth); |
| } else { |
| lineChunks = wrapString(cellLines[lineNr], columnWidth); |
| } |
| |
| // Replace our original array element with whatever the wrapping returned |
| cellLines.splice(lineNr, 1, ...lineChunks); |
| lineNr += lineChunks.length; |
| } |
| |
| return cellLines; |
| }; |