CC License Submission Step - feedback

This commit is contained in:
Samuel
2020-06-18 15:20:55 +02:00
parent 470c21d8d8
commit e963aa9af0
17 changed files with 115 additions and 108 deletions

View File

@@ -145,10 +145,10 @@ import { Version } from './shared/version.model';
import { VersionHistory } from './shared/version-history.model'; import { VersionHistory } from './shared/version-history.model';
import { WorkflowActionDataService } from './data/workflow-action-data.service'; import { WorkflowActionDataService } from './data/workflow-action-data.service';
import { WorkflowAction } from './tasks/models/workflow-action-object.model'; import { WorkflowAction } from './tasks/models/workflow-action-object.model';
import { SubmissionCcLicenseDataService } from './data/submission-cc-license-data.service'; import { SubmissionCcLicenseDataService } from './submission/submission-cc-license-data.service';
import { SubmissionCcLicence } from './shared/submission-cc-license.model'; import { SubmissionCcLicence } from './submission/models/submission-cc-license.model';
import { SubmissionCcLicenceUrl } from './shared/submission-cc-license-url.model'; import { SubmissionCcLicenceUrl } from './submission/models/submission-cc-license-url.model';
import { SubmissionCcLicenseUrlDataService } from './data/submission-cc-license-url-data.service'; import { SubmissionCcLicenseUrlDataService } from './submission/submission-cc-license-url-data.service';
/** /**
* When not in production, endpoint responses can be mocked for testing purposes * When not in production, endpoint responses can be mocked for testing purposes

View File

@@ -1,4 +1,4 @@
import { ResourceType } from './resource-type'; import { ResourceType } from '../../shared/resource-type';
/** /**
* The resource type for License * The resource type for License

View File

@@ -1,4 +1,4 @@
import { ResourceType } from './resource-type'; import { ResourceType } from '../../shared/resource-type';
/** /**
* The resource type for License * The resource type for License

View File

@@ -1,8 +1,8 @@
import { autoserialize, inheritSerialization } from 'cerialize'; import { autoserialize, inheritSerialization } from 'cerialize';
import { typedObject } from '../cache/builders/build-decorators'; import { typedObject } from '../../cache/builders/build-decorators';
import { excludeFromEquals } from '../utilities/equals.decorators'; import { excludeFromEquals } from '../../utilities/equals.decorators';
import { ResourceType } from './resource-type'; import { ResourceType } from '../../shared/resource-type';
import { HALResource } from './hal-resource.model'; import { HALResource } from '../../shared/hal-resource.model';
import { SUBMISSION_CC_LICENSE_URL } from './submission-cc-licence-link.resource-type'; import { SUBMISSION_CC_LICENSE_URL } from './submission-cc-licence-link.resource-type';
@typedObject @typedObject

View File

@@ -1,8 +1,8 @@
import { autoserialize, inheritSerialization } from 'cerialize'; import { autoserialize, inheritSerialization } from 'cerialize';
import { typedObject } from '../cache/builders/build-decorators'; import { typedObject } from '../../cache/builders/build-decorators';
import { excludeFromEquals } from '../utilities/equals.decorators'; import { excludeFromEquals } from '../../utilities/equals.decorators';
import { ResourceType } from './resource-type'; import { ResourceType } from '../../shared/resource-type';
import { HALResource } from './hal-resource.model'; import { HALResource } from '../../shared/hal-resource.model';
import { SUBMISSION_CC_LICENSE } from './submission-cc-licence.resource-type'; import { SUBMISSION_CC_LICENSE } from './submission-cc-licence.resource-type';
@typedObject @typedObject

View File

@@ -1,4 +1,4 @@
import {Option} from '../../shared/submission-cc-license.model'; import { Option } from './submission-cc-license.model';
/** /**
* An interface to represent the submission's creative commons license section data. * An interface to represent the submission's creative commons license section data.

View File

@@ -7,11 +7,11 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv
import { ObjectCacheService } from '../cache/object-cache.service'; import { ObjectCacheService } from '../cache/object-cache.service';
import { CoreState } from '../core.reducers'; import { CoreState } from '../core.reducers';
import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HALEndpointService } from '../shared/hal-endpoint.service';
import { DataService } from './data.service'; import { DataService } from '../data/data.service';
import { RequestService } from './request.service'; import { RequestService } from '../data/request.service';
import { SUBMISSION_CC_LICENSE } from '../shared/submission-cc-licence.resource-type'; import { SUBMISSION_CC_LICENSE } from './models/submission-cc-licence.resource-type';
import { Field, Option, SubmissionCcLicence } from '../shared/submission-cc-license.model'; import { Field, Option, SubmissionCcLicence } from './models/submission-cc-license.model';
import { DefaultChangeAnalyzer } from './default-change-analyzer.service'; import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service';
import { import {
getRemoteDataPayload, getRemoteDataPayload,
getSucceededRemoteData, getSucceededRemoteData,

View File

@@ -7,11 +7,11 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv
import { ObjectCacheService } from '../cache/object-cache.service'; import { ObjectCacheService } from '../cache/object-cache.service';
import { CoreState } from '../core.reducers'; import { CoreState } from '../core.reducers';
import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HALEndpointService } from '../shared/hal-endpoint.service';
import { DataService } from './data.service'; import { DataService } from '../data/data.service';
import { RequestService } from './request.service'; import { RequestService } from '../data/request.service';
import { DefaultChangeAnalyzer } from './default-change-analyzer.service'; import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service';
import { SubmissionCcLicenceUrl } from '../shared/submission-cc-license-url.model'; import { SubmissionCcLicenceUrl } from './models/submission-cc-license-url.model';
import { SUBMISSION_CC_LICENSE_URL } from '../shared/submission-cc-licence-link.resource-type'; import { SUBMISSION_CC_LICENSE_URL } from './models/submission-cc-licence-link.resource-type';
@Injectable() @Injectable()
@dataService(SUBMISSION_CC_LICENSE_URL) @dataService(SUBMISSION_CC_LICENSE_URL)

View File

@@ -1,19 +1,25 @@
<ds-select <div>
[label]="'submission.sections.general.collection'" <div ngbDropdown #collectionControls="ngbDropdown" class="btn-group input-group" (openChange)="toggled($event)">
<div class="input-group-prepend">
<span id="collectionControlsMenuLabel" class="input-group-text">
{{ 'submission.sections.general.collection' | translate }}
</span>
</div>
<button aria-describedby="collectionControlsMenuLabel"
id="collectionControlsMenuButton"
class="btn btn-outline-primary"
(blur)="onClose()"
(click)="onClose()"
[disabled]="(disabled$ | async) || (processingChange$ | async)" [disabled]="(disabled$ | async) || (processingChange$ | async)"
(toggled)="toggled($event)" ngbDropdownToggle>
(close)="onClose()"> <span *ngIf="(processingChange$ | async)"><i class='fas fa-circle-notch fa-spin'></i></span>
<span *ngIf="!(processingChange$ | async)">{{ selectedCollectionName$ | async }}</span>
</button>
<ng-container class="selection"> <div ngbDropdownMenu
<span *ngIf="(processingChange$ | async)"> class="dropdown-menu"
<i class='fas fa-circle-notch fa-spin'></i> id="collectionControlsDropdownMenu"
</span> aria-labelledby="collectionControlsMenuButton">
<span *ngIf="!(processingChange$ | async)">
{{ selectedCollectionName$ | async }}
</span>
</ng-container>
<ng-container class="menu">
<div class="form-group w-100 pr-2 pl-2"> <div class="form-group w-100 pr-2 pl-2">
<input *ngIf="searchField" <input *ngIf="searchField"
type="search" type="search"
@@ -39,6 +45,6 @@
</ul> </ul>
</button> </button>
</div> </div>
</ng-container> </div>
</div>
</ds-select> </div>

View File

@@ -26,7 +26,6 @@ import { PageInfo } from '../../../core/shared/page-info.model';
import { Collection } from '../../../core/shared/collection.model'; import { Collection } from '../../../core/shared/collection.model';
import { createTestComponent } from '../../../shared/testing/utils.test'; import { createTestComponent } from '../../../shared/testing/utils.test';
import { CollectionDataService } from '../../../core/data/collection-data.service'; import { CollectionDataService } from '../../../core/data/collection-data.service';
import { SharedModule } from '../../../shared/shared.module';
const subcommunities = [Object.assign(new Community(), { const subcommunities = [Object.assign(new Community(), {
name: 'SubCommunity 1', name: 'SubCommunity 1',
@@ -224,7 +223,6 @@ describe('SubmissionFormCollectionComponent Component', () => {
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
NgbModule, NgbModule,
SharedModule,
TranslateModule.forRoot() TranslateModule.forRoot()
], ],
declarations: [ declarations: [
@@ -368,8 +366,8 @@ describe('SubmissionFormCollectionComponent Component', () => {
comp.searchListCollection$ = observableOf(mockCollectionList); comp.searchListCollection$ = observableOf(mockCollectionList);
fixture.detectChanges(); fixture.detectChanges();
dropdowBtn = fixture.debugElement.query(By.css('#dsSelectMenuButton')); dropdowBtn = fixture.debugElement.query(By.css('#collectionControlsMenuButton'));
dropdownMenu = fixture.debugElement.query(By.css('#dsSelectDropdownMenu')); dropdownMenu = fixture.debugElement.query(By.css('#collectionControlsDropdownMenu'));
}); });
it('should have dropdown menu closed', () => { it('should have dropdown menu closed', () => {

View File

@@ -1,11 +1,10 @@
<div class="mb-4 ccLicense-select"> <div class="mb-4 ccLicense-select">
<ds-select <ds-select
[disabled]="!submissionCcLicenses" [disabled]="!submissionCcLicenses">
[label]="'submission.sections.ccLicense.type'">
<ng-container class="selection"> <ng-container class="selection">
<span *ngIf="!submissionCcLicenses"> <span *ngIf="!submissionCcLicenses">
<i class='fas fa-circle-notch fa-spin'></i> <ds-loading></ds-loading>
</span> </span>
<span *ngIf="getSelectedCcLicense()"> <span *ngIf="getSelectedCcLicense()">
{{ getSelectedCcLicense().name }} {{ getSelectedCcLicense().name }}
@@ -92,11 +91,13 @@
</span> </span>
</ng-container> </ng-container>
<ng-container class="menu"> <ng-container class="menu">
<div class="options-select-menu overflow-auto">
<button *ngFor="let option of field.enums" <button *ngFor="let option of field.enums"
class="dropdown-item" class="dropdown-item"
(click)="selectOption(getSelectedCcLicense(), field, option)"> (click)="selectOption(getSelectedCcLicense(), field, option)">
{{ option.label }} {{ option.label }}
</button> </button>
</div>
</ng-container> </ng-container>
</ds-select> </ds-select>
@@ -120,7 +121,7 @@
<ng-container *ngIf="getCcLicenseLink$()"> <ng-container *ngIf="getCcLicenseLink$()">
<ng-container *ngVar="getCcLicenseLink$() | async as licenseLink"> <ng-container *ngVar="getCcLicenseLink$() | async as licenseLink">
<div *ngIf="!licenseLink"> <div *ngIf="!licenseLink">
<i class='fas fa-circle-notch fa-spin m-2'></i> <ds-loading></ds-loading>
</div> </div>
<div *ngIf="licenseLink" <div *ngIf="licenseLink"
class="mt-2 p-4 bg-light text-dark"> class="mt-2 p-4 bg-light text-dark">

View File

@@ -0,0 +1,3 @@
.options-select-menu {
max-height: 25vh;
}

View File

@@ -1,22 +1,22 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SubmissionSectionCcLicensesComponent } from './submission-section-cc-licenses.component'; import { SubmissionSectionCcLicensesComponent } from './submission-section-cc-licenses.component';
import { SUBMISSION_CC_LICENSE } from '../../core/shared/submission-cc-licence.resource-type'; import { SUBMISSION_CC_LICENSE } from '../../../core/submission/models/submission-cc-licence.resource-type';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { SubmissionCcLicenseDataService } from '../../core/data/submission-cc-license-data.service'; import { SubmissionCcLicenseDataService } from '../../../core/submission/submission-cc-license-data.service';
import { DebugElement } from '@angular/core'; import { DebugElement } from '@angular/core';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
import { SharedModule } from '../shared.module'; import { SharedModule } from '../../../shared/shared.module';
import { SectionsService } from '../../submission/sections/sections.service'; import { SectionsService } from '../sections.service';
import { SectionDataObject } from '../../submission/sections/models/section-data.model'; import { SectionDataObject } from '../models/section-data.model';
import { SectionsType } from '../../submission/sections/sections-type'; import { SectionsType } from '../sections-type';
import { RemoteData } from '../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { PageInfo } from '../../core/shared/page-info.model'; import { PageInfo } from '../../../core/shared/page-info.model';
import { PaginatedList } from '../../core/data/paginated-list'; import { PaginatedList } from '../../../core/data/paginated-list';
import { SubmissionCcLicence } from '../../core/shared/submission-cc-license.model'; import { SubmissionCcLicence } from '../../../core/submission/models/submission-cc-license.model';
import { cold } from 'jasmine-marbles'; import { cold } from 'jasmine-marbles';
import { JsonPatchOperationsBuilder } from '../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
import { SubmissionCcLicenseUrlDataService } from '../../core/data/submission-cc-license-url-data.service'; import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service';
describe('SubmissionSectionCcLicensesComponent', () => { describe('SubmissionSectionCcLicensesComponent', () => {

View File

@@ -1,19 +1,19 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject } from '@angular/core';
import { Observable, of as observableOf, Subscription } from 'rxjs'; import { Observable, of as observableOf, Subscription } from 'rxjs';
import { Field, Option, SubmissionCcLicence } from '../../core/shared/submission-cc-license.model'; import { Field, Option, SubmissionCcLicence } from '../../../core/submission/models/submission-cc-license.model';
import { getRemoteDataPayload, getSucceededRemoteData } from '../../core/shared/operators'; import { getRemoteDataPayload, getSucceededRemoteData } from '../../../core/shared/operators';
import { distinctUntilChanged, filter, map } from 'rxjs/operators'; import { distinctUntilChanged, filter, map } from 'rxjs/operators';
import { SubmissionCcLicenseDataService } from '../../core/data/submission-cc-license-data.service'; import { SubmissionCcLicenseDataService } from '../../../core/submission/submission-cc-license-data.service';
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { renderSectionFor } from '../../submission/sections/sections-decorator'; import { renderSectionFor } from '../sections-decorator';
import { SectionsType } from '../../submission/sections/sections-type'; import { SectionsType } from '../sections-type';
import { SectionModelComponent } from '../../submission/sections/models/section.model'; import { SectionModelComponent } from '../models/section.model';
import { SectionDataObject } from '../../submission/sections/models/section-data.model'; import { SectionDataObject } from '../models/section-data.model';
import { SectionsService } from '../../submission/sections/sections.service'; import { SectionsService } from '../sections.service';
import { WorkspaceitemSectionCcLicenseObject } from '../../core/submission/models/workspaceitem-section-cc-license.model'; import { WorkspaceitemSectionCcLicenseObject } from '../../../core/submission/models/workspaceitem-section-cc-license.model';
import { JsonPatchOperationPathCombiner } from '../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { isNotEmpty } from '../empty.util'; import { isNotEmpty } from '../../../shared/empty.util';
import { JsonPatchOperationsBuilder } from '../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
/** /**
* This component represents the submission section to select the Creative Commons license. * This component represents the submission section to select the Creative Commons license.

View File

@@ -28,8 +28,7 @@ import { SubmissionSectionUploadFileViewComponent } from './sections/upload/file
import { SubmissionSectionUploadAccessConditionsComponent } from './sections/upload/accessConditions/submission-section-upload-access-conditions.component'; import { SubmissionSectionUploadAccessConditionsComponent } from './sections/upload/accessConditions/submission-section-upload-access-conditions.component';
import { SubmissionSubmitComponent } from './submit/submission-submit.component'; import { SubmissionSubmitComponent } from './submit/submission-submit.component';
import { storeModuleConfig } from '../app.reducer'; import { storeModuleConfig } from '../app.reducer';
import { CoreState } from '../core/core.reducers'; import { SubmissionSectionCcLicensesComponent } from './sections/cc-license/submission-section-cc-licenses.component';
import { SubmissionSectionCcLicensesComponent } from '../shared/submission-section-cc-licenses/submission-section-cc-licenses.component';
@NgModule({ @NgModule({
imports: [ imports: [

View File

@@ -2537,9 +2537,9 @@
"submission.sections.ccLicense.type": "License Type", "submission.sections.ccLicense.type": "License Type",
"submission.sections.ccLicense.select": "Select a license…", "submission.sections.ccLicense.select": "Select a license type…",
"submission.sections.ccLicense.change": "Change your license…", "submission.sections.ccLicense.change": "Change your license type…",
"submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "No licenses available",