private computeNewJSON()

in labextension/src/components/ParameterEditor.tsx [194:227]


  private computeNewJSON(updateMetadata: boolean): void {
    let valid = true;
    const seen: Set<string> = new Set<string>();
    const result: ParameterKV[] = [];
    const nameErrors: ParameterEntryErrors = {};
    const valueErrors: ParameterEntryErrors = {};

    this.state.parameters.forEach((element, idx) => {
      if (element.name.length === 0) {
        valid = false;
        nameErrors[idx] = 'Name must be specified';
      } else {
        if (element.name in seen) {
          valid = false;
          nameErrors[idx] = 'Duplicate parameter';
        } else {
          let val = element.value;
          // this mostly exists to let folks pass numbers as numbers, but in theory they can pass any JSON through.
          try {
            val = JSON.parse(val);
          } catch (SyntaxError) {} // eslint-disable-line  no-empty
          result.push({ name: element.name, value: val });
          seen.add(element.name);
        }
      }
    });
    this.parametersObject = valid ? result : null;
    this.nameErrors = nameErrors;
    this.valueErrors = valueErrors;
    this.onChange(this);
    if (updateMetadata) {
      this.setSavedParameters();
    }
  }