lemmatized-entity-relation.component.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { Component, Input } from '@angular/core';
  2. import { Observable } from 'rxjs';
  3. import { map } from 'rxjs/operators';
  4. import { LemmatizedEntity, Relation } from '../../models/evt-models';
  5. import { register } from '../../services/component-register.service';
  6. import { EVTModelService } from '../../services/evt-model.service';
  7. @register(Relation)
  8. @Component({
  9. selector: 'evt-lemmatized-entity-relation',
  10. templateUrl: './lemmatized-entity-relation.component.html',
  11. styleUrls: ['./lemmatized-entity-relation.component.scss'],
  12. })
  13. export class LemmatizedEntityRelationComponent {
  14. @Input() data: Relation;
  15. @Input() inEntity: boolean;
  16. selectedEntity: LemmatizedEntity;
  17. activeParts$ = this.getEntities('activeParts');
  18. mutualParts$ = this.getEntities('mutualParts');
  19. passiveParts$ = this.getEntities('passiveParts');
  20. constructor(
  21. private evtModelService: EVTModelService,
  22. ) {
  23. }
  24. toggleEntity(entity: LemmatizedEntity) {
  25. // TODO: if inEntity, then open entity in list
  26. if (!this.inEntity) {
  27. if (this.selectedEntity === entity) {
  28. this.selectedEntity = undefined;
  29. } else {
  30. this.selectedEntity = entity;
  31. }
  32. }
  33. }
  34. private getEntities(partIdsGroup: 'activeParts' | 'mutualParts' | 'passiveParts'):
  35. Observable<Array<{ id: string; entity: LemmatizedEntity; label: string }>> {
  36. return this.evtModelService.lemmatizedEntities$.pipe(
  37. map(ne => this.data[partIdsGroup].map(entityId => {
  38. const entity = ne.all.entities.find(e => e.id === entityId);
  39. return {
  40. id: entityId,
  41. entity,
  42. get label() {
  43. return (entity ? entity.label : entityId);
  44. },
  45. };
  46. })),
  47. map(neslem => neslem.filter(e => !!e)),
  48. );
  49. }
  50. }