Skip to content
This repository has been archived by the owner on Mar 25, 2023. It is now read-only.

feat(listAll): add listAll and account filter #535

Merged
merged 26 commits into from
Sep 29, 2017
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7afb992
#305-list-all - add listAll=true to getList for admin
ksendart Sep 15, 2017
521a54c
#305-list-all - fix tests
ksendart Sep 15, 2017
c86d878
#305-list-all - filter vm-s
ksendart Sep 15, 2017
1053666
#305-list-all - filter volumes
ksendart Sep 18, 2017
82c86ab
#305-list-all - filter templates
ksendart Sep 18, 2017
2ac7b3b
Merge branch 'master' into 305-list-all
ksendart Sep 18, 2017
166d1b3
#305-list-all - after review
ksendart Sep 18, 2017
e90b5ea
#305-list-all - after review
ksendart Sep 18, 2017
2c1ea5d
Merge branch 'master' into 305-list-all
ksendart Sep 18, 2017
f80ab43
Merge branch 'master' into 305-list-all
ksendart Sep 19, 2017
39c2ce8
Merge branch 'master' into 305-list-all
ksendart Sep 19, 2017
01e0599
#305-list-all - filter ssh-keys
ksendart Sep 19, 2017
7928064
#305-list-all - add translations
ksendart Sep 19, 2017
38a28fc
Merge branch 'master' into 305-list-all
ksendart Sep 20, 2017
04f2979
#305-list-all - disable delete, fetch all templates
ksendart Sep 20, 2017
b198a6a
#305-list-all - delete ssh-key, fetch all templates
ksendart Sep 20, 2017
4f1bf34
#305-list-all - after review
ksendart Sep 21, 2017
4f9d48b
#305-list-all - after review
ksendart Sep 22, 2017
7f22c53
#305-list-all - after review
ksendart Sep 22, 2017
4ff447c
#305-list-all - Merge branch 'master' after review
ksendart Sep 26, 2017
4578abe
#305-list-all - after review
ksendart Sep 26, 2017
3b3314b
#305-list-all - after review
ksendart Sep 27, 2017
ba39254
Merge branch 'master' into 305-list-all
ksendart Sep 27, 2017
d747fc1
#305-list-all - keep account filter
ksendart Sep 27, 2017
fadec40
#305-list-all - keep account filter
ksendart Sep 29, 2017
138a87f
Code review changes
Sep 29, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<md-select
class="filter-select"
multiple="true"
[placeholder]="'VM_PAGE.FILTERS.SELECT_ACCOUNTS' | translate"
[(ngModel)]="selected"
(change)="changeAccount()"
>
<md-option *ngFor="let user of users" [value]="user">{{ user.name }}</md-option>
</md-select>
23 changes: 23 additions & 0 deletions src/app/shared/components/filter/account-filter.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import {Component, EventEmitter, Output} from '@angular/core';
import {Account} from '../../models/account.model';
import {AccountService} from '../../services/account.service';

@Component({
selector: 'cs-account-filter',
templateUrl: 'account-filter.component.html'
})
export class AccountFilterComponent {
@Output() public onChangeAccount = new EventEmitter<Array<Account>>();
public selected;
public users: Array<Account>;

constructor (private accountService: AccountService) {
this.accountService.getList().subscribe((users) => {
this.users = users;
});
}

public changeAccount() {
this.onChangeAccount.emit(this.selected);
}
}
1 change: 1 addition & 0 deletions src/app/shared/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ export * from '../../vm/vm-creation/components/security-group-rules-manager/vm-c
export * from './top-bar/top-bar.component';
export * from './vm-statistics/vm-statistics.component';
export * from './slider/slider.component';
export * from './filter/account-filter.component';
17 changes: 9 additions & 8 deletions src/app/shared/models/volume.model.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as moment from 'moment';
import { FieldMapper } from '../decorators/field-mapper.decorator';
import { ZoneName } from '../decorators/zone-name.decorator';
import { VolumeTagKeys } from '../services/tags/volume-tag-keys';
import { BaseModel } from './base.model';
import { DiskOffering } from './disk-offering.model';
import { Snapshot } from './snapshot.model';
import { DeletionMark, Tag } from './tag.model';
import { ServiceOffering } from './service-offering.model';
import {FieldMapper} from '../decorators/field-mapper.decorator';
import {ZoneName} from '../decorators/zone-name.decorator';
import {VolumeTagKeys} from '../services/tags/volume-tag-keys';
import {BaseModel} from './base.model';
import {DiskOffering} from './disk-offering.model';
import {Snapshot} from './snapshot.model';
import {DeletionMark, Tag} from './tag.model';
import {ServiceOffering} from './service-offering.model';


