inegicomponente
Version:
Componentes de visualizacion 2023 - Graficas
57 lines (50 loc) • 1.75 kB
JavaScript
/**==============================================
* ! CONTEXTO DEL ESTADO GLOBAL
*
* @descripcion: Declaracion y configuracion del estado global donde se guardan los store
*
*=============================================**/
import React, {createContext, useRef, useContext} from 'react';
import { createStore, useStore } from 'zustand';
// Merge de objeto configuración
const mergeObject = (store, c) => {
return {...store,...c};
}
export const StoreContexto = createContext();
// Contexto del Store global
const useStoreGlobal = (selector) => {
const store = useContext(StoreContexto)
if (!store) {
throw new Error('Missing StoreProvider')
}
return useStore(store, selector)
}
// Provider
const StoreProvider = ({children}) => {
let store = useRef()
if(!store.current){
store.current = createStore((set, get) => ({
_configuracion:{}, // store parámetros de configuracion de entrada
_inicializa:(c, d) => {
// seteamos los objetos a los estados
set((state) =>({_dataset:d}))
set((state) =>({_configuracion:c}))
},
// Actualiza parametros de configuracion
_updateConfiguracion:(p) => {
let oConfig = get()._configuracion;
let oMerged = mergeObject(oConfig,p);
set((state) =>({_configuracion:oMerged}))
}
}))
}
return (
<StoreContexto.Provider value={store.current}>
{children}
</StoreContexto.Provider>
)
}
export {
useStoreGlobal,
StoreProvider
}