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 --;
}
}
}
}