@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
92 lines (91 loc) • 2.49 kB
JavaScript
// src/provider/globalProvider.tsx
import { createContext, useContext } from "react";
import { jsx } from "react/jsx-runtime";
var RequestEventManager = class {
constructor() {
this.callbacks = [];
}
subscribe(callback) {
this.callbacks.push(callback);
return () => {
this.callbacks = this.callbacks.filter((cb) => cb !== callback);
};
}
trigger(status) {
this.callbacks.forEach((callback) => callback(status));
}
};
var ErrorEventManager = class {
constructor() {
this.callbacks = [];
}
subscribe(callback) {
this.callbacks.push(callback);
return () => {
this.callbacks = this.callbacks.filter((cb) => cb !== callback);
};
}
trigger(error) {
this.callbacks.forEach((callback) => callback(error));
}
};
var GlobalContext = createContext(null);
var GlobalProvider = ({ children }) => {
const errorEventManager = new ErrorEventManager();
const requestEventManager = new RequestEventManager();
const triggerError = (error) => {
errorEventManager.trigger(error);
};
const subscribeOnError = (callback) => {
return errorEventManager.subscribe(callback);
};
const triggerRequest = (status) => {
requestEventManager.trigger(status);
};
const subscribeOnRequest = (callback) => {
return requestEventManager.subscribe(callback);
};
return /* @__PURE__ */ jsx(
GlobalContext.Provider,
{
value: { triggerError, subscribeOnError, triggerRequest, subscribeOnRequest },
children
}
);
};
var useSubscribeOnError = () => {
const ctx = useContext(GlobalContext);
if (!ctx) {
throw new Error("useSubscribeToError must be used within a GlobalProvider");
}
return ctx.subscribeOnError;
};
var useTriggerError = () => {
const ctx = useContext(GlobalContext);
if (!ctx) {
throw new Error("useTriggerError must be used within a GlobalProvider");
}
return ctx.triggerError;
};
var useSubscribeOnRequest = () => {
const ctx = useContext(GlobalContext);
if (!ctx) {
throw new Error("useSubscribeToError must be used within a GlobalProvider");
}
return ctx.subscribeOnRequest;
};
var useTriggerRequest = () => {
const ctx = useContext(GlobalContext);
if (!ctx) {
throw new Error("useTriggerError must be used within a GlobalProvider");
}
return ctx.triggerRequest;
};
export {
GlobalProvider,
useSubscribeOnError,
useSubscribeOnRequest,
useTriggerError,
useTriggerRequest
};
//# sourceMappingURL=globalProvider.js.map