export enum VolumeType {
Expand Down Expand Up @@ -34,6 +34,7 @@ export class Volume extends BaseModel {
public resourceType = 'Volume';

public id: string;
public account: string;
public created: Date;
public domain: string;
public diskOffering: DiskOffering;
Expand Down
18 changes: 10 additions & 8 deletions src/app/shared/services/async-job.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { TestBed, async, getTestBed, fakeAsync, tick, discardPeriodicTasks } from '@angular/core/testing';
import { Injector } from '@angular/core';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import {async, discardPeriodicTasks, fakeAsync, TestBed, tick} from '@angular/core/testing';
import {Injector} from '@angular/core';
import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';

import { ServiceLocator } from './service-locator';
import {ServiceLocator} from './service-locator';

import { AsyncJobService } from './async-job.service';
import { CacheService } from './cache.service';
import { ErrorService } from './error.service';
import {AsyncJobService} from './async-job.service';
import {CacheService} from './cache.service';
import {ErrorService} from './error.service';

import { MockCacheService } from '../../../testutils/mocks/mock-cache.service.spec';
import {MockCacheService} from '../../../testutils/mocks/mock-cache.service.spec';
import {LocalStorageService} from './local-storage.service';


describe('Async job service', () => {
Expand Down Expand Up @@ -67,6 +68,7 @@ describe('Async job service', () => {
providers: [
ErrorService,
ServiceLocator,
LocalStorageService,
{ provide: CacheService, useClass: MockCacheService },
AsyncJobService
],
Expand Down
20 changes: 11 additions & 9 deletions src/app/shared/services/base-backend.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { Injector } from '@angular/core';
import { async, inject, TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { BackendResource } from '../decorators';
import {Injector} from '@angular/core';
import {async, inject, TestBed} from '@angular/core/testing';
import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
import {BackendResource} from '../decorators';

import { BaseModel } from '../models';
import { BaseBackendService } from './base-backend.service';
import { CacheService } from './cache.service';
import { ErrorService } from './error.service';
import { ServiceLocator } from './service-locator';
import {BaseModel} from '../models';
import {BaseBackendService} from './base-backend.service';
import {CacheService} from './cache.service';
import {ErrorService} from './error.service';
import {ServiceLocator} from './service-locator';
import {LocalStorageService} from './local-storage.service';


describe('Base backend service', () => {
Expand Down Expand Up @@ -38,6 +39,7 @@ describe('Base backend service', () => {
TestBed.configureTestingModule({
providers: [
TestBackendService,
LocalStorageService,
ErrorService,
CacheService,
],
Expand Down
15 changes: 8 additions & 7 deletions src/app/shared/services/base-backend.service.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { HttpHeaders, HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';

import { BaseModel } from '../models';
import { Cache } from './cache';
import { CacheService } from './cache.service';
import { ErrorService } from './error.service';
import { ServiceLocator } from './service-locator';
import {BaseModel} from '../models';
import {Cache} from './cache';
import {CacheService} from './cache.service';
import {ErrorService} from './error.service';
import {ServiceLocator} from './service-locator';


export const BACKEND_API_URL = 'client/api';
Expand Down Expand Up @@ -40,6 +40,7 @@ export abstract class BaseBackendService<M extends BaseModel> {
}

public getList(params?: {}, customApiFormat?: ApiFormat): Observable<Array<M>> {
params = Object.assign(params || {}, { 'listAll': 'true' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

params equal to {} by default. no need to check params || {}
use Object.assign({}, params, {listall...})

const cachedRequest = this.requestCache.get(params);
if (cachedRequest) {
return cachedRequest;
Expand Down
28 changes: 15 additions & 13 deletions src/app/shared/services/service-offering.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { Injectable, Injector } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ServiceOfferingService } from './service-offering.service';
import { OfferingAvailability } from './offering.service';
import { Zone } from '../models/zone.model';
import { ServiceOffering } from '../models/service-offering.model';
import { ConfigService } from './config.service';
import { ServiceLocator } from './service-locator';
import { ErrorService } from './error.service';
import { MockCacheService } from '../../../testutils/mocks/mock-cache.service.spec';
import { CacheService } from './cache.service';
import { ResourcesData } from './resource-usage.service';
import {Injectable, Injector} from '@angular/core';
import {TestBed} from '@angular/core/testing';
import {HttpClientTestingModule} from '@angular/common/http/testing';
import {ServiceOfferingService} from './service-offering.service';
import {OfferingAvailability} from './offering.service';
import {Zone} from '../models/zone.model';
import {ServiceOffering} from '../models/service-offering.model';
import {ConfigService} from './config.service';
import {ServiceLocator} from './service-locator';
import {ErrorService} from './error.service';
import {MockCacheService} from '../../../testutils/mocks/mock-cache.service.spec';
import {CacheService} from './cache.service';
import {ResourcesData} from './resource-usage.service';
import {LocalStorageService} from './local-storage.service';

@Injectable()
class MockErrorService {
Expand All @@ -26,6 +27,7 @@ describe('Service-offering service', () => {
TestBed.configureTestingModule({
providers: [
ServiceOfferingService,
LocalStorageService,
ConfigService,
{ provide: ErrorService, useClass: MockErrorService },
{ provide: CacheService, useClass: MockCacheService },
Expand Down
7 changes: 5 additions & 2 deletions src/app/shared/shared.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import { TemplateActionsComponent } from './actions/template-actions/template-ac
import { TemplateActionsService } from './actions/template-actions/template-actions.service';
import { BadgeModule } from './badge/';
import {
AccountFilterComponent,
CalendarComponent,
CalendarMonthComponent,
CalendarYearComponent,
Expand Down Expand Up @@ -213,7 +214,8 @@ import { SecurityGroupService } from '../security-group/services/security-group.
MdInputModule,
TopBarComponent,
ViewValuePipe,
VmStatisticsComponent
VmStatisticsComponent,
AccountFilterComponent
],
entryComponents: [
DatePickerDialogComponent,
Expand Down Expand Up @@ -272,7 +274,8 @@ import { SecurityGroupService } from '../security-group/services/security-group.
SecurityGroupBuilderComponent,
SecurityGroupSelectorComponent,
SecurityGroupManagerBaseTemplatesComponent,
VmStatisticsComponent
VmStatisticsComponent,
AccountFilterComponent,
],
providers: [
AccountService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
{{ 'SPARE_DRIVE_PAGE.FILTERS.SPARE_DRIVES_ONLY' | translate }}
</md-checkbox>

<cs-account-filter *ngIf="showAccountFilter()" (onChangeAccount)="updateAccount($event)"></cs-account-filter>
<md-select
*ngIf="zones"
class="filter-select"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@ import { VolumeType, volumeTypeNames } from '../../shared/models/volume.model';
import { Zone } from '../../shared/models/zone.model';
import { FilterService } from '../../shared/services/filter.service';
import { LocalStorageService } from '../../shared/services/local-storage.service';

import { User } from '../../shared/models/user.model';
import { AuthService } from '../../shared/services/auth.service';

export interface SpareDriveFilter {
spareOnly: boolean;
selectedZones: Array<Zone>;
selectedTypes: Array<VolumeType>;
groupings: Array<any>;
query: string;
accounts: Array<User>;
}

export const spareDriveListFilters = 'spareDriveListFilters';
Expand All @@ -38,6 +40,7 @@ export class SpareDriveFilterComponent implements FilterComponent<SpareDriveFilt
public selectedZones: Array<Zone> = [];
public selectedGroupingNames = [];
public query: string;
public selectedAccounts: Array<User>;

private filtersKey = spareDriveListFilters;
private filterService = new FilterService({
Expand All @@ -51,7 +54,8 @@ export class SpareDriveFilterComponent implements FilterComponent<SpareDriveFilt
constructor(
private router: Router,
private activatedRoute: ActivatedRoute,
private localStorage: LocalStorageService
private localStorage: LocalStorageService,
private authService: AuthService
) {
this.updateFilters = new EventEmitter();
}
Expand All @@ -66,6 +70,10 @@ export class SpareDriveFilterComponent implements FilterComponent<SpareDriveFilt
return volumeTypeNames[type];
}

public showAccountFilter(): boolean {
return this.authService.isAdmin();
}

public initFilters(): void {
const params = this.filterService.getParams();

Expand All @@ -91,13 +99,19 @@ export class SpareDriveFilterComponent implements FilterComponent<SpareDriveFilt
this.update();
}

public updateAccount(users: Array<User>) {
this.selectedAccounts = users;
this.update();
}

public update(): void {
this.updateFilters.emit({
spareOnly: this.spareOnly,
selectedZones: sortBy(this.selectedZones, 'name'),
selectedTypes: this.selectedTypes,
groupings: this.selectedGroupingNames,
query: this.query
query: this.query,
accounts: this.selectedAccounts
});

this.filterService.update(this.filtersKey, {
Expand Down
Loading