UNPKG

@codenameryuu/adonis-datatable

Version:
151 lines (150 loc) 5.1 kB
export default class Request { request; constructor(request) { this.request = request; } input(key, defaultValue) { const keys = key.split("."); const columns = this.request.input(keys[0]); if (!columns) { return defaultValue; } keys.shift(); const value = keys.reduce((acc, curr) => acc && acc[curr], columns); return value; } columns() { return this.input("columns"); } isSearchable() { return this.input("search.value") !== ""; } isRegex(index) { return this.input(`columns.${index}.search.regex`) === "true"; } orderableColumns() { if (!this.isOrderable()) { return []; } let orderable = []; for (let i = 0; i < this.input("order").length; i++) { const orderColumn = this.input(`order.${i}.column`); const direction = this.input(`order.${i}.dir`); const orderDirection = direction && direction.toLowerCase() === "asc" ? "asc" : "desc"; if (this.isColumnOrderable(orderColumn)) { orderable.push({ column: orderColumn, direction: orderDirection }); } } return orderable; } isOrderable() { return this.input("order") && this.input("order").length > 0; } isColumnOrderable(index) { return this.input(`columns.${index}.orderable`, "true") === "true"; } searchableColumnIndex() { const searchable = []; const columns = this.input("columns"); for (let index = 0; index < columns.length; index++) { if (this.isColumnSearchable(index, false)) { searchable.push(index); } } return searchable; } isColumnSearchable(index, columnSearch = true) { if (columnSearch) { return ((this.input(`columns.${index}.searchable`, "true") === "true" || this.input(`columns.${index}.searchable`, "true") === true) && this.columnKeyword(index) !== ""); } return (this.input(`columns.${index}.searchable`, "true") === "true" || this.input(`columns.${index}.searchable`, "true") === true); } columnKeyword(index) { const keyword = this.input(`columns.${index}.search.value`) ?? ""; return this.prepareKeyword(keyword); } prepareKeyword(keyword) { if (Array.isArray(keyword)) { keyword = keyword; return keyword.join(" "); } return keyword; } keyword() { const keyword = this.input("search.value") ?? ""; return this.prepareKeyword(keyword); } columnName(index) { const column = this.input(`columns.${index}`); return column && column["name"] && column["name"] !== "" ? column["name"] : column?.["data"]; } /** * Determine whether the column has any active ColumnControl search payload. * * @see https://datatables.net/extensions/columncontrol/server-side */ hasColumnControl(index) { const columnControl = this.input(`columns.${index}.columnControl`); if (!columnControl) { return false; } const value = this.input(`columns.${index}.columnControl.search.value`); const logic = this.input(`columns.${index}.columnControl.search.logic`); return ((value !== undefined && value !== null && value !== "") || logic === "empty" || logic === "notEmpty" || this.hasColumnControlList(index)); } /** * The input based search payload (searchText, searchNumber, searchDateTime). */ columnControlSearch(index) { const search = this.input(`columns.${index}.columnControl.search`); if (!search) { return null; } return { value: this.prepareKeyword(search["value"] ?? ""), logic: search["logic"] ?? "contains", type: search["type"] ?? "text", mask: search["mask"], }; } /** * The list of selected values used by the searchList content type. */ columnControlList(index) { const list = this.input(`columns.${index}.columnControl.list`); if (Array.isArray(list)) { return list; } if (list && typeof list === "object") { return Object.values(list); } return []; } hasColumnControlList(index) { return this.columnControlList(index).length > 0; } isPaginationable() { return this.input("start") !== null && this.input("length") !== null && this.input("length") !== -1; } start() { const start = this.input("start", 0); return Number(start) ? start : 0; } length() { const length = this.input("length", 0); return Number(length) ? length : 10; } draw() { const draw = this.input("draw", 0); return Number(draw) ? draw : 0; } all() { return this.request.all(); } }