You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					357 lines
				
				8.8 KiB
			
		
		
			
		
	
	
					357 lines
				
				8.8 KiB
			| 
											2 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
|  | 
 | ||
|  | function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } | ||
|  | 
 | ||
|  | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } | ||
|  | 
 | ||
|  | var _ = require('../utils/under-dash'); | ||
|  | 
 | ||
|  | var Enums = require('./enums'); | ||
|  | 
 | ||
|  | var colCache = require('../utils/col-cache'); | ||
|  | 
 | ||
|  | var DEFAULT_COLUMN_WIDTH = 9; // Column defines the column properties for 1 column.
 | ||
|  | // This includes header rows, widths, key, (style), etc.
 | ||
|  | // Worksheet will condense the columns as appropriate during serialization
 | ||
|  | 
 | ||
|  | var Column = /*#__PURE__*/function () { | ||
|  |   function Column(worksheet, number, defn) { | ||
|  |     _classCallCheck(this, Column); | ||
|  | 
 | ||
|  |     this._worksheet = worksheet; | ||
|  |     this._number = number; | ||
|  | 
 | ||
|  |     if (defn !== false) { | ||
|  |       // sometimes defn will follow
 | ||
|  |       this.defn = defn; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   _createClass(Column, [{ | ||
|  |     key: "toString", | ||
|  |     value: function toString() { | ||
|  |       return JSON.stringify({ | ||
|  |         key: this.key, | ||
|  |         width: this.width, | ||
|  |         headers: this.headers.length ? this.headers : undefined | ||
|  |       }); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "equivalentTo", | ||
|  |     value: function equivalentTo(other) { | ||
|  |       return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "eachCell", | ||
|  |     value: function eachCell(options, iteratee) { | ||
|  |       var colNumber = this.number; | ||
|  | 
 | ||
|  |       if (!iteratee) { | ||
|  |         iteratee = options; | ||
|  |         options = null; | ||
|  |       } | ||
|  | 
 | ||
|  |       this._worksheet.eachRow(options, function (row, rowNumber) { | ||
|  |         iteratee(row.getCell(colNumber), rowNumber); | ||
|  |       }); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "_applyStyle", | ||
|  |     // =========================================================================
 | ||
|  |     // styles
 | ||
|  |     value: function _applyStyle(name, value) { | ||
|  |       this.style[name] = value; | ||
|  |       this.eachCell(function (cell) { | ||
|  |         cell[name] = value; | ||
|  |       }); | ||
|  |       return value; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "number", | ||
|  |     get: function get() { | ||
|  |       return this._number; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "worksheet", | ||
|  |     get: function get() { | ||
|  |       return this._worksheet; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "letter", | ||
|  |     get: function get() { | ||
|  |       return colCache.n2l(this._number); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "isCustomWidth", | ||
|  |     get: function get() { | ||
|  |       return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "defn", | ||
|  |     get: function get() { | ||
|  |       return { | ||
|  |         header: this._header, | ||
|  |         key: this.key, | ||
|  |         width: this.width, | ||
|  |         style: this.style, | ||
|  |         hidden: this.hidden, | ||
|  |         outlineLevel: this.outlineLevel | ||
|  |       }; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       if (value) { | ||
|  |         this.key = value.key; | ||
|  |         this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH; | ||
|  |         this.outlineLevel = value.outlineLevel; | ||
|  | 
 | ||
|  |         if (value.style) { | ||
|  |           this.style = value.style; | ||
|  |         } else { | ||
|  |           this.style = {}; | ||
|  |         } // headers must be set after style
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         this.header = value.header; | ||
|  |         this._hidden = !!value.hidden; | ||
|  |       } else { | ||
|  |         delete this._header; | ||
|  |         delete this._key; | ||
|  |         delete this.width; | ||
|  |         this.style = {}; | ||
|  |         this.outlineLevel = 0; | ||
|  |       } | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "headers", | ||
|  |     get: function get() { | ||
|  |       return this._header && this._header instanceof Array ? this._header : [this._header]; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "header", | ||
|  |     get: function get() { | ||
|  |       return this._header; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       var _this = this; | ||
|  | 
 | ||
|  |       if (value !== undefined) { | ||
|  |         this._header = value; | ||
|  |         this.headers.forEach(function (text, index) { | ||
|  |           _this._worksheet.getCell(index + 1, _this.number).value = text; | ||
|  |         }); | ||
|  |       } else { | ||
|  |         this._header = undefined; | ||
|  |       } | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "key", | ||
|  |     get: function get() { | ||
|  |       return this._key; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       var column = this._key && this._worksheet.getColumnKey(this._key); | ||
|  | 
 | ||
|  |       if (column === this) { | ||
|  |         this._worksheet.deleteColumnKey(this._key); | ||
|  |       } | ||
|  | 
 | ||
|  |       this._key = value; | ||
|  | 
 | ||
|  |       if (value) { | ||
|  |         this._worksheet.setColumnKey(this._key, this); | ||
|  |       } | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "hidden", | ||
|  |     get: function get() { | ||
|  |       return !!this._hidden; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._hidden = value; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "outlineLevel", | ||
|  |     get: function get() { | ||
|  |       return this._outlineLevel || 0; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._outlineLevel = value; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "collapsed", | ||
|  |     get: function get() { | ||
|  |       return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "isDefault", | ||
|  |     get: function get() { | ||
|  |       if (this.isCustomWidth) { | ||
|  |         return false; | ||
|  |       } | ||
|  | 
 | ||
|  |       if (this.hidden) { | ||
|  |         return false; | ||
|  |       } | ||
|  | 
 | ||
|  |       if (this.outlineLevel) { | ||
|  |         return false; | ||
|  |       } | ||
|  | 
 | ||
|  |       var s = this.style; | ||
|  | 
 | ||
|  |       if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) { | ||
|  |         return false; | ||
|  |       } | ||
|  | 
 | ||
|  |       return true; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "headerCount", | ||
|  |     get: function get() { | ||
|  |       return this.headers.length; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "values", | ||
|  |     get: function get() { | ||
|  |       var v = []; | ||
|  |       this.eachCell(function (cell, rowNumber) { | ||
|  |         if (cell && cell.type !== Enums.ValueType.Null) { | ||
|  |           v[rowNumber] = cell.value; | ||
|  |         } | ||
|  |       }); | ||
|  |       return v; | ||
|  |     }, | ||
|  |     set: function set(v) { | ||
|  |       var _this2 = this; | ||
|  | 
 | ||
|  |       if (!v) { | ||
|  |         return; | ||
|  |       } | ||
|  | 
 | ||
|  |       var colNumber = this.number; | ||
|  |       var offset = 0; | ||
|  | 
 | ||
|  |       if (v.hasOwnProperty('0')) { | ||
|  |         // assume contiguous array, start at row 1
 | ||
|  |         offset = 1; | ||
|  |       } | ||
|  | 
 | ||
|  |       v.forEach(function (value, index) { | ||
|  |         _this2._worksheet.getCell(index + offset, colNumber).value = value; | ||
|  |       }); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "numFmt", | ||
|  |     get: function get() { | ||
|  |       return this.style.numFmt; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('numFmt', value); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "font", | ||
|  |     get: function get() { | ||
|  |       return this.style.font; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('font', value); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "alignment", | ||
|  |     get: function get() { | ||
|  |       return this.style.alignment; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('alignment', value); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "protection", | ||
|  |     get: function get() { | ||
|  |       return this.style.protection; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('protection', value); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "border", | ||
|  |     get: function get() { | ||
|  |       return this.style.border; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('border', value); | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "fill", | ||
|  |     get: function get() { | ||
|  |       return this.style.fill; | ||
|  |     }, | ||
|  |     set: function set(value) { | ||
|  |       this._applyStyle('fill', value); | ||
|  |     } // =============================================================================
 | ||
|  |     // static functions
 | ||
|  | 
 | ||
|  |   }], [{ | ||
|  |     key: "toModel", | ||
|  |     value: function toModel(columns) { | ||
|  |       // Convert array of Column into compressed list cols
 | ||
|  |       var cols = []; | ||
|  |       var col = null; | ||
|  | 
 | ||
|  |       if (columns) { | ||
|  |         columns.forEach(function (column, index) { | ||
|  |           if (column.isDefault) { | ||
|  |             if (col) { | ||
|  |               col = null; | ||
|  |             } | ||
|  |           } else if (!col || !column.equivalentTo(col)) { | ||
|  |             col = { | ||
|  |               min: index + 1, | ||
|  |               max: index + 1, | ||
|  |               width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH, | ||
|  |               style: column.style, | ||
|  |               isCustomWidth: column.isCustomWidth, | ||
|  |               hidden: column.hidden, | ||
|  |               outlineLevel: column.outlineLevel, | ||
|  |               collapsed: column.collapsed | ||
|  |             }; | ||
|  |             cols.push(col); | ||
|  |           } else { | ||
|  |             col.max = index + 1; | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  | 
 | ||
|  |       return cols.length ? cols : undefined; | ||
|  |     } | ||
|  |   }, { | ||
|  |     key: "fromModel", | ||
|  |     value: function fromModel(worksheet, cols) { | ||
|  |       cols = cols || []; | ||
|  |       var columns = []; | ||
|  |       var count = 1; | ||
|  |       var index = 0; | ||
|  | 
 | ||
|  |       while (index < cols.length) { | ||
|  |         var col = cols[index++]; | ||
|  | 
 | ||
|  |         while (count < col.min) { | ||
|  |           columns.push(new Column(worksheet, count++)); | ||
|  |         } | ||
|  | 
 | ||
|  |         while (count <= col.max) { | ||
|  |           columns.push(new Column(worksheet, count++, col)); | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       return columns.length ? columns : null; | ||
|  |     } | ||
|  |   }]); | ||
|  | 
 | ||
|  |   return Column; | ||
|  | }(); | ||
|  | 
 | ||
|  | module.exports = Column; | ||
|  | //# sourceMappingURL=column.js.map
 |