packages/frontend/app/components/reports/subject/session-type.js
import Component from '@glimmer/component';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import { service } from '@ember/service';
import { pluralize } from 'ember-inflector';
import { camelize } from '@ember/string';
export default class ReportsSubjectSessionTypeComponent extends Component {
@service graphql;
@service intl;
@cached
get data() {
return new TrackedAsyncData(
this.getReportResults(
this.args.subject,
this.args.prepositionalObject,
this.args.prepositionalObjectTableRowId,
this.args.school,
),
);
}
get sortedData() {
return this.data.value.sort((a, b) => {
return a.localeCompare(b, this.intl.primaryLocale);
});
}
async getGraphQLFilters(prepositionalObject, prepositionalObjectTableRowId, school) {
let rhett = [];
if (school) {
rhett.push(`schools: [${school.id}]`);
}
if (prepositionalObject && prepositionalObjectTableRowId) {
let what = pluralize(camelize(prepositionalObject));
if (prepositionalObject === 'mesh term') {
what = 'meshDescriptors';
prepositionalObjectTableRowId = `"${prepositionalObjectTableRowId}"`;
}
rhett.push(`${what}: [${prepositionalObjectTableRowId}]`);
}
return rhett;
}
async getReportResults(subject, prepositionalObject, prepositionalObjectTableRowId, school) {
if (subject !== 'session type') {
throw new Error(`Report for ${subject} sent to ReportsSubjectSessionTypeComponent`);
}
const filters = await this.getGraphQLFilters(
prepositionalObject,
prepositionalObjectTableRowId,
school,
);
const result = await this.graphql.find('sessionTypes', filters, 'title');
return result.data.sessionTypes.map(({ title }) => title);
}
}