@giancosta86/omnicourse-core
Version:
Core model for OmniCourse
47 lines • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Subject = void 0;
const Work_1 = require("./Work");
const SubjectSet_1 = require("./SubjectSet");
const WorkSet_1 = require("./WorkSet");
class Subject {
static create(locale, name, items) {
const firstItem = items[Symbol.iterator]().next();
if (firstItem.done) {
throw new Error(`No items for subject '${name}'`);
}
const hasSubjects = firstItem.value instanceof Subject;
const itemSet = hasSubjects
? SubjectSet_1.SubjectSet.createSorted(locale, items).assumeNonEmpty()
: WorkSet_1.WorkSet.createSorted(locale, items).assumeNonEmpty();
return new Subject(name, itemSet);
}
static equals(left, right) {
const basicEquality = left.name === right.name &&
left.containsSubjects === right.containsSubjects &&
left.totalMinutes === right.totalMinutes;
if (!basicEquality) {
return false;
}
return left.containsSubjects
? left.items
.stream()
.equals(right.items, Subject.equals)
: left.items
.stream()
.equals(right.items, Work_1.Work.equals);
}
constructor(name, items) {
this.name = name;
this.items = items;
if (!name) {
throw new Error("Empty subject name");
}
this.totalMinutes = items
.stream()
.fold(0, (cumulatedMinutes, item) => cumulatedMinutes + item.totalMinutes);
this.containsSubjects = items.getAtIndex(0) instanceof Subject;
}
}
exports.Subject = Subject;
//# sourceMappingURL=Subject.js.map