# InputKey
## Definición
Archivo: `induxsoft.controls.js`
Es un componente que facilita le facilita al usuario la busqueda y selección de datos de una manera clara y amigable.
## Ejemplos
El atributo `data-source` permite establecer el listado de los datos mediante una solicitud GET.
```html
```
El atributo `data-source-array` permite establecer el listado de los datos mediante una cadena que representa un objeto JSON.
```html
```
Implementar botones personalizados.
```html
```
**Ejemplos de uso con JavaScript**
Obtener el elemento seleccionado de la tabla de datos.
```js
const input = document.getElementById("usuario");
let item = input.getValue();
console.log(item); // Salida esperada: {id:"", codigo:"", nombre:""}
```
Buscar un elemento dentro de la tabla de datos.
```js
const input = document.getElementById("usuario");
let found = input.findValue("2");
console.log(found); // Salida esperada: {id:2, codigo:"002", nombre:"Katelynn"}
```
Establecer valor del componente.
```js
const input = document.getElementById("usuario");
let value = {id:1, codigo:"001", nombre:"Bob"}
input.setValue(value);
```
Limpiar elemento seleccionado.
```js
const input = document.getElementById("usuario");
input.clear();
```
Establecer evento `change` al componente.
```js
const input = document.getElementById("usuario");
input.addEventListener("change", (data) => {
/**
* data: (array) Objeto con la información seleccionada/establecida.
*/
// implementación...
});
```
Establecer propiedad `change_event`. Se dispara cuando se establece un nuevo valor al componente.
```js
const input = document.getElementById("usuario");
input.change_event = (data) => {
/**
* data: (array) Objeto con la información seleccionada/establecida.
*/
// implementación...
}
```
Establecer propiedad `onBeforeSearch`. Se dispara antes de realizar una peticion GET.
```js
const input = document.getElementById("usuario");
input.onBeforeSearch = (surl) => {
/**
* surl: (string) Valor del atributo `data-source`.
*/
// implementación...
return surl; // ¡Es necesario responder con una url!
}
```
Implementar acciones a los botones personalizados.
```js
document.addEventListener("DOMContentLoaded", () => {
const btn_ext_1 = document.getElementById("btn-ext-1");
const btn_ext_2 = document.getElementById("btn-ext-2");
btn_ext_1.addEventListener("click", (e) => {
/* implementación */
});
btn_ext_2.addEventListener("click", (e) => {
/* implementación */
});
});
```
## Comentarios
El componente InputKey ofrece una interfaz que facilita la búsqueda y selección de datos al usuario, en donde los siguientes atributos deben corresponder a propiedades existentes en el array de objetos establecidos en `data-source-array` o los obtenidos desde `data-source`.
- data-key
- data-search
- data-text
- columns
- colcaptios
Al realizar una solicitud GET, el componente comprueba tres macros en la url:
- @search: (opcional) Valor del parámetro a buscar establecido en el campo de búsqueda (data-search) del componente.
- @key: (opcional) Valor "data-key" del registro seleccionado.
- @text: (opcional) Descripción "data-text" del registro seleccionado.
## Atributos
#### id (opcional)
Identificador del componente, este Puede ser usado para acceder facilmente al componente mediante javascript.
Tipo: `string`, Predeterminado: `""`
```html
```
#### name (opcional)
Nombre que sera tomado por el navegador para la carga útil.
Tipo: `string`, Predeterminado: `""`
```html
```
#### data-key (requerido)
Establece el campo a guardar al seleccionar un registro.
Tipo: `string`
```html
```
#### data-search (requerido)
Establece el campo a considerar en la búsqueda de un registro.
Tipo: `string`
```html
```
#### data-text (opcional)
Establece el campo a mostrar en la descripción del registro seleccionado.
Tipo: `string`, Predeterminado: `""`
```html
```
#### data-value (opcional)
Esteblece el valor inicial del componente.
Tipo: `object`, Predeterminado: `""`
```html
```
#### data-source-array (opcional)
Establece los datos a usar en la selección de registros
Tipo: `array`, Predeterminado: `""`
```html
```
#### data-source (opcional)
Establece el endpoint para la obtención de registros.
Tipo: `string`, Predeterminado: `""`
```html
```
#### add-url (opcional)
Establece el endpoint para la adición de nuevos registros.
Tipo: `string`, Predeterminado: `""`
```html
```
#### edit-url (opcional)
Establece el endpoint para la edición del registro seleccionado.
Tipo: `string`, Predeterminado: `""`
```html
```
#### columns (opcional)
Establece los campos a mostrar en la tabla de resultados de búsqueda.
Tipo: `string`, Predeterminado: `"*"`
```html
```
#### colcaptions (opcional)
Establece los encabezados de la tabla de resultados de búsqueda.
Tipo: `string`, Predeterminado: `"*"`
```html
```
#### search-value (opcional)
Texto a mostrar por defecto en el campo de búsqueda.
Tipo: `string`, Predeterminado: `""`
```html
```
#### text-value (opcional)
Texto a mostrar por defecto en el campo de descripción.
Tipo: `string`, Predeterminado: `""`
```html
```
#### box-title-text (opcional)
Texto a mostrar en el título del buscador.
Tipo: `string`, Predeterminado: `"Seleccione un registro"`
```html
```
#### box-placeholder-text (opcional)
Texto a mostrar en el placeholder del buscador.
Tipo: `string`, Predeterminado: `"Buscar..."`
```html
```
#### box-nodata-text (opcional)
Texto a mostrar cuando no haya datos para mostrar.
Tipo: `string`, Predeterminado: `"Sin registros"`
```html
```
#### buttons (opcional)
Una cadena que representa un objeto JSON que permite establecer botones extras personalizados.
Tipo: `array`, Predeterminado: `""`
```html
```
#### disabled (opcional)
Desabilita los controles del componente.
Tipo: `bool`, Predeterminado: `false`
```html
```
#### required (opcional)
Establece que el campo tenga datos antes de enviarse el formulario.
Tipo: `bool`, Predeterminado: `false`
```html
```
#### hidden-input (opcional)
Define si se crea un elemento input oculto fuera el web component para ser tomado por formularios o selectores.
Tipo: `bool`, Predeterminado: `true`
```html
```
#### hide-searcher (opcional)
Define si sé el control de búsqueda se oculta, siendo visible únicamente el botón y el control de descripción.
Tipo: `bool`, Predeterminado: `false`
```html
```
#### control-styles (opcional)
Establece los estilos personalizados que se le aplicarán al control.
Tipo: `string`, Predeterminado: `""`
```html
```
## Propiedades
- `data`: (array) Lista de objetos que establece los datos a usar en la selección de registros.
- `searchData`: (string) Establece el campo a considerar en la búsqueda de un registro.
- `columns`: (string) Establece los campos a mostrar en la tabla de resultados de búsqueda.
- `colcaptions`: (string) Establece los encabezados de la tabla de resultados de búsqueda.
- `change_event`: (function) Se dispara cuando se establece un nuevo valor al componente.
- `onBeforeSearch`: (function) Se dispara antes de realizar una peticion GET.
## Métodos
#### findValue
Retorna un elemento dentro del objeto de datos que coincida con el valor especificado establecido en la propiedad searchData y el identificador proporcionado.
**Parámetros**
- `string` **id** Cadena con el valor a buscar.
```js
findValue(id): array{}
```
#### getValue
Retorna el objeto seleccionado en la tabla de datos.
```js
getValue(): array{} | null
```
#### setValue
Establece el valor del control.
**Parámetros:**
- `array` **value** Objeto con la información a establecer.
```js
setValue(value): void
```
#### clear
Limpia la información del objeto seleccionado y los controles del componente.
```js
clear(): void
```
## Eventos
#### change
Sobrescribe el escuchador de eventos del componente con el definido por el usuario en la propiedad `change_event`.
```js
InputKey.addEventListener("change", function(data){/*...*/})
```