147 lines
5.9 KiB
JavaScript
147 lines
5.9 KiB
JavaScript
|
var compare = require('natural-orderby').compare;
|
||
|
var errors = require("./errors.js");
|
||
|
import { FreeDatas2HTML } from "./FreeDatas2HTML";
|
||
|
var Selector = (function () {
|
||
|
function Selector(converter, datasFieldNb, elt, separator) {
|
||
|
this._datasViewElt = { id: "", eltDOM: undefined };
|
||
|
this._selectedValue = undefined;
|
||
|
this._values = [];
|
||
|
this._name = "";
|
||
|
if (converter.fields.length === 0 || converter.datas.length === 0)
|
||
|
throw new Error(errors.filterNeedDatas);
|
||
|
else if (!converter.checkFieldExist(Number(datasFieldNb)))
|
||
|
throw new Error(errors.selectorFieldNotFound);
|
||
|
else {
|
||
|
this._datasViewElt = FreeDatas2HTML.checkInDOMById(elt);
|
||
|
this._converter = converter;
|
||
|
this._datasFieldNb = datasFieldNb;
|
||
|
if (separator !== undefined && separator !== "")
|
||
|
this._separator = separator;
|
||
|
}
|
||
|
}
|
||
|
Object.defineProperty(Selector.prototype, "converter", {
|
||
|
get: function () {
|
||
|
return this._converter;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "datasViewElt", {
|
||
|
get: function () {
|
||
|
return this._datasViewElt;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "datasFieldNb", {
|
||
|
get: function () {
|
||
|
return this._datasFieldNb;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "name", {
|
||
|
get: function () {
|
||
|
return this._name;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "selectedValue", {
|
||
|
get: function () {
|
||
|
return this._selectedValue;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "separator", {
|
||
|
get: function () {
|
||
|
return this._separator;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(Selector.prototype, "values", {
|
||
|
get: function () {
|
||
|
return this._values;
|
||
|
},
|
||
|
enumerable: true,
|
||
|
configurable: true
|
||
|
});
|
||
|
Selector.prototype.filter2HTML = function (label) {
|
||
|
if (label === void 0) { label = ""; }
|
||
|
this._name = this._converter.fields[this._datasFieldNb];
|
||
|
for (var _i = 0, _a = this._converter.datas; _i < _a.length; _i++) {
|
||
|
var row = _a[_i];
|
||
|
var checkedValue = void 0;
|
||
|
if (this._separator === undefined) {
|
||
|
checkedValue = row[this._name].trim();
|
||
|
if (checkedValue !== "" && this._values.indexOf(checkedValue) === -1)
|
||
|
this._values.push(checkedValue);
|
||
|
}
|
||
|
else {
|
||
|
var checkedValues = row[this._name].split(this._separator);
|
||
|
for (var _b = 0, checkedValues_1 = checkedValues; _b < checkedValues_1.length; _b++) {
|
||
|
var value = checkedValues_1[_b];
|
||
|
checkedValue = value.trim();
|
||
|
if (checkedValue !== "" && this._values.indexOf(checkedValue) === -1)
|
||
|
this._values.push(checkedValue);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this._values.length === 0)
|
||
|
throw new Error(errors.selectorFieldIsEmpty);
|
||
|
else {
|
||
|
if (this._converter.getSortingFunctionForField(this._datasFieldNb) !== undefined)
|
||
|
this._values.sort(this._converter.getSortingFunctionForField(this._datasFieldNb).sort);
|
||
|
else
|
||
|
this._values.sort(compare());
|
||
|
label = (label === "") ? this._name : label;
|
||
|
var selectorsHTML = "<label for='freeDatas2HTML_" + this._datasViewElt.id + "'>" + label + " :</label><select name='freeDatas2HTML_" + this._datasViewElt.id + "' id='freeDatas2HTML_" + this._datasViewElt.id + "'><option value='0'>----</option>";
|
||
|
for (var i = 0; i < this._values.length; i++)
|
||
|
selectorsHTML += "<option value='" + (i + 1) + "'>" + this._values[i] + "</option>";
|
||
|
selectorsHTML += "</select>";
|
||
|
this._datasViewElt.eltDOM.innerHTML = selectorsHTML;
|
||
|
var selectElement_1 = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id), mySelector_1 = this;
|
||
|
selectElement_1.addEventListener("change", function (e) {
|
||
|
if (selectElement_1.value === "0")
|
||
|
mySelector_1._selectedValue = undefined;
|
||
|
else
|
||
|
mySelector_1._selectedValue = parseInt(selectElement_1.value, 10) - 1;
|
||
|
mySelector_1._converter.refreshView();
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
Selector.prototype.dataIsOk = function (data) {
|
||
|
if (this._name === "")
|
||
|
throw new Error(errors.filterCheckIsOkFail);
|
||
|
if (this._selectedValue === undefined)
|
||
|
return true;
|
||
|
if (this._values[this._selectedValue] === undefined)
|
||
|
throw new Error(errors.selectorSelectedIndexNotFound);
|
||
|
if (data[this._name] === undefined)
|
||
|
return false;
|
||
|
var selectedValueTxt = this._values[this._selectedValue];
|
||
|
if (this._separator === undefined) {
|
||
|
if (data[this._name].trim() !== selectedValueTxt)
|
||
|
return false;
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
else {
|
||
|
var find = false;
|
||
|
var checkedValues = data[this._name].split(this._separator);
|
||
|
for (var _i = 0, checkedValues_2 = checkedValues; _i < checkedValues_2.length; _i++) {
|
||
|
var value = checkedValues_2[_i];
|
||
|
if (value.trim() === selectedValueTxt) {
|
||
|
find = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return find;
|
||
|
}
|
||
|
};
|
||
|
return Selector;
|
||
|
}());
|
||
|
export { Selector };
|