UNPKG

@codenameryuu/adonis-datatable

Version:
103 lines (102 loc) 3.43 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']; } 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(); } }