lem-entry-detail.component.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import {ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
  2. import { LemEntry, Reading, GenericElement } from './../../../models/evt-models';
  3. import { register } from 'src/app/services/component-register.service';
  4. import { EVTModelService } from '../../../services/evt-model.service';
  5. @Component({
  6. selector: 'evt-lem-entry-detail',
  7. templateUrl: './lem-entry-detail.component.html',
  8. styleUrls: ['./lem-entry-detail.component.scss'],
  9. changeDetection: ChangeDetectionStrategy.OnPush,
  10. })
  11. @register(LemEntryDetailComponent)
  12. export class LemEntryDetailComponent implements OnInit {
  13. @Input() data: LemEntry;
  14. nestedLems: LemEntry [] = [];
  15. rdgHasCounter = false;
  16. get significantRdg(): Reading[] {
  17. return this.data.readings.filter((rdg) => rdg.significant);
  18. }
  19. get notSignificantRdg(): Reading[]{
  20. return this.data.readings.filter((rdg) => !rdg.significant);
  21. }
  22. get readings(): Reading[] {
  23. return [this.data.lemma, ...this.significantRdg, ...this.notSignificantRdg]
  24. }
  25. get rdgMetadata() {
  26. return Object.keys(this.data.attributes).filter((key) => key !== 'id')
  27. .reduce((obj, key) => ({
  28. ...obj,
  29. [key]: this.data.attributes[key],
  30. }), {});
  31. }
  32. constructor(
  33. public evtModelService: EVTModelService,
  34. ) {
  35. }
  36. ngOnInit() {
  37. if (this.data.nestedLemsIDs.length > 0) {
  38. this.recoverNestedLems(this.data);
  39. }
  40. }
  41. recoverNestedLems(lem: LemEntry) {
  42. const nesLems = lem.lemma.content.filter((c: LemEntry | GenericElement) => c.type === LemEntry);
  43. nesLems.forEach((nesLem: LemEntry) => {
  44. this.nestedLems = this.nestedLems.concat(nesLem);
  45. if (nesLem.nestedLemsIDs.length > 0) {
  46. this.recoverNestedLems(nesLem);
  47. }
  48. });
  49. }
  50. isLemEntry (item: GenericElement | LemEntry): boolean {
  51. return item.type === LemEntry;
  52. }
  53. getNestedLemLemma(lemId: string): Reading {
  54. return this.nestedLems.find((c) => c.id === lemId).lemma;
  55. }
  56. getNestedLemPos(lemId: string): number {
  57. return this.nestedLems.findIndex((nesLem) => nesLem.id === lemId);
  58. }
  59. }
  60. []