# CheckList ## Definición Archivo: `induxsoft.controls.js` Es un componente que ofrece una interfaz que permite al usuario manipular cada elemento como una lista de tareas. ## Ejemplos Maquetación HTML mínima ```html ``` Este es un ejemplo con todos los atributos que pueden establecerse. ```html ``` **Ejemplos de uso con JavaScript** Inicializar componente. ```js function inicializar() { const lista = document.getElementById("lista"); lista.locked = false; lista.doneStyle = 0; lista.radioStyle = false; lista.hideHeader = false; lista.canAdd = true; lista.canEdit = true; lista.canRemove = true; lista.canMove = true; lista.canCheck = false; } document.addEventListener("DOMContentLoaded", () => { inicializar(); }); ``` Establecer elementos a la lista. ```js function establecer() { const lista = document.getElementById("lista"); let data = { text: "Lista de compras", items: [ {id:"1", text:"3 Tomates", done:false}, {id:"2", text:"1 Cebolla", done:false}, {id:"3", text:"3 Habaneros", done:false}, {id:"4", text:"4 Huevos", done:false}, {id:"5", text:"4 Naranjas", done:true} ] }; lista.setData(data); } establecer(); ``` Obtener los datos del componente. ```js const lista = document.getElementById("lista"); let data = lista.getData(); console.log(data); // Salida esperada: {text:"", items:[{id:"", text:"", done:false, _meta:{percent:0, progress:100}}, ...]} ``` Obtener un elemento de la lista. ```js const lista = document.getElementById("lista"); let item = lista.getItem("2",false); console.log(item); // Salida esperada: {index:1, id:"2", text:"1 Cebolla", done:false, _meta:{percent:0, progress:100}} ``` Uso de la propiedad `onItemChanged`. ```js const lista = document.getElementById("lista"); lista.onItemChanged = (item) => { alert(item.text+" ha cambiado"); console.log(item); // Salida esperada: {id:"", text:"", done:true/false, _meta:{percent:0, progress:100}} }; ``` Uso de la propiedad `onItemChecked`. ```js const lista = document.getElementById("lista"); lista.onItemChecked = (item) => { alert(item.text+" ha sido marcado"); console.log(item); // Salida esperada: {id:"", text:"", done:true, _meta:{percent:0, progress:100}} }; ``` Uso de la propiedad `onItemMoved`. ```js const lista = document.getElementById("lista"); lista.onItemMoved = (sourceItem) => { alert(sourceItem.text+" ha cambiado de posición"); console.log(sourceItem); // Salida esperada: {id:"", text:"", done:true/false, _meta:{percent:0, progress:100}} }; ``` ## Comentarios El componente no envía nada como parte de la carga útil del formulario al que estuviera relacionado, por lo que si necesitamos enviar información al backend necesitaremos apoyarnos de javascript. El array de datos usado para establecer los elementos de la lista sigue la siguiente estructura: ``` { text: (string) Título de la lista. [requerido] items: [ { id: (string) Identificador del elemento. [requerido] text: (string) Texto a usar como etiqueta del elemento. [requerido] done: (boolean) Indica si la tarea ha sido completada. [requerido] items: (array) Array de objetos con la información a mostrar como parte de elementos hijos. [opcional] [{},...] }, ... ] } ``` Observe que a los elementos (items) también puede anidarse otros elementos (items) que formaran parte del elemento principal como elementos hijos. Solo se permite un nivel de anidación por elemento. ## Atributos #### id (opcional) Identificador del componente, este Puede ser usado para acceder facilmente al componente mediante javascript. Tipo: `string`, Predeterminado: `""` ```html ``` #### data (opcional) Una cadena que representa un objeto JSON con la información de los elementos a mostrar. Tipo: `array`, Predeterminado: `""` ```html ``` #### data-locked (opcional) Elementos marcados ya no pueden desmarcarse. Tipo: `bool`, Predeterminado: `false` ```html ``` #### data-done-style (opcional) Visualización de elementos marcados: 0-Permanecen en su sitio, 1-Desaparecen, 2-Se apilan en una lista en la parte inferior. Tipo: `number`, Predeterminado: `0` ```html ``` #### can-add (opcional) Pueden agregarse elementos Tipo: `bool`, Predeterminado: `true` ```html ``` #### can-edit (opcional) Pueden editarse elementos Tipo: `bool`, Predeterminado: `false` ```html ``` #### can-remove (opcional) Pueden eliminarse elementos Tipo: `bool`, Predeterminado: `false` ```html ``` #### can-move (opcional) Pueden moverse elementos Tipo: `bool`, Predeterminado: `false` ```html ``` #### can-check (opcional) Pueden marcarse como completados o actualizar su progreso. Tipo: `bool`, Predeterminado: `true` ```html ``` #### hide-header (opcional) Permite ocultar la sección del título del componente. Tipo: `bool`, Predeterminado: `false` ```html ``` #### radio-style (opcional) Mecanismo de marcado por radio buttons (Si - No), Si es false o no se establece: el mecanismo será un check. Tipo: `bool`, Predeterminado: `false` ```html ``` ## Propiedades - `data`: (array) Datos de la lista. - `locked`: (bool) Elementos marcados ya no pueden desmarcarse. - `doneStyle`: (number) Visualización de elementos marcados: 0-Permanecen en su sitio, 1-Desaparecen, 2-Se apilan en una lista en la parte inferior. - `canAdd`: (bool) Pueden agregarse elementos. - `canEdit`: (bool) Pueden editarse elementos. - `canRemove`: (bool) Pueden eliminarse elementos. - `canMove`: (bool) Pueden moverse elementos. - `canCheck`: (bool) Pueden marcarse como completados o actualizar su progreso. - `hideHeader`: (bool) Permite ocultar la sección del título del componente. - `radioStyle`: (bool) Mecanismo de marcado por radio buttons (Si - No). - `onItemChanged`: (function) Se dispara cuando se modifica un elemento. - `onItemChecked`: (function) Se dispara cuando se completa (o desmarca) un elemento. - `onItemMoved`: (function) Se dispara cuando un elemento ha sido movido a otra posición en el árbol de lista. ## Métodos #### setData Establece los datos de la lista **Parámetros:** - `array` **data** Array de objetos a mostrarse en la lista. ```Js setData(data): void ``` #### getData Retorna los datos de la lista **Parámetros:** - `boolean` **withoutmeta** Devuelve los datos sin la propiedad meta. ```Js getData(withoutmeta = false): array{} ``` #### getItem Retorna la información de un elemento de la lista **Parámetros:** - `string` **id** Identificador del elemento. - `boolean` **withoutindex** Elimina la información del índice del elemento. ```Js getItem(id, withoutindex = true): array{} ``` #### _refreshView Actualiza la interfaz de la lista. ```Js _refreshView(): void ```