diff --git a/apps/red-ui/src/app/modules/icons/icons.module.ts b/apps/red-ui/src/app/modules/icons/icons.module.ts
index 78e1045d3..39b841ab4 100644
--- a/apps/red-ui/src/app/modules/icons/icons.module.ts
+++ b/apps/red-ui/src/app/modules/icons/icons.module.ts
@@ -18,6 +18,7 @@ export class IconsModule {
'analyse',
'approved',
'arrow-down',
+ 'arrow-down-o',
'arrow-right',
'arrow-up',
'assign',
diff --git a/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.html b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.html
new file mode 100644
index 000000000..0e14b3070
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.html
@@ -0,0 +1,3 @@
+
diff --git a/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.scss b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.scss
new file mode 100644
index 000000000..a90c7d912
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.scss
@@ -0,0 +1,19 @@
+@import 'apps/red-ui/src/assets/styles/red-variables';
+
+.scroll-button {
+ background-color: $white;
+ position: absolute;
+ bottom: 30px;
+ right: 0;
+ height: 40px;
+ width: 44px;
+ border: none;
+ border-radius: 8px 0 0 8px;
+ box-shadow: -1px 1px 5px 0 rgba(40, 50, 65, 0.25);
+}
+
+mat-icon {
+ width: 22px;
+ height: 22px;
+ color: $grey-7;
+}
diff --git a/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.ts b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.ts
new file mode 100644
index 000000000..9b2760de1
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/components/scroll-button/scroll-button.component.ts
@@ -0,0 +1,37 @@
+import { Component, HostListener, Input } from '@angular/core';
+import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
+
+@Component({
+ selector: 'redaction-scroll-button',
+ templateUrl: './scroll-button.component.html',
+ styleUrls: ['./scroll-button.component.scss']
+})
+export class ScrollButtonComponent {
+ @Input()
+ scrollViewport: CdkVirtualScrollViewport;
+ @Input()
+ itemSize: number;
+
+ scroll(): void {
+ const scrollOffset = this.scrollViewport.measureScrollOffset('top');
+ const ligaturePortion = 50;
+ const viewportSize = this.scrollViewport.getViewportSize() - ligaturePortion;
+
+ this.scrollViewport.scrollToOffset(scrollOffset + viewportSize, 'smooth');
+ }
+
+ showScrollButton(): boolean {
+ const reachedBottom = this.scrollViewport.measureScrollOffset('bottom') === 0;
+ const scrollSize = this.scrollViewport.getDataLength() * this.itemSize;
+ const scrollIsNeeded = this.scrollViewport.getViewportSize() < scrollSize;
+
+ return scrollIsNeeded && !reachedBottom;
+ }
+
+ @HostListener('document:keyup', ['$event'])
+ spaceAndPageDownScroll(event: KeyboardEvent): void {
+ if (['Space', 'PageDown'].includes(event.code)) {
+ this.scroll();
+ }
+ }
+}
diff --git a/apps/red-ui/src/app/modules/projects/projects.module.ts b/apps/red-ui/src/app/modules/projects/projects.module.ts
index d82c8a7ef..d69c044fa 100644
--- a/apps/red-ui/src/app/modules/projects/projects.module.ts
+++ b/apps/red-ui/src/app/modules/projects/projects.module.ts
@@ -44,6 +44,7 @@ import { EditProjectDictionaryComponent } from './dialogs/edit-project-dialog/di
import { EditProjectTeamMembersComponent } from './dialogs/edit-project-dialog/team-members/edit-project-team-members.component';
import { TeamMembersManagerComponent } from './components/team-members-manager/team-members-manager.component';
import { TeamMembersDialogComponent } from './dialogs/team-members-dialog/team-members-dialog.component';
+import { ScrollButtonComponent } from './components/scroll-button/scroll-button.component';
const screens = [
ProjectListingScreenComponent,
@@ -59,7 +60,8 @@ const dialogs = [
ForceRedactionDialogComponent,
RemoveAnnotationsDialogComponent,
DocumentInfoDialogComponent,
- AssignReviewerApproverDialogComponent
+ AssignReviewerApproverDialogComponent,
+ DossierDictionaryDialogComponent
];
const components = [
@@ -84,6 +86,7 @@ const components = [
EditProjectDictionaryComponent,
EditProjectTeamMembersComponent,
TeamMembersManagerComponent,
+ ScrollButtonComponent,
...screens,
...dialogs
@@ -101,7 +104,7 @@ const services = [
];
@NgModule({
- declarations: [...components, DossierDictionaryDialogComponent],
+ declarations: [...components],
providers: [...services],
imports: [CommonModule, SharedModule, FileUploadDownloadModule, ProjectsRoutingModule]
})
diff --git a/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.html b/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.html
index e8e69eb5b..8cb7cfac4 100644
--- a/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.html
+++ b/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.html
@@ -104,7 +104,7 @@
type="no-match"
>
-