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
						
					
					
				| '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
 |