forked from kubernetes/dashboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomponent.ts
77 lines (67 loc) · 3.08 KB
/
component.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright 2017 The Kubernetes Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {HttpParams} from '@angular/common/http';
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {CRDObject, CRDObjectList} from '@api/root.api';
import {Observable} from 'rxjs';
import {map} from 'rxjs/operators';
import {ResourceListBase} from '@common/resources/list';
import {NotificationsService} from '@common/services/global/notifications';
import {EndpointManager, Resource} from '@common/services/resource/endpoint';
import {NamespacedResourceService} from '@common/services/resource/resource';
import {MenuComponent} from '../../list/column/menu/component';
import {ListGroupIdentifier, ListIdentifier} from '../groupids';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
@Component({
selector: 'kd-crd-object-list',
templateUrl: './template.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class CRDObjectListComponent extends ResourceListBase<CRDObjectList, CRDObject> {
@Input() endpoint: string;
@Input() namespaced = false;
@Input() additionalDisplayColumns: string[] = [];
constructor(
private readonly crdObject_: NamespacedResourceService<CRDObjectList>,
private readonly activatedRoute_: ActivatedRoute,
notifications: NotificationsService,
cdr: ChangeDetectorRef
) {
super(activatedRoute_.params.pipe(map(params => `customresourcedefinition/${params.crdName}`)), notifications, cdr);
this.id = ListIdentifier.crdObject;
this.groupId = ListGroupIdentifier.none;
// Register action columns.
this.registerActionColumn<MenuComponent>('menu', MenuComponent);
this.activatedRoute_.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
this.endpoint = EndpointManager.resource(Resource.crd, true).child(params.crdName, Resource.crdObject);
});
}
getResourceObservable(params?: HttpParams): Observable<CRDObjectList> {
return this.crdObject_.get(this.endpoint, undefined, undefined, params);
}
map(crdObjectList: CRDObjectList): CRDObject[] {
return crdObjectList.items;
}
getDisplayColumns(): string[] {
return ['name', 'namespace', ...this.getAdditionalDisplayColumns(), 'created'];
}
getAdditionalDisplayColumns(): string[] {
const defaultColumns = ['name', 'namespace', 'created'];
return this.additionalDisplayColumns.filter(v => !defaultColumns.includes(v));
}
areMultipleNamespacesSelected(): boolean {
return this.namespaceService_.areMultipleNamespacesSelected();
}
}