# 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
```