diff --git a/app/srv/core/main.js b/app/srv/core/main.js index 386f186f..b3088787 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -94,7 +94,7 @@ Error generating stack: `+o.message+` ${og(e,t.mode)} ${Sg(e,t.mode)} `,(t?.hover||t?.active)&&kg({item:e,hover:t?.hover,active:t?.active}),ig(e,t.mode)])}catch(n){console.log(n)}return cx([])};var Rg=P(G()),xo=(e,t,n,r,i)=>{let o=t.item,l;o.component?.style&&(l={style:o.component.style,className:kf(o.component.style,{mode:e.mode})});let s={className:kf(o,{mode:e.mode}),inherit:l},a={},u=t.item.childs,c;return t.item.type==="text"?(c=null,s.dangerouslySetInnerHTML={__html:t.item.html||""}):c=Array.isArray(u)&&u?.map(d=>{if(!d)return null;let{id:f}=d,p=n?e.layout?.meta[f]:e.meta[f];return p?(0,Rg.jsx)(qt,{meta:p,is_layout:n,passprop:{...r},depth:i+1},f):null}),s.children=c,t.item.adv?.html?(delete s.children,s.dangerouslySetInnerHTML={__html:t.item.adv?.html}):t.item.adv?.js&&!t.item.adv.js.includes("children")&&(delete s.children,delete s.dangerouslySetInnerHTML),{props:s,text_props:a}};var Oy=P(ge());var Cy=P($s());var Yr={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function Hs(e={}){let t={options:e,rootNode:xy(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)wy(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>GS(t,n(r)),insert:(r,i)=>wy(t,n(r),i),remove:r=>ZS(t,n(r))}}function GS(e,t){let n=e.staticRoutesMap[t];if(n)return n.data;let r=t.split("/"),i={},o=!1,l=null,s=e.rootNode,a=null;for(let u=0;u{},db:null,api:null,init_local_effect:{}},page:{history:{id:"",show:!1},root_id:"root",cur:XS,doc:null,list:{},building:!1,meta:{},entry:[],tree:[],render:()=>{}},comp:{doc:null,item:null,loaded:{},list:{},group:{}},code:{},global_prop:[],ui:{monaco:null,comp_editable:localStorage.getItem("prasi-comp-editable")==="yes",zoom:localStorage.zoom||"100%",side:{prop:!0},layout:{left:parseInt(localStorage.getItem("prasi-layout-left")||"250"),right:parseInt(localStorage.getItem("prasi-layout-right")||"250")},prevent_indent_hook:!1,syncing:!1,tree:{item_loading:[],search:"",search_ref:null,search_mode:{Name:!0,JS:!1,HTML:!1,CSS:!1},rename_id:"",open:{}},popup:{file:{enabled:!1,open:!1,picker:{value:"",on_pick:!1,multi:!1},path:"/",expanded:JSON.parse(localStorage.getItem("panel-file-expanded")||"{}"),entry:{},selected:new Set,action:null,file_renaming:"",file_ctx_menu_event:null,tree:[],tree_renaming:"",tree_ctx_path:"",tree_ctx_menu_event:null,preview:!0,upload:{started:!1,progress:{}}},code:{init:!1,open:!1,name:"site",log:"",loading:!1,startup_status:"init",error:!1,show_log:!1,list:{}},page:{open:null,form:null},script:{open:!1,mode:"js",lastMode:"js",type:"item",prop_kind:"",prop_name:"",on_close:()=>{},typings:{status:"ok",err_msg:""},wb_render:()=>{}},site:null,site_form:null,comp:{preview_id:"",open:null,import:!1},comp_group:null,api:{open:!1}}}};var Vs=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var sr=P(ge());var ut=window;var qS=ff("prasi-cache","prasi-cache-store"),Io={timeout:null,store:qS},Ws=(e,t)=>{let n=[...ky(t,"navigate(",")"),...ky(t,"href = ",";")],r=e.page.cur.id;e.page.navs[r]||(e.page.navs[r]=new Set);for(let i of n)e.page.navs[r].add(i);clearTimeout(Io.timeout),Io.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},ky=(e,t,n)=>{let r=0,i=0,o=[];for(;;){let l=e.indexOf(t,r);if(i=r,l>=0){let s=e[l+t.length];if(s==='"'||s==="'"||s==="`"){let a=e.indexOf(`${s}${n}`,l+t.length+1),u=e.substring(l+t.length+1,a);r=a+2+n.length,o.push(u)}}if(i===r)break}return o};var lr=P(ge());var Sy=P(xf()),or=P(ge());var Tf=P(G()),Ey=(e,t,n,r,i)=>o=>{let[l,s]=(0,or.useState)({}),a=o.internal_key;n.item.script||(n.item.script={});let u=n.item.script;a&&(n.item.script_keyed||(n.item.script_keyed={}),n.item.script_keyed[a]||(n.item.script_keyed[a]={}),u=n.item.script_keyed[a]),u.passprop||(u.passprop={});let c={};if(u.passprop){let p=!1;for(let[g,_]of Object.entries(o))["children","key"].includes(g)||(p=!0,c[g]=_)}let d={...r,...c};if(!Array.isArray(o.children)&&(0,or.isValidElement)(o.children)&&typeof o.children=="object"){let p=(0,Sy.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(p)){let g=!0;for(let _ of p)!(0,or.isValidElement)(_)&&typeof _=="object"||(g=!1);if(g)return p.map(_=>{let w=e.meta[_.id];if(w||(e.meta[_.id]={item:_},w=e.meta[_.id]),w){if(Object.keys(w.item).length<=3&&w.mitem){let h={...w.item},m=w.mitem.toJSON();w.item={...m,...h}}return(0,Tf.jsx)(qt,{is_layout:t,meta:w,passprop:d,parent_key:o.internal_key,depth:i},_.id)}return null})}}if(!Array.isArray(o.children)&&!(0,or.isValidElement)(o.children)&&typeof o.children=="object"){let p=o.children.id;if(p){let g=e.meta[p];if(!g){e.meta[p]={item:o.children},g=e.meta[p];let _=g.item.component?.id;_&&e.comp.load(_).then(w=>{if(w){for(let[m,y]of Object.entries(w)){let v=g.item;v[m]||(v[m]=y)}let h=g.item.component?.props;for(let[m,y]of Object.entries(w.component?.props||{}))h[m]||(h[m]=y);s({})}})}return(0,Tf.jsx)(qt,{is_layout:t,meta:g,passprop:d,parent_key:o.internal_key,depth:i})}}return Pf(o,d,a?{parent_key:a}:void 0)},Pf=(e,t,n)=>{let r={};if(Array.isArray(e)?r.children=e:r=e,Array.isArray(r.children)){if(r.children.length===1)return Of(r.children[0],r,t,n);let i=[];for(let o of r.children)i.push(Of(o,r,t,n));return i}return Of(r.children,r,t,n)},Of=(e,t,n,r)=>{if((0,or.isValidElement)(e)){let i={...t};return delete i.children,{...e,props:{...e.props,...r,passprop:{...n,...i}}}}return e};var ti={},by=(e,t,n)=>r=>{let i=["localhost","prasi.avolut.com"].includes(location.hostname)&&location.pathname.startsWith("/ed/"),o=n.item.id,{children:l,parent_key:s}=r,a=e.script?.init_local_effect,u=t?e.layout?.meta:e.meta,c=(0,lr.useRef)(ti[o]?ti[o]:r.value),[d,f]=(0,lr.useState)({}),p=c.current;return p.render=()=>{window.prasiContext.render?window.prasiContext.render():f({})},Gs(e,n,n.script?.scope,s),r.hook&&r.hook(p),(0,lr.useEffect)(()=>{if(n.parent?.instance_id&&u){let _=u[n.parent?.instance_id];if(_&&_.instances){for(let[w,h]of Object.entries(_.instances[n.parent.instance_id]))if(h===n.item.id){o=w;break}}}return!a[o]&&(typeof a=="object"&&(a[o]=!0),(async()=>r.effect&&(await r.effect(p),i&&(ti[o]=p)))()),()=>{}},[...r.deps||[],location.pathname]),(0,lr.useEffect)(()=>{i&&ti[o]===null&&(async()=>r.effect&&(await r.effect(p),i&&(ti[o]=p)))()},[ti[o]]),Pf(l,{...n.script?.scope,[r.name]:p})};var Zs=P($s()),No=window,ni=(e,t,n)=>{No.prasiEdit||(No.prasiEdit={});let r=No.prasiEdit[n];r||(No.prasiEdit[n]={},r=No.prasiEdit[n]);let i=()=>{let l=t.get("id")||"",s=r[l];return s||(r[l]=[],s=r[l]),s},o=t.toJSON();return{...o,edit:{get props(){if(o.component?.props){let l={};for(let[s,a]of Object.entries(o.component.props))if(a.content){let u=t.get("component")?.get("props")?.get(s)?.get("content");u?l[s]={mode:"jsx",value:ni(e,u,n)}:l[s]={mode:"jsx",value:null}}else{let u=typeof a.valueBuilt=="string"?a.valueBuilt.trim():"";if(u.endsWith(`; -`)&&(u=u.substring(0,u.length-2)),u&&u===a.value.trim()){let c=new Function(`return ${a.value}`);l[s]={mode:"string",value:c()}}else l[s]={mode:"raw",value:a.value,valueBuilt:a.valueBuilt}}return l}},get pending(){return[]},async commit(){let l={},s={};if(t){for(let[a,u]of Object.entries(r)){let c=e[a];if(!c||!c.mitem)continue;let f=c.mitem.toJSON();if(f&&f.component){let p=f?.component?.props;if(!p){console.log(f,p);return}let g={};for(let w of u)if(w.type==="prop"&&p)p[w.name]&&(w.mode==="string"?(p[w.name].value=JSON.stringify(w.value),p[w.name].valueBuilt=JSON.stringify(w.value)):w.mode==="raw"?(p[w.name].value=w.value,w.valueBuilt?p[w.name].valueBuilt=w.valueBuilt:g[w.name]=w.value):w.mode==="jsx"&&(p[w.name]||(p[w.name]={meta:{type:"content-element"}}),w.value&&(p[w.name]?.content?p[w.name].content={...p[w.name].content,childs:[ri([w.value],s)[0]]}:p[w.name].content={type:"item",id:(0,Zs.createId)(),name:w.name,childs:[ri([w.value],s)[0]]})));else if(w.type==="set"&&typeof w.value=="object")for(let[h,m]of Object.entries(w.value))f[h]=m;else if(w.type==="child"&&Array.isArray(w.childs))if(f.component?.id)f.component.props||(f.component.props={}),f.component.props.child={meta:{type:"content-element"},content:{type:"item",id:(0,Zs.createId)(),name:"child",childs:[ri(w.childs.filter(h=>h),s)[0]]}};else{let h=ri(w.childs.filter(m=>m),s);f.childs=h}for(let[w,h]of Object.entries(s))g[w]=h.value;let _=await _api.code_build(g);if(p)for(let[w,h]of Object.entries(_))p[w]?p[w].valueBuilt=h:s[w]&&(s[w].valueBuilt=h);l[a]=f}}t.doc?.transact(()=>{for(let[a,u]of Object.entries(l)){let c=e[a];c.mitem&&syncronize(c.mitem,u)}})}},setValue(l,s){let a=i(),u=s;if(l==="childs")throw new Error("Please modify childs via .child");a.push({type:"set",name:l,value:u})},setProp(l,s){let a=i();typeof s=="string"?a.push({type:"prop",mode:"string",name:l,value:s}):s.mode==="string"?a.push({type:"prop",mode:"string",name:l,value:s.value}):s.mode==="raw"?a.push({type:"prop",mode:"raw",name:l,value:s.value,valueBuilt:s.valueBuilt}):s.mode==="jsx"&&a.push({type:"prop",mode:"jsx",name:l,value:s.value})},setChilds(l){i().push({type:"child",childs:l})},get childs(){let l=t?.toJSON();if(l.component?.id){if((l.component?.props.child).content){let a=t.get("component")?.get("props")?.get("child")?.get("content");if(a)return[ni(e,a,n)]}return[]}return l.childs?l.childs.map(s=>{if(s){let a=e[s.id];if(a&&a.mitem)return ni(e,a.mitem,n)}}).filter(s=>s):[]},get parent(){if(t){let l=t.parent.toJSON();if(Array.isArray(l)){let s=(t.parent?.parent).get("id"),a=e[s].mitem;if(a)return{item:ni(e,a,n),child_type:"child",child_idx:l.findIndex(u=>u.id===o.id)}}}return null}}}},JS=(e,t)=>{let n={};for(let[r,i]of Object.entries(e))i.mode?i.mode==="string"?n[r]={value:JSON.stringify(i.value),valueBuilt:JSON.stringify(i.value),meta:{type:"text"}}:i.mode==="jsx"&&i.value?n[r]={value:"",valueBuilt:"",content:ri([i.value],t)[0],meta:{type:"content-element"}}:i.mode==="raw"&&(n[r]={value:i.value,valueBuilt:i.valueBuilt,meta:{type:"text"}}):n[r]=i;return n},ri=(e,t)=>{let n=t||{};return e.map(i=>{let o={...i};if(delete o.edit,o.id||(o.id=(0,Zs.createId)()),o.component&&(o.component.instances||(o.component.instances={}),o.component.ref_ids||(o.component.ref_ids={}),o.component?.props)){o.component.props=JS(o.component.props,n);for(let[l,s]of Object.entries(o.component.props))!s.valueBuilt&&s.value&&(n[o.id+"|||"+l]=s)}return o.childs?o.childs=ri(o.childs,n):o.childs=[],o})};var ii=(e,t,n)=>({...t,edit:{setChilds(r){},get childs(){if(t.component?.id){let r=t.component?.props.child;return r.content?[ii(e,r.content,n)]:[]}return t.childs?t.childs.map(r=>{if(r){let i=e[r.id];if(i&&i.item)return ii(e,i.item,n)}}).filter(r=>r):[]},get props(){if(t.component?.props){let r={};for(let[i,o]of Object.entries(t.component.props))if(o.content){let l=t.component?.props?.[i]?.content;l?r[i]={mode:"jsx",value:ii(e,l,n)}:r[i]={mode:"jsx",value:null}}else{let l=typeof o.valueBuilt=="string"?o.valueBuilt.trim():"";if(l.endsWith(`; +`)&&(u=u.substring(0,u.length-2)),u&&u===a.value.trim()){let c=new Function(`return ${a.value}`);l[s]={mode:"string",value:c()}}else l[s]={mode:"raw",value:a.value,valueBuilt:a.valueBuilt}}return l}},get pending(){return[]},async commit(){let l={},s={};if(t){for(let[a,u]of Object.entries(r)){let c=e[a];if(!c||!c.mitem)continue;let f=c.mitem.toJSON();if(f&&f.component){let p=f?.component?.props;if(!p){console.log(f,p);return}let g={};for(let w of u)if(w.type==="prop"&&p)p[w.name]&&(w.mode==="string"?(p[w.name].value=JSON.stringify(w.value),p[w.name].valueBuilt=JSON.stringify(w.value)):w.mode==="raw"?(p[w.name].value=w.value,w.valueBuilt?p[w.name].valueBuilt=w.valueBuilt:g[w.name]=w.value):w.mode==="jsx"&&(p[w.name]||(p[w.name]={meta:{type:"content-element"}}),w.value&&(p[w.name]?.content?p[w.name].content={...p[w.name].content,childs:[ri([w.value],s)[0]]}:p[w.name].content={type:"item",id:(0,Zs.createId)(),name:w.name,childs:[ri([w.value],s)[0]]})));else if(w.type==="set"&&typeof w.value=="object")for(let[h,m]of Object.entries(w.value))f[h]=m;else if(w.type==="child"&&Array.isArray(w.childs))if(console.log("faisol",w.childs),f.component?.id)f.component.props||(f.component.props={}),f.component.props.child={meta:{type:"content-element"},content:{type:"item",id:(0,Zs.createId)(),name:"child",childs:ri(w.childs.filter(h=>h),s)}};else{let h=ri(w.childs.filter(m=>m),s);f.childs=h}for(let[w,h]of Object.entries(s))g[w]=h.value;let _=await _api.code_build(g);if(p)for(let[w,h]of Object.entries(_))p[w]?p[w].valueBuilt=h:s[w]&&(s[w].valueBuilt=h);l[a]=f}}t.doc?.transact(()=>{for(let[a,u]of Object.entries(l)){let c=e[a];c.mitem&&syncronize(c.mitem,u)}})}},setValue(l,s){let a=i(),u=s;if(l==="childs")throw new Error("Please modify childs via .child");a.push({type:"set",name:l,value:u})},setProp(l,s){let a=i();typeof s=="string"?a.push({type:"prop",mode:"string",name:l,value:s}):s.mode==="string"?a.push({type:"prop",mode:"string",name:l,value:s.value}):s.mode==="raw"?a.push({type:"prop",mode:"raw",name:l,value:s.value,valueBuilt:s.valueBuilt}):s.mode==="jsx"&&a.push({type:"prop",mode:"jsx",name:l,value:s.value})},setChilds(l){i().push({type:"child",childs:l})},get childs(){let l=t?.toJSON();if(l.component?.id){if((l.component?.props.child).content){let a=t.get("component")?.get("props")?.get("child")?.get("content");if(a)return[ni(e,a,n)]}return[]}return l.childs?l.childs.map(s=>{if(s){let a=e[s.id];if(a&&a.mitem)return ni(e,a.mitem,n)}}).filter(s=>s):[]},get parent(){if(t){let l=t.parent.toJSON();if(Array.isArray(l)){let s=(t.parent?.parent).get("id"),a=e[s].mitem;if(a)return{item:ni(e,a,n),child_type:"child",child_idx:l.findIndex(u=>u.id===o.id)}}}return null}}}},JS=(e,t)=>{let n={};for(let[r,i]of Object.entries(e))i.mode?i.mode==="string"?n[r]={value:JSON.stringify(i.value),valueBuilt:JSON.stringify(i.value),meta:{type:"text"}}:i.mode==="jsx"&&i.value?n[r]={value:"",valueBuilt:"",content:ri([i.value],t)[0],meta:{type:"content-element"}}:i.mode==="raw"&&(n[r]={value:i.value,valueBuilt:i.valueBuilt,meta:{type:"text"}}):n[r]=i;return n},ri=(e,t)=>{let n=t||{};return e.map(i=>{let o={...i};if(delete o.edit,o.id||(o.id=(0,Zs.createId)()),o.component&&(o.component.instances||(o.component.instances={}),o.component.ref_ids||(o.component.ref_ids={}),o.component?.props)){o.component.props=JS(o.component.props,n);for(let[l,s]of Object.entries(o.component.props))!s.valueBuilt&&s.value&&(n[o.id+"|||"+l]=s)}return o.childs?o.childs=ri(o.childs,n):o.childs=[],o})};var ii=(e,t,n)=>({...t,edit:{setChilds(r){},get childs(){if(t.component?.id){let r=t.component?.props.child;return r.content?[ii(e,r.content,n)]:[]}return t.childs?t.childs.map(r=>{if(r){let i=e[r.id];if(i&&i.item)return ii(e,i.item,n)}}).filter(r=>r):[]},get props(){if(t.component?.props){let r={};for(let[i,o]of Object.entries(t.component.props))if(o.content){let l=t.component?.props?.[i]?.content;l?r[i]={mode:"jsx",value:ii(e,l,n)}:r[i]={mode:"jsx",value:null}}else{let l=typeof o.valueBuilt=="string"?o.valueBuilt.trim():"";if(l.endsWith(`; `)&&(l=l.substring(0,l.length-2)),l&&l===o.value.trim()){let s=new Function(`return ${o.value}`);r[i]={mode:"string",value:s()}}else r[i]={mode:"raw",value:o.value,valueBuilt:o.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let i=e[r.parent.id];return ii(e,i.item,n)}return null},pending:[],setProp(r,i){},setValue(r,i){}}});var Af=P(G()),Ry=(e,t,n,r,i,o)=>{let l=xo(e,t,n,r,i);e.visit&&e.visit(t,l),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:by(e,n,t),PassProp:Ey(e,n,t,r,i)};let s=t.script,a=window.exports,u={useEffect:sr.useEffect,children:l.props.children,props:l.props,Local:s?.Local,db:e.site.db,api:e.site.api,PassProp:s?.PassProp,ErrorBox:Ot,newElement:()=>{},_item:t.mitem?ni(e.meta,t.mitem,e.page.cur.id):ii(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:f=>{let p=f;if((0,sr.isValidElement)(f)&&f.props.children){let g=w=>{let h=!1,m=[];if((0,sr.isValidElement)(w)){if(w.type===t.script?.PassProp)return{should_replace:!0,el:{...w,props:{...w.props,internal_key:w.key}}};if(Array.isArray(w.props?.children))for(let y of w.props?.children)if(Array.isArray(y)){let v=[],S=!1;for(let R of y){let k=g(R);k.should_replace?(v.push(k.el),S=!0):v.push(R)}S?(h=!0,m.push(v)):m.push(y)}else typeof y=="object"&&y?y.type===t.script?.PassProp&&(h=!0,m.push({...y,props:{...y.props,internal_key:y.props.key}})):m.push(y)}return{should_replace:h,el:{...w,props:{...w.props,children:m}}}},_=g(f);_.should_replace&&(p=_.el)}s&&(s.result=(0,Af.jsx)(sr.Suspense,{children:p}))},params,...Vs(e),...a,...r};if(typeof r=="object"){for(let[f,p]of Object.entries(r))if(typeof p=="object"&&p&&p._jsx){let g=p;u[f]=(0,Af.jsx)(YS,{fn:g.fn,passprop:{...r},meta:t})}}!ut.isEditor&&t.item.adv?.js&&Ws(e,t.item.adv.js);let c=t.item.adv?.jsBuilt||"",d=Mf(c,Lf)||"";try{new Function(...Object.keys(u),"___js",`// ${t.item.name}: ${t.item.id} try { ${d} diff --git a/app/web/src/nova/vi/render/script/item-dev.ts b/app/web/src/nova/vi/render/script/item-dev.ts index 13f3bfa9..0974468d 100644 --- a/app/web/src/nova/vi/render/script/item-dev.ts +++ b/app/web/src/nova/vi/render/script/item-dev.ts @@ -187,6 +187,8 @@ export const devItem = ( item[k] = v; } } else if (c.type === "child" && Array.isArray(c.childs)) { + console.log("faisol", c.childs); + if (item.component?.id) { if (!item.component.props) { item.component.props = {}; @@ -198,12 +200,10 @@ export const devItem = ( type: "item", id: createId(), name: "child", - childs: [ - removeEditFromChilds( - c.childs.filter((e) => e), - compile - )[0], - ], + childs: removeEditFromChilds( + c.childs.filter((e) => e), + compile + ), }, }; } else {