@if (showDrawer && showTopToolbar) {
@@ -37,23 +39,30 @@
class="filterable"
[autofocus]="!showDefaultData"
>
-
-
-
+ @if (showContextMenu) {
+
+
+
+ }
- @if (showNavigation && isHebisAvailable) {
+ @if (navigation.length > 0) {
- {{ 'search.type' | translate }}
- {{ 'hebisSearch.type' | translate }}
-
+ @for (target of navigation; track target) {
+ @if (target.routerLink) {
+ {{ target.label | translate }}
+
+ } @else {
+ {{ target.label | translate }}
+ }
+ }
}
diff --git a/frontend/app/src/app/modules/data/list/search-page.scss b/frontend/app/src/app/modules/data/list/search-page.scss
index ce72eed3..191f3de1 100644
--- a/frontend/app/src/app/modules/data/list/search-page.scss
+++ b/frontend/app/src/app/modules/data/list/search-page.scss
@@ -22,6 +22,9 @@
ion-toolbar {
--ion-color-base: none !important;
+
+ // account for back button
+ min-height: 42px;
}
ion-toolbar:first-of-type {
diff --git a/frontend/app/src/app/modules/data/types/article/article-item.component.ts b/frontend/app/src/app/modules/data/types/article/article-item.component.ts
index 66aea6bd..391f37cd 100644
--- a/frontend/app/src/app/modules/data/types/article/article-item.component.ts
+++ b/frontend/app/src/app/modules/data/types/article/article-item.component.ts
@@ -22,6 +22,7 @@ import {DataListItemComponent} from '../../list/data-list-item.component';
@Component({
selector: 'stapps-article-item',
templateUrl: 'article-list-item.html',
+ styleUrl: 'article-list-item.scss',
})
export class ArticleListItemComponent extends DataListItemComponent {
/**
diff --git a/frontend/app/src/app/modules/data/types/article/article-list-item.html b/frontend/app/src/app/modules/data/types/article/article-list-item.html
index bf739672..f32c9065 100644
--- a/frontend/app/src/app/modules/data/types/article/article-list-item.html
+++ b/frontend/app/src/app/modules/data/types/article/article-list-item.html
@@ -13,26 +13,20 @@
~ this program. If not, see .
-->
-
-
-
- {{ 'name' | thingTranslate: item }}
-
- @for (author of item.authors; track author) {
- {{ 'name' | thingTranslate: author }}
- }
- @if (item.authors && item.authors && item.firstPublished) {
- ,
- }
- @if (item.firstPublished && !item.lastPublished) {
- {{ item.firstPublished }}
- } @else {
- @if (item.firstPublished && item.lastPublished) {
- {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
- }
- }
-
- {{ 'categories' | thingTranslate: item }}
-
-
-
+{{ 'name' | thingTranslate: item }}
+
+ @for (author of item.authors; track author) {
+ {{ 'name' | thingTranslate: author }}
+ }
+ @if (item.authors && item.authors && item.firstPublished) {
+ ,
+ }
+ @if (item.firstPublished && !item.lastPublished) {
+ {{ item.firstPublished }}
+ } @else {
+ @if (item.firstPublished && item.lastPublished) {
+ {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
+ }
+ }
+
+ {{ 'categories' | thingTranslate: item }}
diff --git a/frontend/app/src/app/modules/data/types/article/article-list-item.scss b/frontend/app/src/app/modules/data/types/article/article-list-item.scss
new file mode 100644
index 00000000..5c3cde6d
--- /dev/null
+++ b/frontend/app/src/app/modules/data/types/article/article-list-item.scss
@@ -0,0 +1,3 @@
+p.title-sub {
+ white-space: unset;
+}
diff --git a/frontend/app/src/app/modules/data/types/book/book-list-item.component.ts b/frontend/app/src/app/modules/data/types/book/book-list-item.component.ts
index e6b3bc23..dd324058 100644
--- a/frontend/app/src/app/modules/data/types/book/book-list-item.component.ts
+++ b/frontend/app/src/app/modules/data/types/book/book-list-item.component.ts
@@ -22,6 +22,7 @@ import {DataListItemComponent} from '../../list/data-list-item.component';
@Component({
selector: 'stapps-book-list-item',
templateUrl: 'book-list-item.html',
+ styleUrl: 'book-list-item.scss',
})
export class BookListItemComponent extends DataListItemComponent {
/**
diff --git a/frontend/app/src/app/modules/data/types/book/book-list-item.html b/frontend/app/src/app/modules/data/types/book/book-list-item.html
index bf739672..f32c9065 100644
--- a/frontend/app/src/app/modules/data/types/book/book-list-item.html
+++ b/frontend/app/src/app/modules/data/types/book/book-list-item.html
@@ -13,26 +13,20 @@
~ this program. If not, see .
-->
-
-
-
- {{ 'name' | thingTranslate: item }}
-
- @for (author of item.authors; track author) {
- {{ 'name' | thingTranslate: author }}
- }
- @if (item.authors && item.authors && item.firstPublished) {
- ,
- }
- @if (item.firstPublished && !item.lastPublished) {
- {{ item.firstPublished }}
- } @else {
- @if (item.firstPublished && item.lastPublished) {
- {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
- }
- }
-
- {{ 'categories' | thingTranslate: item }}
-
-
-
+{{ 'name' | thingTranslate: item }}
+
+ @for (author of item.authors; track author) {
+ {{ 'name' | thingTranslate: author }}
+ }
+ @if (item.authors && item.authors && item.firstPublished) {
+ ,
+ }
+ @if (item.firstPublished && !item.lastPublished) {
+ {{ item.firstPublished }}
+ } @else {
+ @if (item.firstPublished && item.lastPublished) {
+ {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
+ }
+ }
+
+ {{ 'categories' | thingTranslate: item }}
diff --git a/frontend/app/src/app/modules/data/types/book/book-list-item.scss b/frontend/app/src/app/modules/data/types/book/book-list-item.scss
new file mode 100644
index 00000000..5c3cde6d
--- /dev/null
+++ b/frontend/app/src/app/modules/data/types/book/book-list-item.scss
@@ -0,0 +1,3 @@
+p.title-sub {
+ white-space: unset;
+}
diff --git a/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.component.ts b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.component.ts
index 1dc81d6b..951ebe70 100644
--- a/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.component.ts
+++ b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.component.ts
@@ -22,6 +22,7 @@ import {DataListItemComponent} from '../../list/data-list-item.component';
@Component({
selector: 'stapps-periodical-list-item',
templateUrl: 'periodical-list-item.html',
+ styleUrl: 'periodical-list-item.scss',
})
export class PeriodicalListItemComponent extends DataListItemComponent {
/**
diff --git a/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.html b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.html
index bf739672..f32c9065 100644
--- a/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.html
+++ b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.html
@@ -13,26 +13,20 @@
~ this program. If not, see .
-->
-
-
-
- {{ 'name' | thingTranslate: item }}
-
- @for (author of item.authors; track author) {
- {{ 'name' | thingTranslate: author }}
- }
- @if (item.authors && item.authors && item.firstPublished) {
- ,
- }
- @if (item.firstPublished && !item.lastPublished) {
- {{ item.firstPublished }}
- } @else {
- @if (item.firstPublished && item.lastPublished) {
- {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
- }
- }
-
- {{ 'categories' | thingTranslate: item }}
-
-
-
+{{ 'name' | thingTranslate: item }}
+
+ @for (author of item.authors; track author) {
+ {{ 'name' | thingTranslate: author }}
+ }
+ @if (item.authors && item.authors && item.firstPublished) {
+ ,
+ }
+ @if (item.firstPublished && !item.lastPublished) {
+ {{ item.firstPublished }}
+ } @else {
+ @if (item.firstPublished && item.lastPublished) {
+ {{ [item.firstPublished, item.lastPublished] | join: ' - ' }}
+ }
+ }
+
+ {{ 'categories' | thingTranslate: item }}
diff --git a/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.scss b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.scss
new file mode 100644
index 00000000..5c3cde6d
--- /dev/null
+++ b/frontend/app/src/app/modules/data/types/periodical/periodical-list-item.scss
@@ -0,0 +1,3 @@
+p.title-sub {
+ white-space: unset;
+}
diff --git a/frontend/app/src/app/modules/data/types/place/place-list-item.html b/frontend/app/src/app/modules/data/types/place/place-list-item.html
index 5de725a6..7ac5bdf6 100644
--- a/frontend/app/src/app/modules/data/types/place/place-list-item.html
+++ b/frontend/app/src/app/modules/data/types/place/place-list-item.html
@@ -12,36 +12,29 @@
~ You should have received a copy of the GNU General Public License along with
~ this program. If not, see .
-->
-
- @if (distance | async; as distance) {
-
-
- {{ distance | metersLocalized }}
-
- }
-
{{ 'name' | thingTranslate: _item }}
@if (_item.type !== 'floor') {
-
- @if (_item.categories && _item.type !== 'building') {
-
+
+
+ @if (_item.type !== 'building' && _item.inPlace) {
+
+ {{ 'name' | thingTranslate: _item.inPlace }}
+ }
+
+
+ @if (_item.categories && _item.type !== 'building') {
{{ 'categories' | thingTranslate: _item | join: ', ' | titlecase }}
-
-
- } @else {
-
+ } @else {
{{ 'type' | thingTranslate: _item | titlecase }}
-
-
- }
+ }
+ @if (distance | async; as distance) {
+
+
+ {{ distance | metersLocalized }}
+
+ }
+
}
@if (_item.description) {
{{ 'description' | thingTranslate: _item }}
}
-@if (_item.type !== 'building') {
- @if (_item.inPlace) {
-
- {{ 'name' | thingTranslate: _item.inPlace }}
-
- }
-}
diff --git a/frontend/app/src/app/modules/data/types/place/place-list-item.scss b/frontend/app/src/app/modules/data/types/place/place-list-item.scss
index 4667de0d..8b403098 100644
--- a/frontend/app/src/app/modules/data/types/place/place-list-item.scss
+++ b/frontend/app/src/app/modules/data/types/place/place-list-item.scss
@@ -15,6 +15,8 @@
ion-note {
display: flex;
+ align-items: center;
+ justify-content: flex-start;
> ion-label {
display: inline-flex;
@@ -23,15 +25,14 @@ ion-note {
}
}
-ion-label + ion-label.distance::before {
- content: '•';
- margin-inline: var(--spacing-xs);
-}
-
-.in-place {
+p.title-sub {
display: flex;
align-items: center;
- justify-content: flex-end;
+}
+
+ion-label + ion-label::before {
+ content: '•';
+ margin-inline: var(--spacing-xs);
}
stapps-opening-hours ::ng-deep div {
diff --git a/frontend/app/src/app/modules/hebis/hebis-data.provider.ts b/frontend/app/src/app/modules/hebis/hebis-data.provider.ts
index d989190a..ea7f798e 100644
--- a/frontend/app/src/app/modules/hebis/hebis-data.provider.ts
+++ b/frontend/app/src/app/modules/hebis/hebis-data.provider.ts
@@ -21,6 +21,7 @@ import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
import {HttpClient} from '@angular/common/http';
import {DataProvider} from '../data/data.provider';
import {SCHebisSearchRoute} from './protocol/route';
+import {SCSearchRequest, SCSearchResponse} from '@openstapps/core';
const HEBIS_PREFIX = 'HEB';
@@ -46,12 +47,6 @@ export class HebisDataProvider extends DataProvider {
*/
private readonly hebisSearchRoute = new SCHebisSearchRoute();
- /**
- * TODO
- * @param stAppsWebHttpClient TODO
- * @param storageProvider TODO
- * @param httpClient TODO
- */
constructor(
stAppsWebHttpClient: StAppsWebHttpClient,
storageProvider: StorageProvider,
@@ -63,6 +58,23 @@ export class HebisDataProvider extends DataProvider {
this.client = new Client(stAppsWebHttpClient, this.backendUrl, this.appVersion);
}
+ override async search(query: SCSearchRequest): Promise {
+ const response = await this.hebisSearch({
+ query: query.query ?? '',
+ page: query.from,
+ });
+ console.log(response.pagination);
+
+ return {
+ data: response.data,
+ facets: [],
+ pagination: response.pagination,
+ stats: {
+ time: Number.NaN,
+ },
+ };
+ }
+
/**
* Send a search request to the backend
*
diff --git a/frontend/app/src/app/modules/hebis/list/hebis-search-page.component.ts b/frontend/app/src/app/modules/hebis/list/hebis-search-page.component.ts
index fcdfd233..98ea723e 100644
--- a/frontend/app/src/app/modules/hebis/list/hebis-search-page.component.ts
+++ b/frontend/app/src/app/modules/hebis/list/hebis-search-page.component.ts
@@ -12,13 +12,12 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
-import {Component, Input, OnInit} from '@angular/core';
-import {combineLatest} from 'rxjs';
-import {debounceTime, distinctUntilChanged, startWith} from 'rxjs/operators';
-import {SearchPageComponent} from '../../data/list/search-page.component';
+import {Component} from '@angular/core';
import {HebisDataProvider} from '../hebis-data.provider';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
import {DataProvider} from '../../data/data.provider';
+import {DataRoutingService} from '../../data/data-routing.service';
+import {Router} from '@angular/router';
/**
* HebisSearchPageComponent queries things and shows list of things as search results and filter as context menu
@@ -29,111 +28,16 @@ import {DataProvider} from '../../data/data.provider';
styleUrls: ['../../data/list/search-page.scss'],
providers: [{provide: DataProvider, useClass: HebisDataProvider}],
})
-export class HebisSearchPageComponent extends SearchPageComponent implements OnInit {
- /**
- * If routing should be done if the user clicks on an item
- */
- @Input() itemRouting? = true;
-
- /**
- * Current page to start query
- */
- page = 0;
-
- /**
- * Fetches items with set query configuration
- * @param append If true fetched data gets appended to existing, override otherwise (default false)
- */
- protected async fetchAndUpdateItems(append = false): Promise {
- // build query search options
- const searchOptions: {page: number; query: string} = {
- page: this.page,
- query: '',
- };
-
- if (this.queryText && this.queryText.length > 0) {
- // add query string
- searchOptions.query = this.queryText;
- }
-
- return (this.dataProvider as HebisDataProvider).hebisSearch(searchOptions).then(
- async result => {
- /*this.singleTypeResponse =
- result.facets.find(facet => facet.field === 'type')?.buckets
- .length === 1;*/
- if (append) {
- let items = await this.items;
- // append results
- items = [...items, ...result.data];
- this.items = (async () => items)();
- } else {
- // override items with results
- this.items = (async () => {
- return result.data;
- })();
- }
- },
- async error => {
- const alert: HTMLIonAlertElement = await this.alertController.create({
- buttons: ['Dismiss'],
- header: 'Error',
- subHeader: error.message,
- });
-
- await alert.present();
- },
- );
- }
-
- /**
- * Loads next page of things
- */
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- async loadMore(): Promise {
- this.page += 1;
- await this.fetchAndUpdateItems(true);
- }
-
- ngOnInit() {
- //this.fetchAndUpdateItems();
- this.initialize();
-
- combineLatest([
- this.queryTextChanged.pipe(
- debounceTime(this.searchQueryDueTime),
- distinctUntilChanged(),
- startWith(this.queryText),
- ),
- ])
- .pipe(takeUntilDestroyed(this.destroy$))
- .subscribe(async query => {
- this.queryText = query[0];
- this.page = 0;
- if (this.queryText?.length > 0 || this.showDefaultData) {
- await this.fetchAndUpdateItems();
- this.queryChanged.next();
- }
- });
- this.settingsProvider.settingsActionChanged$
- .pipe(takeUntilDestroyed(this.destroy$))
- .subscribe(({type, payload}) => {
- if (type === 'stapps.settings.changed') {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const {category, name, value} = payload!;
- this.logger.log(`received event "settings.changed" with category:
- ${category}, name: ${name}, value: ${JSON.stringify(value)}`);
- }
- });
- this.dataRoutingService
+export class HebisSearchPageComponent {
+ constructor(dataRoutingService: DataRoutingService, router: Router) {
+ dataRoutingService
.itemSelectListener()
- .pipe(takeUntilDestroyed(this.destroy$))
+ .pipe(takeUntilDestroyed())
.subscribe(async item => {
- if (this.itemRouting) {
- void this.router.navigate(
- ['hebis-detail', (item.origin && 'originalId' in item.origin && item.origin['originalId']) || ''],
- {state: {item}},
- );
- }
+ void router.navigate(
+ ['hebis-detail', (item.origin && 'originalId' in item.origin && item.origin['originalId']) || ''],
+ {state: {item}},
+ );
});
}
}
diff --git a/frontend/app/src/app/modules/hebis/list/hebis-search-page.html b/frontend/app/src/app/modules/hebis/list/hebis-search-page.html
index 2f63166c..616d18cc 100644
--- a/frontend/app/src/app/modules/hebis/list/hebis-search-page.html
+++ b/frontend/app/src/app/modules/hebis/list/hebis-search-page.html
@@ -13,52 +13,13 @@
~ this program. If not, see .
-->
-
-
-
-
-
- {{ 'hebisSearch.title' | translate }}
-
-
-
-
-
-
-
- {{ 'search.type' | translate }}
-
- {{ 'hebisSearch.type' | translate }}
-
-
-
-
-
-
- {{ 'hebisSearch.instruction' | translate }}
-
-
-
+
+
diff --git a/frontend/app/src/app/modules/jobs/page/jobs-page.html b/frontend/app/src/app/modules/jobs/page/jobs-page.html
index 80018d47..af61b81d 100644
--- a/frontend/app/src/app/modules/jobs/page/jobs-page.html
+++ b/frontend/app/src/app/modules/jobs/page/jobs-page.html
@@ -2,7 +2,7 @@
[title]="'jobs.title' | translate"
[placeholder]="'jobs.placeholder' | translate"
[showDefaultData]="true"
- [showNavigation]="false"
+ [navigation]="[]"
[forcedFilter]="forcedFilter"
[backUrl]="'/'"
>
diff --git a/frontend/app/src/app/modules/schedule/page/choose-events-page.html b/frontend/app/src/app/modules/schedule/page/choose-events-page.html
index 55cc1c78..fab2de77 100644
--- a/frontend/app/src/app/modules/schedule/page/choose-events-page.html
+++ b/frontend/app/src/app/modules/schedule/page/choose-events-page.html
@@ -13,7 +13,7 @@
~ this program. If not, see .
-->
.
*/
+.can-go-back ion-header ion-back-button {
+ display: block;
+}
+
app-root {
.button {
--padding-top: var(--spacing-sm);