diff options
Diffstat (limited to 'client/src/app/shared/rest')
-rw-r--r-- | client/src/app/shared/rest/rest-table.ts | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/client/src/app/shared/rest/rest-table.ts b/client/src/app/shared/rest/rest-table.ts index fe1a91d2d..26748f245 100644 --- a/client/src/app/shared/rest/rest-table.ts +++ b/client/src/app/shared/rest/rest-table.ts | |||
@@ -1,8 +1,9 @@ | |||
1 | import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' | 1 | import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' |
2 | import { LazyLoadEvent } from 'primeng/components/common/lazyloadevent' | 2 | import { LazyLoadEvent } from 'primeng/components/common/lazyloadevent' |
3 | import { SortMeta } from 'primeng/components/common/sortmeta' | 3 | import { SortMeta } from 'primeng/components/common/sortmeta' |
4 | |||
5 | import { RestPagination } from './rest-pagination' | 4 | import { RestPagination } from './rest-pagination' |
5 | import { Subject } from 'rxjs' | ||
6 | import { debounceTime, distinctUntilChanged } from 'rxjs/operators' | ||
6 | 7 | ||
7 | export abstract class RestTable { | 8 | export abstract class RestTable { |
8 | 9 | ||
@@ -11,10 +12,17 @@ export abstract class RestTable { | |||
11 | abstract sort: SortMeta | 12 | abstract sort: SortMeta |
12 | abstract pagination: RestPagination | 13 | abstract pagination: RestPagination |
13 | 14 | ||
15 | protected search: string | ||
16 | private searchStream: Subject<string> | ||
14 | private sortLocalStorageKey = 'rest-table-sort-' + this.constructor.name | 17 | private sortLocalStorageKey = 'rest-table-sort-' + this.constructor.name |
15 | 18 | ||
16 | protected abstract loadData (): void | 19 | protected abstract loadData (): void |
17 | 20 | ||
21 | initialize () { | ||
22 | this.loadSort() | ||
23 | this.initSearch() | ||
24 | } | ||
25 | |||
18 | loadSort () { | 26 | loadSort () { |
19 | const result = peertubeLocalStorage.getItem(this.sortLocalStorageKey) | 27 | const result = peertubeLocalStorage.getItem(this.sortLocalStorageKey) |
20 | 28 | ||
@@ -46,4 +54,21 @@ export abstract class RestTable { | |||
46 | peertubeLocalStorage.setItem(this.sortLocalStorageKey, JSON.stringify(this.sort)) | 54 | peertubeLocalStorage.setItem(this.sortLocalStorageKey, JSON.stringify(this.sort)) |
47 | } | 55 | } |
48 | 56 | ||
57 | initSearch () { | ||
58 | this.searchStream = new Subject() | ||
59 | |||
60 | this.searchStream | ||
61 | .pipe( | ||
62 | debounceTime(400), | ||
63 | distinctUntilChanged() | ||
64 | ) | ||
65 | .subscribe(search => { | ||
66 | this.search = search | ||
67 | this.loadData() | ||
68 | }) | ||
69 | } | ||
70 | |||
71 | onSearch (search: string) { | ||
72 | this.searchStream.next(search) | ||
73 | } | ||
49 | } | 74 | } |