UNPKG

react-defold

Version:
53 lines (50 loc) 2.11 kB
import React, { memo, useRef, useState, useEffect, useCallback } from 'react'; var DefoldAppContext = React.createContext(undefined); var DefoldAppContextProvider = memo(function DefoldAppContextProvider(_a) { var namespace = _a.namespace, data = _a.data, children = _a.children; var ref = useRef(data); var context = useState({ namespace: namespace, inbound: [], outbound: [], data: ref, onReceive: function () { }, })[0]; useEffect(function () { window[context.namespace] = { inbound: context.inbound, outbound: context.outbound, data: context.data.current, in: function (msg) { return context.inbound.push(JSON.parse(msg)); }, out: function () { var next = context.outbound.shift(); return next ? JSON.stringify(next) : ""; }, tick: function () { context.inbound.forEach(function (_a) { var command = _a.command, payload = _a.payload; return context.onReceive(command, payload); }); context.inbound.splice(0, context.inbound.length); } }; }, [context]); return React.createElement(DefoldAppContext.Provider, { value: context }, children); }); var useDefoldAppContext = function (_a) { var onReceive = _a.onReceive; var context = React.useContext(DefoldAppContext); useEffect(function () { if (onReceive && context) context.onReceive = onReceive; }, [context, onReceive]); var send = useCallback(function (command, payload) { if (context) context.outbound.push({ command: command, payload: payload }); }, [context]); if (context === undefined) throw new Error('useDefoldAppContext must be used within a useDefoldAppContext'); return { data: context.data.current, send: send }; }; export { DefoldAppContextProvider, useDefoldAppContext }; //# sourceMappingURL=DefoldAppContext.js.map