diff --git a/dmp-frontend/src/app/core/model/dmp/dmp-listing.ts b/dmp-frontend/src/app/core/model/dmp/dmp-listing.ts index b2811228c..0461ddeb6 100644 --- a/dmp-frontend/src/app/core/model/dmp/dmp-listing.ts +++ b/dmp-frontend/src/app/core/model/dmp/dmp-listing.ts @@ -10,8 +10,8 @@ export interface DmpListingModel { grantId: String; grantAbbreviation: String; profile: String; - creationTime: String; - modifiedTime: String; + creationTime: string; + modifiedTime: string; publishedAt: Date; finalizedAt: Date; organisations: String; diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts index 8ab0d76b4..7808892ef 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts @@ -325,8 +325,58 @@ export class DraftsComponent extends BaseComponent implements OnInit { this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } - this.datasetDrafts = this.datasetDrafts.concat(result.data); + // this.datasetDrafts = this.datasetDrafts.concat(result.data); + this.datasetDrafts = this.datasetDrafts.length > 0 ? this.mergeTwoSortedLists(this.datasetDrafts, result.data, this.formGroup.get('order').value) : result.data; this.totalCountDraftDatasets.emit(this.datasetDrafts.length); }); } + + private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts index 2b44bf203..6192039f0 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts @@ -497,12 +497,62 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn this.dmpOffset = this.dmpOffset + 1; } }); - this.allRecentActivities = this.allRecentActivities.concat(result); + // this.allRecentActivities = this.allRecentActivities.concat(result); + this.allRecentActivities = this.allRecentActivities.length > 0 ? this.mergeTwoSortedLists(this.allRecentActivities, result, this.formGroup.get('order').value) : result; this.totalCountRecentEdited.emit(this.allRecentActivities.length); }); } + private mergeTwoSortedLists(arr1: RecentActivityModel[], arr2: RecentActivityModel[], order: string): RecentActivityModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].title < arr2[index2].title))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } + // advancedClicked(dmp: DmpListingModel) { // const dialogRef = this.dialog.open(ExportMethodDialogComponent, { // maxWidth: '500px', diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts index b9ab17782..c6406a645 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dataset-activity/recent-edited-dataset-activity.component.ts @@ -113,7 +113,8 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } - this.datasetActivities = this.datasetActivities.concat(result.data); + // this.datasetActivities = this.datasetActivities.concat(result.data); + this.datasetActivities = this.datasetActivities.length > 0 ? this.mergeTwoSortedLists(this.datasetActivities, result.data, this.formGroup.get('order').value) : result.data; this.totalCountDatasets.emit(this.datasetActivities.length); }); } @@ -336,4 +337,53 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen return true; } } + + private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } } diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.ts index eb2717c9c..670df71fa 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.ts @@ -370,12 +370,62 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O this.dmpService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } - this.dmpActivities = this.dmpActivities.concat(result.data); + // this.dmpActivities = this.dmpActivities.concat(result.data); + this.dmpActivities = this.dmpActivities.length > 0 ? this.mergeTwoSortedLists(this.dmpActivities, result.data, this.formGroup.get('order').value) : result.data; this.totalCountDmps.emit(this.dmpActivities.length); }); } + private mergeTwoSortedLists(arr1: DmpListingModel[], arr2: DmpListingModel[], order: string): DmpListingModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modifiedTime) > new Date(arr2[index2].modifiedTime)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].creationTime) > new Date(arr2[index2].creationTime)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } + // advancedClicked(dmp: DmpListingModel) { // const dialogRef = this.dialog.open(ExportMethodDialogComponent, { // maxWidth: '500px', diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts index fb0231159..cbd17941c 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts @@ -176,7 +176,8 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } // if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } - this.listingItems = this.listingItems.concat(result.data); + // this.listingItems = this.listingItems.concat(result.data); + this.listingItems = this.listingItems.length > 0 ? this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value) : result.data; }); } @@ -277,6 +278,55 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight } + private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } + // rowClicked(dataset: DatasetListingModel) { // this.router.navigate(['/datasets/edit/' + dataset.id]); // } diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index 2de47e0a7..9cbd9283f 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -224,7 +224,8 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread }); return item; }); - this.listingItems = this.listingItems.concat(result.data); + // this.listingItems = this.listingItems.concat(result.data); + this.listingItems = this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value); }); } @@ -376,6 +377,55 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread hasScrollbar(): boolean { return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight } + + private mergeTwoSortedLists(arr1: DmpListingModel[], arr2: DmpListingModel[], order: string): DmpListingModel[] { + let merged = []; + let index1 = 0; + let index2 = 0; + let current = 0; + + while (current < (arr1.length + arr2.length)) { + + let isArr1Depleted = index1 >= arr1.length; + let isArr2Depleted = index2 >= arr2.length; + + if (order === 'modified') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modifiedTime) > new Date(arr2[index2].modifiedTime)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'created') { + if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].creationTime) > new Date(arr2[index2].creationTime)))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'label') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } else if (order === 'status') { + if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) { + merged[current] = arr1[index1]; + index1++; + } else { + merged[current] = arr2[index2]; + index2++; + } + } + current++; + } + return merged; + } } // export class DmpDataSource extends DataSource { diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 2d35d662b..279c79908 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -754,6 +754,7 @@ "NEW": "New Data Management Plan", "EDIT": "Edit", "EDIT-DMP": "Editing DMP", + "EDIT-DATASET": "Editing Dataset", "SUBTITLE": "DOI" }, "FIELDS": { diff --git a/dmp-frontend/src/assets/i18n/es.json b/dmp-frontend/src/assets/i18n/es.json index 2a6b59999..9b14419b9 100644 --- a/dmp-frontend/src/assets/i18n/es.json +++ b/dmp-frontend/src/assets/i18n/es.json @@ -748,6 +748,7 @@ "NEW": "Nuevo Plan de Gestión de Datos", "EDIT": "Editar", "EDIT-DMP": "Editing DMP", + "EDIT-DATASET": "Editing Dataset", "SUBTITLE": "DOI" }, "FIELDS": { diff --git a/dmp-frontend/src/assets/i18n/gr.json b/dmp-frontend/src/assets/i18n/gr.json index c7a52d986..c0a7c8ab1 100644 --- a/dmp-frontend/src/assets/i18n/gr.json +++ b/dmp-frontend/src/assets/i18n/gr.json @@ -749,6 +749,7 @@ "NEW": "Νέα Σχέδιο Διαχείρισης Δεδομένων", "EDIT": "Επεξεργασία", "EDIT-DMP": "Editing DMP", + "EDIT-DATASET": "Editing Dataset", "SUBTITLE": "Μονοσήμαντο Αναγνωριστικό Ψηφιακού Αντικειμένου (DOI)" }, "FIELDS": {