diff --git a/app/srv/core/main.js b/app/srv/core/main.js index fb96898f..778b648e 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -240,7 +240,7 @@ ${n.map(({variableName:r,uniqueLocalName:o})=>` reactHotLoader.register(${r}, " `);return a===-1&&(a=i.length,i+=` `),{code:i.slice(0,a+1)+n+i.slice(a+1)+r,mappings:this.shiftMappings(o.mappings,n.length)}}else return{code:n+i+r,mappings:this.shiftMappings(o.mappings,n.length)}}processBalancedCode(){let t=0,n=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(s.braceL)||this.tokens.matches1(s.dollarBraceL))t++;else if(this.tokens.matches1(s.braceR)){if(t===0)return;t--}if(this.tokens.matches1(s.parenL))n++;else if(this.tokens.matches1(s.parenR)){if(n===0)return;n--}this.processToken()}}processToken(){if(this.tokens.matches1(s._class)){this.processClass();return}for(let t of this.transformers)if(t.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(s._class,s.name))throw new Error("Expected identifier for exported class name.");let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),t}processClass(){let t=_y(this,this.tokens,this.nameManager,this.disableESTransforms),n=(t.headerInfo.isExpression||!t.headerInfo.className)&&t.staticInitializerNames.length+t.instanceInitializerNames.length>0,r=t.headerInfo.className;n&&(r=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(r),this.tokens.appendCode(` (${r} =`));let i=this.tokens.currentToken().contextId;if(i==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(s._class);!this.tokens.matchesContextIdAndLabel(s.braceL,i);)this.processToken();this.processClassBody(t,r);let a=t.staticInitializerNames.map(l=>`${r}.${l}()`);n?this.tokens.appendCode(`, ${a.map(l=>`${l}, `).join("")}${r})`):t.staticInitializerNames.length>0&&this.tokens.appendCode(` ${a.map(l=>`${l};`).join(" ")}`)}processClassBody(t,n){let{headerInfo:r,constructorInsertPos:o,constructorInitializerStatements:i,fields:a,instanceInitializerNames:l,rangesToRemove:u}=t,c=0,p=0,y=this.tokens.currentToken().contextId;if(y==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(s.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let d=i.length+l.length>0;if(o===null&&d){let x=this.makeConstructorInitCode(i,l,n);if(r.hasSuperclass){let w=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${w}) { super(...${w}); ${x}; }`)}else this.tokens.appendCode(`constructor() { ${x}; }`)}for(;!this.tokens.matchesContextIdAndLabel(s.braceR,y);)if(c=u[p].start){for(this.tokens.currentIndex()`${r}.prototype.${o}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(s.parenR,s.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,s.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(I._async)&&!this.tokens.matches1(s._async))return!1;let t=this.tokens.tokenAtRelativeIndex(1);if(t.type!==s.lessThan||!t.isType)return!1;let n=this.tokens.currentIndex()+1;for(;this.tokens.tokens[n].isType;)n++;if(this.tokens.matches1AtIndex(n,s.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex(){let n={};for(let[r,o]of Object.entries(e)){n[r]=nC(o,{transforms:["typescript","imports","jsx"],preserveDynamicImport:!0,disableESTransforms:!0,filePath:t}).code;let i=['"use strict";'];for(let a of i)n[r].startsWith(a)&&(n[r]=n[r].substring(a.length).trim())}return n};h();g();m();var ds=ye($t());h();g();m();var Hj=Mm("prasi-cache","prasi-cache-store"),rC={timeout:null,store:Hj},hp=(e,t)=>{let n=[...oC(t,"navigate(",")"),...oC(t,"href = ",";")],r=e.page.cur.id;e.page.navs[r]||(e.page.navs[r]=new Set);for(let o of n)e.page.navs[r].add(o);clearTimeout(rC.timeout),rC.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},oC=(e,t,n)=>{let r=0,o=0,i=[];for(;;){let a=e.indexOf(t,r);if(o=r,a>=0){let l=e[a+t.length];if(l==='"'||l==="'"||l==="`"){let u=e.indexOf(`${l}${n}`,a+t.length+1),c=e.substring(a+t.length+1,u);r=u+2+n.length,i.push(c)}}if(o===r)break}return i};h();g();m();var ps=ye($t());h();g();m();var iC=ye(rg()),fs=ye($t());var vy=ye(Ze()),sC=(e,t,n,r,o)=>i=>{let[a,l]=(0,fs.useState)({}),u=i.idx||i.internal_key;n.item.script||(n.item.script={});let c=n.item.script;typeof u<"u"&&(n.item.script_keyed||(n.item.script_keyed={}),n.item.script_keyed[u]||(n.item.script_keyed[u]={}),c=n.item.script_keyed[u]),c.passprop||(c.passprop={});let p={},y=!1;for(let[w,T]of Object.entries(i))["children","key"].includes(w)||(y=!0,p[w]=T);let d={...r,...p};if(typeof u<"u"&&((typeof c.passprop.internal_key>"u"||u===c.passprop.internal_key)&&(c.passprop=d),d=c.passprop),n.editor_props=d,!Array.isArray(i.children)&&(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=(0,iC.default)(i.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(w)){let T=!0;for(let S of w)!(0,fs.isValidElement)(S)&&typeof S=="object"||(T=!1);if(T)return w.map(S=>{let _=e.meta[S.id];if(_||(e.meta[S.id]={item:S},_=e.meta[S.id]),_){if(Object.keys(_.item).length<=3&&_.mitem){let k={..._.item},v=_.mitem.toJSON();_.item={...v,...k}}return(0,vy.jsx)(xo,{is_layout:t,meta:_,passprop:d,parent_key:i.internal_key,depth:o},S.id)}return null})}}if(!Array.isArray(i.children)&&!(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=i.children.id;if(w){let T=e.meta[w];if(!T){e.meta[w]={item:i.children},T=e.meta[w];let S=T.item.component?.id;S&&e.comp.load(S).then(_=>{if(_){for(let[v,E]of Object.entries(_)){let P=T.item;P[v]||(P[v]=E)}let k=T.item.component?.props;for(let[v,E]of Object.entries(_.component?.props||{}))k[v]||(k[v]=E);l({})}})}return(0,vy.jsx)(xo,{is_layout:t,meta:T,passprop:d,parent_key:i.internal_key,depth:o})}}return mp(i,d,u?{parent_key:u}:void 0)},mp=(e,t,n)=>{let r={};if(Array.isArray(e)?r.children=e:r=e,Array.isArray(r.children)){if(r.children.length===1)return ky(r.children[0],r,t,n);let o=[];for(let i of r.children)o.push(ky(i,r,t,n));return o}return ky(r.children,r,t,n)},ky=(e,t,n,r)=>{if((0,fs.isValidElement)(e)){let o={...t};return delete o.children,{...e,props:{...e.props,...r,passprop:{...n,...o}}}}else if(Array.isArray(e))return mp(e,n,r);return e};var Na={},aC=(e,t,n)=>r=>{let o=(["prasi.avolut.com"].includes(location.hostname)||location.host==="localhost:4550")&&location.pathname.startsWith("/ed/"),i=n.item.id,{children:a,parent_key:l}=r,u=e.script?.init_local_effect,c=t?e.layout?.meta:e.meta,p=(0,ps.useRef)(Na[i]?Na[i]:r.value),[y,d]=(0,ps.useState)({}),x=p.current;return x.render=()=>{window.prasiContext.render?window.prasiContext.render():d({})},gp(e,n,n.script?.scope,l),r.hook&&r.hook(x),(0,ps.useEffect)(()=>{if(n.parent?.instance_id&&c){let S=c[n.parent?.instance_id];if(S&&S.instances){for(let[_,k]of Object.entries(S.instances[n.parent.instance_id]))if(k===n.item.id){i=_;break}}}return!u[i]&&(typeof u=="object"&&(u[i]=!0),(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()),()=>{}},[...r.deps||[],location.pathname]),(0,ps.useEffect)(()=>{o&&Na[i]===null&&(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()},[Na[i]]),mp(a,{...n.script?.scope,[r.name]:x})};h();g();m();var by=ye(v1());var rc=window,Da=(e,t,n,r)=>{let o=r||{},i=t.get("id")||"";rc.prasiEditDevItem||(rc.prasiEditDevItem={});let a=rc.prasiEditDevItem[n];a||(rc.prasiEditDevItem[n]={},a=rc.prasiEditDevItem[n]);let l=()=>{let p=t.get("id")||"",y=a[p];return y||(a[p]=[],y=a[p]),y},u=t.toJSON(),c={...u,edit:{get props(){if(u.component?.props){let p={};for(let[y,d]of Object.entries(u.component.props))if(d.content){let x=t.get("component")?.get("props")?.get(y)?.get("content");if(x){let w=x.get("id")||"";o[w]?p[y]={mode:"jsx",value:o[w]}:p[y]={mode:"jsx",value:Da(e,x,n,o)}}else p[y]={mode:"jsx",value:null}}else{let x=typeof d.valueBuilt=="string"?d.valueBuilt.trim():"";if(x.endsWith(`; `)&&(x=x.substring(0,x.length-2)),x&&x===d.value.trim()){let w=new Function(`return ${d.value}`);p[y]={mode:"string",value:w()}}else p[y]={mode:"raw",value:d.value,valueBuilt:d.valueBuilt}}return p}},get pending(){return[]},async commit(){let p={},y={};if(t){for(let[d,x]of Object.entries(a)){let w=e[d];if(!w||!w.mitem)continue;let S=w.mitem.toJSON();if(S&&S.component){let _=S?.component?.props;if(!_){console.log(S,_);return}let k={};for(let E of x)if(E.type==="prop"&&_)_[E.name]&&(E.mode==="string"?(_[E.name].value=JSON.stringify(E.value),_[E.name].valueBuilt=JSON.stringify(E.value)):E.mode==="raw"?(_[E.name].value=E.value,E.valueBuilt?_[E.name].valueBuilt=E.valueBuilt:k[E.name]=E.value):E.mode==="jsx"&&(_[E.name]||(_[E.name]={meta:{type:"content-element"}}),E.value&&(_[E.name].content=La([E.value],y)[0])));else if(E.type==="set"&&typeof E.value=="object")for(let[P,W]of Object.entries(E.value))S[P]=W;else if(E.type==="child"&&Array.isArray(E.childs))if(S.component?.id)S.component.props||(S.component.props={}),S.component.props.child={meta:{type:"content-element"},content:{type:"item",id:(0,by.createId)(),name:"child",childs:La(E.childs.filter(P=>P),y)}};else{let P=La(E.childs.filter(W=>W),y);S.childs=P}for(let[E,P]of Object.entries(y))k[E]=P.value;let v=dp(k);if(await new Promise(E=>{setTimeout(E)}),_)for(let[E,P]of Object.entries(v))_[E]?_[E].valueBuilt=P:y[E]&&(y[E].valueBuilt=P);p[d]=S}}t.doc?.transact(()=>{for(let[d,x]of Object.entries(p)){let w=e[d];w.mitem&&syncronize(w.mitem,x)}})}},setValue(p,y){let d=l(),x=y;if(p==="childs")throw new Error("Please modify childs via .child");d.push({type:"set",name:p,value:x})},setProp(p,y){let d=l();typeof y=="string"?d.push({type:"prop",mode:"string",name:p,value:y}):y.mode==="string"?d.push({type:"prop",mode:"string",name:p,value:y.value}):y.mode==="raw"?d.push({type:"prop",mode:"raw",name:p,value:y.value,valueBuilt:y.valueBuilt}):y.mode==="jsx"&&d.push({type:"prop",mode:"jsx",name:p,value:y.value})},setChilds(p){l().push({type:"child",childs:p})},get childs(){if(u.component?.id){let p=u.component?.props.child;if(p&&p.content){let y=t.get("component")?.get("props")?.get("child")?.get("content");if(y){let d=y.get("id")||"";return o[d]?[o[d]]:[Da(e,y,n,o)]}}return[]}return u.childs?u.childs.map(p=>{if(p){let y=e[p.id];if(o[p.id])return o[p.id];if(y&&y.mitem)return Da(e,y.mitem,n,o)}}).filter(p=>p):[]},get parent(){if(t){let p=t.parent.toJSON(),y=null;if(Array.isArray(p))y=(t.parent?.parent).get("id");else{let x=t.parent?.parent?.parent?.parent;typeof x=="object"&&typeof x.get=="function"&&(y=x.get("id"))}let d=e[y]?.mitem;if(d){let x=o[y]?o[y]:Da(e,d,n,o);return Array.isArray(p)?{item:x,child_type:"child",child_idx:p.findIndex(w=>w.id===x.id)}:{item:x,child_type:"prop"}}}return null}}};return o[i]=c,c},Wj=(e,t)=>{let n={};for(let[r,o]of Object.entries(e))o.mode?o.mode==="string"?n[r]={value:JSON.stringify(o.value),valueBuilt:JSON.stringify(o.value),meta:{type:"text"}}:o.mode==="jsx"&&o.value?n[r]={value:"",valueBuilt:"",content:La([o.value],t)[0],meta:{type:"content-element"}}:o.mode==="raw"&&(n[r]={value:o.value,valueBuilt:o.valueBuilt,meta:{type:"text"}}):n[r]=o;return n},La=(e,t)=>{let n=t||{};return e.map(o=>{let i={...o};if(delete i.edit,i.id||(i.id=(0,by.createId)()),i.component&&(i.component.instances||(i.component.instances={}),i.component.ref_ids||(i.component.ref_ids={}),i.component?.props)){i.component.props=Wj(i.component.props,n);for(let[a,l]of Object.entries(i.component.props))!l.valueBuilt&&l.value&&(n[i.id+"|||"+a]=l),l.content&&(l.content=La([l.content],n)[0])}return i.childs?i.childs=La(i.childs,n):i.childs=[],i})};h();g();m();var Ma=(e,t,n)=>({...t,edit:{setChilds(r){},get childs(){if(t.component?.id){let r=t.component?.props.child;return r.content?[Ma(e,r.content,n)]:[]}return t.childs?t.childs.map(r=>{if(r){let o=e[r.id];if(o&&o.item)return Ma(e,o.item,n)}}).filter(r=>r):[]},get props(){if(t.component?.props){let r={};for(let[o,i]of Object.entries(t.component.props))if(i.content){let a=t.component?.props?.[o]?.content;a?r[o]={mode:"jsx",value:Ma(e,a,n)}:r[o]={mode:"jsx",value:null}}else{let a=typeof i.valueBuilt=="string"?i.valueBuilt.trim():"";if(a.endsWith(`; -`)&&(a=a.substring(0,a.length-2)),a&&a===i.value.trim()){let l=new Function(`return ${i.value}`);r[o]={mode:"string",value:l()}}else r[o]={mode:"raw",value:i.value,valueBuilt:i.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let o=e[r.parent.id];return Ma(e,o.item,n)}return null},pending:[],setProp(r,o){},setValue(r,o){}}});var Sy=ye(Ze()),lC=(e,t,n,r,o,i)=>{let a=wu(e,t,n,r,o);e.visit&&e.visit(t,a),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:aC(e,n,t),PassProp:sC(e,n,t,r,o)};let l=t.script,u=window.exports,c={useEffect:ds.useEffect,children:a.props.children,props:a.props,Local:l?.Local,db:e.site.db,api:e.site.api,PassProp:l?.PassProp,ErrorBox:$r,newElement:()=>{},__props:r,_item:t.mitem?Da(e.meta,t.mitem,e.page.cur.id):Ma(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:x=>{let w=x;if((0,ds.isValidElement)(x)&&x.props.children){let T=_=>{let k=!1,v=[];if((0,ds.isValidElement)(_)){if(_.type===t.script?.PassProp)return{should_replace:!0,el:{..._,props:{..._.props,internal_key:_.key}}};if(Array.isArray(_.props?.children))for(let E of _.props?.children)if(Array.isArray(E)){let P=[],W=!1;for(let D of E){let Y=T(D);Y.should_replace?(P.push(Y.el),W=!0):P.push(D)}W?(k=!0,v.push(P)):v.push(E)}else typeof E=="object"&&E?E.type===t.script?.PassProp&&(k=!0,v.push({...E,props:{...E.props,internal_key:E.props.key}})):v.push(E)}return{should_replace:k,el:{..._,props:{..._.props,children:v}}}},S=T(x);S.should_replace&&(w=S.el)}l&&(l.result=(0,Sy.jsx)(ds.Suspense,{children:w}))},params,...T1(e),...u,...r};if(typeof r=="object"){for(let[x,w]of Object.entries(r))if(typeof w=="object"&&w&&w._jsx){let T=w;c[x]=(0,Sy.jsx)(qj,{fn:T.fn,passprop:{...r},meta:t})}}!fn.isEditor&&t.item.adv?.js&&hp(e,t.item.adv.js);let p=t.item.adv?.jsBuilt||"",y=Ty(p,Ey)||"",d=`// ${t.item.name}: ${t.item.id} +`)&&(a=a.substring(0,a.length-2)),a&&a===i.value.trim()){let l=new Function(`return ${i.value}`);r[o]={mode:"string",value:l()}}else r[o]={mode:"raw",value:i.value,valueBuilt:i.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let o=e[r.parent.id];return Ma(e,o.item,n)}return null},pending:[],setProp(r,o){},setValue(r,o){}}});var Sy=ye(Ze()),lC=(e,t,n,r,o,i)=>{let a=wu(e,t,n,r,o);e.visit&&e.visit(t,a),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:aC(e,n,t),PassProp:sC(e,n,t,r,o)};let l=t.script,u=window.exports,c={useEffect:ds.useEffect,children:a.props.children,props:a.props,Local:l?.Local,db:e.site.db,api:e.site.api,PassProp:l?.PassProp,ErrorBox:$r,newElement:()=>{},__props:r,_item:t.mitem?Da(e.meta,t.mitem,e.page.cur.id):Ma(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:x=>{let w=x;if((0,ds.isValidElement)(x)&&x.props.children){let T=_=>{let k=!1,v=[];if((0,ds.isValidElement)(_)){if(_.type===t.script?.PassProp)return{should_replace:!0,el:{..._,props:{..._.props,internal_key:_.key}}};if(Array.isArray(_.props?.children))for(let E of _.props?.children)if(Array.isArray(E)){let P=[],W=!1;for(let D of E){let Y=T(D);Y.should_replace?(P.push(Y.el),W=!0):P.push(D)}W?(k=!0,v.push(P)):v.push(E)}else typeof E=="object"&&E?E.type===t.script?.PassProp&&(k=!0,v.push({...E,props:{...E.props,internal_key:E.props.key}})):v.push(E)}return{should_replace:k,el:{..._,props:{..._.props,children:v}}}},S=T(x);S.should_replace&&(w=S.el)}l&&(l.result=(0,Sy.jsx)(ds.Suspense,{children:w}))},params,...T1(e),...u,...r};if(typeof r=="object"){for(let[x,w]of Object.entries(r))if(typeof w=="object"&&w&&w._jsx){let T=w;c[x]=(0,Sy.jsx)(qj,{fn:T.fn,passprop:{...r},meta:t})}}!fn.isEditor&&t.item.adv?.js&&hp(e,t.item.adv.js);let p=t.item.adv?.jsBuilt||"",y=Ty(p,Ey)||"";p.includes("parent_props")&&console.log(t.item.name,c);let d=`// ${t.item.name}: ${t.item.id} try { ${y} } catch (e) { diff --git a/app/web/src/nova/ed/logic/active/activate-meta.tsx b/app/web/src/nova/ed/logic/active/activate-meta.tsx index c7aedf71..147f3ac0 100644 --- a/app/web/src/nova/ed/logic/active/activate-meta.tsx +++ b/app/web/src/nova/ed/logic/active/activate-meta.tsx @@ -4,12 +4,17 @@ import { getMetaById } from "./get-meta"; export const activateMeta = (p: PG, _meta: IMeta) => { scrollTreeActiveItem(); - + let meta = _meta; let parent_comp_id = meta.parent?.comp_id; if (!active.comp_id && meta.parent?.comp_id) { - if (!Object.keys(meta).includes("jsx_prop") && meta.parent.instance_id) { + const meta_keys = Object.keys(meta); + if ( + (!meta_keys.includes("jsx_prop") || + (meta_keys.includes("jsx_prop") && meta.jsx_prop?.is_root)) && + meta.parent.instance_id + ) { const comp = getMetaById(p, meta.parent.instance_id); if (comp) meta = comp; } diff --git a/app/web/src/nova/vi/render/script/eval-script.tsx b/app/web/src/nova/vi/render/script/eval-script.tsx index 435cffb0..64232e14 100644 --- a/app/web/src/nova/vi/render/script/eval-script.tsx +++ b/app/web/src/nova/vi/render/script/eval-script.tsx @@ -165,6 +165,10 @@ export const viEvalScript = ( const js = meta.item.adv?.jsBuilt || ""; const src = replaceWithObject(js, replacement) || ""; + if (js.includes("parent_props")) { + console.log(meta.item.name, arg); + } + const final_src = `\ // ${meta.item.name}: ${meta.item.id} try {