X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Frest%2Frest-table.ts;h=7b765f7fc09e2fd3f6b7ab4a380309f1fd43f511;hb=87a0cac618c8ed4a09408273d0f5a468530e8062;hp=e6328eddc1bc99f5441186c5ea91ed6ad7fb8c56;hpb=cfde28bac33c3644e1b6218eb471b675a37def60;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/rest/rest-table.ts b/client/src/app/core/rest/rest-table.ts index e6328eddc..7b765f7fc 100644 --- a/client/src/app/core/rest/rest-table.ts +++ b/client/src/app/core/rest/rest-table.ts @@ -1,9 +1,8 @@ -import { peertubeLocalStorage } from '@app/helpers/peertube-web-storage' +import * as debug from 'debug' import { LazyLoadEvent, SortMeta } from 'primeng/api' +import { ActivatedRoute, Router } from '@angular/router' +import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' import { RestPagination } from './rest-pagination' -import { Subject } from 'rxjs' -import { debounceTime, distinctUntilChanged } from 'rxjs/operators' -import * as debug from 'debug' const logger = debug('peertube:tables:RestTable') @@ -13,18 +12,19 @@ export abstract class RestTable { abstract sort: SortMeta abstract pagination: RestPagination - search: string rowsPerPageOptions = [ 10, 20, 50, 100 ] rowsPerPage = this.rowsPerPageOptions[0] expandedRows = {} - protected searchStream: Subject + search: string + + protected route: ActivatedRoute + protected router: Router abstract getIdentifier (): string initialize () { this.loadSort() - this.initSearch() } loadSort () { @@ -39,6 +39,10 @@ export abstract class RestTable { } } + saveSort () { + peertubeLocalStorage.setItem(this.getSortLocalStorageKey(), JSON.stringify(this.sort)) + } + loadLazy (event: LazyLoadEvent) { logger('Load lazy %o.', event) @@ -47,69 +51,25 @@ export abstract class RestTable { field: event.sortField } + this.rowsPerPage = event.rows + this.pagination = { start: event.first, count: this.rowsPerPage } - this.loadData() - this.saveSort() - } - - saveSort () { - peertubeLocalStorage.setItem(this.getSortLocalStorageKey(), JSON.stringify(this.sort)) - } - - initSearch () { - this.searchStream = new Subject() - - this.searchStream - .pipe( - debounceTime(400), - distinctUntilChanged() - ) - .subscribe(search => { - this.search = search - - logger('On search %s.', this.search) - - this.loadData() - }) - } - - onSearch (event: Event) { - const target = event.target as HTMLInputElement - this.searchStream.next(target.value) - } - - onPage (event: { first: number, rows: number }) { - logger('On page %o.', event) - - if (this.rowsPerPage !== event.rows) { - this.rowsPerPage = event.rows - this.pagination = { - start: event.first, - count: this.rowsPerPage - } - - this.loadData() - } - this.expandedRows = {} - } - setTableFilter (filter: string) { - // FIXME: cannot use ViewChild, so create a component for the filter input - const filterInput = document.getElementById('table-filter') as HTMLInputElement - if (filterInput) filterInput.value = filter + this.reloadData() + this.saveSort() } - resetSearch () { - this.searchStream.next('') - this.setTableFilter('') + onSearch (search: string) { + this.search = search + this.reloadData() } - protected abstract loadData (): void + protected abstract reloadData (): void private getSortLocalStorageKey () { return 'rest-table-sort-' + this.getIdentifier()