ConfigForm = ({
  fields,
  configuration,
  setProp,
  setter,
  node,
  onChange,
  tableName,
  fieldName,
}) => (
  <div>
    {fields.map((f, ix) => {
      if (f.showIf && configuration) {
        let noshow = false;
        Object.entries(f.showIf).forEach(([nm, value]) => {
          if (Array.isArray(value))
            noshow = noshow || !value.includes(configuration[nm]);
          else noshow = noshow || value !== configuration[nm];
        });
        if (noshow) return null;
      }
      return (
        <div key={ix} className="builder-config-field" data-field-name={f.name}>
          {!isCheckbox(f) ? (
            <label>
              {f.label || f.name}
              {f.help ? (
                <HelpTopicLink
                  topic={f.help.topic}
                  field_name={fieldName}
                  table_name={tableName}
                />
              ) : null}
            </label>
          ) : null}
          <ConfigField
            field={f}
            setter={setter}
            configuration={configuration}
            setProp={setProp}
            onChange={onChange}
          />
          {f.sublabel ? (
            <i
              className="small"
              dangerouslySetInnerHTML={{ __html: f.sublabel }}
            ></i>
          ) : null}
          {isCheckbox(f) && f.help ? (
            <HelpTopicLink
              topic={f.help.topic}
              fieldName={fieldName}
              tableName={tableName}
            />
          ) : null}
        </div>
      );
    })}
    <br />
  </div>
)
@param {object} props
@param {object[]} props.fields
@param {object} props.configuration
@param {function} props.setProp
@param {object} props.node
@param {function} props.onChange
@returns {div}
@category saltcorn-builder
@subcategory components / elements / utils
@namespace