From 3fb116a9dcc6c33c0d59137a825ee4e749dd628f Mon Sep 17 00:00:00 2001 From: Aditya Darma Date: Sat, 19 Oct 2024 22:39:30 +0800 Subject: [PATCH] refactor: remove collection to constructor --- README.md | 2 +- src/engines/object_datatable.ts | 87 ++++++++++++++++----------------- 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 8295fd5..66fb806 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The documentation is available on the [Website](https://adityadarma.github.io/ad ## License -Adonis Datatables is open-sourced software licensed under the [MIT license](LICENSE.md). +This package is open-sourced software licensed under the [MIT license](LICENSE.md). [gh-workflow-image]: https://img.shields.io/github/actions/workflow/status/adityadarma/adonis-datatables/release.yml?style=for-the-badge [gh-workflow-url]: https://github.com/adityadarma/adonis-datatables/actions/workflows/release.yml 'Github action' diff --git a/src/engines/object_datatable.ts b/src/engines/object_datatable.ts index 4a6e6b7..653ead8 100644 --- a/src/engines/object_datatable.ts +++ b/src/engines/object_datatable.ts @@ -5,26 +5,16 @@ import Helper from '../utils/helper.js' export default class ObjectDataTable extends DataTableAbstract { protected $offset: number = 0 - protected collection: Collection = collect() - constructor(object: Record[]) { + constructor(protected items: Record[]) { super() - this.collection = new Collection(object) - this.$columns = this.collection.keys() + this.$columns = collect(this.items).keys() } static canCreate(source: any): boolean { return typeof source === 'object' || source instanceof Collection } - static create(this: new (source: any) => T, source: any): T { - if (!(source instanceof Collection)) { - source = new Collection(source) - } - - return super.create(source) - } - protected resolveCallback() { return this } @@ -34,7 +24,7 @@ export default class ObjectDataTable extends DataTableAbstract { const orderable = this.request.orderableColumns() if (orderable.length) { - this.collection = this.collection + this.items = collect(this.items) .map((data) => Helper.dot(data)) .sort((a: Record, b: Record) => { for (const value of Object.values(orderable)) { @@ -83,6 +73,7 @@ export default class ObjectDataTable extends DataTableAbstract { return data }) + .all() } } @@ -92,7 +83,7 @@ export default class ObjectDataTable extends DataTableAbstract { const index = this.$dataObject ? indexColumn : 0 let start = this.request.start() - this.collection.transform((data) => { + collect(this.items).transform((data) => { data[index] = ++start return data @@ -101,7 +92,7 @@ export default class ObjectDataTable extends DataTableAbstract { } async count(): Promise { - return this.collection.count() + return collect(this.items).count() } async results(): Promise | void> { @@ -122,7 +113,7 @@ export default class ObjectDataTable extends DataTableAbstract { } ) - this.collection = collect(output) + this.items = collect(output).all() this.ordering() await this.filterRecords() this.paginate() @@ -130,14 +121,14 @@ export default class ObjectDataTable extends DataTableAbstract { this.revertIndexColumn() } - return this.render(this.collection.all()) + return this.render(collect(this.items).all()) } catch (error) { return this.errorResponse(error) } } dataResults(): any { - return this.collection.all() + return collect(this.items).all() } setOffset(offset: number): this { @@ -162,23 +153,25 @@ export default class ObjectDataTable extends DataTableAbstract { const regex = this.request.isRegex(i) const keyword = this.request.columnKeyword(i) - this.collection = this.collection.filter((row: Record) => { - const value = lodash.get(row, column) + this.items = collect(this.items) + .filter((row: Record) => { + const value = lodash.get(row, column) - if (self.config.isCaseInsensitive()) { - if (regex) { - return new RegExp(keyword, 'i').test(value) - } + if (self.config.isCaseInsensitive()) { + if (regex) { + return new RegExp(keyword, 'i').test(value) + } - return Helper.contains(value.toLowerCase(), keyword.toLowerCase()) - } + return Helper.contains(value.toLowerCase(), keyword.toLowerCase()) + } - if (regex) { - return new RegExp(keyword).test(value) - } + if (regex) { + return new RegExp(keyword).test(value) + } - return Helper.contains(value, keyword) - }) + return Helper.contains(value, keyword) + }) + .all() } } @@ -186,28 +179,30 @@ export default class ObjectDataTable extends DataTableAbstract { const offset = this.request.start() - this.$offset const length = this.request.length() > 0 ? this.request.length() : 10 - this.collection = this.collection.slice(offset, length) + this.items = collect(this.items).slice(offset, length).all() } globalSearch(keyword: string): void { keyword = this.config.isCaseInsensitive() ? keyword.toLowerCase() : keyword - this.collection = this.collection.filter((row: any) => { - for (const index of Object.values(this.request.searchableColumnIndex())) { - const column = this.getColumnName(index) as string - let value = lodash.get(row, column) - if (typeof value !== 'string') { - continue - } else { - value = this.config.isCaseInsensitive() ? value.toLowerCase() : value - } + this.items = collect(this.items) + .filter((row: any) => { + for (const index of Object.values(this.request.searchableColumnIndex())) { + const column = this.getColumnName(index) as string + let value = lodash.get(row, column) + if (typeof value !== 'string') { + continue + } else { + value = this.config.isCaseInsensitive() ? value.toLowerCase() : value + } - if (Helper.contains(value, keyword)) { - return true + if (Helper.contains(value, keyword)) { + return true + } } - } - return false - }) + return false + }) + .all() } }