UNPKG

@tycoonsystems/tycoon-modules

Version:
1 lines 16.7 kB
function _extends(){return(_extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a,l=arguments[t];for(a in l)Object.prototype.hasOwnProperty.call(l,a)&&(e[a]=l[a])}return e}).apply(this,arguments)}import React from"react";import{debounce}from"@tycoonsystems/tycoon-modules/util";import{v4 as uuidv4}from"uuid";import AdminStyles from"./Admin.module.scss";import{logout}from"@tycoonsystems/tycoon-modules/utility/onboarding/SignIn";import{fetchPost}from"@tycoonsystems/tycoon-modules/utility/fetch";import{printRecursiveObject}from"@tycoonsystems/tycoon-modules/utility/utility/data";import Tooltip from"@mui/material/Tooltip";import{IndexHello}from"@tycoonsystems/tycoon-modules/presentation/hello/IndexHello";import apiReq from"@tycoonsystems/tycoon-modules/utility/api/apiReq";const moduleName="DatabaseAdmin",DO_SEARCH_DELAY=1500,Module=n=>{const[t,j]=React.useState(!1),[,M]=React.useState(null),[i,L]=React.useState(null),[o,a]=React.useState(null),[s,d]=React.useState(!1),[u,m]=React.useState(null),[f,U]=React.useState(0),[h,H]=React.useState(0),[g,p]=React.useState(null),[y,v]=React.useState(null),[R,b]=React.useState(null),[q,c]=React.useState(null),[r,E]=React.useState(null),[l,K]=React.useState(null),[T,V]=React.useState(null),[e,C]=React.useState([]),[N,W]=React.useState(0),S=React.useRef(),w=React.useRef(),A=React.useRef(),Y=(n._LocalEventEmitter.unsubscribe(moduleName),n._LocalEventEmitter.subscribe(moduleName,e=>{var t;e&&("loadDefault"===e.dispatch?x():"search"===e.dispatch&&null!==(t=S?.current?.value)&&("children"===e.hierarchy?Y(o):_(t,"master"===e.hierarchy?"collection":o,e.hierarchy)))}),async()=>{var e=await apiReq("/fetch/fetchhandler",{handlerArgs:[{childReq:[{atype:o,b:y?.record?.id,limit:75,offset:40*N,sortField:"created",sort:"desc"}]}]});e?.data?.fetchedData?.[0]?.childReq?.[0]&&C(e.data.fetchedData[0].childReq[0])}),x=(React.useEffect(()=>{var e;t||(e=uuidv4(),M(e),x(),j(!0))},[t]),async()=>{var e={domainKey:n.domainKey,hash:n._loggedIn.hash,identifier:n._loggedIn.identifier},e=await fetchPost(n.apiUrl+"/a/databasecruddefaults",null,null,e);return!!e&&(e.hasOwnProperty("status")?"disauthenticated"==e.status?(logout(),"disauthenticated"):"failed"!=e.status&&("success"==e.status?(e?.data&&(L(e.data),!o&&e?.data?.model[0]&&e.data.model[0].table&&a(e.data.model[0].table),e?.newModelDefaults)&&V(e.newModelDefaults),e):void 0):void 0)}),$=React.useCallback(e=>{e?.currentTarget?.getAttribute&&(e=e.currentTarget.getAttribute("modif"))&&(a(e),setTimeout(()=>{n._LocalEventEmitter.dispatch(moduleName,{dispatch:"search"})},150),_("","collection","master"))}),_=async(e,t,a)=>{let l;try{var c,r;if(!s)return l=setTimeout(()=>{d(!1)},1e4),c={domainKey:n.domainKey,hash:n._loggedIn.hash,identifier:n._loggedIn.identifier,table:t,value:e,offset:"collection"===t?h:f},(r=await fetchPost(n.apiUrl+"/a/databaserecordssearch",null,null,c))?r.hasOwnProperty("status")?(d(!1),clearTimeout(l),"disauthenticated"==r.status?(logout(),"disauthenticated"):"failed"!=r.status&&("success"==r.status?(r?.data&&("master"===a?K:m)(r.data),r):void 0)):void 0:(d(!1),clearTimeout(l),!1)}catch(e){d(!1),clearTimeout(l)}};var k=React.useCallback(debounce(e=>{var t;e?.target&&(t=e.target.value,e=e.target.getAttribute("hierarchy"),void 0!==t)&&(B(),_(t,"master"===e?"collection":o,e))},DO_SEARCH_DELAY),[o]);const I=React.useCallback(e=>{var t=e.currentTarget.getAttribute("scope");const a=e.currentTarget.getAttribute("hierarchy");t&&(e=e.currentTarget.getAttribute("i"),"itemOffset"===t&&("master"===a?H:"children"===a?W:U)(Number(e)),setTimeout(()=>{n._LocalEventEmitter.dispatch(moduleName,{dispatch:"search",hierarchy:a})},150))}),O=React.useCallback(async e=>{if(B(),e?.currentTarget?.getAttribute){const a=e.currentTarget.getAttribute("modif");var t,e=e.currentTarget.getAttribute("collection");a&&(t=e?l.find(e=>e.id===a):u.find(e=>e.id===a))&&(e?(v({model:"collection",record:t,config:i?.model?.find(e=>"collection"===e.table)}),(e=await P(t.id,o,N))?.data&&(p({model:o,record:e.data.find(e=>e.id===g?.record?.id),config:i?.model?.find(e=>e.table===o)}),C(e.data))):p({model:o,record:t,config:i?.model?.find(e=>e.table===o)}))}});var F=React.useCallback(e=>{G(e,"collection")}),z=React.useCallback(e=>{G(e)});const G=React.useCallback((e,a)=>{if(B(),e?.currentTarget?.getAttribute){const i=e.currentTarget.getAttribute("i");var l=e.currentTarget.getAttribute("modif");const o=e.currentTarget.getAttribute("array");var e=e.currentTarget.getAttribute("parentarr"),c=("collection"===a?y:g)?.record;if("edit"===l){if(i){console.log(i,c,n);let t=c;const n=i.split(".");for(let e=0;e<n.length;e++)t=t[n[e]];console.log(w.current),b(null),setTimeout(()=>{b({reference:i,cur:t,arr:o,useType:a})},100)}}else if("add"===l&&i){let t=c;var r=i.split(".");if(console.log(l,o,e,t,r),1<r.length&&r.pop(),e){for(let e=0;e<r.length;e++)t=t[r[e]];console.log(t,o,i,r.join(".")),b({reference:r.join("."),cur:t,arr:o,useType:a})}else E({reference:r.join("."),field:"",value:"",useType:a})}}}),J=(e,t,a,l,c)=>(console.log(e,t,a),c&&!e[t[a]]||e&&Object.prototype.hasOwnProperty.call(e,t[a])&&a===t.length-1?(e[t[a]]=l,e):J(e[t[a]],t,a+1,l,c)),P=async(e,t,a=0,l=40)=>{var c,r,i;try{if(!s)return d(!0),c=setTimeout(()=>{d(!1)},1e4),r={collection:e,childModel:t,offset:a,limit:l},(i=await fetchPost(n.apiUrl+"/p/getrelationshipchildren",null,null,r))?i.hasOwnProperty("status")?(d(!1),clearTimeout(c),"disauthenticated"==i.status?(logout(),"disauthenticated"):"failed"==i.status?(setInvoiceData(null),!1):"success"==i.status?(console.log(i),i):void 0):void d(!1):(d(!1),clearTimeout(c),!1)}catch(e){d(!1)}},Q=async(e,t,a)=>{var l,c,r;try{if(!s)return d(!0),l=setTimeout(()=>{d(!1)},1e4),c={hash:n._loggedIn.hash,identifier:t,collection:e,existing:a},(r=await fetchPost(n.apiUrl+"/p/updatecollection",null,null,c))?r.hasOwnProperty("status")?(d(!1),clearTimeout(l),"disauthenticated"==r.status?(logout(),"disauthenticated"):"failed"==r.status?(setInvoiceData(null),!1):"success"==r.status?r:void 0):void d(!1):(d(!1),clearTimeout(l),!1)}catch(e){d(!1)}};var X=React.useCallback(async e=>{var t,a;(y?.record?.type===o||""===y?.record?.type)&&g?.record&&(t={...y},(a=await(async(e,t,a,l,c)=>{var r,i,o;try{if(!s)return d(!0),r=setTimeout(()=>{d(!1)},1e4),i={hash:n._loggedIn.hash,identifier:n._loggedIn.identifier,collection:e,record:t,aModel:a,association:l,add:c},(o=await fetchPost(n.apiUrl+"/a/addtocollection",null,null,i))?o.hasOwnProperty("status")?(d(!1),clearTimeout(r),"disauthenticated"==o.status?(logout(),"disauthenticated"):"failed"==o.status?(setInvoiceData(null),!1):"success"==o.status?(console.log(o),o):void 0):void d(!1):(d(!1),clearTimeout(r),!1)}catch(e){d(!1)}})(y.record.id,g.record.id,g.model,"childof",!0))?.data?.collection)&&(t.record=a.data.collection,v(t),(a=await P(t.record.id,g?.model??t.record.type,N))?.data)&&(p({model:o,record:a.data.find(e=>e.id===g.record.id),config:i?.model?.find(e=>e.table===o)}),C(a.data))}),D=React.useCallback(async a=>{if(a?.currentTarget?.getAttribute){a=a.currentTarget.getAttribute("modif");if("cancel"===a)b(null),E(null);else if("set"===a){let e=w.current.value;R?.arr&&(e=e.split(","));var l,a=("collection"===R?.useType||"collection"===r?.useType?y:g).record;console.log("Obj",a);let t;r?.reference&&A?.current?.value?(t=r.reference.split(".")).push(A.current.value):t=R.reference.split("."),a=J(a,t,0,e,!!r?.reference&&A.current.value),console.log(R,y),"collection"===R?.useType||"collection"===r?.useType?(console.log(a,y),l=(await Q(y.record,n._loggedIn.identifier,y.record.id))?.data??y.record,v({model:"collection",record:l,config:i?.model?.find(e=>"collection"===e.table)})):(c(g),(async e=>{let a;try{var t;if(null===e.id&&"collection"===R?.useType)return v({model:"collection",record:e,config:i?.model?.find(e=>"collection"===e.table)}),!(t=await P(e.id,o,N))?.data||(p({model:o,record:t.data.find(e=>e.id===g?.record?.id),config:i?.model?.find(e=>e.table===o)}),!C(t.data));if(!s){a=setTimeout(()=>{d(!1)},1e4);var l,c,r={domainKey:n.domainKey,hash:n._loggedIn.hash,identifier:n._loggedIn.identifier,table:o,record:e??q,recordid:e?.id};let t=await fetchPost(n.apiUrl+"/a/databasecrudupdate",null,null,r);return t?t.hasOwnProperty("status")?(d(!1),clearTimeout(a),"disauthenticated"==t.status?(logout(),"disauthenticated"):"failed"!=t.status&&("success"==t.status?(t?.data&&(console.log(t.data),-1<(c=(l=u).findIndex(e=>e.id===t.data.id))&&(l[c]=t.data),console.log(l[c]),m(l)),t):void 0)):void 0:(d(!1),clearTimeout(a),!1)}}catch(e){d(!1),clearTimeout(a)}})(a)),b(null),E(null)}}});const B=()=>{E(null),b(null),c(null)},Z=e=>e.title&&""!==e?.title?e.title:e.name&&""!==e?.name?e.name:e.username&&""!==e?.username?e.username:e.id;var ee=React.useCallback(async e=>{var t;!y&&T?.Collection&&((t=structuredClone(T.Collection)).author=n?._loggedIn.identifier,(t=await Q(t,n?._loggedIn?.identifier))?.data)&&v({model:"collection",record:t.data,config:i?.model?.find(e=>"collection"===e.table)})});const te=React.useCallback(async e=>{var e=e?.currentTarget?.getAttribute("record");e&&(await(async(e,t,a,l)=>{var c,r,i;try{if(!s)return d(!0),c=setTimeout(()=>{d(!1)},1e4),r={hash:n._loggedIn.hash,identifier:n._loggedIn.identifier,a:e,b:a,verb:l,atype:t},(i=await fetchPost(n.apiUrl+"/a/deleterelationshipbyab",null,null,r))?i.hasOwnProperty("status")?(d(!1),clearTimeout(c),"disauthenticated"==i.status?(logout(),"disauthenticated"):"failed"==i.status?(setInvoiceData(null),!1):"success"==i.status?i:void 0):void d(!1):(d(!1),clearTimeout(c),!1)}catch(e){d(!1)}})(e,o,y?.record?.id,"childof"),e={...y},(e=await P(e.record.id,g?.model??e.record.type,N))?.data)&&(p({model:o,record:e.data.find(e=>e.id===g?.record?.id),config:i?.model?.find(e=>e.table===o)}),C(e.data))});var ae=[f-2,f-1,f,f+1,f+2],le=[h-2,h-1,h,h+1,h+2],ce=[N-2,N-1,N,N+1,N+2],re=React.useMemo(()=>React.createElement("div",null,"video"===g?.model&&g?.record?.thumbtrack?.[0]?React.createElement("img",{className:""+AdminStyles.previewContainer,style:{width:"-webkit-fill-available"},src:n?.cdn?.static+"/thumbtrack/"+g.record.thumbtrack[0]}):null),[g?.record,n?.cdn?.static]),ie=React.useMemo(()=>React.createElement(IndexHello,_extends({},n,{style:{marginBottom:".5rem",paddingTop:".5rem"},groupLabel:y?.record?.title??"",items:e?e.map(e=>Object.assign(e,{leadBg:e?.thumbtrack?"thumbtrack/"+e.thumbtrack[0]:""})):[],action:te,actionLabel:"Delete"})));return console.log("Database",i,o,u,g,y,R,e),React.createElement("div",{className:`${n.className} ${moduleName}_Container`,style:{marginRight:".5rem"}},React.createElement(Tooltip,{title:"Create collections of any type to be manipulated and used in any way on the platform. Try making a list of videos or articles or even a course.",placement:"right"},React.createElement("h3",{style:{width:"fit-content"}},"Collections")),React.createElement("div",{style:{background:"$1f1f1f",borderRadius:"1rem"}},ie,React.createElement("ul",{className:"PaginationContainer"},ce.map((e,t)=>-1<e?React.createElement("li",{className:e==N?"ActivePage":"",scope:"itemOffset",hierarchy:"children",key:t,i:e,onClick:I},e+1):null))),React.createElement("div",{className:""+AdminStyles.containerTwoSmallRight},React.createElement("div",null,React.createElement("div",null,r?React.createElement("div",{className:""+AdminStyles.crudUpdateContainer},React.createElement("div",{style:{marginBottom:".25rem"}},"New field under ",r?.reference," of ","collection"===r?.useType?"collection":g?.model," ",("collection"===r?.useType?y:g)?.record?.id),React.createElement("div",{className:"flex gap-p5"},React.createElement("input",{type:"text",placeholder:"Set Field",ref:A,defaultValue:R?.cur,className:""+AdminStyles.input,style:{width:"100%",marginBottom:".25rem"}}),React.createElement("input",{type:"text",placeholder:"Set Value",ref:w,defaultValue:R?.cur,className:""+AdminStyles.input,style:{width:"100%",marginBottom:".25rem"}})),React.createElement("div",{className:"flex gap-p2"},React.createElement("button",{onClick:D,modif:"set"},"Set"),React.createElement("button",{onClick:D,modif:"cancel"},"Cancel"))):null),React.createElement("div",null,R?React.createElement("div",{className:""+AdminStyles.crudUpdateContainer},React.createElement("div",{style:{marginBottom:".25rem"}},R?.reference," of ","collection"===R?.useType?"collection":g?.model," ",("collection"===R?.useType?y:g)?.record?.id),R?.arr?React.createElement("div",null,"Comma separated list of values"):null,React.createElement("input",{type:"text",placeholder:"Set Value",ref:w,defaultValue:R?.cur,className:""+AdminStyles.inputSearch,style:{width:"100%",marginBottom:".25rem"}}),React.createElement("div",{className:"flex gap-p2"},React.createElement("button",{onClick:D,modif:"set"},"Set"),React.createElement("button",{onClick:D,modif:"cancel"},"Cancel"))):null),React.createElement("div",null,React.createElement("div",{className:"flex gap-p5",style:{flexDirection:"column"}},y?React.createElement("div",{className:""+AdminStyles.crudContainer},React.createElement("div",{className:"flex gap-p5 al-cen",style:{marginBottom:".5rem"}},React.createElement("p",null,"collection")),React.createElement("div",{className:y?.record?"record_box":""},printRecursiveObject(y?.record,0,i?.model?.find(e=>"collection"===e.table),"",F)),g?null:React.createElement("div",{className:"info_box",style:{marginTop:".5rem",fontWeight:700}},"Select child record to add to collection")):null,g?.record?React.createElement("div",{className:""+AdminStyles.crudContainer},y?null:React.createElement("div",{className:"info_box",style:{marginBottom:".5rem",fontWeight:700}},"Select or create a collection to add to"),React.createElement("div",{className:"flex gap-p5 al-cen",style:{marginBottom:".5rem"}},React.createElement("p",null,g?.model),y&&-1===e?.findIndex(e=>e.id===g.record.id)&&g&&(y?.record?.type===o||""===y?.record?.type)&&g?.record?.__typename?.toLowerCase()===o?React.createElement("button",{onClick:X,record:g?.record?.id},"Add to collection"):null),React.createElement("div",null,re),React.createElement("h4",null,g?.record?.title??g?.record?.name??g?.record?.username??g?.record?.id),React.createElement("div",{className:"record_box"},printRecursiveObject(g.record,0,g?.config,"",z))):null))),React.createElement("div",{className:"flex",style:{flexDirection:"column",minHeight:"85vh"}},React.createElement("div",{className:"Editor_Container Editor_MaxWidth",style:{minHeight:"35vh"}},React.createElement("div",{className:"flex gap-p5 al-cen",style:{marginBottom:".5rem"}},React.createElement("h4",{style:{marginBottom:0}},"Parent"),y?null:React.createElement("button",{onClick:ee},"New")),React.createElement("section",null,React.createElement("div",null,React.createElement("input",{type:"text",placeholder:"Search Records",ref:S,className:""+AdminStyles.inputSearch,style:{width:"100%"},hierarchy:"master",onChange:k})),React.createElement("div",{className:"flex",style:{flexDirection:"column",gap:".25rem",maxHeight:"35vh",overflowY:"scroll"}},l?.map?l.map(e=>React.createElement("div",{className:""+AdminStyles.itemContainer,style:{cursor:"pointer"},onClick:O,modif:e.id,collection:"collection"},React.createElement("div",null,Z(e)))):null),React.createElement("ul",{className:"PaginationContainer"},le.map((e,t)=>-1<e?React.createElement("li",{className:e==h?"ActivePage":"",scope:"itemOffset",hierarchy:"master",key:t,i:e,onClick:I},e+1):null)))),React.createElement("div",{className:"Editor_Container Editor_MaxWidth",style:{height:"35vh"}},React.createElement("div",{className:"flex gap-p5 al-cen",style:{marginBottom:".5rem"}},React.createElement("h4",{style:{marginBottom:0}},"Child")),React.createElement("div",{className:"tagContainer",style:{marginBottom:".5rem"}},i?.model?.map?i.model.map((e,t)=>React.createElement("div",{className:"tagItem "+(o===e?.table?"tagItemSelected":null),style:{cursor:"pointer"},modif:e?.table,onClick:$},e?.table)):null),React.createElement("section",{style:{height:"inherit"}},React.createElement("div",null,React.createElement("input",{type:"text",placeholder:"Search Records",ref:S,className:""+AdminStyles.inputSearch,style:{width:"100%"},hierarchy:"slave",onChange:k})),React.createElement("div",{className:"flex",style:{height:"inherit",overflowY:"auto",flexDirection:"column",gap:".25rem"}},u?.map?u.map(e=>React.createElement("div",{className:""+AdminStyles.itemContainer,style:{cursor:"pointer"},onClick:O,modif:e.id},React.createElement("div",null,Z(e)))):null),React.createElement("ul",{className:"PaginationContainer"},ae.map((e,t)=>-1<e?React.createElement("li",{className:e==f?"ActivePage":"",scope:"itemOffset",hierarchy:"slave",key:t,i:e,onClick:I},e+1):null)))))))};export default Module;