1 import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage'
2 import { LazyLoadEvent } from 'primeng/components/common/lazyloadevent'
3 import { SortMeta } from 'primeng/components/common/sortmeta'
4 import { RestPagination } from './rest-pagination'
5 import { Subject } from 'rxjs'
6 import { debounceTime, distinctUntilChanged } from 'rxjs/operators'
8 export abstract class RestTable {
10 abstract totalRecords: number
11 abstract rowsPerPage: number
12 abstract sort: SortMeta
13 abstract pagination: RestPagination
15 protected search: string
16 private searchStream: Subject<string>
17 private sortLocalStorageKey = 'rest-table-sort-' + this.constructor.name
19 protected abstract loadData (): void
27 const result = peertubeLocalStorage.getItem(this.sortLocalStorageKey)
31 this.sort = JSON.parse(result)
33 console.error('Cannot load sort of local storage key ' + this.sortLocalStorageKey, err)
38 loadLazy (event: LazyLoadEvent) {
40 order: event.sortOrder,
41 field: event.sortField
46 count: this.rowsPerPage
54 peertubeLocalStorage.setItem(this.sortLocalStorageKey, JSON.stringify(this.sort))
58 this.searchStream = new Subject()
63 distinctUntilChanged()
65 .subscribe(search => {
71 onSearch (search: string) {
72 this.searchStream.next(search)