@rr0/cms
Version:
RR0 Content Management System (CMS)
65 lines (64 loc) • 2.72 kB
JavaScript
import { StringUtil } from "../util/string/StringUtil.js";
import assert from "assert";
import { FileContents } from "@javarome/fileutil";
import { AbstractDataService } from "@rr0/data";
export class OrganizationService extends AbstractDataService {
constructor(dataService, factory, config, parentService, orgs) {
super(dataService, factory, config.files);
this.config = config;
this.parentService = parentService;
this.orgs = orgs;
}
static normalizeName(name) {
return StringUtil.removeAccents(name.toLowerCase().replaceAll(" ", "-"));
}
getById(code, parent = undefined) {
return this.orgs.find(org => {
const foundParent = !parent || org.parent === parent;
const foundOrg = org.id === code ? org : undefined;
const found = foundParent && foundOrg;
return found ? org : undefined;
});
}
/**
* @param context
* @param nameToFind
* @param parent should be context.placeContext
*/
find(context, nameToFind, parent) {
let foundOrg = this.orgs.find(someOrg => {
const someOrgMessages = someOrg.getMessages(context);
assert.ok(someOrgMessages, `Organization with code "${someOrg.id}" has no messages`);
let found;
const someNameToFind = this.nameToFind(context, someOrg, nameToFind);
const hasParent = Boolean(parent === null || parent === void 0 ? void 0 : parent.id);
const parentCheck = !hasParent || parent.id === someOrg.parent.id;
if (parentCheck) {
let foundName;
for (let i = 0; !foundName && i < someOrgMessages.titles.length; i++) {
const depName = OrganizationService.normalizeName(someOrgMessages.toTitleFromName(context, someOrg, someOrgMessages.titles[i], { parent: false }));
const depCityName = OrganizationService.normalizeName(depName);
foundName = depCityName === someNameToFind;
}
found = foundName;
}
else {
found = false;
}
return found ? someOrg : undefined;
});
if (this.parentService && !foundOrg) {
foundOrg = this.parentService.find(context, nameToFind, undefined);
}
return foundOrg;
}
async read(fileName) {
const file = FileContents.read(this.config.rootDir + fileName);
const org = this.factory.createFromFile(file);
this.orgs.push(org);
return org;
}
nameToFind(context, org, nameToFind) {
return OrganizationService.normalizeName(nameToFind);
}
}