Skip to content

Commit

Permalink
fix(console): add state filter to org table, filter context (#5650)
Browse files Browse the repository at this point in the history
* fix: add state filter to org table, filter context

---------

Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
  • Loading branch information
peintnermax and adlerhurst committed Apr 12, 2023
1 parent d306e82 commit 2ec36bd
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 11 deletions.
23 changes: 23 additions & 0 deletions console/src/app/modules/filter-org/filter-org.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,28 @@
</cnsl-form-field>
</div>
</div>

<div class="name-query">
<mat-checkbox
id="state"
class="cb"
[checked]="getSubFilter(SubQuery.STATE)"
(change)="changeCheckbox(SubQuery.STATE, $event)"
>{{ 'FILTER.STATE' | translate }}
</mat-checkbox>
<div class="subquery" *ngIf="getSubFilter(SubQuery.STATE) as sq">
<span class="nomethod cnsl-secondary-text">
{{ 'FILTER.METHODS.1' | translate }}
</span>

<cnsl-form-field class="filter-select-value">
<mat-select [value]="sq.getState()" (selectionChange)="setValue(SubQuery.STATE, sq, $event)">
<mat-option *ngFor="let state of states" [value]="state">
{{ 'USER.STATE.' + state | translate }}
</mat-option>
</mat-select>
</cnsl-form-field>
</div>
</div>
</div>
</cnsl-filter>
39 changes: 33 additions & 6 deletions console/src/app/modules/filter-org/filter-org.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import { MatLegacyCheckboxChange as MatCheckboxChange } from '@angular/material/
import { ActivatedRoute, Router } from '@angular/router';
import { take } from 'rxjs';
import { TextQueryMethod } from 'src/app/proto/generated/zitadel/object_pb';
import { OrgNameQuery, OrgQuery, OrgState } from 'src/app/proto/generated/zitadel/org_pb';
import { 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';

enum SubQuery {
NAME,
STATE,
}

@Component({
Expand All @@ -21,7 +22,7 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery;
public searchQueries: OrgQuery[] = [];

public states: OrgState[] = [OrgState.ORG_STATE_ACTIVE, OrgState.ORG_STATE_INACTIVE];
public states: OrgState[] = [OrgState.ORG_STATE_ACTIVE, OrgState.ORG_STATE_INACTIVE, OrgState.ORG_STATE_REMOVED];

constructor(router: Router, protected route: ActivatedRoute) {
super(router, route);
Expand All @@ -37,13 +38,17 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
const orgQueries = filters.map((filter) => {
if (filter.nameQuery) {
const orgQuery = new OrgQuery();

const orgNameQuery = new OrgNameQuery();
orgNameQuery.setName(filter.nameQuery.name);
orgNameQuery.setMethod(filter.nameQuery.method);

orgQuery.setNameQuery(orgNameQuery);
return orgQuery;
} else if (filter.stateQuery) {
const orgQuery = new OrgQuery();
const orgStateQuery = new OrgStateQuery();
orgStateQuery.setState(filter.stateQuery.state);
orgQuery.setStateQuery(orgStateQuery);
return orgQuery;
} else {
return undefined;
}
Expand All @@ -64,12 +69,17 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
const nq = new OrgNameQuery();
nq.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE);
nq.setName('');

const oq = new OrgQuery();
oq.setNameQuery(nq);

this.searchQueries.push(oq);
break;
case SubQuery.STATE:
const sq = new OrgStateQuery();
sq.setState(OrgState.ORG_STATE_ACTIVE);
const osq = new OrgQuery();
osq.setStateQuery(sq);
this.searchQueries.push(osq);
break;
}
} else {
switch (subquery) {
Expand All @@ -79,6 +89,12 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
this.searchQueries.splice(index_dn, 1);
}
break;
case SubQuery.STATE:
const index_sn = this.searchQueries.findIndex((q) => (q as OrgQuery).toObject().stateQuery !== undefined);
if (index_sn > -1) {
this.searchQueries.splice(index_sn, 1);
}
break;
}
}
}
Expand All @@ -90,6 +106,10 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
(query as OrgNameQuery).setName(value);
this.filterChanged.emit(this.searchQueries ? this.searchQueries : []);
break;
case SubQuery.STATE:
(query as OrgStateQuery).setState(value);
this.filterChanged.emit(this.searchQueries ? this.searchQueries : []);
break;
}
}

Expand All @@ -102,6 +122,13 @@ export class FilterOrgComponent extends FilterComponent implements OnInit {
} else {
return undefined;
}
case SubQuery.STATE:
const sn = this.searchQueries.find((q) => (q as OrgQuery).toObject().stateQuery !== undefined);
if (sn) {
return (sn as OrgQuery).getStateQuery();
} else {
return undefined;
}
}
}

