Yrkki/cv-generator-fe

View on GitHub
src/app/components/language/language.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2018 Georgi Marinov
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import { Component, AfterViewInit, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';

import { PropertyComponent } from '../property/property.component';
import { PortfolioService } from '../../services/portfolio/portfolio.service';
import { InputService } from '../../services/input/input.service';
import { UiService } from '../../services/ui/ui.service';
import { DataService } from '../../services/data/data.service';
import { ExcelDateFormatterService } from '../../services/excel-date-formatter/excel-date-formatter.service';
import { ChartService } from '../../services/chart/chart.service';

import { ResponsiveChangedEvent } from '../../interfaces/events/responsive-changed-event';

/**
 * Language component.
 * ~extends {@link PropertyComponent}
 * ~implements {@link OnInit}
 * ~implements {@link OnDestroy}
 * ~implements {@link AfterViewInit}
 */
@Component({
  selector: 'app-language',
  templateUrl: './language.component.html',
  styleUrls: ['./language.component.scss']
})
export class LanguageComponent extends PropertyComponent implements OnInit, OnDestroy, AfterViewInit {
  /** The component key */
  public key = 'Language';

  /** Responsive modelChanged subscription. */
  private responsiveModelChanged: Subscription | undefined;

  /**
   * Constructs a Language component.
   * ~constructor
   *
   * @param chartService The chart service injected dependency.
   * @param portfolioService The portfolio service injected dependency.
   * @param inputService The input service injected dependency.
   * @param uiService The ui service injected dependency.
   * @param dataService The data service injected dependency.
   * @param excelDateFormatterService The Excel date formatter service injected dependency.
   */
  constructor(
    private readonly chartService: ChartService,
    public override readonly portfolioService: PortfolioService,
    public override readonly inputService: InputService,
    public override readonly uiService: UiService,
    public override readonly dataService: DataService,
    public override readonly excelDateFormatterService: ExcelDateFormatterService,
  ) {
    super(portfolioService, inputService, uiService, dataService, excelDateFormatterService);
  }

  /** Subscription */
  ngOnInit() {
    this.responsiveModelChanged = this.portfolioService.subscribe('RM', (_: ResponsiveChangedEvent) => this.onResponsiveToggled(_));
  }
  /** Cleanup */
  ngOnDestroy() { this.responsiveModelChanged?.unsubscribe(); }

  /** Initialization */
  ngAfterViewInit() {
    this.Initialize();
  }

  /** Initialization */
  Initialize() {
    this.drawLanguageChart();
  }

  /** Draws a language chart */
  private drawLanguageChart() {
    if (typeof this.portfolioService.model.cv !== 'undefined' && this.portfolioService.model.cv != null) {
      const chartType = 'Language';
      const data = this.portfolioService.model.cv.Languages;

      this.chartService.chartModel.chartLoaded[chartType] = false;
      this.chartService.drawChart(chartType,
        this.chartService.addLanguageChart(data, this.portfolioService.toolbarService.responsive('Languages Chart')));
    }
  }

  /** Responsive toggled event handler. */
  private onResponsiveToggled(event: ResponsiveChangedEvent) {
    if (event.sourceEntityKey !== 'Languages Chart') { return; }

    this.drawLanguageChart();
  }
}