UNPKG

jalhyd

Version:

JaLHyd, a Javascript Library for Hydraulics

182 lines 5.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Props = exports.Prop_NullParameters = exports.enumValueFromString = void 0; const lodash_1 = require("lodash"); const internal_modules_1 = require("./internal_modules"); /** * get enum numerical value from enum class name and value as a string * @param enumClass enum class name * @param enumValueName enum value as a string * @returns enum numerical value */ function enumValueFromString(enumClass, enumValueName) { // !! property names must be unique throughout JaLHyd !! const enumValues = Props.enumFromProperty[enumClass]; if (enumValues) { return enumValues[enumValueName]; } throw new Error("unknown enum class ${enumClass}"); } exports.enumValueFromString = enumValueFromString; /** * represents a boolean: true if provided value at parameter creation must be ignore (@see nghyd/enableEmptyFieldsOnFormInit) */ exports.Prop_NullParameters = "nullparams"; /** * gestion d'un ensemble de propriétés (clé/valeur) qui prévient quand * l'une d'entre-elles change */ class Props { constructor(prps) { // object literal representing properties keys and values this._map = {}; this._observable = new internal_modules_1.Observable(); if (prps !== undefined) { if (Props.implementsIProperties(prps)) { this.copyIProperties(prps); } else this._map = (0, lodash_1.cloneDeep)(prps); } } /** * @returns true if an object implements the IProperties interface */ static implementsIProperties(o) { return "getPropValue" in o && "setPropValue" in o && "hasProperty" in o && "keys" in o; } /** * set properties map from an IProperties */ copyIProperties(p) { this._map = {}; for (const k of p.keys) { this._map[k] = p.getPropValue(k); } } get keys() { return Object.keys(this._map); } getPropValue(key) { return this._map[key]; } setPropValue(key, val, sender) { if (key === undefined) { throw new Error("setPropValue : undefined key!"); } const oldValue = this._map[key]; const changed = oldValue !== val; if (changed) { this._map[key] = val; this.notifyPropChange(key, val, sender); } return changed; } removeProp(key) { delete this._map[key]; } hasProperty(key) { return true; } getObservers() { return this._observable.getObservers(); } /** * Remove all properties, does not notify of any change */ reset() { this._map = {}; } /** * Clones properties into a new Props object */ clone() { return new Props(this); } toString() { let res = "["; for (const k in this._map) { if (this._map.hasOwnProperty(k)) { if (res !== "[") { res += ", "; } res += `${k}:${this._map[k]}`; } } res += "]"; return res; } // interface IObservable /** * ajoute un observateur à la liste */ addObserver(o) { this._observable.addObserver(o); } /** * supprime un observateur de la liste */ removeObserver(o) { this._observable.removeObserver(o); } /** * notifie un événement aux observateurs */ notifyObservers(data, sender) { this._observable.notifyObservers(data, sender); } /** * notification de changement de la valeur d'une propriété * @param prop nom de la propriété modifiée * @param val nouvelle valeur * @param sender objet ayant changé la valeur */ notifyPropChange(prop, val, sender) { this.notifyObservers({ action: "propertyChange", name: prop, value: val }, sender); } /** * Returns a copy of given map, inverting enum keys and values */ static invertEnumKeysAndValuesInProperties(stringProps, forceNumbers = false) { const res = JSON.parse(JSON.stringify(stringProps)); // clone for (const k in res) { if (!forceNumbers || !(0, internal_modules_1.isNumeric)(res[k])) { if (Object.keys(Props.enumFromProperty).includes(k)) { const enumClass = Props.enumFromProperty[k]; res[k] = enumClass[res[k]]; } } } return res; } invertEnumKeysAndValues(forceNumbers = false) { return Props.invertEnumKeysAndValuesInProperties(this._map, forceNumbers); } } exports.Props = Props; /** correspondance entre les noms de propriétés et les enum associés */ Props.enumFromProperty = { calcType: internal_modules_1.CalculatorType, divingJetSupported: internal_modules_1.DivingJetSupport, gridProfile: internal_modules_1.GrilleProfile, gridType: internal_modules_1.GrilleType, inclinedApron: internal_modules_1.MRCInclination, loiDebit: internal_modules_1.LoiDebit, material: internal_modules_1.LCMaterial, methodeResolution: internal_modules_1.MethodeResolution, nodeType: internal_modules_1.SectionType, parType: internal_modules_1.ParType, pressureLossType: internal_modules_1.PressureLossType, regime: internal_modules_1.BiefRegime, species: internal_modules_1.FishSpecies, sppOperation: internal_modules_1.SPPOperation, structureType: internal_modules_1.StructureType, trigoOperation: internal_modules_1.TrigoOperation, trigoUnit: internal_modules_1.TrigoUnit, rugofondType: internal_modules_1.RugofondType }; //# sourceMappingURL=props.js.map