Skip to content

Commit

Permalink
Create new class to manage common source/submitter behavior
Browse files Browse the repository at this point in the history
Fixes #759
  • Loading branch information
dickschoeller committed Jul 6, 2018
1 parent 2d3ab82 commit 184dca7
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 167 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
<p-button [styleClass]="'ui-button-danger'" (onClick)="delete()"
icon="fa fa-fw fa-trash" pTooltip="Delete attribute"></p-button>
<app-sources *ngIf="!href()"[parent]="this" [dataset]="dataset"></app-sources>
<app-submitters *ngIf="!href()"[parent]="this" [dataset]="dataset"></app-submitters>
</span>
</div>
<app-new-attribute-dialog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Component, OnInit, OnChanges, Input } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';

import { BaseDialog } from '../../bases';
import { LinkDialogInterface } from '../../interfaces';
import { LinkDialogData } from '../../models';

@Component({
Expand All @@ -11,7 +12,7 @@ import { LinkDialogData } from '../../models';
})
export class LinkDialogComponent
extends BaseDialog<LinkDialogData, LinkDialogComponent>
implements OnInit, OnChanges {
implements OnInit, OnChanges, LinkDialogInterface {
@Input() titleString: string;
dataset: string;
objects: Array<any>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { MenuItem, SelectItem } from 'primeng/api';

import { HasAttributeList } from '../../interfaces';
import { ApiObject, ApiSource, ApiAttribute, LinkDialogData, LinkItem } from '../../models';
import { SourceService, NewSourceLinkService } from '../../services';
import { UrlBuilder, NewSourceHelper, ApiComparators } from '../../utils';
import { SourceService, NewSourceLinkService, ServiceBase } from '../../services';
import { UrlBuilder, NewSourceHelper, ApiComparators, LinkHelper } from '../../utils';
import { LinkDialogComponent } from '../link-dialog';
import { NewSourceDialogComponent } from '../new-source-dialog';

Expand All @@ -15,7 +15,6 @@ import { NewSourceDialogComponent } from '../new-source-dialog';
styleUrls: ['./sources.component.css']
})
export class SourcesComponent extends SourceCreator {
// @Input() parentObject: ApiObject;
@Input() parent: HasAttributeList;
@Input() dataset: string;

Expand All @@ -27,17 +26,17 @@ export class SourcesComponent extends SourceCreator {
{
label: 'Add source',
icon: 'fa-plus-circle',
command: (event: Event) => { this.openCreateSourceDialog(); }
command: (event: Event) => this.displaySourceDialog = true
},
{
label: 'Link source',
icon: 'fa-link',
command: (event: Event) => { this.openLinkSourceDialog(); }
command: (event: Event) => this.displayLinkSourceDialog = true
},
{
label: 'Unlink source',
icon: 'fa-unlink',
command: (event: Event) => { this.openUnlinkSourceDialog(); }
command: (event: Event) => this.displayUnlinkSourceDialog = true
},
];

Expand Down Expand Up @@ -72,10 +71,6 @@ export class SourcesComponent extends SourceCreator {
this.parent.save();
}

openCreateSourceDialog() {
this.displaySourceDialog = true;
}

onSourceDialogClose() {
this.displaySourceDialog = false;
}
Expand All @@ -87,100 +82,37 @@ export class SourcesComponent extends SourceCreator {
}
}

openLinkSourceDialog() {
this.displayLinkSourceDialog = true;
}

onLinkSourceDialogClose() {
this.displayLinkSourceDialog = false;
}

onLinkSourceDialogOpen(dialog: LinkDialogComponent) {
this.sourceService.getAll(dialog.dataset).subscribe(
(value: ApiSource[]) => {
const comparator: ApiComparators = new ApiComparators();
dialog.objects = value;
dialog.objects.sort(comparator.compareSources);
dialog._data = new LinkDialogData();
let index = 0;
for (const source of dialog.objects) {
dialog._data.items.push({
index: index++,
id: source.string,
label: source.title + ' [' + source.string + ']'
});
}
}
(value: ApiSource[]) => this.lh().fillLinkData(dialog, value)
);
}

linkSource(data: LinkDialogData) {
for (const item of data.selected) {
const attribute: ApiAttribute = {
type: 'sourcelink',
string: item.id,
tail: '',
attributes: new Array<ApiAttribute>()
};
this.parent.attributes.push(attribute);
}
this.parent.save();
}

openUnlinkSourceDialog() {
this.displayUnlinkSourceDialog = true;
this.lh().link(data, this.parent.attributes, () => this.parent.save());
}

onUnlinkSourceDialogClose() {
this.displayUnlinkSourceDialog = false;
}

onUnlinkSourceDialogOpen(data: LinkDialogComponent) {
this.sourceService.getAll(data.dataset).subscribe(
(value: ApiSource[]) => {
const comparator: ApiComparators = new ApiComparators();
data.objects = value;
data.objects.sort(comparator.compareSources);
data._data = new LinkDialogData();
let index = 0;
for (const attribute of this.parent.attributes) {
if (attribute.type === 'sourcelink') {
index++;
data._data.items.push({
index: index,
id: attribute.string,
label: index + ' ' + this.find(attribute.string, data.objects) + ' [' + attribute.string + ']'
});
}
}
}
onUnlinkSourceDialogOpen(dialog: LinkDialogComponent) {
this.sourceService.getAll(dialog.dataset).subscribe(
(value: ApiSource[]) =>
this.lh().fillUnlinkData(dialog, value, this.parent.attributes)
);
}

private find(sourceId: string, sources: Array<ApiSource>): string {
for (const source of sources) {
if (source.string === sourceId) {
return source.title;
}
}
return undefined;
}

unlinkSource(data: LinkDialogData) {
for (const item of data.selected) {
this.spliceOutOneSource(item);
}
this.parent.save();
this.lh().unlink(data, this.parent.attributes, () => this.parent.save());
}

spliceOutOneSource(item: LinkItem) {
let index = 0;
for (const attribute of this.parent.attributes) {
if (attribute.string === item.id) {
this.parent.attributes.splice(index, 1);
break;
}
index++;
}
lh(): LinkHelper {
const comparators: ApiComparators = new ApiComparators();
return new LinkHelper((o: ApiSource) => o.title, comparators.compareSources, 'sourcelink');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { MenuItem, SelectItem } from 'primeng/api';
import { HasAttributeList } from '../../interfaces';
import { ApiObject, ApiSubmitter, ApiAttribute, LinkDialogData, LinkItem } from '../../models';
import { SubmitterService, NewSubmitterLinkService } from '../../services';
import { UrlBuilder, NewSubmitterHelper, ApiComparators } from '../../utils';
import { UrlBuilder, NewSubmitterHelper, ApiComparators, LinkHelper } from '../../utils';
import { LinkDialogComponent } from '../link-dialog';
import { NewSubmitterDialogComponent } from '../new-submitter-dialog';

Expand All @@ -27,17 +27,17 @@ export class SubmittersComponent extends SubmitterCreator {
{
label: 'Add submitter',
icon: 'fa-plus-circle',
command: (event: Event) => { this.openCreateSubmitterDialog(); }
command: (event: Event) => this.displaySubmitterDialog = true
},
{
label: 'Link submitter',
icon: 'fa-link',
command: (event: Event) => { this.openLinkSubmitterDialog(); }
command: (event: Event) => this.displayLinkSubmitterDialog = true
},
{
label: 'Unlink submitter',
icon: 'fa-unlink',
command: (event: Event) => { this.openUnlinkSubmitterDialog(); }
command: (event: Event) => this.displayUnlinkSubmitterDialog = true
},
];

Expand All @@ -49,7 +49,6 @@ export class SubmittersComponent extends SubmitterCreator {
}

submitterUB(): UrlBuilder {
// This would enable creating a submitter but not linking.
return new UrlBuilder(this.dataset, 'submitters');
}

Expand All @@ -72,10 +71,6 @@ export class SubmittersComponent extends SubmitterCreator {
this.parent.save();
}

openCreateSubmitterDialog() {
this.displaySubmitterDialog = true;
}

onSubmitterDialogClose() {
this.displaySubmitterDialog = false;
}
Expand All @@ -87,100 +82,37 @@ export class SubmittersComponent extends SubmitterCreator {
}
}

openLinkSubmitterDialog() {
this.displayLinkSubmitterDialog = true;
}

onLinkSubmitterDialogClose() {
this.displayLinkSubmitterDialog = false;
}

onLinkSubmitterDialogOpen(dialog: LinkDialogComponent) {
this.submitterService.getAll(dialog.dataset).subscribe(
(value: ApiSubmitter[]) => {
const comparator: ApiComparators = new ApiComparators();
dialog.objects = value;
dialog.objects.sort(comparator.compareSubmitters);
dialog._data = new LinkDialogData();
let index = 0;
for (const submitter of dialog.objects) {
dialog._data.items.push({
index: index++,
id: submitter.string,
label: submitter.name + ' [' + submitter.string + ']'
});
}
}
(value: ApiSubmitter[]) => this.lh().fillLinkData(dialog, value)
);
}

linkSubmitter(data: LinkDialogData) {
for (const item of data.selected) {
const attribute: ApiAttribute = {
type: 'submitterlink',
string: item.id,
tail: '',
attributes: new Array<ApiAttribute>()
};
this.parent.attributes.push(attribute);
}
this.parent.save();
}

openUnlinkSubmitterDialog() {
this.displayUnlinkSubmitterDialog = true;
this.lh().link(data, this.parent.attributes, () => this.parent.save());
}

onUnlinkSubmitterDialogClose() {
this.displayUnlinkSubmitterDialog = false;
}

onUnlinkSubmitterDialogOpen(data: LinkDialogComponent) {
this.submitterService.getAll(data.dataset).subscribe(
(value: ApiSubmitter[]) => {
const comparator: ApiComparators = new ApiComparators();
data.objects = value;
data.objects.sort(comparator.compareSubmitters);
data._data = new LinkDialogData();
let index = 0;
for (const attribute of this.parent.attributes) {
if (attribute.type === 'submitterlink') {
index++;
data._data.items.push({
index: index,
id: attribute.string,
label: index + ' ' + this.find(attribute.string, data.objects) + ' [' + attribute.string + ']'
});
}
}
}
onUnlinkSubmitterDialogOpen(dialog: LinkDialogComponent) {
this.submitterService.getAll(dialog.dataset).subscribe(
(value: ApiSubmitter[]) =>
this.lh().fillUnlinkData(dialog, value, this.parent.attributes)
);
}

private find(submitterId: string, submitters: Array<ApiSubmitter>): string {
for (const submitter of submitters) {
if (submitter.string === submitterId) {
return submitter.name;
}
}
return undefined;
}

unlinkSubmitter(data: LinkDialogData) {
for (const item of data.selected) {
this.spliceOutOneSubmitter(item);
}
this.parent.save();
this.lh().unlink(data, this.parent.attributes, () => this.parent.save());
}

spliceOutOneSubmitter(item: LinkItem) {
let index = 0;
for (const attribute of this.parent.attributes) {
if (attribute.string === item.id) {
this.parent.attributes.splice(index, 1);
break;
}
index++;
}
lh(): LinkHelper {
const comparators: ApiComparators = new ApiComparators();
return new LinkHelper((o: ApiSubmitter) => o.name, comparators.compareSubmitters, 'submitterlink');
}
}
1 change: 1 addition & 0 deletions gedbrowserng-frontend/src/app/interfaces/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './refresh-person';
export * from './refresh-source';
export * from './refresh-submitter';
export * from './saveable';
export * from './link-dialog-interface';
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { LinkDialogData } from '../models';

export interface LinkDialogInterface {
titleString: string;
dataset: string;
objects: Array<any>;
_data: LinkDialogData;
}
1 change: 1 addition & 0 deletions gedbrowserng-frontend/src/app/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ export * from './new-person-helper';
export * from './new-source-helper';
export * from './new-submitter-helper';
export * from './link-person-helper';
export * from './link-helper';
Loading

0 comments on commit 184dca7

Please sign in to comment.