@lifi/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
50 lines (49 loc) • 1.56 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createContext, useContext, useRef } from 'react';
import { createWithEqualityFn } from 'zustand/traditional';
export const HeaderStoreContext = createContext(null);
export function HeaderStoreProvider({ children, ...props }) {
const storeRef = useRef();
if (!storeRef.current) {
storeRef.current = createHeaderStore(props);
}
return (_jsx(HeaderStoreContext.Provider, { value: storeRef.current, children: children }));
}
export function useHeaderStore(selector, equalityFn) {
const useStore = useContext(HeaderStoreContext);
if (!useStore) {
throw new Error(`You forgot to wrap your component in <${HeaderStoreProvider.name}>.`);
}
return useStore(selector, equalityFn);
}
export function useHeaderStoreContext() {
const useStore = useContext(HeaderStoreContext);
if (!useStore) {
throw new Error(`You forgot to wrap your component in <${HeaderStoreProvider.name}>.`);
}
return useStore;
}
export const createHeaderStore = ({ namePrefix }) => createWithEqualityFn((set, get) => ({
setAction: (element) => {
set(() => ({
element,
}));
return get().removeAction;
},
setTitle: (title) => {
set(() => ({
title,
}));
return get().removeTitle;
},
removeAction: () => {
set(() => ({
element: null,
}));
},
removeTitle: () => {
set(() => ({
title: undefined,
}));
},
}), Object.is);