# 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){/*...*/}) ```