UNPKG

lynx-framework

Version:

lynx is a NodeJS framework for Web Development, based on decorators and the async/await support.

301 lines (299 loc) 24.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DatatableConfiguration = exports.PaginationConfiguration = exports.TableConfiguration = exports.Element = void 0; var Element = /** @class */ (function () { function Element() { } return Element; }()); exports.Element = Element; var TableConfiguration = /** @class */ (function () { function TableConfiguration() { this._class = ""; this.ordersBy = []; this.header = []; this.data = []; } TableConfiguration.prototype.addClass = function (_class) { this._class += _class + " "; return this; }; TableConfiguration.prototype.addHeader = function (text, _class) { this.header.push({ text: text, _class: _class ? _class : "" }); this.ordersBy.push(0); return this; }; TableConfiguration.prototype.addData = function (texts, _classes) { var c = []; for (var i = 0; i < texts.length; i++) { c.push({ text: texts[i], _class: _classes && _classes[i] ? _classes[i] : "" }); } this.data.push(c); return this; }; return TableConfiguration; }()); exports.TableConfiguration = TableConfiguration; var PaginationConfiguration = /** @class */ (function () { function PaginationConfiguration() { this.total = 0; this.pageSize = 10; this.pageCount = 0; this.currentPage = 0; this.left = 0; this.right = 0; this.maxPages = 2; this._class = ""; } PaginationConfiguration.prototype.calculate = function () { this.pageCount = Math.ceil(this.total / this.pageSize); this.left = Math.max(0, this.currentPage - this.maxPages); this.right = Math.min(this.pageCount, this.currentPage + 1 + this.maxPages); }; PaginationConfiguration.prototype.addClass = function (_class) { this._class += _class + " "; return this; }; return PaginationConfiguration; }()); exports.PaginationConfiguration = PaginationConfiguration; var DatatableConfiguration = /** @class */ (function () { function DatatableConfiguration(repository, req, alias) { this.table = new TableConfiguration(); this._classes = []; this.mapTransformers = {}; this.pagination = new PaginationConfiguration(); this.alias = "e"; this.repository = repository; this.req = req; this.setupPageRequested(); this.urlNoPage = getUrlWithoutPage(this.req); this.urlNoOrder = getUrlWithoutOrder(this.req); this.urlNoPageNoOrder = getUrlWithoutPageOrOrder(this.req); this.urlNoFilter = getUrlWithoutFilter(this.req); if (alias) { this.alias = alias; } } DatatableConfiguration.prototype.setPageSize = function (size) { this.pagination.pageSize = size; }; DatatableConfiguration.prototype.addTableClass = function (_class) { this.table.addClass(_class); return this; }; DatatableConfiguration.prototype.addTableHeader = function (text, _class) { this.table.addHeader(text, _class); return this; }; DatatableConfiguration.prototype.addDataMap = function (map, _classes) { this.map = map; if (_classes) { this._classes = _classes; } else { this._classes = []; for (var i = 0; i < this.map.length; i++) { this._classes.push(""); } } return this; }; DatatableConfiguration.prototype.addDataTransformer = function (label, exe) { this.mapTransformers[label] = exe; return this; }; DatatableConfiguration.prototype.addPaginationClass = function (_class) { this.pagination.addClass(_class); return this; }; DatatableConfiguration.prototype.setupPageRequested = function () { this.pagination.currentPage = 0; if (this.req.query.page) { this.pagination.currentPage = Number(this.req.query.page); if (this.pagination.currentPage > 0) { this.pagination.currentPage -= 1; } } }; DatatableConfiguration.prototype.getQueryValue = function (key) { for (var q in this.req.query) { if (q.toLowerCase() !== key) { continue; } if (this.req.query[q] instanceof Array) { return this.req.query[q]; } return [this.req.query[q]]; } return []; }; DatatableConfiguration.prototype.addOrderBy = function (query) { var ordersBy = this.getQueryValue("orderby"); if (ordersBy.length > 0) { var order = ordersBy[0].split(":"); this.setOrderBy(order[0], order[1]); query = query.orderBy(this.alias + "." + order[0], order[1] == "desc" ? "DESC" : "ASC"); for (var i = 1; i < ordersBy.length; i++) { var order_1 = ordersBy[i].split(":"); this.setOrderBy(order_1[0], order_1[1]); query = query.addOrderBy(this.alias + "." + order_1[0], order_1[1] == "desc" ? "DESC" : "ASC"); } } return query; }; DatatableConfiguration.prototype.setOrderBy = function (column, order) { for (var i = 0; i < this.map.length; i++) { if (this.map[i] == column) { this.table.ordersBy[i] = order == "desc" ? -1 : 1; } } }; DatatableConfiguration.prototype.addFilterBy = function (query) { var filtersBy = this.getQueryValue("filterby"); if (filtersBy.length) { var f = filtersBy[0].split(":"); var o = {}; o[f[0] + "_" + 0] = f[1]; query = query.where(this.alias + "." + f[0] + " = :" + f[0] + "_" + 0, o); for (var i = 1; i < filtersBy.length; i++) { var f_1 = filtersBy[i].split(":"); var o_1 = {}; o_1[f_1[0] + "_" + i] = f_1[1]; query = query.andWhere(this.alias + "." + f_1[0] + " = :" + f_1[0] + "_" + i, o_1); } } return query; }; DatatableConfiguration.prototype.fetchData = function (query) { return __awaiter(this, void 0, void 0, function () { var select_1, _a, skip, result, _i, result_1, r, line, _b, _c, label, cell; var _this = this; return __generator(this, function (_d) { switch (_d.label) { case 0: if (!query) { select_1 = []; this.map.forEach(function (v) { if (!v.startsWith(":")) { select_1.push(_this.alias + "." + v.replace("-", "")); } }); query = this.repository.createQueryBuilder(this.alias).select(select_1); } query = this.addFilterBy(query); _a = this.pagination; return [4 /*yield*/, query.getCount()]; case 1: _a.total = _d.sent(); this.pagination.calculate(); query = this.addOrderBy(query); skip = this.pagination.currentPage * this.pagination.pageSize; query = query.skip(skip).take(this.pagination.pageSize); return [4 /*yield*/, query.getMany()]; case 2: result = _d.sent(); for (_i = 0, result_1 = result; _i < result_1.length; _i++) { r = result_1[_i]; line = []; for (_b = 0, _c = this.map; _b < _c.length; _b++) { label = _c[_b]; if (label.startsWith("-")) continue; cell = r[label]; if (this.mapTransformers[label]) { cell = this.mapTransformers[label](cell, r); } line.push(cell); } this.table.addData(line, this._classes); } return [2 /*return*/]; } }); }); }; return DatatableConfiguration; }()); exports.DatatableConfiguration = DatatableConfiguration; function getUrlWithoutPage(req) { return getUrlWithoutParameter(req, ["page"]); } function getUrlWithoutOrder(req) { return getUrlWithoutParameter(req, ["orderby"]); } function getUrlWithoutPageOrOrder(req) { return getUrlWithoutParameter(req, ["orderby", "page"]); } function getUrlWithoutFilter(req) { return getUrlWithoutParameter(req, ["filter", "filterby"]); } function getUrlWithoutParameter(req, parameters) { var u = (req.baseUrl + req.path).replace(/\/$/, "") + "?"; for (var key in req.query) { var found = false; for (var _i = 0, parameters_1 = parameters; _i < parameters_1.length; _i++) { var p = parameters_1[_i]; if (key.toLowerCase() == p) { found = true; break; } } if (found) { continue; } u += generateQueryValue(key, req.query[key]); } return u; } function generateQueryValue(key, q) { var m = key + "="; if (q instanceof Array) { m += q[0] + "&"; for (var i = 1; i < q.length; i++) { m += key + "=" + q[i] + "&"; } return m; } return m + q + "&"; } //# sourceMappingURL=data:application/json;charset=utf8;base64,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