diff --git a/src/app/datasets/admin-tab/admin-tab.component.ts b/src/app/datasets/admin-tab/admin-tab.component.ts index a8db0199ab..b6f396ad2a 100644 --- a/src/app/datasets/admin-tab/admin-tab.component.ts +++ b/src/app/datasets/admin-tab/admin-tab.component.ts @@ -3,10 +3,7 @@ import { Store } from "@ngrx/store"; import { FileObject } from "datasets/dataset-details-dashboard/dataset-details-dashboard.component"; import { Subscription } from "rxjs"; import { take } from "rxjs/operators"; -import { - CreateJobDtoV3, - OutputDatasetObsoleteDto, -} from "@scicatproject/scicat-sdk-ts-angular"; +import { CreateJobDtoV3 } from "@scicatproject/scicat-sdk-ts-angular"; import { submitJobAction } from "state-management/actions/jobs.actions"; import { selectCurrentDatablocks, @@ -17,6 +14,7 @@ import { selectIsAdmin, selectIsLoading, } from "state-management/selectors/user.selectors"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Component({ selector: "app-admin-tab", @@ -26,7 +24,7 @@ import { }) export class AdminTabComponent implements OnInit, OnDestroy { private subscriptions: Subscription[] = []; - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; datablocks$ = this.store.select(selectCurrentDatablocks); isAdmin$ = this.store.select(selectIsAdmin); loading$ = this.store.select(selectIsLoading); diff --git a/src/app/datasets/archiving.service.ts b/src/app/datasets/archiving.service.ts index 99a5489ce8..6e8d531e70 100644 --- a/src/app/datasets/archiving.service.ts +++ b/src/app/datasets/archiving.service.ts @@ -9,10 +9,8 @@ import { selectProfile, } from "state-management/selectors/user.selectors"; import { RetrieveDestinations } from "app-config.service"; -import { - OutputDatasetObsoleteDto, - ReturnedUserDto, -} from "@scicatproject/scicat-sdk-ts-angular"; +import { ReturnedUserDto } from "@scicatproject/scicat-sdk-ts-angular"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Injectable() export class ArchivingService { @@ -23,7 +21,7 @@ export class ArchivingService { private createJob( user: ReturnedUserDto, - datasets: OutputDatasetObsoleteDto[], + datasets: CurrentDataset[], archive: boolean, destinationPath?: Record, // Do not specify tape copies here @@ -53,7 +51,7 @@ export class ArchivingService { } private archiveOrRetrieve( - datasets: OutputDatasetObsoleteDto[], + datasets: CurrentDataset[], archive: boolean, destPath?: Record, ): Observable { @@ -80,12 +78,12 @@ export class ArchivingService { ); } - public archive(datasets: OutputDatasetObsoleteDto[]): Observable { + public archive(datasets: CurrentDataset[]): Observable { return this.archiveOrRetrieve(datasets, true); } public retrieve( - datasets: OutputDatasetObsoleteDto[], + datasets: CurrentDataset[], destinationPath: Record, ): Observable { return this.archiveOrRetrieve(datasets, false, destinationPath); diff --git a/src/app/datasets/batch-view/batch-view.component.ts b/src/app/datasets/batch-view/batch-view.component.ts index 0370d15d55..04b494b888 100644 --- a/src/app/datasets/batch-view/batch-view.component.ts +++ b/src/app/datasets/batch-view/batch-view.component.ts @@ -33,6 +33,7 @@ import { DatasetsListService } from "shared/services/datasets-list.service"; import { fetchInstrumentsAction } from "state-management/actions/instruments.actions"; import { TranslateService } from "@ngx-translate/core"; import { translateComponentLabel } from "shared/pipes/component-translate.pipe"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Component({ selector: "batch-view", @@ -41,7 +42,7 @@ import { translateComponentLabel } from "shared/pipes/component-translate.pipe"; standalone: false, }) export class BatchViewComponent implements OnInit, OnDestroy { - batch$: Observable = this.store.select( + batch$: Observable = this.store.select( selectDatasetsInBatch, ); userProfile$ = this.store.select(selectProfile); @@ -55,7 +56,7 @@ export class BatchViewComponent implements OnInit, OnDestroy { appConfig = this.appConfigService.getConfig(); shareEnabled = this.appConfig.shareEnabled; - datasetList: OutputDatasetObsoleteDto[] = []; + datasetList: CurrentDataset[] = []; public hasBatch = false; visibleColumns: string[] = ["remove", "pid", "sourceFolder", "creationTime"]; @@ -75,7 +76,7 @@ export class BatchViewComponent implements OnInit, OnDestroy { this.store.dispatch(clearBatchAction()); } - private storeBatch(datasetUpdatedBatch: OutputDatasetObsoleteDto[]) { + private storeBatch(datasetUpdatedBatch: CurrentDataset[]) { this.store.dispatch(storeBatchAction({ batch: datasetUpdatedBatch })); } diff --git a/src/app/datasets/dataset-detail/dataset-detail-dynamic/dataset-detail-dynamic.component.ts b/src/app/datasets/dataset-detail/dataset-detail-dynamic/dataset-detail-dynamic.component.ts index 5f0caa606f..9278560575 100644 --- a/src/app/datasets/dataset-detail/dataset-detail-dynamic/dataset-detail-dynamic.component.ts +++ b/src/app/datasets/dataset-detail/dataset-detail-dynamic/dataset-detail-dynamic.component.ts @@ -26,7 +26,6 @@ import { import { AttachmentService } from "shared/services/attachment.service"; import { DatePipe } from "@angular/common"; -import { OutputDatasetObsoleteDto } from "@scicatproject/scicat-sdk-ts-angular/model/outputDatasetObsoleteDto"; import { Instrument } from "@scicatproject/scicat-sdk-ts-angular"; import { ActivatedRoute, Router } from "@angular/router"; import { MatSnackBar } from "@angular/material/snack-bar"; @@ -34,6 +33,7 @@ import { ActionItemDataset, ActionItems, } from "shared/modules/configurable-actions/configurable-action.interfaces"; +import { CurrentDataset } from "state-management/state/datasets.store"; /** * Component to show customizable details for a dataset, using the @@ -66,7 +66,7 @@ export class DatasetDetailDynamicComponent implements OnInit, OnDestroy { show = false; instrument: Instrument | undefined; - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; actionItems: ActionItems = { datasets: [], @@ -202,10 +202,7 @@ export class DatasetDetailDynamicComponent implements OnInit, OnDestroy { getThumbnailSize(value: string): string { return value ? `thumbnail-image--${value}` : ""; } - getNestedValue( - obj: OutputDatasetObsoleteDto, - path: string, - ): string | string[] { + getNestedValue(obj: CurrentDataset, path: string): string | string[] { if (!path) { return "field source is missing"; } @@ -222,7 +219,7 @@ export class DatasetDetailDynamicComponent implements OnInit, OnDestroy { .reduce((prev, curr) => (prev != null ? prev[curr] : undefined), obj); } - getInternalLinkValue(obj: OutputDatasetObsoleteDto, path: string): string { + getInternalLinkValue(obj: CurrentDataset, path: string): string { // For instrumentName internal links, return the instrument ID instead of the name if (path === "instrumentName" && this.instrument) { return this.instrument.pid || ""; @@ -257,10 +254,7 @@ export class DatasetDetailDynamicComponent implements OnInit, OnDestroy { } } - getScientificMetadata( - dataset: OutputDatasetObsoleteDto, - source?: string, - ): any { + getScientificMetadata(dataset: CurrentDataset, source?: string): any { const meta = dataset?.scientificMetadata; if (!meta) return null; if (!source) return meta; diff --git a/src/app/datasets/dataset-detail/dataset-detail/dataset-detail.component.ts b/src/app/datasets/dataset-detail/dataset-detail/dataset-detail.component.ts index 47b67b8b6c..527287ed77 100644 --- a/src/app/datasets/dataset-detail/dataset-detail/dataset-detail.component.ts +++ b/src/app/datasets/dataset-detail/dataset-detail/dataset-detail.component.ts @@ -42,12 +42,12 @@ import { Message, MessageType } from "state-management/models"; import { DOCUMENT } from "@angular/common"; import { Instrument, - OutputDatasetObsoleteDto, ProposalClass, ReturnedUserDto, OutputSampleDto, } from "@scicatproject/scicat-sdk-ts-angular"; import { AttachmentService } from "shared/services/attachment.service"; +import { CurrentDataset } from "state-management/state/datasets.store"; /** * Component to show details for a data set, using the @@ -74,7 +74,7 @@ export class DatasetDetailComponent implements OnInit, OnDestroy { appConfig = this.appConfigService.getConfig(); localization = "dataset"; - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; datasetWithout$ = this.store.select(selectCurrentDatasetWithoutFileInfo); attachments$ = this.store.select(selectCurrentAttachments); loading$ = this.store.select(selectIsLoading); diff --git a/src/app/datasets/dataset-details-dashboard/dataset-details-dashboard.component.ts b/src/app/datasets/dataset-details-dashboard/dataset-details-dashboard.component.ts index 65cf86131b..449e1ecb30 100644 --- a/src/app/datasets/dataset-details-dashboard/dataset-details-dashboard.component.ts +++ b/src/app/datasets/dataset-details-dashboard/dataset-details-dashboard.component.ts @@ -6,10 +6,7 @@ import { AfterViewChecked, } from "@angular/core"; import { Store } from "@ngrx/store"; -import { - OutputDatasetObsoleteDto, - UsersService, -} from "@scicatproject/scicat-sdk-ts-angular"; +import { UsersService } from "@scicatproject/scicat-sdk-ts-angular"; import { selectCurrentDataset, selectIsCurrentDatasetInBatch, @@ -21,8 +18,8 @@ import { selectProfile, } from "state-management/selectors/user.selectors"; import { ActivatedRoute, IsActiveMatchOptions } from "@angular/router"; -import { Subscription, Observable, combineLatest, Subject } from "rxjs"; -import { map, takeUntil } from "rxjs/operators"; +import { Subscription, Observable, combineLatest } from "rxjs"; +import { map } from "rxjs/operators"; import * as fromDatasetActions from "state-management/actions/datasets.actions"; import { clearCurrentDatasetStateAction, @@ -47,6 +44,7 @@ import { import { MatDialog } from "@angular/material/dialog"; import { AppConfigService } from "app-config.service"; import { fetchInstrumentAction } from "state-management/actions/instruments.actions"; +import { CurrentDataset } from "state-management/state/datasets.store"; export interface JWT { jwt: string; @@ -83,7 +81,7 @@ export class DatasetDetailsDashboardComponent jwt$: Observable = new Observable(); appConfig = this.appConfigService.getConfig(); - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; navLinks: { location: string; label: string; diff --git a/src/app/datasets/dataset-file-uploader/dataset-file-uploader.component.ts b/src/app/datasets/dataset-file-uploader/dataset-file-uploader.component.ts index 3cfbbd27f2..36795f0e43 100644 --- a/src/app/datasets/dataset-file-uploader/dataset-file-uploader.component.ts +++ b/src/app/datasets/dataset-file-uploader/dataset-file-uploader.component.ts @@ -7,9 +7,7 @@ import { SubmitCaptionEvent, } from "shared/modules/file-uploader/file-uploader.component"; import { - Attachment, OutputAttachmentV3Dto, - OutputDatasetObsoleteDto, ReturnedUserDto, } from "@scicatproject/scicat-sdk-ts-angular"; import { OwnershipService } from "shared/services/ownership.service"; @@ -23,6 +21,7 @@ import { selectCurrentDataset, } from "state-management/selectors/datasets.selectors"; import { selectCurrentUser } from "state-management/selectors/user.selectors"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Component({ selector: "app-dataset-file-uploader", @@ -34,7 +33,7 @@ export class DatasetFileUploaderComponent implements OnInit, OnDestroy { attachments: OutputAttachmentV3Dto[] = []; subscriptions: Subscription[] = []; attachment: Partial = {}; - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; user: ReturnedUserDto | undefined; isOwner: boolean; diff --git a/src/app/datasets/dataset-lifecycle/dataset-lifecycle.component.ts b/src/app/datasets/dataset-lifecycle/dataset-lifecycle.component.ts index c9b629daf1..70f12ba709 100644 --- a/src/app/datasets/dataset-lifecycle/dataset-lifecycle.component.ts +++ b/src/app/datasets/dataset-lifecycle/dataset-lifecycle.component.ts @@ -1,8 +1,5 @@ import { Component, OnInit, OnChanges, SimpleChange } from "@angular/core"; -import { - HistoryClass, - OutputDatasetObsoleteDto, -} from "@scicatproject/scicat-sdk-ts-angular"; +import { HistoryClass } from "@scicatproject/scicat-sdk-ts-angular"; import { trigger, state, @@ -16,6 +13,7 @@ import { selectCurrentDataset } from "state-management/selectors/datasets.select import { Store } from "@ngrx/store"; import { AppConfigService } from "app-config.service"; import { selectIsLoading } from "state-management/selectors/user.selectors"; +import { CurrentDataset } from "state-management/state/datasets.store"; export interface HistoryItem { property: string; @@ -47,7 +45,7 @@ export type HistoryWithProperties = HistoryClass & { [key: string]: unknown }; export class DatasetLifecycleComponent implements OnInit, OnChanges { appConfig = this.appConfigService.getConfig(); - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; historyItems: HistoryItem[] = []; pageSizeOptions = [10, 25, 50, 100, 500, 1000]; diff --git a/src/app/datasets/reduce/reduce.component.ts b/src/app/datasets/reduce/reduce.component.ts index f5c9fe3686..ccc42013ac 100644 --- a/src/app/datasets/reduce/reduce.component.ts +++ b/src/app/datasets/reduce/reduce.component.ts @@ -25,6 +25,7 @@ import { DatasetClass, OutputDatasetObsoleteDto, } from "@scicatproject/scicat-sdk-ts-angular"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Component({ selector: "reduce", @@ -33,7 +34,7 @@ import { standalone: false, }) export class ReduceComponent implements OnInit, OnChanges, OnDestroy { - dataset: OutputDatasetObsoleteDto | undefined; + dataset: CurrentDataset | undefined; subscriptions: Subscription[] = []; derivedDatasets$ = this.store .select(selectDatasets) @@ -88,7 +89,7 @@ export class ReduceComponent implements OnInit, OnChanges, OnDestroy { private ownershipService: OwnershipService, ) {} - reduceDataset(dataset: OutputDatasetObsoleteDto): void { + reduceDataset(dataset: CurrentDataset): void { this.store.dispatch(reduceDatasetAction({ dataset })); } diff --git a/src/app/datasets/related-datasets/related-datasets.component.ts b/src/app/datasets/related-datasets/related-datasets.component.ts index 750e0f5d09..7d0fc9d3ca 100644 --- a/src/app/datasets/related-datasets/related-datasets.component.ts +++ b/src/app/datasets/related-datasets/related-datasets.component.ts @@ -9,7 +9,7 @@ import { } from "shared/modules/table/table.component"; import { DatasetClass, - OutputDatasetObsoleteDto, + PartialOutputDatasetDto, } from "@scicatproject/scicat-sdk-ts-angular"; import { changeRelatedDatasetsPageAction, @@ -84,7 +84,7 @@ export class RelatedDatasetsComponent { ) {} formatTableData( - datasets: OutputDatasetObsoleteDto[], + datasets: PartialOutputDatasetDto[], ): Record[] { if (!datasets) { return []; diff --git a/src/app/ingestor/ingestor-dialogs/creation-dialog/creation-pages/ingestor.new-transfer-dialog-page.component.ts b/src/app/ingestor/ingestor-dialogs/creation-dialog/creation-pages/ingestor.new-transfer-dialog-page.component.ts index 05a3b1220d..0f7901f84d 100644 --- a/src/app/ingestor/ingestor-dialogs/creation-dialog/creation-pages/ingestor.new-transfer-dialog-page.component.ts +++ b/src/app/ingestor/ingestor-dialogs/creation-dialog/creation-pages/ingestor.new-transfer-dialog-page.component.ts @@ -233,8 +233,9 @@ export class IngestorNewTransferDialogPageComponent this.createNewTransferData.scicatHeader["dataFormat"] = "root"; this.createNewTransferData.scicatHeader["owner"] = "User"; - this.createNewTransferData.scicatHeader["principalInvestigator"] = - this.userProfile.username; + this.createNewTransferData.scicatHeader["principalInvestigators"] = [ + this.userProfile.username, + ]; this.createNewTransferData.scicatHeader["ownerEmail"] = this.userProfile.email; this.createNewTransferData.scicatHeader["contactEmail"] = diff --git a/src/app/ingestor/ingestor-page/helper/ingestor.component-helper.ts b/src/app/ingestor/ingestor-page/helper/ingestor.component-helper.ts index c6980a84a9..ad39a246e6 100644 --- a/src/app/ingestor/ingestor-page/helper/ingestor.component-helper.ts +++ b/src/app/ingestor/ingestor-page/helper/ingestor.component-helper.ts @@ -1,5 +1,8 @@ import { JsonSchema, JsonSchema7 } from "@jsonforms/core"; -import { CreateRawDatasetObsoleteDto } from "@scicatproject/scicat-sdk-ts-angular"; +import { + CreateDatasetDto, + CreateRawDatasetObsoleteDto, +} from "@scicatproject/scicat-sdk-ts-angular"; import { isArray } from "mathjs"; import { PostDatasetResponse } from "shared/sdk/models/ingestor/postDatasetResponse"; import { UserInfo } from "shared/sdk/models/ingestor/userInfo"; @@ -198,7 +201,7 @@ export const getJsonSchemaFromDto = (sourceFolderEditable?: boolean) => { // 0 => number // -1 => skip number // -2 => optional number - const emptyDatasetForSchema: CreateRawDatasetObsoleteDto = { + const emptyDatasetForSchema: CreateDatasetDto = { ownerGroup: "--string", accessGroups: [], isPublished: false, @@ -217,7 +220,7 @@ export const getJsonSchemaFromDto = (sourceFolderEditable?: boolean) => { description: "--string --optional", license: "--string --optional", keywords: [], - principalInvestigator: "--string", // skip [], + principalInvestigators: [], // skip [], scientificMetadata: {}, ownerEmail: "--mail --optional", @@ -236,9 +239,9 @@ export const getJsonSchemaFromDto = (sourceFolderEditable?: boolean) => { runNumber: "--optional", datasetlifecycle: undefined, - proposalId: "--string --optional", - sampleId: "--string --optional", - instrumentId: "--string --optional", + proposalIds: [], + sampleIds: [], + instrumentIds: [], inputDatasets: [], usedSoftware: [], jobLogData: "--string --optional", @@ -308,7 +311,7 @@ export const getJsonSchemaFromDto = (sourceFolderEditable?: boolean) => { "Short comment provided by the user about a given dataset. This is additional to the description field.", dataQualityMetrics: "Data Quality Metrics given by the user to rate the dataset.", - principalInvestigator: + principalInvestigators: "First name and last name of principal investigator(s). If multiple PIs are present, use a semicolon separated list. This field is required if the dataset is a Raw dataset.", startTime: "Start time of data acquisition for the current dataset. It is expected to be in ISO8601 format according to specifications for internet date/time format in RFC 3339, chapter 5.6.", diff --git a/src/app/logbooks/logbooks-dashboard/logbooks-dashboard.component.ts b/src/app/logbooks/logbooks-dashboard/logbooks-dashboard.component.ts index daaec44557..47d89938ca 100644 --- a/src/app/logbooks/logbooks-dashboard/logbooks-dashboard.component.ts +++ b/src/app/logbooks/logbooks-dashboard/logbooks-dashboard.component.ts @@ -6,10 +6,7 @@ import { AfterViewChecked, } from "@angular/core"; import { Store } from "@ngrx/store"; -import { - Logbook, - OutputDatasetObsoleteDto, -} from "@scicatproject/scicat-sdk-ts-angular"; +import { Logbook } from "@scicatproject/scicat-sdk-ts-angular"; import { combineLatest, Subscription } from "rxjs"; import { selectLogbooksDashboardPageViewModel } from "state-management/selectors/logbooks.selectors"; import { @@ -33,6 +30,7 @@ import { import { AppConfigService } from "app-config.service"; import { selectCurrentDataset } from "state-management/selectors/datasets.selectors"; import { OwnershipService } from "shared/services/ownership.service"; +import { CurrentDataset } from "state-management/state/datasets.store"; export interface LogbookData { logbook: Logbook; @@ -52,7 +50,7 @@ export class LogbooksDashboardComponent { vm$ = this.store.select(selectLogbooksDashboardPageViewModel); - dataset: OutputDatasetObsoleteDto | undefined = undefined; + dataset: CurrentDataset | undefined = undefined; appConfig = this.appConfigService.getConfig(); subscriptions: Subscription[] = []; diff --git a/src/app/shared/MockStubs.ts b/src/app/shared/MockStubs.ts index fd668f791a..be023cd9c4 100644 --- a/src/app/shared/MockStubs.ts +++ b/src/app/shared/MockStubs.ts @@ -12,7 +12,7 @@ import { DataFiles_File } from "datasets/datafiles/datafiles.interfaces"; import { Instrument, OutputJobV3Dto, - OutputDatasetObsoleteDto, + OutputDatasetDto, ProposalClass, PublishedData, OutputSampleDto, @@ -337,7 +337,7 @@ export function createMock(data?: Partial): T { return data as T; } -export const mockDataset = createMock({}); +export const mockDataset = createMock({}); export const mockAttachment = createMock({}); export const mockSample = createMock({}); export const mockProposal = createMock({}); diff --git a/src/app/shared/services/ownership.service.ts b/src/app/shared/services/ownership.service.ts index 87390d5041..89eaae2b6e 100644 --- a/src/app/shared/services/ownership.service.ts +++ b/src/app/shared/services/ownership.service.ts @@ -3,11 +3,11 @@ import { Router } from "@angular/router"; import { Store } from "@ngrx/store"; import { combineLatest, Observable } from "rxjs"; import { map } from "rxjs/operators"; -import { OutputDatasetObsoleteDto } from "@scicatproject/scicat-sdk-ts-angular"; import { selectIsAdmin, selectProfile, } from "state-management/selectors/user.selectors"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Injectable({ providedIn: "root", @@ -15,7 +15,7 @@ import { export class OwnershipService { public isOwner = false; checkDatasetAccess( - dataset: OutputDatasetObsoleteDto | undefined, + dataset: CurrentDataset | undefined, store: Store, router: Router, ) { diff --git a/src/app/state-management/actions/datasets.actions.spec.ts b/src/app/state-management/actions/datasets.actions.spec.ts index 716ad4c8ab..afaaea0c1e 100644 --- a/src/app/state-management/actions/datasets.actions.spec.ts +++ b/src/app/state-management/actions/datasets.actions.spec.ts @@ -12,13 +12,12 @@ import { } from "shared/MockStubs"; import { DatasetsControllerCreateV3Request, - OutputDatasetObsoleteDto, + OutputDatasetDto, } from "@scicatproject/scicat-sdk-ts-angular"; describe("Dataset Actions", () => { const datasets = [dataset]; - const derivedDataset = createMock({ - investigator: "", + const derivedDataset = createMock({ inputDatasets: [], usedSoftware: [], owner: "", @@ -26,13 +25,13 @@ describe("Dataset Actions", () => { sourceFolder: "", creationTime: "", ownerGroup: "", - datasetName: "", + datasetName: "test name", type: "derived", numberOfFilesArchived: 0, createdAt: "", createdBy: "", creationLocation: "", - principalInvestigator: "", + principalInvestigators: [], updatedAt: "", updatedBy: "", }); diff --git a/src/app/state-management/actions/datasets.actions.ts b/src/app/state-management/actions/datasets.actions.ts index 8a00c121a3..67734bdae8 100644 --- a/src/app/state-management/actions/datasets.actions.ts +++ b/src/app/state-management/actions/datasets.actions.ts @@ -6,8 +6,13 @@ import { OutputDatasetObsoleteDto, DatasetsControllerCreateV3Request, OutputAttachmentV3Dto, + OutputDatasetDto, + PartialOutputDatasetDto, } from "@scicatproject/scicat-sdk-ts-angular"; -import { FacetCounts } from "state-management/state/datasets.store"; +import { + FacetCounts, + CurrentDataset, +} from "state-management/state/datasets.store"; import { ArchViewMode, DatasetFilters, @@ -55,7 +60,7 @@ export const fetchDatasetAction = createAction( ); export const fetchDatasetCompleteAction = createAction( "[Dataset] Fetch Dataset Complete", - props<{ dataset: OutputDatasetObsoleteDto }>(), + props<{ dataset: OutputDatasetDto }>(), ); export const fetchDatasetFailedAction = createAction( "[Dataset] Fetch Dataset Failed", @@ -100,7 +105,7 @@ export const fetchRelatedDatasetsAction = createAction( ); export const fetchRelatedDatasetsCompleteAction = createAction( "[Dataset] Fetch Related Datasets Complete", - props<{ relatedDatasets: OutputDatasetObsoleteDto[] }>(), + props<{ relatedDatasets: PartialOutputDatasetDto[] }>(), ); export const fetchRelatedDatasetsFailedAction = createAction( "[Datasets] Fetch Related Datasets Failed", @@ -122,7 +127,7 @@ export const changeRelatedDatasetsPageAction = createAction( export const prefillBatchAction = createAction("[Dataset] Prefill Batch"); export const prefillBatchCompleteAction = createAction( "[Dataset] Prefill Batch Complete", - props<{ batch: OutputDatasetObsoleteDto[] }>(), + props<{ batch: CurrentDataset[] }>(), ); export const addToBatchAction = createAction("[Dataset] Add To Batch"); export const addCurrentToBatchAction = createAction( @@ -130,11 +135,11 @@ export const addCurrentToBatchAction = createAction( ); export const storeBatchAction = createAction( "[Dataset] Store To Batch", - props<{ batch: OutputDatasetObsoleteDto[] }>(), + props<{ batch: CurrentDataset[] }>(), ); export const removeFromBatchAction = createAction( "[Dataset] Remove From Batch", - props<{ dataset: OutputDatasetObsoleteDto }>(), + props<{ dataset: CurrentDataset }>(), ); export const clearBatchAction = createAction("[Dataset] Clear Batch"); @@ -144,7 +149,7 @@ export const addDatasetAction = createAction( ); export const addDatasetCompleteAction = createAction( "[Dataset] Add Dataset Complete", - props<{ dataset: OutputDatasetObsoleteDto }>(), + props<{ dataset: OutputDatasetDto }>(), ); export const addDatasetFailedAction = createAction( "[Dataset] Add Dataset Failed", @@ -212,7 +217,7 @@ export const removeAttachmentFailedAction = createAction( export const reduceDatasetAction = createAction( "[Dataset] Reduce Dataset", - props<{ dataset: OutputDatasetObsoleteDto }>(), + props<{ dataset: CurrentDataset }>(), ); export const reduceDatasetCompleteAction = createAction( "[Dataset] Reduce Dataset Complete", diff --git a/src/app/state-management/effects/datasets.effects.spec.ts b/src/app/state-management/effects/datasets.effects.spec.ts index 3b4b783b74..22b5692514 100644 --- a/src/app/state-management/effects/datasets.effects.spec.ts +++ b/src/app/state-management/effects/datasets.effects.spec.ts @@ -51,7 +51,7 @@ const derivedData = createMock({ }); const derivedDataset = { pid: "testPid", ...derivedData }; -const dataset = { pid: "testPid", ...mockDataset }; +const dataset = { pid: "testPid", datasetName: "test name", ...mockDataset }; describe("DatasetEffects", () => { let actions: TestObservable; diff --git a/src/app/state-management/effects/datasets.effects.ts b/src/app/state-management/effects/datasets.effects.ts index 4d402ae286..b45e57d938 100644 --- a/src/app/state-management/effects/datasets.effects.ts +++ b/src/app/state-management/effects/datasets.effects.ts @@ -7,8 +7,9 @@ import { Datablock, DatasetsService, OrigDatablock, - OutputDatasetObsoleteDto, UpdateAttachmentV3Dto, + DatasetsV4Service, + DatasetsPublicV4Service, } from "@scicatproject/scicat-sdk-ts-angular"; import { Store } from "@ngrx/store"; import { @@ -36,6 +37,7 @@ import { updateUserSettingsAction, } from "state-management/actions/user.actions"; import { AppConfigService } from "app-config.service"; +import { CurrentDataset } from "state-management/state/datasets.store"; @Injectable() export class DatasetEffects { @@ -165,11 +167,27 @@ export class DatasetEffects { fetchDataset$ = createEffect(() => { return this.actions$.pipe( ofType(fromActions.fetchDatasetAction), - switchMap(({ pid }) => { - return this.datasetsService.datasetsControllerFindByIdV3(pid).pipe( - map((dataset) => fromActions.fetchDatasetCompleteAction({ dataset })), - catchError(() => of(fromActions.fetchDatasetFailedAction())), - ); + concatLatestFrom(() => this.currentUser$), + switchMap(([{ pid }, user]) => { + if (user) { + return this.datasetsV4Service + .datasetsV4ControllerFindByIdV4(pid) + .pipe( + map((dataset) => + fromActions.fetchDatasetCompleteAction({ dataset }), + ), + catchError(() => of(fromActions.fetchDatasetFailedAction())), + ); + } else { + return this.datasetsPublicV4Service + .datasetsPublicV4ControllerFindByIdPublicV4(pid) + .pipe( + map((dataset) => + fromActions.fetchDatasetCompleteAction({ dataset }), + ), + catchError(() => of(fromActions.fetchDatasetFailedAction())), + ); + } }), ); }); @@ -227,14 +245,14 @@ export class DatasetEffects { concatLatestFrom(() => [ this.currentDataset$, this.relatedDatasetsFilters$, + this.currentUser$, ]), - switchMap(([, dataset, filters]) => { + switchMap(([, dataset, filters], user) => { const queryFilter = { where: {}, limits: { skip: filters.skip, limit: filters.limit, - order: filters.sortField, }, }; if (dataset.type === "raw") { @@ -248,18 +266,35 @@ export class DatasetEffects { pid: { $in: dataset.inputDatasets }, }; } - return this.datasetsService - .datasetsControllerFindAllV3(JSON.stringify(queryFilter)) - .pipe( - map((relatedDatasets) => - fromActions.fetchRelatedDatasetsCompleteAction({ - relatedDatasets, - }), - ), - catchError(() => - of(fromActions.fetchRelatedDatasetsFailedAction()), - ), - ); + if (user) { + return this.datasetsV4Service + .datasetsV4ControllerFindAllV4(JSON.stringify(queryFilter)) + .pipe( + map((relatedDatasets) => + fromActions.fetchRelatedDatasetsCompleteAction({ + relatedDatasets, + }), + ), + catchError(() => + of(fromActions.fetchRelatedDatasetsFailedAction()), + ), + ); + } else { + return this.datasetsPublicV4Service + .datasetsPublicV4ControllerFindAllPublicV4( + JSON.stringify(queryFilter), + ) + .pipe( + map((relatedDatasets) => + fromActions.fetchRelatedDatasetsCompleteAction({ + relatedDatasets, + }), + ), + catchError(() => + of(fromActions.fetchRelatedDatasetsFailedAction()), + ), + ); + } }), ); }); @@ -267,8 +302,8 @@ export class DatasetEffects { fetchRelatedDatasetsCount$ = createEffect(() => { return this.actions$.pipe( ofType(fromActions.fetchRelatedDatasetsAction), - concatLatestFrom(() => [this.currentDataset$]), - switchMap(([, dataset]) => { + concatLatestFrom(() => [this.currentDataset$, this.currentUser$]), + switchMap(([, dataset, user]) => { const queryFilter = { where: {}, }; @@ -283,18 +318,35 @@ export class DatasetEffects { pid: { $in: dataset.inputDatasets }, }; } - return this.datasetsService - .datasetsControllerCountV3(JSON.stringify(queryFilter)) - .pipe( - map(({ count }) => - fromActions.fetchRelatedDatasetsCountCompleteAction({ - count, - }), - ), - catchError(() => - of(fromActions.fetchRelatedDatasetsCountFailedAction()), - ), - ); + if (user) { + return this.datasetsV4Service + .datasetsV4ControllerCountV4(JSON.stringify(queryFilter)) + .pipe( + map(({ count }) => + fromActions.fetchRelatedDatasetsCountCompleteAction({ + count, + }), + ), + catchError(() => + of(fromActions.fetchRelatedDatasetsCountFailedAction()), + ), + ); + } else { + return this.datasetsPublicV4Service + .datasetsPublicV4ControllerCountPublicV4( + JSON.stringify(queryFilter), + ) + .pipe( + map(({ count }) => + fromActions.fetchRelatedDatasetsCountCompleteAction({ + count, + }), + ), + catchError(() => + of(fromActions.fetchRelatedDatasetsCountFailedAction()), + ), + ); + } }), ); }); @@ -303,7 +355,7 @@ export class DatasetEffects { return this.actions$.pipe( ofType(fromActions.addDatasetAction), mergeMap(({ dataset }) => - this.datasetsService.datasetsControllerCreateV3(dataset).pipe( + this.datasetsV4Service.datasetsV4ControllerCreateV4(dataset).pipe( mergeMap((res) => [ fromActions.addDatasetCompleteAction({ dataset: res, @@ -526,15 +578,17 @@ export class DatasetEffects { private datasetsService: DatasetsService, private store: Store, private appConfigService: AppConfigService, + private datasetsV4Service: DatasetsV4Service, + private datasetsPublicV4Service: DatasetsPublicV4Service, ) {} - private storeBatch(batch: OutputDatasetObsoleteDto[], userId: string) { + private storeBatch(batch: CurrentDataset[], userId: string) { const json = JSON.stringify(batch); localStorage.setItem("batch", json); localStorage.setItem("batchUser", userId); } - private retrieveBatch(ofUserId: string): OutputDatasetObsoleteDto[] { + private retrieveBatch(ofUserId: string): CurrentDataset[] { const json = localStorage.getItem("batch"); const userId = localStorage.getItem("batchUser"); diff --git a/src/app/state-management/reducers/datasets.reducer.spec.ts b/src/app/state-management/reducers/datasets.reducer.spec.ts index 3cb61cbc7a..f746c14b76 100644 --- a/src/app/state-management/reducers/datasets.reducer.spec.ts +++ b/src/app/state-management/reducers/datasets.reducer.spec.ts @@ -33,6 +33,7 @@ const derivedDataset = createMock({ const dataset = createMock({ ...derivedDataset, type: "raw", + datasetName: "test name", origdatablocks: undefined, }); diff --git a/src/app/state-management/state/datasets.store.ts b/src/app/state-management/state/datasets.store.ts index d7f284baee..53f9f10fe8 100644 --- a/src/app/state-management/state/datasets.store.ts +++ b/src/app/state-management/state/datasets.store.ts @@ -1,5 +1,13 @@ import { DatasetFilters, ArchViewMode } from "state-management/models"; -import { OutputDatasetObsoleteDto } from "@scicatproject/scicat-sdk-ts-angular"; +import { + OutputDatasetDto, + OutputDatasetObsoleteDto, + Datablock, + OrigDatablock, + OutputAttachmentV3Dto, + HistoryClass, + PartialOutputDatasetDto, +} from "@scicatproject/scicat-sdk-ts-angular"; export interface FacetCount { _id: string; @@ -19,8 +27,8 @@ export interface Pagination { export interface DatasetState { datasets: OutputDatasetObsoleteDto[]; selectedSets: OutputDatasetObsoleteDto[]; - currentSet: OutputDatasetObsoleteDto | undefined; - relatedDatasets: OutputDatasetObsoleteDto[]; + currentSet: CurrentDataset | undefined; + relatedDatasets: PartialOutputDatasetDto[]; relatedDatasetsCount: number; totalCount: number; @@ -39,11 +47,18 @@ export interface DatasetState { sortField: string; }; - batch: OutputDatasetObsoleteDto[]; + batch: CurrentDataset[]; openwhiskResult: Record | undefined; } +export type CurrentDataset = (OutputDatasetDto | OutputDatasetObsoleteDto) & { + attachments?: OutputAttachmentV3Dto[]; + datablocks?: Datablock[]; + origdatablocks?: OrigDatablock[]; + history?: HistoryClass[]; +}; + export const initialDatasetState: DatasetState = { datasets: [], selectedSets: [],