Browse Source

Use select for filters.

pull/853/head
Sebastian 4 years ago
parent
commit
cf785219f0
  1. 11
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateFilters/FilterVisitor.cs
  2. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/CreateApp.cs
  3. 38
      frontend/src/app/shared/components/search/queries/filter-comparison.component.html
  4. 3
      frontend/src/app/shared/services/query.ts

11
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateFilters/FilterVisitor.cs

@ -94,6 +94,17 @@ namespace Squidex.Domain.Apps.Core.GenerateFilters
public FilterSchema? Visit(IField<StringFieldProperties> field, Args args) public FilterSchema? Visit(IField<StringFieldProperties> field, Args args)
{ {
if (field.Properties.AllowedValues?.Count > 0)
{
return new FilterSchema(FilterSchemaType.String)
{
Extra = new
{
options = field.Properties.AllowedValues
}
};
}
return FilterSchema.String; return FilterSchema.String;
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/CreateApp.cs

@ -17,8 +17,6 @@ namespace Squidex.Domain.Apps.Entities.Apps.Commands
public string Name { get; set; } public string Name { get; set; }
public string? Template { get; set; }
[IgnoreDataMember] [IgnoreDataMember]
public override DomainId AggregateId public override DomainId AggregateId
{ {
@ -30,4 +28,4 @@ namespace Squidex.Domain.Apps.Entities.Apps.Commands
AppId = DomainId.NewGuid(); AppId = DomainId.NewGuid();
} }
} }
} }

38
frontend/src/app/shared/components/search/queries/filter-comparison.component.html

@ -39,6 +39,23 @@
[ngModel]="filter.value" [ngModel]="filter.value"
(ngModelChange)="changeValue($event)" /> (ngModelChange)="changeValue($event)" />
</ng-container> </ng-container>
<ng-container *ngSwitchCase="'Reference'">
<sqx-reference-input [schemaIds]="field.schema.extra?.schemaIds"
mode="Single"
[ngModel]="filter.value"
(ngModelChange)="changeValue($event)"
[language]="language"
[languages]="languages">
</sqx-reference-input>
</ng-container>
<ng-container *ngSwitchCase="'Select'">
<select class="form-select"
[ngModel]="filter.value"
(ngModelChange)="changeValue($event)">
<option [ngValue]="null"></option>
<option *ngFor="let value of field.schema.extra?.options" [ngValue]="value">{{value}}</option>
</select>
</ng-container>
<ng-container *ngSwitchCase="'Status'"> <ng-container *ngSwitchCase="'Status'">
<sqx-dropdown <sqx-dropdown
valueProperty="status" valueProperty="status"
@ -51,6 +68,11 @@
</ng-template> </ng-template>
</sqx-dropdown> </sqx-dropdown>
</ng-container> </ng-container>
<ng-container *ngSwitchCase="'String'">
<input type="text" class="form-control" *ngIf="!field.schema.extra"
[ngModel]="filter.value"
(ngModelChange)="changeValue($event)" />
</ng-container>
<ng-container *ngSwitchCase="'User'"> <ng-container *ngSwitchCase="'User'">
<ng-container *ngIf="contributorsState.isLoaded | async; else noPermission"> <ng-container *ngIf="contributorsState.isLoaded | async; else noPermission">
<sqx-dropdown <sqx-dropdown
@ -72,25 +94,11 @@
</sqx-dropdown> </sqx-dropdown>
</ng-container> </ng-container>
<ng-template #noPermission> <ng-template #noPermission>
<input type="text" class="form-control" *ngIf="!field.schema.extra" <input type="text" class="form-control"
[ngModel]="filter.value" [ngModel]="filter.value"
(ngModelChange)="changeValue($event)" /> (ngModelChange)="changeValue($event)" />
</ng-template> </ng-template>
</ng-container> </ng-container>
<ng-container *ngSwitchCase="'String'">
<input type="text" class="form-control" *ngIf="!field.schema.extra"
[ngModel]="filter.value"
(ngModelChange)="changeValue($event)" />
</ng-container>
<ng-container *ngSwitchCase="'Reference'">
<sqx-reference-input [schemaIds]="field.schema.extra?.schemaIds"
mode="Single"
[ngModel]="filter.value"
(ngModelChange)="changeValue($event)"
[language]="language"
[languages]="languages">
</sqx-reference-input>
</ng-container>
<ng-container *ngSwitchCase="'Unsupported'"> <ng-container *ngSwitchCase="'Unsupported'">
{{ 'common.notSupported' | sqxTranslate }} {{ 'common.notSupported' | sqxTranslate }}
</ng-container> </ng-container>

3
frontend/src/app/shared/services/query.ts

@ -26,6 +26,7 @@ export type FilterFieldUI =
'Reference' | 'Reference' |
'None' | 'None' |
'Number' | 'Number' |
'Select' |
'String' | 'String' |
'Status' | 'Status' |
'Unsupported' | 'Unsupported' |
@ -52,6 +53,8 @@ export function getFilterUI(comparison: FilterComparison, field: FilterableField
return 'Status'; return 'Status';
} else if (type === 'String' && extra?.editor === 'User') { } else if (type === 'String' && extra?.editor === 'User') {
return 'User'; return 'User';
} else if (type === 'String' && extra?.options) {
return 'Select';
} else if (type === 'String') { } else if (type === 'String') {
return 'String'; return 'String';
} else if (type === 'StringArray' && extra?.schemaIds) { } else if (type === 'StringArray' && extra?.schemaIds) {

Loading…
Cancel
Save