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
 |