Skip to content
Snippets Groups Projects
Commit c4a134fd authored by François Grand's avatar François Grand
Browse files

fix: calculated parameter not properly reset when deleting a child nub

refs #321
parent 637549c8
No related branches found
No related tags found
No related merge requests found
......@@ -305,24 +305,38 @@ export abstract class Nub extends ComputeNode implements IObservable {
*
* If no default calculated parameter is defined, does nothing.
*/
public resetDefaultCalculatedParam(requirer?: ParamDefinition) {
public resetDefaultCalculatedParam(requirer?: ParamDefinition, force: boolean = false) {
if (this._defaultCalculatedParam) {
// if default calculated param is not eligible to CALC mode
if (
requirer === this._defaultCalculatedParam
|| this._defaultCalculatedParam.valueMode === ParamValueMode.LINK
) {
// first SINGLE calculable parameter if any
const newCalculatedParam = this.findFirstCalculableParameter(requirer);
if (newCalculatedParam) {
this.calculatedParam = newCalculatedParam;
// if forced, first check there is not already another parameter
// in calculated mode (eg. in a sibling nub)
let doReset = true;
if (force) {
for (const p of this._prms) {
if (p.valueMode == ParamValueMode.CALCUL && (p !== requirer || requirer === undefined)) {
doReset = false;
break;
}
}
}
if (doReset) {
// if default calculated param is not eligible to CALC mode
if (
requirer === this._defaultCalculatedParam
|| this._defaultCalculatedParam.valueMode === ParamValueMode.LINK
) {
// first SINGLE calculable parameter if any
const newCalculatedParam = this.findFirstCalculableParameter(requirer);
if (newCalculatedParam) {
this.calculatedParam = newCalculatedParam;
} else {
// @TODO throws when a new linkable nub is added, and all parameters are already linked !
throw Error("resetDefaultCalculatedParam : could not find any SINGLE/MINMAX/LISTE parameter");
}
} else {
// @TODO throws when a new linkable nub is added, and all parameters are already linked !
throw Error("resetDefaultCalculatedParam : could not find any SINGLE/MINMAX/LISTE parameter");
// default one
this.calculatedParam = this._defaultCalculatedParam;
}
} else {
// default one
this.calculatedParam = this._defaultCalculatedParam;
}
} else {
// do nothing (ex: Section Paramétrée)
......@@ -1501,6 +1515,7 @@ export abstract class Nub extends ComputeNode implements IObservable {
public deleteChild(index: number) {
if (index > -1) {
this._children.splice(index, 1);
this.resetDefaultCalculatedParam(undefined, true);
} else {
throw new Error(`${this.constructor.name}.deleteChild invalid index=${index}`);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment