Formate-con-Altia / valida.me

Validar formularios
GNU General Public License v3.0
3 stars 8 forks source link

Crear parser de HTML a JSON #4

Closed omiras closed 2 years ago

omiras commented 2 years ago

Objetivo y análisis

<div class="mb-3" draggable="false" style=""> <label class="fw-bold form-label">Nombre</label> <input type="text" name="name" class="form-control"> </div><div class="mb-3" draggable="false" style=""> <label class="fw-bold form-label">Teléfono</label> <input type="tel" name="tel" class="form-control"> </div><div class="mb-3 sortable-chosen sortable-ghost" draggable="true" style="transform: translateZ(0px);"> <label class="fw-bold form-label">Email</label> <input type="email" name="email" class="form-control"> </div>
const responseSchema = new Schema({
  fieldValues: Mixed
})

const controlSchema = new Schema({
  type: {
    type: String,
    enum: ['input', 'textarea', 'select']
  },
  maxlength: Number,
  required: Boolean,
  responses: [responseSchema]
})

const formSchema = new Schema({
  html: String,
  slug: String,
  fields: [controlSchema]

});
aaronaira commented 2 years ago

Incluimos función helper slugify() para generar names dinámicos en función del label

arlomba commented 2 years ago

Esquema de la Base de datos

Cada formulario será un array de campos, y cada campo se guardará con el tipo, de input nombre y texto. El nombre e id del input se genera según la posición del campo, por ejemplo nombre[0], telefono[1], email[2].

const fieldSchema = new Schema({
  input: {
    type: String,
    enum: ["tel", "text", "email", "file", "textarea"],
  },
  name: String,
  label: String,
});

const formSchema = new mongoose.Schema({
  fields: [fieldSchema],
});

Bibliotecas

Después de explorar varias propuestas en Openbase, nos hemos decantado por node-html-parser, es rápida, sencilla de utilizar e implementa las DOM APIs propias de los navegadores.

omiras commented 2 years ago

Creación de los tests para probarl a issue @arlomba .