diff --git a/src/app/home-page/recent-item-list/recent-item-list.component.html b/src/app/home-page/recent-item-list/recent-item-list.component.html
index 4d77e5027e..7a7ecdacce 100644
--- a/src/app/home-page/recent-item-list/recent-item-list.component.html
+++ b/src/app/home-page/recent-item-list/recent-item-list.component.html
@@ -3,6 +3,7 @@
{{'home.recent-submissions.head' | translate}}
+
@for (item of itemRD?.payload?.page; track item) {
diff --git a/src/app/home-page/recent-item-list/recent-item-list.component.ts b/src/app/home-page/recent-item-list/recent-item-list.component.ts
index b336cf7e9b..1855eed909 100644
--- a/src/app/home-page/recent-item-list/recent-item-list.component.ts
+++ b/src/app/home-page/recent-item-list/recent-item-list.component.ts
@@ -41,6 +41,7 @@ import { ErrorComponent } from '../../shared/error/error.component';
import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component';
import { ListableObjectComponentLoaderComponent } from '../../shared/object-collection/shared/listable-object/listable-object-component-loader.component';
import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
+import { RSSComponent } from '../../shared/rss-feed/rss.component';
import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model';
import {
followLink,
@@ -59,7 +60,7 @@ import { VarDirective } from '../../shared/utils/var.directive';
fadeInOut,
],
standalone: true,
- imports: [VarDirective, NgClass, ListableObjectComponentLoaderComponent, ErrorComponent, ThemedLoadingComponent, AsyncPipe, TranslateModule],
+ imports: [VarDirective, NgClass, ListableObjectComponentLoaderComponent, ErrorComponent, ThemedLoadingComponent, AsyncPipe, TranslateModule, RSSComponent],
})
export class RecentItemListComponent implements OnInit, OnDestroy {
itemRD$: Observable>>;
diff --git a/src/app/shared/object-collection/object-collection.component.html b/src/app/shared/object-collection/object-collection.component.html
index 10378ba3f5..1d9be701d2 100644
--- a/src/app/shared/object-collection/object-collection.component.html
+++ b/src/app/shared/object-collection/object-collection.component.html
@@ -13,6 +13,7 @@
[linkType]="linkType"
[context]="context"
[hidePaginationDetail]="hidePaginationDetail"
+ [showRSS]="showRSS"
[showPaginator]="showPaginator"
[showThumbnails]="showThumbnails"
(paginationChange)="onPaginationChange($event)"
@@ -58,6 +59,7 @@
[sortConfig]="sortConfig"
[objects]="objects"
[hideGear]="hideGear"
+ [showRSS]="showRSS"
[linkType]="linkType"
[context]="context"
[hidePaginationDetail]="hidePaginationDetail"
diff --git a/src/app/shared/object-collection/object-collection.component.ts b/src/app/shared/object-collection/object-collection.component.ts
index 204685930a..c7849adbff 100644
--- a/src/app/shared/object-collection/object-collection.component.ts
+++ b/src/app/shared/object-collection/object-collection.component.ts
@@ -71,17 +71,22 @@ export class ObjectCollectionComponent implements OnInit {
@Input() sortConfig: SortOptions;
/**
- * Whether or not the list elements have a border or not
+ * Whether the list elements have a border or not
*/
@Input() hasBorder = false;
/**
- * Whether or not to hide the gear to change the sort and pagination configuration
+ * Whether to hide the gear to change the sort and pagination configuration
*/
@Input() hideGear = false;
@Input() selectable = false;
@Input() selectionConfig: {repeatable: boolean, listId: string};
+ /**
+ * Whether to show an RSS syndication button for the current search options
+ */
+ @Input() showRSS = false;
+
/**
* Emit custom event for listable object custom actions.
*/
diff --git a/src/app/shared/object-detail/object-detail.component.html b/src/app/shared/object-detail/object-detail.component.html
index ad9f0bce0e..2696730cf6 100644
--- a/src/app/shared/object-detail/object-detail.component.html
+++ b/src/app/shared/object-detail/object-detail.component.html
@@ -4,6 +4,7 @@
[sortOptions]="sortConfig"
[objects]="objects"
[hideGear]="hideGear"
+ [showRSS]="showRSS"
[hidePaginationDetail]="hidePaginationDetail"
[hidePagerWhenSinglePage]="hidePagerWhenSinglePage"
[showPaginator]="showPaginator"
diff --git a/src/app/shared/object-detail/object-detail.component.ts b/src/app/shared/object-detail/object-detail.component.ts
index 01e1795fcb..eae56a217d 100644
--- a/src/app/shared/object-detail/object-detail.component.ts
+++ b/src/app/shared/object-detail/object-detail.component.ts
@@ -85,6 +85,8 @@ export class ObjectDetailComponent {
*/
@Input() showThumbnails;
+ @Input() showRSS = false;
+
/**
* Emit when one of the listed object has changed.
*/
diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html
index 3073623c2e..5670199fc5 100644
--- a/src/app/shared/object-list/object-list.component.html
+++ b/src/app/shared/object-list/object-list.component.html
@@ -4,6 +4,7 @@
[objects]="objects"
[sortOptions]="sortConfig"
[hideGear]="hideGear"
+ [showRSS]="showRSS"
[hidePagerWhenSinglePage]="hidePagerWhenSinglePage"
[hidePaginationDetail]="hidePaginationDetail"
[showPaginator]="showPaginator"
diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts
index cf3e0164f6..19d3cc9906 100644
--- a/src/app/shared/object-list/object-list.component.ts
+++ b/src/app/shared/object-list/object-list.component.ts
@@ -39,7 +39,7 @@ import { SelectableListService } from './selectable-list/selectable-list.service
})
export class ObjectListComponent {
/**
- * The view mode of the this component
+ * The view mode of this component
*/
viewMode = ViewMode.ListElement;
@@ -70,6 +70,11 @@ export class ObjectListComponent {
@Input() selectable = false;
@Input() selectionConfig: { repeatable: boolean, listId: string };
+ /**
+ * Whether to show an RSS syndication button for the current search options
+ */
+ @Input() showRSS = false;
+
/**
* The link type of the listable elements
*/
diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts
index e6e0527c90..65309678bf 100644
--- a/src/app/shared/object-list/themed-object-list.component.ts
+++ b/src/app/shared/object-list/themed-object-list.component.ts
@@ -59,6 +59,8 @@ export class ThemedObjectListComponent extends ThemedComponent
}
-
+ @if (showRSS) {
+
+ }
diff --git a/src/app/shared/pagination/pagination.component.ts b/src/app/shared/pagination/pagination.component.ts
index 907b427354..7392d8f91e 100644
--- a/src/app/shared/pagination/pagination.component.ts
+++ b/src/app/shared/pagination/pagination.component.ts
@@ -168,6 +168,13 @@ export class PaginationComponent implements OnChanges, OnDestroy, OnInit {
*/
@Input() public retainScrollPosition = false;
+ /**
+ * Options for showing or hiding the RSS syndication feed. This is useful for e.g. top-level community lists
+ * or other lists where an RSS feed doesn't make sense, but uses the same components as recent items or search result
+ * lists.
+ */
+ @Input() public showRSS = false;
+
/**
* Current page.
*/
@@ -266,7 +273,6 @@ export class PaginationComponent implements OnChanges, OnDestroy, OnInit {
* Initializes all default variables
*/
private initializeConfig() {
- // Set initial values
this.id = this.paginationOptions.id || null;
this.pageSizeOptions = this.paginationOptions.pageSizeOptions;
this.currentPage$ = this.paginationService.getCurrentPagination(this.id, this.paginationOptions).pipe(
diff --git a/src/app/shared/rss-feed/rss.component.ts b/src/app/shared/rss-feed/rss.component.ts
index 8d2b49f0e1..8c81f7975e 100644
--- a/src/app/shared/rss-feed/rss.component.ts
+++ b/src/app/shared/rss-feed/rss.component.ts
@@ -2,12 +2,16 @@ import { AsyncPipe } from '@angular/common';
import {
ChangeDetectionStrategy,
Component,
+ Input,
+ OnChanges,
OnDestroy,
OnInit,
+ SimpleChanges,
ViewEncapsulation,
} from '@angular/core';
import {
ActivatedRoute,
+ NavigationEnd,
Router,
} from '@angular/router';
import {
@@ -16,12 +20,10 @@ import {
} from '@ngx-translate/core';
import {
BehaviorSubject,
+ filter,
Subscription,
} from 'rxjs';
-import {
- map,
- switchMap,
-} from 'rxjs/operators';
+import { map } from 'rxjs/operators';
import { environment } from '../../../environments/environment';
import { SortOptions } from '../../core/cache/models/sort-options.model';
@@ -31,13 +33,14 @@ import { GroupDataService } from '../../core/eperson/group-data.service';
import { PaginationService } from '../../core/pagination/pagination.service';
import { LinkHeadService } from '../../core/services/link-head.service';
import { getFirstCompletedRemoteData } from '../../core/shared/operators';
+import { SearchService } from '../../core/shared/search/search.service';
import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
import {
hasValue,
isUndefined,
} from '../empty.util';
-import { PaginatedSearchOptions } from '../search/models/paginated-search-options.model';
import { SearchFilter } from '../search/models/search-filter.model';
+
/**
* The Rss feed button component.
*/
@@ -51,30 +54,28 @@ import { SearchFilter } from '../search/models/search-filter.model';
standalone: true,
imports: [AsyncPipe, TranslateModule],
})
-export class RSSComponent implements OnInit, OnDestroy {
+export class RSSComponent implements OnInit, OnDestroy, OnChanges {
route$: BehaviorSubject