in src/ui/editor/complex/AArray.tsx [47:99]
element() {
const schema = this.props.schema;
const memberSchema = schema.arrayMember;
if(!memberSchema) {
return MUtil.error(`缺少arrayMember属性`, schema);
}
if(memberSchema.type === "object" || memberSchema.type==="string"){
const data:any[] = super.getValue() ?? [];
const isMax = data.length >= (schema.max ?? Number.MAX_VALUE);
const min = schema.min ?? 0;
const max = schema.max ?? Number.MAX_VALUE;
if(memberSchema.type === "string") {
const n = Math.max(min, data.length);
const removeButton = max === min ? undefined : n > min;
let arr = [];
for(let i = 0; i < n; i ++) {
arr.push(this._renderItem(memberSchema, data[i], i, removeButton));
}
if(n < max) {
arr.push(<div key=":add" className="AArray_addBtn">
<Button key=":加一项按钮" onClick={() => {
const d = super.getValue() ?? [];
while(d.length < n+1){
d.push(undefined);
}
super.changeValue(d);
}}>{schema.arrayAddLabel ?? "+"}</Button>
</div>)
}
return arr;
} else {
return <List
bordered
footer={<Button disabled={isMax} key=":加一项按钮" onClick={()=>{
data.push(
assembly.types[schema.arrayMember.type]?.createDefaultValue(assembly, schema.arrayMember)
);
super.changeValue(data);
}} >增加一项</Button>}
dataSource={data}
renderItem={ (valueItem,index) => {
let noRemoveBtn = NO_REMOVE_BTN[memberSchema.type] // 为了美观,某些数组元素不需要关闭按钮
if(schema.min && schema.min === schema.max){ // 最大项数=最小项数时,不要删除按钮
noRemoveBtn = true;
}
return <List.Item key={index}>
{this._renderItem(memberSchema, valueItem, index, !noRemoveBtn)}
</List.Item>
}}/>;
}