Skip to content

Commit 017610e

Browse files
authored
Merge pull request #19 from adityadarma/dev
refactor: remove collection to constructor
2 parents 1cad798 + 3fb116a commit 017610e

File tree

2 files changed

+42
-47
lines changed

2 files changed

+42
-47
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ The documentation is available on the [Website](https://adityadarma.github.io/ad
1212

1313
## License
1414

15-
Adonis Datatables is open-sourced software licensed under the [MIT license](LICENSE.md).
15+
This package is open-sourced software licensed under the [MIT license](LICENSE.md).
1616

1717
[gh-workflow-image]: https://img.shields.io/github/actions/workflow/status/adityadarma/adonis-datatables/release.yml?style=for-the-badge
1818
[gh-workflow-url]: https://github.com/adityadarma/adonis-datatables/actions/workflows/release.yml 'Github action'

src/engines/object_datatable.ts

Lines changed: 41 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,16 @@ import Helper from '../utils/helper.js'
55

66
export default class ObjectDataTable extends DataTableAbstract {
77
protected $offset: number = 0
8-
protected collection: Collection<any> = collect()
98

10-
constructor(object: Record<string, any>[]) {
9+
constructor(protected items: Record<string, any>[]) {
1110
super()
12-
this.collection = new Collection(object)
13-
this.$columns = this.collection.keys()
11+
this.$columns = collect(this.items).keys()
1412
}
1513

1614
static canCreate(source: any): boolean {
1715
return typeof source === 'object' || source instanceof Collection
1816
}
1917

20-
static create<T>(this: new (source: any) => T, source: any): T {
21-
if (!(source instanceof Collection)) {
22-
source = new Collection(source)
23-
}
24-
25-
return super.create<T>(source)
26-
}
27-
2818
protected resolveCallback() {
2919
return this
3020
}
@@ -34,7 +24,7 @@ export default class ObjectDataTable extends DataTableAbstract {
3424
const orderable = this.request.orderableColumns()
3525

3626
if (orderable.length) {
37-
this.collection = this.collection
27+
this.items = collect(this.items)
3828
.map((data) => Helper.dot(data))
3929
.sort((a: Record<string, any>, b: Record<string, any>) => {
4030
for (const value of Object.values(orderable)) {
@@ -83,6 +73,7 @@ export default class ObjectDataTable extends DataTableAbstract {
8373

8474
return data
8575
})
76+
.all()
8677
}
8778
}
8879

@@ -92,7 +83,7 @@ export default class ObjectDataTable extends DataTableAbstract {
9283
const index = this.$dataObject ? indexColumn : 0
9384
let start = this.request.start()
9485

95-
this.collection.transform((data) => {
86+
collect(this.items).transform((data) => {
9687
data[index] = ++start
9788

9889
return data
@@ -101,7 +92,7 @@ export default class ObjectDataTable extends DataTableAbstract {
10192
}
10293

10394
async count(): Promise<number> {
104-
return this.collection.count()
95+
return collect(this.items).count()
10596
}
10697

10798
async results(): Promise<Record<string, any> | void> {
@@ -122,22 +113,22 @@ export default class ObjectDataTable extends DataTableAbstract {
122113
}
123114
)
124115

125-
this.collection = collect(output)
116+
this.items = collect(output).all()
126117
this.ordering()
127118
await this.filterRecords()
128119
this.paginate()
129120

130121
this.revertIndexColumn()
131122
}
132123

133-
return this.render(this.collection.all())
124+
return this.render(collect(this.items).all())
134125
} catch (error) {
135126
return this.errorResponse(error)
136127
}
137128
}
138129

139130
dataResults(): any {
140-
return this.collection.all()
131+
return collect(this.items).all()
141132
}
142133

143134
setOffset(offset: number): this {
@@ -162,52 +153,56 @@ export default class ObjectDataTable extends DataTableAbstract {
162153
const regex = this.request.isRegex(i)
163154
const keyword = this.request.columnKeyword(i)
164155

165-
this.collection = this.collection.filter((row: Record<string, any>) => {
166-
const value = lodash.get(row, column)
156+
this.items = collect(this.items)
157+
.filter((row: Record<string, any>) => {
158+
const value = lodash.get(row, column)
167159

168-
if (self.config.isCaseInsensitive()) {
169-
if (regex) {
170-
return new RegExp(keyword, 'i').test(value)
171-
}
160+
if (self.config.isCaseInsensitive()) {
161+
if (regex) {
162+
return new RegExp(keyword, 'i').test(value)
163+
}
172164

173-
return Helper.contains(value.toLowerCase(), keyword.toLowerCase())
174-
}
165+
return Helper.contains(value.toLowerCase(), keyword.toLowerCase())
166+
}
175167

176-
if (regex) {
177-
return new RegExp(keyword).test(value)
178-
}
168+
if (regex) {
169+
return new RegExp(keyword).test(value)
170+
}
179171

180-
return Helper.contains(value, keyword)
181-
})
172+
return Helper.contains(value, keyword)
173+
})
174+
.all()
182175
}
183176
}
184177

185178
paging(): void {
186179
const offset = this.request.start() - this.$offset
187180
const length = this.request.length() > 0 ? this.request.length() : 10
188181

189-
this.collection = this.collection.slice(offset, length)
182+
this.items = collect(this.items).slice(offset, length).all()
190183
}
191184

192185
globalSearch(keyword: string): void {
193186
keyword = this.config.isCaseInsensitive() ? keyword.toLowerCase() : keyword
194187

195-
this.collection = this.collection.filter((row: any) => {
196-
for (const index of Object.values(this.request.searchableColumnIndex())) {
197-
const column = this.getColumnName(index) as string
198-
let value = lodash.get(row, column)
199-
if (typeof value !== 'string') {
200-
continue
201-
} else {
202-
value = this.config.isCaseInsensitive() ? value.toLowerCase() : value
203-
}
188+
this.items = collect(this.items)
189+
.filter((row: any) => {
190+
for (const index of Object.values(this.request.searchableColumnIndex())) {
191+
const column = this.getColumnName(index) as string
192+
let value = lodash.get(row, column)
193+
if (typeof value !== 'string') {
194+
continue
195+
} else {
196+
value = this.config.isCaseInsensitive() ? value.toLowerCase() : value
197+
}
204198

205-
if (Helper.contains(value, keyword)) {
206-
return true
199+
if (Helper.contains(value, keyword)) {
200+
return true
201+
}
207202
}
208-
}
209203

210-
return false
211-
})
204+
return false
205+
})
206+
.all()
212207
}
213208
}

0 commit comments

Comments
 (0)