| 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; | |
| }; |