filter-creator
Ejecución del creador de filtros
Carga del módulo en cliente
En uno de nuestros ficheros HTML, JSP... debemos hacer referencia a la librería de la siguiente manera:
<script src='<%=request.getContextPath() %>/resources/js/filter/FilterCreator.dist.min.js' charset="UTF-8"></script>
Inicilizar el componete
Debemos inicializar el componente de la siguiente manera.
<script type="text/javascript" charset="UTF-8">
var initConfig = {
locale: 'locale',
dateFormats: {dateFormats},
contextPath: 'contextPath',
theme: 'theme'
};
FilterCreator.init(initConfig);
</script>
-
locale: Idioma que se usará
-
dateFormats: objeto en el que le pasamos los formatos de las fechas. Ejemplo:
{
"year": "YYYY",
"month": "MM/YYYY",
"day": "DD/YYYY/MM",
"week": "DD/MM/YYYY WW"
}
-
contextPath: elcontexto de donde se obtendran los datos de servidor
-
theme: tema que se usará para generar los filtros. Las constantes se obtienen de la siguiente manera:
FilterCreator.THEMES.NONE
FilterCreator.THEMES.BOOTSTRAP
FilterCreator.THEMES.IK_WI_2
FilterCreator.THEMES.IK_WI_3
Ejemplo:
<script type="text/javascript" charset="UTF-8">
var initConfig = {
locale: 'eu',
dateFormats: {
"year": "YYYY",
"month": "MM/YYYY",
"day": "DD/YYYY/MM",
"week": "DD/MM/YYYY WW"
},
contextPath: 'http://localhost:8087',
theme: 'theme'
};
FilterCreator.init(initConfig);
</script>
Generar el filtro
Generaremos el filtro con la funcion generateFilter
que acepta un solo parametro que es un objeto con parametros de configuración de dicho filtro.
var filterConfig = {
targetContainerId: string,
data: object,
ajaxUrl: string,
type: string,
callback: function,
small: boolean
};
FilterCreator.generateFilter(filterConfig);
Las propiedades del objeto son las siguientes:
- targetContainerId: contenedor donde se renderizara el filtro
- data: Objeto con la definicion de los inputs que se renderizaran. Si ajaxUrl no es null, esta propiedad se ignora.
- ajaxUrl: url de la ruta donde obtendrenos los inputs que se renderizaran.
- type: tipo de renderizado del filtro (se explica más profundamente más adelante)
- callback: [opcional] funcion que seejecutara despues de renderizar el filtro
- small: [opcional] en caso de renderizar un modal, boolean para poner el modal con un ancho de 400px en vez de 600px
Ejemplo con datos en crudo:
var filterData =
[
[
{
"type": "number",
"name": "number1",
"label": "number 1"
}
]
];
var filterConfig = {
targetContainerId: 'filterContainer',
data: filterData,
type: FilterCrator.FILTER_TYPES.PLAIN_FILTER
};
FilterCreator.generateFilter(filterConfig);
Ejemplo con datos obtenidos desde servidor:
var url = "data/filterData";
var filterConfig = {
targetContainerId: 'filterContainer',
ajaxUrl: url,
type: FilterCrator.FILTER_TYPES.PLAIN_FILTER
};
FilterCreator.generateFilter(filterConfig);
###Tipos de filtro
FilterCrator.FILTER_TYPES.PLAIN_FILTER
Se renderiza el filtro en el contenedor indicado en targetContainerId
.
FilterCrator.FILTER_TYPES.CHART_MODAL_FILTER
Es la misma funcionalidad de Añadir un filtro especifico
(mas adelante en la documentacion).
Genera el filtro en un modal (tipo bootstrap) con el id {targetContainerId]+-filter
. Por ejemplo, si targetContainerId es container
, el id del modal generado sería container-filter
.
El boton que enseña dicho modal es responsabilidad del usuario.
FilterCrator.FILTER_TYPES.TABLE_MODAL_FILTER
Es la misma funcionalidad de Añadir un filtro de componente tabla
(mas adelante en la documentacion).
Genera el filtro en un modal con el id {targetContainerId]+-filter
. Por ejemplo, si targetContainerId es container
, el id del modal generado sería container-filter
.
FilterCrator.FILTER_TYPES.MULTIPLE_CHART_MODAL_FILTER
Es la misma funcionalidad de Añadir un filtro general
(mas adelante en la documentacion).
Genera el filtro en un modal con el id filterModal
que afecta a todos los graficos puestos en targetContainerId
(separados por coma).l modal generado sería container-filter
.
Añadir un filtro especifico (deprecated)
Por último necesitamos un div que lo contenga, cuyo id le proporcionaremos al componente.
El segundo parametro es un array de arrays. Cada array es un conjunto de inputs que se agruparan en un contenedor con la clase "well" de bootstrap.
FilterCreator.render("id del contenedor del grafico",
[
[{input1A}, {input1B}, ...],
[{input2A}, {input2B}, ...],
...
],
{options} [optional]
);
Ejemplo:
FilterCreator.render("chart",
[
[
{"type": "text", "name": "inputPru", "defaultValue": "default", "label": "label"},
{"type": "date", "name": "date2", "label": "date2"}
],
[
{"type": "dateFromTo", "name": "dateFromTo", "label": "label3"}
]
],
{small: true}
);
Añadir un filtro general (deprecated)
Elprimer parametro es una lista de los graficos a los que afecta el filtro separado por puntocoma ";".
El segundo parametro es un array de arrays. Cada array es un conjunto de inputs que se agruparan en un contenedor con la clase "well" de bootstrap.
FilterCreator.renderGeneral("content-intensity;content-users;content-duration",
[
[{input1A}, {input1B}, ...],
[{input2A}, {input2B}, ...],
...
],
{options} [optional]
);
Ejemplo:
FilterCreator.renderGeneral("chart",
[
[
{"type": "text", "name": "inputPru", "defaultValue": "default", "label": "label"},
{"type": "date", "name": "date2", "label": "date2"}
],
[
{"type": "dateFromTo", "name": "dateFromTo", "label": "label3"}
]
]
);
Añadir un filtro de componente tabla (deprecated)
El comportamiento es igual que el de un filtro especifico, pero en vez de a la funcion render se le llama a la funcion renderForTable con los mismos parametros.
##Definicion del parametro opcional "options"
{
"small": true,
"callback": function(){}
}
small: [optional] El modal por defecto tiene un tamaño de 600px. Si le ponemos la opcion small a true tendra un ancho de 400px. Util cuando solo tenemos un imput y así centrarlo. Ese input tambien debe tener un tamaño de 12 columnas.
callback: [optional] Callback que se ejecutara al finalizar el renderizado del formulario.
Definicion de los distintos inputs
Texto
Input de texto normal
Se construye de la siguiente manera:
{
"type": "text",
"name": "input_name",
"defaultValue": "default_value",
"label": "label"
}
- [obligatorio] type: "text"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- defaultValue: valor que se pondra por defecto
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
Numerico
Input de numerico
Se construye de la siguiente manera:
{
"type": "number",
"name": "input_name",
"defaultValue": "default_value",
"label": "label"
}
- [obligatorio] type: "numeric"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- defaultValue: valor que se pondra por defecto
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
Checkbox
Input de checkbox
Se construye de la siguiente manera:
{
"type": "checkbox",
"name": "checkbox",
"label": "checkbox",
"checked": true
}
- [obligatorio] type: "checkbox"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- checked: si es true el checkbox aparecera seleccionado, si es false aparecera deseleccionado. Si el parametro no se envia por defecto saldrá seleccionado.
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
Select
Input de select
Se construye de la siguiente manera:
{
"type": "select",
"name": "select",
"label": "select",
"options": [
{"value": "a", "text": "a"},
{"value": "b", "text": "b"},
{"value": "c", "text": "c"}
]
}
- [obligatorio] type: "select"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
- selected: opcion que saldrá por defecto. tiene que ser un valor igual al value de los option. Si no lo encuentra pone el primer valor.
- [obligatorio] options: array de las opciones del select
-
- [obligatorio] value: valor de la opcion
-
- [obligatorio] text: texto de la opcion
Select Dependido
Input de select al que el onchange afecta a otro select
Se construye de la siguiente manera:
{
"type": "selectDependant",
"name": "select",
"label": "select",
"options": [
{"value": "a", "text": "a"},
{"value": "b", "text": "b"},
{"value": "c", "text": "c"}
],
"optionKey": "paramoption",
"affects": "select2",
"url": "/data/list"
}
- [obligatorio] type: "selectDependant"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
- optionKey: clave del parametro que se pasa a la llamada url. Por defecto paramoption
- selected: opcion que saldrá por defecto. tiene que ser un valor igual al value de los option. Si no lo encuentra pone el primer valor.
- [obligatorio] affects: name del select al que afecta
- affectsSelected: opcion que saldrá por defecto en el select dependiente. tiene que ser un valor igual al value de los option. Si no lo encuentra pone el primer valor.
- [obligatorio] url: url a la que se hace la llamada ajax. En la llamada ajax se le pasara el argumento options y como valor el value del select. Ej: /data/list?option=valueSelect
- [obligatorio] options: array de las opciones del select
-
- [obligatorio] value: valor de la opcion
-
- [obligatorio] text: texto de la opcion
Radiobutton
Input de radiobutton
Se construye de la siguiente manera:
{
"type": "radio",
"name": "radio2",
"label": "radio2",
"size": "12",
"options": [
{"value": "a", "text": "a"},
{"value": "b", "text": "b"},
{"value": "c", "text": "c"}
]
}
- [obligatorio] type: "radio"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
- [obligatorio] options: array de las opciones del radiobutton
-
- [obligatorio] value: valor de la opcion
-
- [obligatorio] text: texto de la opcion
-
- checked: si es true este valor será el que sale por defecto
Hidden
Input oculto (hidden)
Se construye de la siguiente manera:
{
"type": "hidden",
"name": "nombre",
"value": "valor"
}
- [obligatorio] type: "hidden"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] value: valor que llevara el input en el formulario
Date
Input de fecha. por defecto lleva la fecha del día de hoy
Se construye de la siguiente manera:
{
"type": "date",
"name": "date1",
"label": "date1",
"date": new Date()
}
- [obligatorio] type: "date"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- size: Tamaño del input. 6 por defecto (Entre 1 y 12)
- date: Fecha que sale por defecto. (Si no se le pone nada pone el dia de hoy)
Date From-To
Monta el componente completo para seleccionar rango de fecha radiobuttons incluidos
Se construye de la siguiente manera:
{
"type": "dateFromTo",
"name": "dateFromTo",
"label": "label3",
"from": new Date(new Date().getTime() - 86400000 * 31),
"to": new Date(),
"checked": {"yearly": true},
"show": {"yearly": true,"monthly": true,"daily": true}
}
- [obligatorio] type: "dateFromTo"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- from: fecha por defecto para el campo FROM
- to: fecha por defecto para el campo TO
- checked: para elegir granularidad por defecto. Hay que enviarle una de las siguientes opciones a true: yearly, monthly, daily, weekly
- show: para elegir que opciones salen en la granularidad. Si no se defino show por defecto salen los cuatro. Si se define show hay que definir las opciones yearly, monthly, weekly y daily. Para que aparezcan estas tienen que ser true. No aparecen si se definen como false o si no se definen.
Date Changeable
Monta un input de date con radiobuttons para poder cambiar el formato de la fecha
Se construye de la siguiente manera:
{
"type": "dateChangeable",
"name": "dateChangeable",
"label": "label4",
"date": new Date(),
"checked": {"yearly": true}
"show": {"yearly": true,"monthly": true,"daily": true}
}
- [obligatorio] type: "dateChangeable"
- [obligatorio] name: nombre que llevara el input en el formulario
- [obligatorio] label: etiqueta que irá junto al input
- date: fecha por defecto para el campo de fecha
- checked: para elegir granularidad por defecto. Hay que enviarle una de las siguientes opciones a true: yearly, monthly, daily, weekly
- show: para elegir que opciones salen en la granularidad. Si no se defino show por defecto salen los cuatro. Si se define show hay que definir las opciones yearly, monthly, weekly y daily. Para que aparezcan estas tienen que ser true. No aparecen si se definen como false o si no se definen.
¿A quien puedo preguntar?