import React, { useEffect, useMemo, useState } from "react";
import { emptyObject, processOptions, useVariables } from "../..";
/**
* Componente que renderiza un select con opciones extendidas
* @name Reactor.Components.Input.SelectExt
* @param {string} [options = {}] Json string con las propiedades React que se quieran asignar al componente
* @param {string} name
* name del control
* @param {BooleanString} [use_change = "false"]
* establece si envia el evento change al cambiar el archivo
* @param {string?} storage_name El nombre que usara para guardar el dato en el storage, si no se pasa este parĂ¡metro se usara el name del input
* @param {string?} change_var Variable que tomarĂ¡ el valor del control cuando se modifique
* @param {string} [context = "global"] Contexto donde se encuentra la variable
* @class
* @example
<select_ext name="nombre_control" options='{"className": "clase1", "style": {"width": 120}}' var-value="nombreVariable" context="nombreContexto" change_var="nombreVariable">
<option value="opcion1">opcion1</option>
<option value="opcion2">opcion2</option>
</select_ext>
*/
export const SelectExt = ({defaultValue, value, options = "{}", context, change_var, children, storage_name, ...props}) => {
const [ controlValue, setControlValue ] = useState(defaultValue)
const variables = useVariables({variable: change_var, context, storage: storage_name});
const handleChange = (event) => {
variables.setData(event.target.value);
setControlValue(event.target.value);
}
const optionsObj = useMemo(()=>processOptions(options), [options]);
useEffect(()=>{
//console.log({value})
setControlValue(value || "");
//variables.setData(value || "");
}, [value])
return (
<select {...props} {...optionsObj} value={controlValue} onChange={handleChange}>
{children}
</select>
)
}