import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { appActions, processOptions, useVariables } from "../..";
import objectPath from "object-path";
const safeEval = require('safe-eval-2')
/**
* Componente que al renderizarse setea variables en memoria temporal (vía redux).
* @name Reactor.Components.Templates.SetVariable
* @param {string!} variable Nombre de la variable que se va a modificar o crear, acepta path de la libreria object-path-immutable mediante el método set()
* @param {string} [context = "global"] Nombre del contexto que contiene o va a contener la variable, si se omite el contexto sera "global"
* @param {string!} data Valor que se asignará a la variable, si comienza con "ev|" evaluará con safe-eval-2 el resultado de lo que este despues de la pipa
* @param {BooleanString} storage Si es "true" la variable se guarda en LocalStorage
* @class
* @example
<set_variable variable="Nombre" context="Datos" data="Pepito" storage="true"></set_variable>
*/
export const SetVariable = ({variable, context = "global", data, children, storage}) => {
const variables = useVariables({variable, context, storage});
useEffect(()=>{
//console.log({variable, context, storage, data})
variables.setData(data)
}, [data]);
return <>{children}</>;
}