element()

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