private _setDataForKey()

in src/ui/editor/complex/AMatrix.tsx [46:106]


  private _setDataForKey(data:any, key:string, value:string, yyClosed: (string|boolean|number)[]){
    const maxX = this.props.schema.matrix?.maxX ?? 1;
    const maxY = this.props.schema.matrix?.maxY ?? Number.MAX_VALUE;

    // 预先处理好开放选项
    let prevValues;
    let actualKey;
    if(!key) { // 设置开放选项
      // 先找到原来的开放选项并删除掉,因为key可能会变的
      const prevOpenKey = _openKey(data, yyClosed);
      if(!_.isNil(prevOpenKey)) {
        prevValues = data[prevOpenKey];
        delete data[prevOpenKey];
      }

      actualKey = this._inputBoxValue ?? ""; 
      if(prevValues) {
        data[actualKey] = prevValues;
      }
    } else { // 设置备选项
      actualKey = key; 
      prevValues = data[key];
    }

    // 再考虑maxX的情况下,设置数据
    switch(typeof prevValues) {
      case "undefined":
        data[actualKey] = value;
        break;
      case "string"://"..."
        if(maxX === 1) {
          data[actualKey] = value;
        } else {
          data[actualKey] = [prevValues, value];
        }
        break;
      case "object":// ["...","..."]
        if(prevValues.length >= maxX) {
          data[actualKey].shift(); 
        }
        data[actualKey] = [...prevValues, value];
        break;
    }

    // 再考虑maxY,如果超了,要去掉一个勾
    let n = 0;
    for(let key in data) {
      const row = data[key];
      if(row === value || row?.includes(value)){
        n ++;
        if(n >= maxY && key !== actualKey){
          if(data[key] === value){
            delete data[key];
          } else {
            data[key] = MUtil.arrayRemove(data[key], value);
          }
          n --;
        }
      }
    }
  }