# FilterDateRange
<style>
    img {
        max-width: 100%;
    }
    pre {
        background-color: #F5F5F5;
        padding: .5rem;
    }
</style>

## Definición

Archivo: `induxsoft.controls.js`

Es un componente que ofrece tres distintas interfaces configurables para elegir un rango de fechas.

- Por año y mes (month).
- últimos días (lastdays)
- Rango específico (range)

<img src="/es/api/web-components/img/filterdaterange-demo-01.jpeg">


## Ejemplos

Maquetación HTML básica
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FilterDateRange</title>
    <script src="../src/js/induxsoft.controls.js"></script>
</head>
<body>
    <form action="" method="GET">
        <filter-date-range auto-submit="true"></filter-date-range>
    </form>
</body>
</html>
```

El atributo `selection`, permite establecer la selección del rango de fechas al momento que el componente es renderizado, usualmente estos valores se establecerán desde el back-end, ya sea de forma predeterminada o bien, como resultado de la aplicación de los parámetros enviados por el propio componente en una solicitud previa.

Por otro lado, obserque que la lista de años puede establecerse mediante el atributo `years-option`, de forma predeterminada los años listados seran -3 años y +3 años al actual.

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FilterDateRange</title>
    <script src="../src/js/induxsoft.controls.js"></script>
</head>
<body>
    <form action="" method="GET">
        <filter-date-range
            auto-submit="true"
            selection='{"mode":"month","year":2024,"month":12}'
            years-options="2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029">
        </filter-date-range>
    </form>
</body>
</html>
```

Este es un ejemplo con todos los atributos que pueden establecerse.
```html
<filter-date-range
    form="#form-filter"
    auto-submit="true"
    custom-range="true"
    selection='{"fdr_mode":"month","fdr_year":2024,"fdr_month":12,"fdr_range":30,"fdr_from":"2024-01-01","fdr_to":"2024-12-31"}'
    
    mode-field="fdr_mode"
    year-field="fdr_year"
    month-field="fdr_month"
    range-field="fdr_range"
    from-field="fdr_from"
    to-field="fdr_to"
    
    lastdays-options="15,30,45,60,90"
    years-options="2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029"
    month-names="Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre"
    
    label-months="Ver por cada mes"
    label-days="Últ. @lastdays días"
    label-custom="Personalizado"
    label-from="Desde:"
    label-to="Hasta:">
</filter-date-range>
```

## Comentarios

El componente envía como parte de la carga útil del formulario al que está relacionado la información del rango de fechas con base en el modo de selección
que haya usado el usuario para establecerla.

Los valores enviados por el formulario como campos corresponden a los que estén establecidos en los atributos:

- ```mode-field```. Valor predeterminado ```mode```, siempre se envía y puede ser alguno de los siguientes: ```month```, ```lastdays``` o ```range```

**Si el componente está en modo de selección por año y mes**

- ```year-field```. Valor predeterminado ```year```, contendrá el valor correspondiente al año seleccionado. 
- ```month-field```. Valor predeterminado ```month```, contendrá el valor correspondiente al mes seleccionado (1-12)

**Si el componente está en modo de selección por últimos días**

- ```range-field```. Valor predeterminado ```range```, contendrá el valor correspondiente a la cantidad de días anteriores a la fecha actual elegidos

**Si el componente está en modo de selección por rango de fechas**

- ```from-field```. Valor predeterminado ```from```, contendrá el valor de la fecha inicial seleccionada en la forma ```yyyy-mm-dd```
- ```to-field```. Valor predeterminado ```to```, contendrá el valor de la fecha final seleccionada en la forma ```yyyy-mm-dd```


**Ejemplos de datos enviados**

El siguiente conjunto de ejemplos ilustra los campos enviados por el formulario al backend según la selección del usuario:

Modo de selección: Año y Mes (month)
```
mode=month
year=2024
month=12
```

Modo de selección: Últimos días (lastdays)
```
mode=lastdays
range=30
```

Modo de selección: Personalizado (range)
```
mode=range
from=2024-01-01
to=2024-12-31
```

## Atributos

#### form (opcional)

Selector del formulario al que se realizará el submit (Si no se establece se busca el formulario más cercano).

Este atributo únicamente tiene efecto si también se ha establecido el atributo ```auto-sumbit="true"```


Tipo: `string`, Predeterminado: `""`
```html
<filter-date-range form="#form-filter">
```

