trc-sheet
Version: 
trc sheet support
214 lines (213 loc) • 7.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ColumnNames = (function () {
    function ColumnNames() {
    }
    ColumnNames.RecId = "RecId";
    ColumnNames.FirstName = "FirstName";
    ColumnNames.LastName = "LastName";
    ColumnNames.Party = "Party";
    ColumnNames.Address = "Address";
    ColumnNames.City = "City";
    ColumnNames.Zip = "Zip";
    ColumnNames.Lat = "Lat";
    ColumnNames.Long = "Long";
    ColumnNames.XVoted = "XVoted";
    ColumnNames.XTargetPri = "XTargetPri";
    ColumnNames.PrecinctName = "PrecinctName";
    ColumnNames.Cellphone = "Cellphone";
    ColumnNames.HHID = "HHID";
    ColumnNames.XUser = "XUser";
    ColumnNames.XApp = "XApp";
    ColumnNames.XLat = "XLat";
    ColumnNames.XLong = "XLong";
    ColumnNames.XLastModified = "XLastModified";
    ColumnNames.XIPAddress = "XIPAddress";
    return ColumnNames;
}());
exports.ColumnNames = ColumnNames;
var SheetContentsIndex = (function () {
    function SheetContentsIndex(source) {
        this._map = {};
        this._source = source;
        var cRecId = source["RecId"];
        for (var i = 0; i < cRecId.length; i++) {
            var recId = cRecId[i];
            this._map[recId] = i;
        }
    }
    SheetContentsIndex.prototype.lookupRecId = function (recId) {
        var idx = this._map[recId];
        if (idx == undefined) {
            return -1;
        }
        return idx;
    };
    SheetContentsIndex.prototype.set = function (recId, columnName, newValue) {
        var idx = this.lookupRecId(recId);
        if (idx != -1) {
            this._source[columnName][idx] = newValue;
        }
    };
    SheetContentsIndex.prototype.getContents = function () {
        return this._source;
    };
    return SheetContentsIndex;
}());
exports.SheetContentsIndex = SheetContentsIndex;
var SheetContents = (function () {
    function SheetContents() {
    }
    SheetContents.getSheetContentsIndex = function (source) {
        return new SheetContentsIndex(source);
    };
    SheetContents.toCsv = function (data) {
        var colKeys = Object.keys(data);
        var grid = [];
        var rowCount = data[colKeys[0]].length;
        var index = 0;
        grid.push(colKeys);
        while (index < rowCount) {
            var row = [];
            for (var _i = 0, colKeys_1 = colKeys; _i < colKeys_1.length; _i++) {
                var colKey = colKeys_1[_i];
                var direct = data[colKey][index];
                var val;
                if (direct == null || direct == undefined) {
                    val = "";
                }
                else {
                    val = direct.toString();
                    try {
                        val = val
                            .replace(/\"/g, '\'')
                            .replace(/\t|\n|\r/g, ' ');
                        if (val.indexOf(",") >= 0) {
                            val = "\"" + val + "\"";
                        }
                    }
                    catch (e) {
                        val = "???";
                    }
                }
                row.push(val);
            }
            grid.push(row);
            index++;
        }
        var content = "";
        grid.forEach(function (arr, index) {
            var row = arr.join(",");
            content += index < grid.length ? row + "\r\n" : row;
        });
        return content;
    };
    SheetContents.ForEach = function (source, callback) {
        var colRecId = source[ColumnNames.RecId];
        for (var columnName in source) {
            var column = source[columnName];
            if (column == colRecId) {
                continue;
            }
            for (var i = 0; i < column.length; i++) {
                var recId = colRecId[i];
                var newValue = column[i];
                callback(recId, columnName, newValue);
            }
        }
    };
    SheetContents.FromSingleCell = function (recId, columnName, newValue) {
        var body = {};
        body[ColumnNames.RecId] = [recId];
        body[columnName] = [newValue];
        return body;
    };
    SheetContents.FromRow = function (recId, columnNames, newValues) {
        if (columnNames.length != newValues.length) {
            throw "length mismatch";
        }
        var body = {};
        body[ColumnNames.RecId] = [recId];
        for (var i = 0; i < columnNames.length; i++) {
            var columnName = columnNames[i];
            var newValue = newValues[i];
            body[columnName] = [newValue];
        }
        return body;
    };
    SheetContents.KeepRows = function (source, fpInclude) {
        var columnNames = [];
        var results = {};
        var len = -1;
        for (var columnName in source) {
            if (len == -1) {
                len = source[columnName].length;
            }
            columnNames.push(columnName);
            results[columnName] = [];
        }
        for (var iRow = 0; iRow < len; iRow++) {
            var keepRow = fpInclude(iRow);
            if (keepRow) {
                for (var x in columnNames) {
                    var columnName = columnNames[x];
                    var val = source[columnName][iRow];
                    results[columnName].push(val);
                }
            }
        }
        return results;
    };
    SheetContents.TakeN = function (sheet, topN) {
        var sheet2 = {};
        for (var key in sheet) {
            var value = sheet[key];
            sheet2[key] = value.slice(0, topN);
        }
        return sheet2;
    };
    SheetContents.AddTimestamp = function (source, gps) {
        if (gps === void 0) { gps = null; }
        var curTime = new Date().toISOString();
        var cs = [];
        var vs = [];
        cs.push(ColumnNames.XLastModified);
        vs.push(curTime);
        if (!!gps) {
            var loc = gps.getLoc();
            cs.push(ColumnNames.XLat);
            cs.push(ColumnNames.XLong);
            vs.push(loc.Lat.toString());
            vs.push(loc.Long.toString());
        }
        return SheetContents.Append(source, cs, vs);
    };
    SheetContents.Append = function (source, newColumns, newValues) {
        var results = {};
        var numRows = -1;
        for (var columnName in source) {
            if (numRows == -1) {
                numRows = source[columnName].length;
            }
            results[columnName] = [];
        }
        for (var i in newColumns) {
            var columnName = newColumns[i];
            results[columnName] = [];
        }
        for (var iRow = 0; iRow < numRows; iRow++) {
            for (var columnName in source) {
                var val = source[columnName][iRow];
                results[columnName].push(val);
            }
            for (var i in newColumns) {
                var columnName = newColumns[i];
                var val = newValues[i];
                results[columnName].push(val);
            }
        }
        return results;
    };
    return SheetContents;
}());
exports.SheetContents = SheetContents;