ilios/frontend

View on GitHub
packages/frontend/app/components/reports/subject/new/academic-year.js

Summary

Maintainability
A
0 mins
Test Coverage
import Component from '@glimmer/component';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import { service } from '@ember/service';
import { task, timeout } from 'ember-concurrency';

export default class ReportsSubjectNewAcademicYearComponent extends Component {
  @service store;
  @service iliosConfig;

  @cached
  get data() {
    return new TrackedAsyncData(this.store.findAll('academic-year'));
  }

  crossesBoundaryConfig = new TrackedAsyncData(
    this.iliosConfig.itemFromConfig('academicYearCrossesCalendarYearBoundaries'),
  );

  @cached
  get academicYearCrossesCalendarYearBoundaries() {
    return this.crossesBoundaryConfig.isResolved ? this.crossesBoundaryConfig.value : false;
  }

  get academicYears() {
    return this.data.value;
  }

  get isLoaded() {
    return this.data.isResolved;
  }

  @task
  *setInitialValue() {
    yield timeout(1); //wait a moment so we can render before setting
    const ids = this.academicYears.map(({ id }) => id);
    if (ids.includes(this.args.currentId)) {
      return;
    }
    if (!this.academicYears.length) {
      this.args.changeId(null);
    } else {
      this.args.changeId(this.academicYears[0].id);
    }
  }
}