2023-12-01 18:18:41 +01:00
import { map , filter } from 'rxjs/operators' ;
import { Component } from "@angular/core" ;
import { MatDialogRef , MAT_DIALOG_DATA } from "@angular/material/dialog" ;
import { Observable } from "rxjs" ;
import { Inject } from "@angular/core" ;
import { TranslateService } from "@ngx-translate/core" ;
import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration' ;
2024-03-11 08:47:03 +01:00
import { Dmp , DmpDescriptionTemplate } from '@app/core/model/dmp/dmp' ;
2023-12-29 16:04:16 +01:00
import { DmpService } from '@app/core/services/dmp/dmp.service' ;
2023-12-01 18:18:41 +01:00
import { DescriptionService } from '@app/core/services/description/description.service' ;
2023-12-04 18:37:52 +01:00
import { DmpDescriptionTemplateLookup } from '@app/core/query/dmp-description-template.lookup' ;
import { IsActive } from '@app/core/common/enum/is-active.enum' ;
2024-03-11 08:47:03 +01:00
import { DmpLookup } from '@app/core/query/dmp.lookup' ;
import { Guid } from '@common/types/guid' ;
import { DmpStatus } from '@app/core/common/enum/dmp-status' ;
import { nameof } from 'ts-simple-nameof' ;
import { FilterService } from '@common/modules/text-filter/filter-service' ;
import { UntypedFormBuilder , UntypedFormGroup , Validators } from '@angular/forms' ;
2024-03-19 17:27:30 +01:00
import { DescriptionTemplatesInSection , DmpBlueprint , DmpBlueprintDefinition , DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint' ;
2023-12-01 18:18:41 +01:00
@Component ( {
selector : 'description-copy-dialog-component' ,
templateUrl : 'description-copy-dialog.component.html' ,
styleUrls : [ './description-copy-dialog.component.scss' ] ,
} )
export class DescriptionCopyDialogComponent {
dmpModel : Dmp ;
2024-03-19 17:27:30 +01:00
sections : DmpBlueprintDefinitionSection [ ] = [ ] ;
2023-12-01 18:18:41 +01:00
descriptionDescriptionTemplateLabel : String ;
dmpAutoCompleteConfiguration : SingleAutoCompleteConfiguration = { //TODO: add filter to only get DMPs that have connection with the same Description Template group.
2024-03-19 17:27:30 +01:00
initialItems : ( data? : any ) = > this . dmpService . query ( this . buildDmpLookup ( null , null , null , this . dmpDescriptionTemplateLookup ) ) . pipe ( map ( x = > x . items ) ) ,
filterFn : ( searchQuery : string , data? : any ) = > this . dmpService . query ( this . buildDmpLookup ( searchQuery , null , null , this . dmpDescriptionTemplateLookup ) ) . pipe ( map ( x = > x . items ) ) ,
2024-03-11 08:47:03 +01:00
getSelectedItem : ( selectedItem : any ) = > this . dmpService . query ( this . buildDmpLookup ( null , null , [ selectedItem ] ) ) . pipe ( map ( x = > x . items [ 0 ] ) ) ,
2023-12-01 18:18:41 +01:00
displayFn : ( item : Dmp ) = > item . label ,
titleFn : ( item : Dmp ) = > item . label ,
2024-03-11 08:47:03 +01:00
valueAssign : ( item : Dmp ) = > this . findSection ( item ) ,
2023-12-01 18:18:41 +01:00
} ;
2023-12-04 18:37:52 +01:00
dmpDescriptionTemplateLookup : DmpDescriptionTemplateLookup = {
descriptionTemplateGroupIds : [ this . data . descriptionTemplate . groupId ] ,
isActive : [ IsActive . Active ]
} as DmpDescriptionTemplateLookup ;
2023-12-01 18:18:41 +01:00
2024-03-19 17:27:30 +01:00
private buildDmpLookup ( like? : string , excludedIds? : Guid [ ] , ids? : Guid [ ] , dmpDescriptionTemplateSubQuery? : DmpDescriptionTemplateLookup ) : DmpLookup {
2024-03-11 08:47:03 +01:00
const lookup : DmpLookup = new DmpLookup ( ) ;
lookup . page = { size : 100 , offset : 0 } ;
if ( excludedIds && excludedIds . length > 0 ) { lookup . excludedIds = excludedIds ; }
if ( ids && ids . length > 0 ) { lookup . ids = ids ; }
lookup . isActive = [ IsActive . Active ] ;
2024-03-19 17:27:30 +01:00
lookup . statuses = [ DmpStatus . Draft ] ;
2024-03-11 08:47:03 +01:00
lookup . project = {
fields : [
nameof < Dmp > ( x = > x . id ) ,
nameof < Dmp > ( x = > x . label ) ,
2024-03-19 17:27:30 +01:00
[ nameof < Dmp > ( x = > x . blueprint ) , nameof < DmpBlueprint > ( x = > x . definition ) , nameof < DmpBlueprintDefinition > ( x = > x . sections ) , nameof < DmpBlueprintDefinitionSection > ( x = > x . id ) ] . join ( '.' ) ,
[ nameof < Dmp > ( x = > x . blueprint ) , nameof < DmpBlueprint > ( x = > x . definition ) , nameof < DmpBlueprintDefinition > ( x = > x . sections ) , nameof < DmpBlueprintDefinitionSection > ( x = > x . label ) ] . join ( '.' ) ,
[ nameof < Dmp > ( x = > x . blueprint ) , nameof < DmpBlueprint > ( x = > x . definition ) , nameof < DmpBlueprintDefinition > ( x = > x . sections ) , nameof < DmpBlueprintDefinitionSection > ( x = > x . ordinal ) ] . join ( '.' ) ,
[ nameof < Dmp > ( x = > x . blueprint ) , nameof < DmpBlueprint > ( x = > x . definition ) , nameof < DmpBlueprintDefinition > ( x = > x . sections ) , nameof < DmpBlueprintDefinitionSection > ( x = > x . hasTemplates ) ] . join ( '.' ) ,
[ nameof < Dmp > ( x = > x . blueprint ) , nameof < DmpBlueprint > ( x = > x . definition ) , nameof < DmpBlueprintDefinition > ( x = > x . sections ) , nameof < DmpBlueprintDefinitionSection > ( x = > x . descriptionTemplates ) , nameof < DescriptionTemplatesInSection > ( x = > x . descriptionTemplateGroupId ) ] . join ( '.' ) ,
2024-03-11 08:47:03 +01:00
]
} ;
if ( dmpDescriptionTemplateSubQuery != null ) lookup . dmpDescriptionTemplateSubQuery = dmpDescriptionTemplateSubQuery ;
lookup . order = { items : [ nameof < Dmp > ( x = > x . label ) ] } ;
if ( like ) { lookup . like = this . filterService . transformLike ( like ) ; }
return lookup ;
}
2023-12-01 18:18:41 +01:00
constructor (
public dialogRef : MatDialogRef < DescriptionCopyDialogComponent > ,
2023-12-29 16:04:16 +01:00
public dmpService : DmpService ,
2023-12-01 18:18:41 +01:00
public descriptionService : DescriptionService ,
public language : TranslateService ,
2024-03-11 08:47:03 +01:00
private filterService : FilterService ,
2023-12-01 18:18:41 +01:00
@Inject ( MAT_DIALOG_DATA ) public data : any
) { }
ngOnInit() {
2024-03-11 08:47:03 +01:00
}
findSection ( dmp : Dmp ) {
2024-03-19 17:27:30 +01:00
this . sections = dmp . blueprint . definition . sections . filter ( x = > x . hasTemplates == true ) ;
if ( this . sections . length == 1 ) {
this . data . formGroup . get ( 'sectionId' ) . setValue ( this . sections [ 0 ] . id ) ;
} else {
this . data . formGroup . get ( 'sectionId' ) . setValue ( null ) ;
2024-03-11 08:47:03 +01:00
}
return dmp . id
2023-12-01 18:18:41 +01:00
}
cancel() {
this . dialogRef . close ( this . data ) ;
}
confirm() {
2024-03-11 08:47:03 +01:00
this . dialogRef . close ( this . data . formGroup ) ;
2023-12-01 18:18:41 +01:00
}
getErrorMessage() {
return this . language . instant ( 'DESCRIPTION-COPY-DIALOG.ERROR-MESSAGE' ) ;
}
close() {
this . dialogRef . close ( false ) ;
}
}