Expand Down
9 changes: 6 additions & 3 deletions console/src/app/modules/org-context/org-context.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild }
import { UntypedFormControl } from '@angular/forms';
import { BehaviorSubject, catchError, debounceTime, finalize, from, map, Observable, of, pipe, tap } from 'rxjs';
import { TextQueryMethod } from 'src/app/proto/generated/zitadel/object_pb';
import { Org, OrgNameQuery, OrgQuery } from 'src/app/proto/generated/zitadel/org_pb';
import { Org, OrgNameQuery, OrgQuery, OrgState, OrgStateQuery } from 'src/app/proto/generated/zitadel/org_pb';
import { AuthenticationService } from 'src/app/services/authentication.service';
import { GrpcAuthService } from 'src/app/services/grpc-auth.service';

Expand Down Expand Up @@ -47,9 +47,12 @@ export class OrgContextComponent implements OnInit {
}
}

let query;
let query = new OrgQuery();
const orgStateQuery = new OrgStateQuery();
orgStateQuery.setState(OrgState.ORG_STATE_ACTIVE);
query.setStateQuery(orgStateQuery);

if (filter) {
query = new OrgQuery();
const orgNameQuery = new OrgNameQuery();
orgNameQuery.setName(filter);
orgNameQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ export class UserTableComponent implements OnInit {
sortingField = UserFieldName.USER_FIELD_NAME_CREATION_DATE;
break;
}

this.userService
.listUsers(
limit,
Expand Down
19 changes: 18 additions & 1 deletion internal/api/grpc/org/converter.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func OrgQueryToModel(apiQuery *org_pb.OrgQuery) (query.SearchQuery, error) {
case *org_pb.OrgQuery_NameQuery:
return query.NewOrgNameSearchQuery(object.TextMethodToQuery(q.NameQuery.Method), q.NameQuery.Name)
case *org_pb.OrgQuery_StateQuery:
return query.NewOrgStateSearchQuery(int32(q.StateQuery.State))
return query.NewOrgStateSearchQuery(OrgStateToDomain(q.StateQuery.State))
default:
return nil, errors.ThrowInvalidArgument(nil, "ORG-vR9nC", "List.Query.Invalid")
}
Expand All @@ -49,6 +49,8 @@ func OrgQueryToQuery(search *org_pb.OrgQuery) (query.SearchQuery, error) {
return query.NewOrgDomainSearchQuery(object.TextMethodToQuery(q.DomainQuery.Method), q.DomainQuery.Domain)
case *org_pb.OrgQuery_NameQuery:
return query.NewOrgNameSearchQuery(object.TextMethodToQuery(q.NameQuery.Method), q.NameQuery.Name)
case *org_pb.OrgQuery_StateQuery:
return query.NewOrgStateSearchQuery(OrgStateToDomain(q.StateQuery.State))
default:
return nil, errors.ThrowInvalidArgument(nil, "ADMIN-ADvsd", "List.Query.Invalid")
}
Expand Down Expand Up @@ -108,6 +110,21 @@ func OrgStateToPb(state domain.OrgState) org_pb.OrgState {
}
}

func OrgStateToDomain(state org_pb.OrgState) domain.OrgState {
switch state {
case org_pb.OrgState_ORG_STATE_ACTIVE:
return domain.OrgStateActive
case org_pb.OrgState_ORG_STATE_INACTIVE:
return domain.OrgStateInactive
case org_pb.OrgState_ORG_STATE_REMOVED:
return domain.OrgStateRemoved
case org_pb.OrgState_ORG_STATE_UNSPECIFIED:
fallthrough
default:
return domain.OrgStateUnspecified
}
}

func DomainQueriesToModel(queries []*org_pb.DomainSearchQuery) (_ []query.SearchQuery, err error) {
q := make([]query.SearchQuery, len(queries))
for i, query := range queries {
Expand Down
2 changes: 1 addition & 1 deletion internal/query/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ func NewOrgNameSearchQuery(method TextComparison, value string) (SearchQuery, er
return NewTextQuery(OrgColumnName, value, method)
}

func NewOrgStateSearchQuery(value int32) (SearchQuery, error) {
func NewOrgStateSearchQuery(value domain_pkg.OrgState) (SearchQuery, error) {
return NewNumberQuery(OrgColumnState, value, NumberEquals)
}

Expand Down

1 comment on commit 2ec36bd

@vercel
Copy link

@vercel vercel bot commented on 2ec36bd Apr 12, 2023

Choose a reason for hiding this comment

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

Successfully deployed to the following URLs:

docs – ./

docs-zitadel.vercel.app
docs-git-main-zitadel.vercel.app
zitadel-docs.vercel.app

Please sign in to comment.