diff --git a/src/Squidex/app/features/assets/pages/assets-page.component.html b/src/Squidex/app/features/assets/pages/assets-page.component.html
index 79f324003..0a3f75e50 100644
--- a/src/Squidex/app/features/assets/pages/assets-page.component.html
+++ b/src/Squidex/app/features/assets/pages/assets-page.component.html
@@ -26,8 +26,8 @@
diff --git a/src/Squidex/app/features/assets/pages/assets-page.component.ts b/src/Squidex/app/features/assets/pages/assets-page.component.ts
index 2f795ab59..5f47ad012 100644
--- a/src/Squidex/app/features/assets/pages/assets-page.component.ts
+++ b/src/Squidex/app/features/assets/pages/assets-page.component.ts
@@ -12,8 +12,10 @@ import { onErrorResumeNext } from 'rxjs/operators';
import {
AppsState,
AssetsState,
+ FilterState,
LocalStoreService,
Queries,
+ ResourceOwner,
UIState
} from '@app/shared';
@@ -22,11 +24,13 @@ import {
styleUrls: ['./assets-page.component.scss'],
templateUrl: './assets-page.component.html'
})
-export class AssetsPageComponent implements OnInit {
+export class AssetsPageComponent extends ResourceOwner implements OnInit {
public assetsFilter = new FormControl();
public queries = new Queries(this.uiState, 'assets');
+ public filter = new FilterState();
+
public isListView: boolean;
constructor(
@@ -35,19 +39,27 @@ export class AssetsPageComponent implements OnInit {
private readonly localStore: LocalStoreService,
private readonly uiState: UIState
) {
+ super();
+
this.isListView = this.localStore.getBoolean('squidex.assets.list-view');
}
public ngOnInit() {
this.assetsState.load().pipe(onErrorResumeNext()).subscribe();
+
+ this.own(
+ this.assetsState.assetsQuery
+ .subscribe(query => {
+ this.filter.setQuery(query);
+ }));
}
public reload() {
this.assetsState.load(true).pipe(onErrorResumeNext()).subscribe();
}
- public search(query: string) {
- this.assetsState.search(query).pipe(onErrorResumeNext()).subscribe();
+ public search() {
+ this.assetsState.search(this.filter.apiFilter).pipe(onErrorResumeNext()).subscribe();
}
public selectTags(tags: string[]) {
diff --git a/src/Squidex/app/features/content/pages/contents/contents-page.component.html b/src/Squidex/app/features/content/pages/contents/contents-page.component.html
index 01c728105..97fbd47cc 100644
--- a/src/Squidex/app/features/content/pages/contents/contents-page.component.html
+++ b/src/Squidex/app/features/content/pages/contents/contents-page.component.html
@@ -22,8 +22,8 @@
- {{field.displayName}}
+
+
- Updated
+
+
- By
+
Actions
diff --git a/src/Squidex/app/features/content/pages/contents/contents-page.component.ts b/src/Squidex/app/features/content/pages/contents/contents-page.component.ts
index d901cffcd..76285718d 100644
--- a/src/Squidex/app/features/content/pages/contents/contents-page.component.ts
+++ b/src/Squidex/app/features/content/pages/contents/contents-page.component.ts
@@ -13,13 +13,16 @@ import {
AppsState,
ContentDto,
ContentsState,
+ FilterState,
ImmutableArray,
LanguagesState,
ModalModel,
Queries,
ResourceOwner,
+ RootFieldDto,
SchemaDetailsDto,
SchemasState,
+ Sorting,
UIState
} from '@app/shared';
@@ -45,6 +48,8 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
public language: AppLanguageDto;
public languages: ImmutableArray;
+ public filter = new FilterState();
+
public isAllSelected = false;
@ViewChild('dueTimeSelector')
@@ -64,6 +69,9 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
this.own(
this.schemasState.selectedSchema
.subscribe(schema => {
+ this.filter = new FilterState();
+ this.filter.setLanguage(this.language);
+
this.resetSelection();
this.schema = schema!;
@@ -72,6 +80,12 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
this.contentsState.init().pipe(onErrorResumeNext()).subscribe();
}));
+ this.own(
+ this.contentsState.contentsQuery
+ .subscribe(query => {
+ this.filter.setQuery(query);
+ }));
+
this.own(
this.contentsState.contents
.subscribe(() => {
@@ -83,6 +97,8 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
.subscribe(languages => {
this.languages = languages.map(x => x.language);
this.language = this.languages.at(0);
+
+ this.filter.setLanguage(this.language);
}));
}
@@ -160,8 +176,8 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
this.contentsState.goNext().pipe(onErrorResumeNext()).subscribe();
}
- public search(query: string) {
- this.contentsState.search(query).pipe(onErrorResumeNext()).subscribe();
+ public search() {
+ this.contentsState.search(this.filter.apiFilter).pipe(onErrorResumeNext()).subscribe();
}
public selectLanguage(language: AppLanguageDto) {
@@ -200,6 +216,12 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
this.updateSelectionSummary();
}
+ public sort(field: string | RootFieldDto, sorting: Sorting) {
+ this.filter.setOrderField(field, sorting);
+
+ this.search();
+ }
+
public trackByContent(index: number, content: ContentDto): string {
return content.id;
}
diff --git a/src/Squidex/app/features/content/shared/contents-selector.component.html b/src/Squidex/app/features/content/shared/contents-selector.component.html
index 0a7cfc92e..25eba71cb 100644
--- a/src/Squidex/app/features/content/shared/contents-selector.component.html
+++ b/src/Squidex/app/features/content/shared/contents-selector.component.html
@@ -11,9 +11,7 @@
-
@@ -33,13 +31,19 @@
- {{field.displayName}}
+
+
- Updated
+
+
- By
+
diff --git a/src/Squidex/app/features/content/shared/contents-selector.component.ts b/src/Squidex/app/features/content/shared/contents-selector.component.ts
index f753d22c5..50d40796b 100644
--- a/src/Squidex/app/features/content/shared/contents-selector.component.ts
+++ b/src/Squidex/app/features/content/shared/contents-selector.component.ts
@@ -10,10 +10,12 @@ import { onErrorResumeNext } from 'rxjs/operators';
import {
ContentDto,
+ FilterState,
LanguageDto,
ManualContentsState,
- ModalModel,
- SchemaDetailsDto
+ RootFieldDto,
+ SchemaDetailsDto,
+ Sorting
} from '@app/shared';
@Component({
@@ -37,7 +39,7 @@ export class ContentsSelectorComponent implements OnInit {
@Output()
public select = new EventEmitter
();
- public searchModal = new ModalModel();
+ public filter = new FilterState();
public selectedItems: { [id: string]: ContentDto; } = {};
public selectionCount = 0;
@@ -59,8 +61,8 @@ export class ContentsSelectorComponent implements OnInit {
this.contentsState.load(true).pipe(onErrorResumeNext()).subscribe();
}
- public search(query: string) {
- this.contentsState.search(query).pipe(onErrorResumeNext()).subscribe();
+ public search() {
+ this.contentsState.search(this.filter.apiFilter).pipe(onErrorResumeNext()).subscribe();
}
public goNext() {
@@ -109,6 +111,12 @@ export class ContentsSelectorComponent implements OnInit {
this.updateSelectionSummary();
}
+ public sort(field: string | RootFieldDto, sorting: Sorting) {
+ this.filter.setOrderField(field, sorting);
+
+ this.search();
+ }
+
private updateSelectionSummary() {
this.selectionCount = Object.keys(this.selectedItems).length;
diff --git a/src/Squidex/app/framework/angular/http/caching.interceptor.ts b/src/Squidex/app/framework/angular/http/caching.interceptor.ts
index 6ec8a7e5e..111bc2aad 100644
--- a/src/Squidex/app/framework/angular/http/caching.interceptor.ts
+++ b/src/Squidex/app/framework/angular/http/caching.interceptor.ts
@@ -10,7 +10,7 @@ import { Injectable} from '@angular/core';
import { Observable, of, throwError } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
-import { Types } from './../../internal';
+import { Types } from '@app/shared/internal';
@Injectable()
export class CachingInterceptor implements HttpInterceptor {
diff --git a/src/Squidex/app/framework/angular/http/loading.interceptor.ts b/src/Squidex/app/framework/angular/http/loading.interceptor.ts
index af6611f67..3791b465f 100644
--- a/src/Squidex/app/framework/angular/http/loading.interceptor.ts
+++ b/src/Squidex/app/framework/angular/http/loading.interceptor.ts
@@ -10,7 +10,7 @@ import { Injectable} from '@angular/core';
import { Observable } from 'rxjs';
import { finalize } from 'rxjs/operators';
-import { LoadingService, MathHelper } from './../../internal';
+import { LoadingService, MathHelper } from '@app/framework/internal';
@Injectable()
export class LoadingInterceptor implements HttpInterceptor {
diff --git a/src/Squidex/app/framework/angular/pager.component.html b/src/Squidex/app/framework/angular/pager.component.html
index 36b3a6e42..cc1ffcba4 100644
--- a/src/Squidex/app/framework/angular/pager.component.html
+++ b/src/Squidex/app/framework/angular/pager.component.html
@@ -1,6 +1,6 @@
- 0 && (!hideWhenButtonsDisabled || pager.canGoPrev || pager.canGoNext)">
+
-
diff --git a/src/Squidex/app/shared/components/assets-selector.component.ts b/src/Squidex/app/shared/components/assets-selector.component.ts
index 5fa7c70a5..ec75bf464 100644
--- a/src/Squidex/app/shared/components/assets-selector.component.ts
+++ b/src/Squidex/app/shared/components/assets-selector.component.ts
@@ -12,6 +12,7 @@ import {
AssetDto,
AssetsDialogState,
fadeAnimation,
+ FilterState,
LocalStoreService,
StatefulComponent
} from '@app/shared/internal';
@@ -36,6 +37,8 @@ export class AssetsSelectorComponent extends StatefulComponent
implements
@Output()
public select = new EventEmitter();
+ public filter = new FilterState();
+
constructor(changeDector: ChangeDetectorRef,
public readonly assetsState: AssetsDialogState,
public readonly localStore: LocalStoreService
@@ -55,8 +58,8 @@ export class AssetsSelectorComponent extends StatefulComponent implements
this.assetsState.load(true).pipe(onErrorResumeNext()).subscribe();
}
- public search(query: string) {
- this.assetsState.search(query).pipe(onErrorResumeNext()).subscribe();
+ public search() {
+ this.assetsState.search(this.filter.apiFilter).pipe(onErrorResumeNext()).subscribe();
}
public emitComplete() {
diff --git a/src/Squidex/app/shared/components/search-form.component.html b/src/Squidex/app/shared/components/search-form.component.html
index 11d2cc97a..8ba958586 100644
--- a/src/Squidex/app/shared/components/search-form.component.html
+++ b/src/Squidex/app/shared/components/search-form.component.html
@@ -3,7 +3,10 @@