smh-rn-expo-json-ui-engine
Version:
A JSON-driven UI engine for React Native and Expo that enables dynamic, runtime-rendered interfaces without rebuilding the app.
1 lines • 972 B
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.JSONUI=void 0,Object.defineProperty(exports,"JSONUIEnums",{enumerable:!0,get:function(){return _types.JSONUIEnums}});var _react=require("react"),_render=_interopRequireDefault(require("./render.js")),_types=require("./types.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const isObservable=e=>!!e&&"function"==typeof e.subscribe,JSONUI=({json:e,jsonSource:r})=>{const[t,s]=(0,_react.useState)(e||[]);(0,_react.useEffect)(()=>{if(isObservable(r)){const e=r.subscribe(s);return()=>e.unsubscribe()}return()=>{}},[r]);const n=(0,_react.useMemo)(()=>isObservable(r)?t??[]:"function"==typeof r?r():r||(e??[]),[e,r,t]),u=Array.isArray(n)?n.map((e,r)=>(0,_jsxRuntime.jsx)(_react.Fragment,{children:(0,_render.default)(e)},r)):(0,_render.default)(n);return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u})};exports.JSONUI=JSONUI;
;