#### auto-submit (opcional)
Establece si el formulario vinculado se envía cuando el componente detecta un cambio en sus valores.

Tipo: `boolean`, Predeterminado: `false`
```html
<filter-date-range auto-submit="true">
```

#### custom-range (opcional)
Establece si la opción para rango de fechas personalizado se mostrara disponible.

Tipo: `boolean`, Predeterminado: `false`
```html
<filter-date-range custom-range="true">
```

#### selection (opcional)

Una cadena que representa un objeto JSON con la información para inicializar el componente al momento de su renderización.

Tipo: `array`, Predeterminado: `{}`

```html
<filter-date-range selection='{"fdr_mode":"month","fdr_year":2024,"fdr_month":12}'>

<filter-date-range selection='{"fdr_mode":"lastdays","fdr_range":30}'>

<filter-date-range selection='{"fdr_mode":"range","fdr_from":"2024-01-01","fdr_to":"2024-12-31"}'>
```

#### mode-field (opcional)

Estable el nombre del campo que se usara para determinar el modo de filtro seleccionado.

Tipo: `string`, Predeterminado: `mode`
```html
<filter-date-range mode-field="fdr_mode">
```

#### year-field (opcional)
Establece el nombre del campo que se usara para determinar el año seleccionado.

Tipo: `string`, Predeterminado: `year`
```html
<filter-date-range year-field="fdr_year">
```

#### month-field (opcional)
Establece el nombre del campo que se usara para determinar el mes seleccionado.

Tipo: `string`, Predeterminado: `month`
```html
<filter-date-range month-field="fdr_month">
```

#### range-field (opcional)
Estable el nombre del campo que se usara para determinar el rango de días seleccionado.

Tipo: `string`, Predeterminado: `range`
```html
<filter-date-range range-field="fdr_range">
```

#### from-field (opcional)
Establece el nombre del campo que se usara para determinar el valor de la fecha de inicio seleccionado.

Tipo:`string`, Predeterminado: `from`
```html
<filter-date-range from-field="fdr_from">
```

#### to-field (opcional)
Establece el nombre del campo que se usara para determinar el valor de la fecha final seleccionada.

Tipo:`string`, Predeterminado: `to`
```html
<filter-date-range to-field="fdr_to">
```

#### lastdays-options (opcional)
Cadena con lista de valores numéricos separados por comas (,) que se usaran para llenar las opciones de **últimos días**.

Tipo: `string`, Predeterminado: `""`
```html
<filter-date-range lastdays-options="15,30,45,60,90">
```

#### years-options (opcional)
Cadena con lista de valores numéricos separados por comas (,) que se usaran para llenar las opciones de los **años**.

Tipo: `string`, Predeterminado: `""`
```html
<filter-date-range years-options="2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029">
```

#### month-names (opcional)
Lista de subcadenas separadas por comas (,) que se usaran como texto visible para las opciones de los **meses**.

Tipo: `string`, Predeterminado: `Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre`
```html
<filter-date-range month-names="Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre">
```

#### label-months (opcional)
Texto a mostrar para la opción de filtro por año-mes.

Tipo: `string`, Predeterminado: `Por mes`
```html
<filter-date-range label-months="Ver por cada mes">
```

#### label-days (opcional)
Texto a mostrar para la opción de filtro de los últimos días.

Tipo: `string`, Predeterminado: `Últ. @lastdays días`, la macro `@lastdays` sera reemplazado por cada uno de los valores definidos en `lastdays-options`.
```html
<filter-date-range label-days="Últ. @lastdays días">
```

#### label-custom (opcional)
Texto a mostrar para la opción de filtro por rango de fechas personalizado.

Tipo: `string`, Predeterminado: `Personalizado`
```html
<filter-date-range label-custom="Personalizado">
```

#### label-from (opcional)
Texto a mostrar para el campo de fecha inicial cuando la opción de filtro es **Personalizado**

Tipo: `string`, Predeterminado: `Desde:`
```html
<filter-date-range label-from="Desde:">
```

#### label-to (opcional)
Texto a mostrar para el campo de fecha final cuando la opción de filtro es **Personalizado**

Tipo: `string`, Predeterminado: `Hasta:`
```html
<filter-date-ramge label-to="Hasta:">
```

<!--
## Propiedades



## Métodos



## Eventos
