feat(console): allow filter org by primary domain on instance (#7283)

* feat: i18n translations

* feat: add primary domain to filter-org component

* fix: add listOrgs service to admin and use it for org-table component

---------

Co-authored-by: Max Peintner <[email protected]>
This commit is contained in:
Miguel Cabrerizo
2024-01-30 16:09:47 +00:00
committed by GitHub
co-authored by Max Peintner
parent aa407c3c3e
commit 46bffd24ee
18 changed files with 105 additions and 2 deletions
@@ -46,4 +46,27 @@
</div>
</div>
</div>
<div class="domain-query">
<mat-checkbox
id="domain"
class="cb"
[checked]="getSubFilter(SubQuery.DOMAIN)"
(change)="changeCheckbox(SubQuery.DOMAIN, $event)"
>{{ 'FILTER.PRIMARYDOMAIN' | translate }}
</mat-checkbox>
<div class="subquery" *ngIf="getSubFilter(SubQuery.DOMAIN) as dq">
<cnsl-form-field class="filter-select-method">
<mat-select [value]="dq.getMethod()" (selectionChange)="setMethod(dq, $event)">
<mat-option *ngFor="let method of methods" [value]="method">
{{ 'FILTER.METHODS.' + method | translate }}
</mat-option>
</mat-select>
</cnsl-form-field>
<cnsl-form-field class="filter-input-value">
<input cnslInput name="value" [value]="dq.getDomain()" (change)="setValue(SubQuery.DOMAIN, dq, $event)" />
</cnsl-form-field>
</div>
</div>
</cnsl-filter>
@@ -3,7 +3,7 @@ import { MatCheckboxChange } from '@angular/material/checkbox';
import { ActivatedRoute, Router } from '@angular/router';
import { take } from 'rxjs';
import { TextQueryMethod } from 'src/app/proto/generated/zitadel/object_pb';
import { OrgNameQuery, OrgQuery, OrgState, OrgStateQuery } from 'src/app/proto/generated/zitadel/org_pb';
import { OrgDomainQuery, OrgNameQuery, OrgQuery, OrgState, OrgStateQuery } from 'src/app/proto/generated/zitadel/org_pb';
import { UserNameQuery } from 'src/app/proto/generated/zitadel/user_pb';
import { FilterComponent } from '../filter/filter.component';
@@ -11,6 +11,7 @@ import { FilterComponent } from '../filter/filter.component';
enum SubQuery {
NAME,
STATE,
DOMAIN,
}
@Component({
@@ -52,6 +53,13 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
orgStateQuery.setState(filter.stateQuery.state);
orgQuery.setStateQuery(orgStateQuery);
return orgQuery;
} else if (filter.domainQuery) {
const orgQuery = new OrgQuery();
const orgDomainQuery = new OrgDomainQuery();
orgDomainQuery.setDomain(filter.domainQuery.domain);
orgDomainQuery.setMethod(filter.domainQuery.method);
orgQuery.setDomainQuery(orgDomainQuery);
return orgQuery;
} else {
return undefined;
}
@@ -83,6 +91,14 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
osq.setStateQuery(sq);
this.searchQueries.push(osq);
break;
case SubQuery.DOMAIN:
const dq = new OrgDomainQuery();
dq.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE);
dq.setDomain('');
const odq = new OrgQuery();
odq.setDomainQuery(dq);
this.searchQueries.push(odq);
break;
}
} else {
switch (subquery) {
@@ -98,6 +114,12 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
this.searchQueries.splice(index_sn, 1);
}
break;
case SubQuery.DOMAIN:
const index_pdn = this.searchQueries.findIndex((q) => (q as OrgQuery).toObject().domainQuery !== undefined);
if (index_pdn > -1) {
this.searchQueries.splice(index_pdn, 1);
}
break;
}
}
}
@@ -113,6 +135,10 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
(query as OrgStateQuery).setState(value);
this.filterChanged.emit(this.searchQueries ? this.searchQueries : []);
break;
case SubQuery.DOMAIN:
(query as OrgDomainQuery).setDomain(value);
this.filterChanged.emit(this.searchQueries ? this.searchQueries : []);
break;
}
}
@@ -132,6 +158,13 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
} else {
return undefined;
}
case SubQuery.DOMAIN:
const pdn = this.searchQueries.find((q) => (q as OrgQuery).toObject().domainQuery !== undefined);
if (pdn) {
return (pdn as OrgQuery).getDomainQuery();
} else {
return undefined;
}
}
}
@@ -88,7 +88,7 @@ export class OrgTableComponent {
}
return from(
this.authService.listMyProjectOrgs(request.limit, request.offset, request.queries, sortingField, this.sort?.direction),
this.adminService.listOrgs(request.limit, request.offset, request.queries, sortingField, this.sort?.direction),
).pipe(
map((resp) => {
this.timestamp = resp.details?.viewTimestamp;