Merge pull request #1987 from mspalti/relation-submisssion-thumb

Fix for related item thumbnail images.
This commit is contained in:
Tim Donohue
2022-12-19 14:46:31 -06:00
committed by GitHub
5 changed files with 23 additions and 12 deletions

View File

@@ -79,6 +79,8 @@ import { FormService } from '../../form.service';
import { SubmissionService } from '../../../../submission/submission.service'; import { SubmissionService } from '../../../../submission/submission.service';
import { FormBuilderService } from '../form-builder.service'; import { FormBuilderService } from '../form-builder.service';
import { NgxMaskModule } from 'ngx-mask'; import { NgxMaskModule } from 'ngx-mask';
import { APP_CONFIG } from '../../../../../config/app-config.interface';
import { environment } from '../../../../../environments/environment';
function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService {
return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', {
@@ -230,7 +232,8 @@ describe('DsDynamicFormControlContainerComponent test suite', () => {
findById: () => observableOf(createSuccessfulRemoteDataObject(testWSI)) findById: () => observableOf(createSuccessfulRemoteDataObject(testWSI))
} }
}, },
{ provide: NgZone, useValue: new NgZone({}) } { provide: NgZone, useValue: new NgZone({}) },
{ provide: APP_CONFIG, useValue: environment }
], ],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents().then(() => { }).compileComponents().then(() => {

View File

@@ -4,7 +4,7 @@ import {
Component, Component,
ComponentFactoryResolver, ComponentFactoryResolver,
ContentChildren, ContentChildren,
EventEmitter, EventEmitter, Inject,
Input, Input,
NgZone, NgZone,
OnChanges, OnChanges,
@@ -118,6 +118,8 @@ import { RelationshipOptions } from '../models/relationship-options.model';
import { FormBuilderService } from '../form-builder.service'; import { FormBuilderService } from '../form-builder.service';
import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from './ds-dynamic-form-constants'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from './ds-dynamic-form-constants';
import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model';
import { APP_CONFIG, AppConfig } from '../../../../../config/app-config.interface';
import { itemLinksToFollow } from '../../../utils/relation-query.utils';
export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type<DynamicFormControl> | null { export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type<DynamicFormControl> | null {
switch (model.type) { switch (model.type) {
@@ -231,6 +233,11 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
private showErrorMessagesPreviousStage: boolean; private showErrorMessagesPreviousStage: boolean;
/**
* Determines whether to request embedded thumbnail.
*/
fetchThumbnail: boolean;
get componentType(): Type<DynamicFormControl> | null { get componentType(): Type<DynamicFormControl> | null {
return dsDynamicFormControlMapFn(this.model); return dsDynamicFormControlMapFn(this.model);
} }
@@ -253,9 +260,11 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
private ref: ChangeDetectorRef, private ref: ChangeDetectorRef,
private formService: FormService, private formService: FormService,
private formBuilderService: FormBuilderService, private formBuilderService: FormBuilderService,
private submissionService: SubmissionService private submissionService: SubmissionService,
@Inject(APP_CONFIG) protected appConfig: AppConfig,
) { ) {
super(ref, componentFactoryResolver, layoutService, validationService, dynamicFormComponentService, relationService); super(ref, componentFactoryResolver, layoutService, validationService, dynamicFormComponentService, relationService);
this.fetchThumbnail = this.appConfig.browseBy.showThumbnails;
} }
/** /**
@@ -285,7 +294,6 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
followLink('rightItem'), followLink('rightItem'),
followLink('relationshipType') followLink('relationshipType')
); );
relationshipsRD$.pipe( relationshipsRD$.pipe(
getFirstSucceededRemoteDataPayload(), getFirstSucceededRemoteDataPayload(),
getPaginatedListPayload() getPaginatedListPayload()
@@ -317,8 +325,10 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
} }
if (hasValue(this.value) && this.value.isVirtual) { if (hasValue(this.value) && this.value.isVirtual) {
const relationship$ = this.relationshipService.findById(this.value.virtualValue, true, true, followLink('leftItem'), followLink('rightItem'), followLink('relationshipType')) const relationship$ = this.relationshipService.findById(this.value.virtualValue,
.pipe( true,
true,
... itemLinksToFollow(this.fetchThumbnail)).pipe(
getAllSucceededRemoteData(), getAllSucceededRemoteData(),
getRemoteDataPayload()); getRemoteDataPayload());
this.relationshipValue$ = observableCombineLatest([this.item$.pipe(take(1)), relationship$]).pipe( this.relationshipValue$ = observableCombineLatest([this.item$.pipe(take(1)), relationship$]).pipe(

View File

@@ -1,3 +1 @@
span.text-contents{
padding: var(--bs-btn-padding-y) 0;
}

View File

@@ -1,12 +1,12 @@
<div class="d-flex"> <div class="d-flex">
<span class="mr-auto text-contents"> <div class="flex-grow-1 mr-auto">
<ng-container *ngIf="!(relatedItem$ | async)"> <ng-container *ngIf="!(relatedItem$ | async)">
<ds-themed-loading [showMessage]="false"></ds-themed-loading> <ds-themed-loading [showMessage]="false"></ds-themed-loading>
</ng-container> </ng-container>
<ng-container *ngIf="(relatedItem$ | async)"> <ng-container *ngIf="(relatedItem$ | async)">
<ds-listable-object-component-loader [showLabel]="false" [viewMode]="viewType" [object]="(relatedItem$ | async)"></ds-listable-object-component-loader> <ds-listable-object-component-loader [showLabel]="false" [viewMode]="viewType" [object]="(relatedItem$ | async)"></ds-listable-object-component-loader>
</ng-container> </ng-container>
</span> </div>
<button type="button" class="btn btn-secondary" <button type="button" class="btn btn-secondary"
(click)="removeSelection()"> (click)="removeSelection()">
<i class="fas fa-trash" aria-hidden="true"></i> <i class="fas fa-trash" aria-hidden="true"></i>

View File

@@ -69,7 +69,7 @@ describe('ExistingRelationListElementComponent', () => {
providers: [ providers: [
{ provide: SelectableListService, useValue: selectionService }, { provide: SelectableListService, useValue: selectionService },
{ provide: Store, useValue: store }, { provide: Store, useValue: store },
{ provide: SubmissionService, useClass: SubmissionServiceStub }, { provide: SubmissionService, useClass: SubmissionServiceStub }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}) })