import { JsonElement } from '@pbkware/js-utils'; import { RevSourcedFieldCustomHeadings } from '../../../sourced-field/sourced-field/server'; /** @public */ export class RevStandardSourcedFieldCustomHeadingsService implements RevSourcedFieldCustomHeadings { // private cachedHeadingIniFile: TMemIniFile; // private headingIniFileCachingEnabled: boolean; private saveRequired = false; // a map within a map. Map of Sources where each source contains a map of fields private sourceMap = new Map>(); tryGetFieldHeading(sourceName: string, fieldName: string): string | undefined { const source = this.sourceMap.get(sourceName); return source === undefined ? undefined : source.get(fieldName); } setFieldHeading(sourceName: string, fieldName: string, text: string) { let source = this.sourceMap.get(sourceName); if (source === undefined) { source = new Map(); } source.set(fieldName, text); this.saveRequired = true; } load() { const rootElement = new JsonElement(); // load rootElement from storage // todo this.sourceMap.clear(); rootElement.forEachElement((sourceName: string, sourceElement: JsonElement) => { const fieldMap = new Map(); this.loadSource(sourceElement, fieldMap); this.sourceMap.set(sourceName, fieldMap); }); this.saveRequired = false; } checkSave() { if (this.saveRequired) { this.save(); } } save() { const rootElement = new JsonElement(); this.sourceMap.forEach((value: Map, key: string) => this.saveSource(rootElement, key, value)); // save to storage // todo this.saveRequired = false; } private loadSource(sourceElement: JsonElement, fieldMap: Map) { sourceElement.forEachString((fieldName: string, heading: string) => { fieldMap.set(fieldName, heading); }); } private saveSource(rootElement: JsonElement, sourceName: string, fieldMap: Map) { const sourceElement = new JsonElement(); fieldMap.forEach((heading: string, fieldName: string) => sourceElement.setString(fieldName, heading)); // field name and heading rootElement.setElement(sourceName, sourceElement); } }