@codenameryuu/adonis-datatable
Version:
Package server side datatables on AdonisJS 6
103 lines (102 loc) • 3.43 kB
JavaScript
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'];
}
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();
}
}