var compare = require('natural-orderby').compare; var errors = require("./errors.js"); var Selector = (function () { function Selector(converter) { this._datasViewElt = { id: "", eltDOM: undefined }; this.name = ""; this.values = []; if (converter.parseMetas === undefined || converter.parseMetas.fields === undefined || converter.parseDatas.length === 0) throw new Error(errors.selectorNeedDatas); else this._converter = converter; } Object.defineProperty(Selector.prototype, "datasViewElt", { get: function () { return this._datasViewElt; }, set: function (elt) { var checkContainerExist = document.getElementById(elt.id); if (checkContainerExist === null) throw new Error(errors.elementNotFound + elt.id); else { this._datasViewElt.id = elt.id; this._datasViewElt.eltDOM = checkContainerExist; } }, enumerable: true, configurable: true }); Object.defineProperty(Selector.prototype, "datasFieldNb", { get: function () { return this._datasFieldNb; }, set: function (datasFieldNb) { if (datasFieldNb !== undefined && this._converter.parseMetas.fields[datasFieldNb] === undefined) throw new Error(errors.selectorFieldNotFound); else this._datasFieldNb = datasFieldNb; }, enumerable: true, configurable: true }); Object.defineProperty(Selector.prototype, "separator", { set: function (separator) { if (separator === "") this._separator = undefined; else this._separator = separator; }, enumerable: true, configurable: true }); Selector.prototype.selector2HTML = function () { if (this._converter === undefined || this._datasViewElt.eltDOM === undefined || this._datasFieldNb === undefined) throw new Error(errors.selector2HTMLFail); else { this.name = this._converter.parseMetas.fields[this._datasFieldNb]; for (var row in this._converter.parseDatas) { if (this._separator === undefined) { var checkedValue = String(this._converter.parseDatas[row][this.name]).trim(); if (checkedValue !== "" && this.values.indexOf(checkedValue) === -1) this.values.push(checkedValue); } else { var checkedValues = String(this._converter.parseDatas[row][this.name]).split(this._separator); for (var i in checkedValues) { var checkedValue = checkedValues[i].trim(); if (checkedValue !== "" && this.values.indexOf(checkedValue) === -1) this.values.push(checkedValue); } } } if (this.values.length > 0) { if (this._converter.getSortingFunctionForField(this._datasFieldNb) !== undefined) this.values.sort(this._converter.getSortingFunctionForField(this._datasFieldNb).sort); else this.values.sort(compare()); var selectorsHTML = ""; this._datasViewElt.eltDOM.innerHTML = selectorsHTML; var selectElement = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id), mySelector_1 = this; selectElement.addEventListener("change", function (e) { mySelector_1._converter.refreshView(); }); } } }; Selector.prototype.getSelectionnedId = function () { var selectElement = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id); if (selectElement === undefined) return 0; else return parseInt(selectElement.value, 10); }; Selector.prototype.dataIsOk = function (data) { if (this.name === undefined || this.name === "") throw new Error(errors.selectorCheckIsOkFail); var selectedValue = this.getSelectionnedId(); if (selectedValue === 0) return true; else selectedValue = selectedValue - 1; if (this.values[selectedValue] === undefined) throw new Error(errors.selectorSelectedIndexNotFound); if (data[this.name] === undefined) return false; var selectedValueTxt = this.values[selectedValue]; if (this._separator === undefined) { if (data[this.name].trim() !== selectedValueTxt) return false; else return true; } else { var find = false; var checkedValues = String(data[this.name]).split(this._separator); for (var j in checkedValues) { if (checkedValues[j].trim() === selectedValueTxt) { find = true; break; } } return find; } }; return Selector; }()); export { Selector };