UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

65 lines (64 loc) 2.72 kB
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); } }