# CustomSchedule
## Definición
Archivo: `induxsoft.controls.schedule.js`
Produce una interfaz de tabla el cual representa una agenda visual tipo calendario.
## Ejemplos
Maquetación HTML con todos los atributos que pueden establecerse.
```html
```
El atributo `events` permite establecer las tareas/eventos mediante una cadena que representa un objeto JSON tal como en el siguiente ejemplo:
```html
```
Las propiedades que pueden establecerse para cada objeto que representa a los eventos se listan a continuación:
- `string` *id -* Identificador del evento. **Requerido**
- `string` *start -* Fecha y hora de inicio. **Requerido**
- `integer` *duration -* Duración en minutos del evento. **Requerido**
- `string` *caption -* Texto a mostrar en el contenedor del evento. **Requerido**
- `string` *backcolor -* Color de fondo para el contenedor del evento. **Opcional**
- `string` *color -* Color para el texto del contenedor del evento. **Opcional**
- `object` *data -* Array de propósito general. **Opcional**
**Ejemplos de uso con JavaScript**
Agregar un nuevo evento a la agenda.
```js
const schedule = document.getElementById('agenda');
const event = {
id: "E02",
start: "2025-06-11 17:00",
duration: 60,
caption: "Dolor sint laboris in nisi."
};
schedule.save(event);
```
Actualizar un evento existente.
```js
const schedule = document.getElementById('agenda');
const event = {
id: "E02",
start: "2025-06-13 17:00",
duration: 60,
caption: "Aute et irure labore mollit est qui duis laborum ad."
};
schedule.save(event);
```
Eliminar un evento existente.
```js
const schedule = document.getElementById('agenda');
schedule.delete('E02');
```
## Comentarios
También puede establecer sus propios estilos css para la agenda, para ello agregue la etiqueta `control-styles` como un nodo hijo del componente y comience a personalizar colores, tamaños, etc. Tal como en el siguiente ejemplo:
```html
tr th {
background-color: cadetblue;
}
.event-task.selected {
box-shadow: 1px 1px 4px cadetblue;
}
```
## Atributos
#### view (opcional)
Establece la interfaz del componente, si no se establece por defecto es *week*. Las opciones disponibles para el atributo son:
- Un dia (day)
- Una semana (week)
- Dos semanas (2week)
- Cuatro semanas (4week)
- Seis semanas (6week)
Tipo: `string`; Predeterminado: `week`
```html
```
#### day (opcional)
Cadena de fecha con el formato `yyyy-MM-dd` que establece el dia o semana a mostrar, si no se establece por defecto es *now*.
Tipo: `string`; Predeterminado: `now`
```html
```
#### breaks (opcional)
Lista de recesos (descansos en el día laboral), en la forma: 00:00-00:00,... (horas y minutos de inicio y fin del descanso).
Rango de horas con el formato `HH:mm` separadas por coma.
Tipo: `string`; Predeterminado: `""`
```html
```
#### weekend (opcional)
Establece los dias no laborales separadas por comas, si no se establece por defecto es *saturday,sunday*.
Tipo: `string`; Predeterminado: `saturday,sunday`
```html
```
#### holidays (opcional)
Establece los dias de descanso como una cadena de fechas con el formato `yyyy-MM-dd` separadas por comas.
Tipo: `string`; Predeterminado: `""`
```html
```
#### start-weekday (opcional)
Indica el dia en que inicia la semana, si no se establece por defecto es *sunday*.
Tipo: `string`; Predeterminado: `sunday`
```html
```
#### start-lab-hour (opcional)
Establece la hora de inicio laboral, si no se establece por defecto es *0*.
Tipo: `integer`; Predeterminado: `0`
```html
```
#### end-lab-hour (opcional)
Establece la hora de finalización laboral, si no se establece por defecto es *24*.
Tipo: `integer`; Predeterminado: `24`
```html
```
#### interval (opcional)
Indica los intervalos en minutos de tiempo visual para la agenda en los que el horario laboral es segmentado, si no se establece por defecto es *30*.
Valores aceptados: [15, 30, 60, 120]
Tipo: `integer`; Predeterminado: `30`
```html
```
#### increment (opcional)
Incremento estándar en minutos de un evento, si no se indica o es cero el evento se puede extender libremente entre `min-duration` y `max-duration`. si no se establece por defecto es *0*.
Tipo: `integer`; Predeterminado: `0`
```html
```
#### min-duration (opcional)
Establece la duración minima en minutos para los eventos, si no se establece por defecto es *15*.
Tipo: `integer`; Predeterminado: `15`
```html
```
#### max-duration (opcional)
Establece la duración maxima en minutos para los eventos, si no se establece por defecto es *60*.
Tipo: `integer`; Predeterminado: `60`
```html
```
#### events (opcional)
Establece los eventos mediante una cadena que representa un objeto JSON.
Tipo: `json`: Predeterminado: `[]`
```html
```
## Propiedades
| Propiedad | Tipo | Predeterminado | Descripción |
| :------------ | :------------ | :------------ | :------------ |
| view | `string` | *week* | Establece la interfaz visual del componente |
| day | `string` | *now* | Fecha en que se empieza a mostrar la semana |
| breaks | `string` | *''* | Recesos en el día laboral |
| weekend | `string` | *saturday,sunday* | Días no laborales |
| holidays | `string` | *''* | Días de descanso |
| start_weekday | `string` | *sunday* | Día en que inicia la semana |
| start_lab_hour | `integer` | *0* | Hora de inicio laboral |
| end_lab_hour | `integer` | *24* | Hora de fin del día laboral |
| interval | `integer` | *30* | Intervalo de tiempo visual de la agenda |
| increment | `integer` | *0* | Incremento estándar en minutos de un evento |
| min_duration | `integer` | *15* | Mínimo de duración en minutos de un evento |
| max_duration | `integer` | *60* | Máximo de duración en minutos de un evento |
| events | `object` | [] | Array con los eventos a renderizar en la agenda |
## Métodos
#### save
Agrega o edita un evento.
```js
save(event): boolean
```
**Parámetros**
- `array` **event** Array con la información necesaria para agregar o actualizar un evento.
**Devoluciones**
- `boolean`
Retorna `true` si se completo la tarea, en caso contrario `false`.
#### delete
Elimina un evento.
```js
delete(id): boolean
```
**Parámetros**
- `string` **id** Identificador del evento.
**Devoluciones**
- `boolean`
Retorna `true` si se completo la tarea, en caso contrario `false`.
#### renderEvent
Renderiza un nuevo evento.
```js
renderEvent(event): void
```
**Parámetros**
- `array` **event** Array del evento a renderizar.
#### renderEvents
Renderiza todos los eventos de la propiedad `events`.
```js
renderEvents(): void
```
## Eventos
#### CellClick
`cellclick`
Se dispara cuando se hace click sobre una celda del componente.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('cellclick', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
cell:
//Referencia a la celda.
datetime: "yyyy-MM-dd HH:mm" //Fecha y hora de la celda seleccionada.
date: "yyyy-MM-dd" //Fecha de la celda seleccionada.
time: "HH:mm" //Hora de la celda seleccionada.
}
*/
});
```
#### CellDoubleClick
`celldblclick`
Se dispara cuando se hace doble click sobre una celda del componente.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('celldblclick', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
cell: | //Referencia a la celda.
datetime: "yyyy-MM-dd HH:mm" //Fecha y hora de la celda seleccionada.
date: "yyyy-MM-dd" //Fecha de la celda seleccionada.
time: "HH:mm" //Hora de la celda seleccionada.
}
*/
});
```
#### ItemClick
`itemclick`
Se dispara cuando se hace click sobre un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemclick', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: { id:"", start:"", ... } // Propiedades del evento
*/
});
```
#### ItemDoubleClick
`itemdblclick`
Se dispara cuando se hace doble click sobre un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemdblclick', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: { id:"", start:"", ... } // Propiedades del evento
*/
});
```
#### ItemMoving
`itemmoving`
Se dispara durante el desplazamiento de un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemmoving', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: true
* detail: {
cell: | //Referencia a la celda actual del desplazamiento.
item: {} //Propiedades del evento antes de actualizar.
from: "" //Fecha de origen
to: "" //Fecha de destino
}
*/
});
```
#### ItemMoved
`itemmoved`
Ocurre al soltar un evento, después de desplazarlo cambiando su fecha de inicio.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemmoved', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
cell: | //Referencia a la celda actual del desplazamiento.
item: {} //Propiedades del evento después de actualizar.
from: "" //Fecha de origen
to: "" //Fecha de destino
}
*/
});
```
#### ItemResizing
`itemresizing`
Se dispara durante el redimensionamiento de un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemresizing', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
item: {} //Propiedades del evento antes de actualizar.
oldDuration: 0 //Duración inicial del evento.
newDuration: 0 //Nueva duración a establecer.
}
*/
});
```
#### ItemResized
`itemresized`
Ocurre al finalizar el redimensionamiento del evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemresizing', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
item: {} //Propiedades del evento después de actualizar.
oldDuration: 0 //Duración inicial del evento.
newDuration: 0 //Nueva duración del evento.
}
*/
});
```
#### BeforeCreateItem
`beforecreateitem`
Ocurre antes de crear un nuevo evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('beforecreateitem', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: true
* detail: {
item: {} //Propiedades del evento a crear.
}
*/
});
```
#### ItemCreated
`itemcreated`
Ocurre después de crear un nuevo evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemcreated', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
item: {} //Propiedades del evento creado.
element: //Referencia al elemento creado.
}
*/
});
```
#### BeforeUpdateItem
`beforeupdateitem`
Ocurre antes de actualizar un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('beforeupdateitem', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: true
* detail: {
oldItem: {} //Propiedades del evento antes de actualizar.
oldElement: //Copia del elemento antes de actualizar.
newItem: {} //Propiedades del evento con los nuevos valores.
}
*/
});
```
#### ItemUpdated
`itemupdated`
Ocurre después de actualizar un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemupdated', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
oldItem: {} //Propiedades del evento antes de actualizar.
oldElement: //Copia del elemento antes de actualizar.
newItem: {} //Propiedades del evento después de actualizar.
newElement: //Referencia al elemento actualizado.
}
*/
});
```
#### BeforeDeleteItem
`beforedeleteitem`
Ocurre antes de eliminar un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('beforedeleteitem', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: true
* detail: {
index: 0 //Indice del evento a eliminar.
item: {} //Propiedades del evento a eliminar.
}
*/
});
```
#### ItemDeleted
`itemdeleted`
Ocurre después de eliminar un evento.
**Ejemplo:**
```js
const schedule = document.getElementById('agenda');
schedule.addEventListener('itemdeleted', (e) => {
/**
* Argumentos del evento (e)
*
* cancelable: false
* detail: {
index: 0 //Indice del evento eliminado.
item: {} //Propiedades del evento eliminado.
}
*/
});
```
|