@tycoonsystems/tycoon-modules
Version:
www.tv.tycoon.systems/documentation
1 lines • 12.3 kB
JavaScript
function _extends(){return(_extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n,r=arguments[t];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}import React from"react";import{useRouter}from"next/router";import shopStyles from"./Shop.module.scss";import PIMStyles from"../product/ProductImageManager.module.scss";import{compareObjects,isObjectEmpty}from"../../util";import{v4 as uuidv4}from"uuid";import{doPublishProduct,resolveStyles}from"../../utility/ecommerce";import{ProductInternal}from"../product";import{doSetOptionsMetaData}from"./Functions";import{defaultEditingOptionsMeta,defaultLineup,defaultStyle,defaultOption}from"../product/defaults";const defaultDefinePriceCurrency={code:"US",name:"United States",payment:"stripe",region:"NORTH AMERICA",currency:"USD",symbol:"$"},Module=s=>{const l=useRouter(),[t,j]=React.useState(!1),[,q]=React.useState(null),[u,o]=React.useState(!1);var[,,]=React.useState({});const[n,,]=React.useState([]),[a,c]=React.useState([]),[d,p]=React.useState({}),[i,y]=React.useState(null),[g,m]=React.useState(null),[f,h]=React.useState(defaultEditingOptionsMeta()),[R,F]=React.useState(null),[r,U]=React.useState({}),[v,B]=React.useState(null),[b,S]=React.useState(0),[K,H]=React.useState(!1),[C,T]=React.useState(defaultDefinePriceCurrency),[J,O]=React.useState(new FormData),[Q,I]=React.useState([]),P=React.useRef(),E=React.useRef(),D=React.useRef(),N=React.useRef(),x=React.useRef(),V=React.useRef(),$=React.useRef(),_=React.useRef(),k=React.useRef(),A=React.useRef();React.useEffect(()=>{var e=s.profile?"shopProfileData":"shop";if(s&&s[e]){var t=s[e].products&&Array.isArray(s[e].products)?s[e].products.concat(n):[],e=s[e].shop;for(let e=0;e<a.length&&compareObjects(a,t);e++);R&&e&&(!e||e.id)||F(e),0===a.length&&0!==t.length&&c(t)}},[s.shopData,s.shopProfileData,n,a]);var e=s._loggedIn&&s._loggedIn.identifier&&s.profileData&&s.profileData.user&&s.profileData.user.id&&s._loggedIn.identifier===s.profileData.user.id;const z=t=>{console.log(t),(R?.id||!R&&s?.forceOpenRedirectOnDone)&&(T(defaultDefinePriceCurrency),p(t),setTimeout(()=>{var e={...t};e.name=t.name,p(e)},200))},G=React.useCallback(e=>{try{if(console.log("Start"),isObjectEmpty(d)&&(R?.id||s?.forceOpenRedirectOnDone)){const r=defaultStyle();let t={id:uuidv4(),shop:R?.id??null,name:"",detailmeta:defaultEditingOptionsMeta(),styles:[r],shipping:[],published:!1,images:[],protype:{type:"virtual",subscription:!1},infinite:!1,meta:{},files:{},new:!0};T(defaultDefinePriceCurrency),p(t),y(r.sid),S(null),B(null);var n=t.detailmeta;n.productType="virtual",h(n),setTimeout(()=>{P.current.value=r.style,r.option[0]&&Object.hasOwnProperty.call(r.option[0],"option")&&(e=r.option[0].option??"",E.current.value=e);var e=document.getElementById(t.id);if(e?.offsetTop&&window?.scrollTo&&s._isMobile)try{window.scrollTo({behavior:"smooth",top:e.offsetTop-5})}catch(e){}},200)}}catch(e){console.log(e)}}),M=(React.useEffect(()=>{var e;t||(e=uuidv4(),q(e),s?.forceOpenRedirectOnDone&&G(),j(!0))},[t,s?.forceOpenRedirectOnDone]),React.useCallback(e=>{T(defaultDefinePriceCurrency),p({})})),W=React.useCallback(e=>{var t,n;e.currentTarget&&(t={...d},-1<(n=d.styles.findIndex(e=>e.sid===i))&&(t.styles[n].style=e.currentTarget.value),p(t))}),X=React.useCallback(e=>{var t,n,r;e.currentTarget&&-1<(n=(t={...d}).styles.findIndex(e=>e.sid===i))&&(null==g&&m(d.styles[n].option&&d.styles[n].option[0]?d.styles[n].option[0].sid:""),-1<(r=t.styles[n].option.findIndex(e=>e.sid===g))&&(t.styles[n].option[r].option=e.currentTarget.value??""),p(t))}),Y=React.useCallback(e=>{var t,n,r;e.currentTarget&&-1<(n=(t={...d}).styles.findIndex(e=>e.sid===i))&&(console.log(n,i,t),r=1===t.styles[n].option.length?0:t.styles[n].option.findIndex(e=>e.sid===g),console.log(r),-1<r&&(isNaN(Number(e.currentTarget.value))||(t.styles[n].option[r].quantity=Number(e.currentTarget.value))),p(t))}),Z=React.useCallback(e=>{var t,n;e.currentTarget&&-1<(t=(e={...d}).styles.findIndex(e=>e.sid===i))&&(-1<(n=1===e.styles[t].option.length?0:e.styles[t].option.findIndex(e=>e.sid===g))&&(!Object.prototype.hasOwnProperty.call(e.styles[t].option[n],"quantity")||e.styles[t].option[n].quantity&&1e7!==e.styles[t].option[n].quantity?e.styles[t].option[n].quantity=Number(1e7):e.styles[t].option[n].quantity=1),p(e))}),ee=React.useCallback(e=>{var t,n;e.currentTarget&&-1<(n=(t={...d}).styles.findIndex(e=>e.sid===i))&&(isNaN(Number(e.currentTarget.value))||("USD"===C?.currency?t.styles[n].price=Number(e.currentTarget.value):(t.styles[n].priceTable||(t.styles[n].priceTable={}),t.styles[n].priceTable[C.currency]=Number(e.currentTarget.value)),p(t)))}),te=React.useCallback(t=>{if(console.log(t.currentTarget.value),t.currentTarget){y(t.currentTarget.value);const e=d.styles.findIndex(e=>e.sid===t.currentTarget.value);P.current.value=d.styles[e].style,console.log(d.styles),setTimeout(()=>{E&&E.current&&(E.current.value=d?.styles&&d.styles[e]&&d.styles[e]?.option&&d.styles[e]?.option[0]&&d.styles[e].option[0]?.option?d.styles[e].option[0].option:"",m(d.styles[e].option&&d.styles[e].option[0]?d.styles[e].option[0].sid:""),x.current)&&(x.current.selectedIndex=0)},250),D.current.value=d.styles[e].option&&d.styles[e].option[0]?d.styles[e].option[0].quantity:1,N.current.value=d.styles[e]?d.styles[e].price:1}}),ne=React.useCallback(t=>{var e;t.currentTarget&&d?.styles&&-1<(e=d.styles.findIndex(e=>e.sid===i))&&(e=d.styles[e].option.find(e=>e.sid===t.currentTarget.value),console.log(e),e)&&(E.current.value=e.option,m(e.sid),D.current.value=e.quantity)}),re=React.useCallback(e=>{var t={...d};t.styles.push(defaultStyle()),p(t)}),ae=React.useCallback(e=>{var t,n={...d},r=d.styles.findIndex(e=>e.sid===i);-1<r&&(t=defaultOption(),d.styles[r].option[0]&&!Object.hasOwnProperty.call(d.styles[r].option[0],"option")?(d.styles[r].option[0].option="",m(d.styles[r].option[0].sid)):(d.styles[r].option.push(t),m(t.sid))),p(n)}),ie=React.useCallback(e=>{var t,n;e.currentTarget&&(e=e.currentTarget.value,(t={...f}).productType=e,(n={...d}).protype.type=e,p(n),h(t))}),se=React.useCallback(e=>{console.log(e.currentTarget.checked,e.currentTarget.getAttribute("option")),doSetOptionsMetaData(e,f,d,p,h,b,S)});React.useCallback(e=>{var t;e.currentTarget&&e.currentTarget.getAttribute("option")&&(t={...f},"add"===e.currentTarget.getAttribute("option")?t.lineup&&t.lineup.length<10&&(t.lineup.push(defaultLineup()),S(t.lineup.length-1),_.current.value="",k.current.value="",A.current.value=null):"remove"===e.currentTarget.getAttribute("option")?t.lineup&&0<t.lineup.length&&(t.lineup.pop(),S(-1<t.lineup.length-1?t.lineup.length-1:null),_.current.value="",k.current.value="",A.current.value=null):"setSelected"===e.currentTarget.getAttribute("option")&&(e=e.currentTarget.getAttribute("index"),isNaN(e)||(S(e),_.current.value=t.lineup[e].title,k.current.value=t.lineup[e].description,A.current.value=t.lineup[e].time)))});const le=React.useCallback(e=>{var t;e.currentTarget&&e.currentTarget.getAttribute&&e.currentTarget.getAttribute("modif")&&"product_name"===e.currentTarget.getAttribute("modif")&&((t={...d}).name=e.currentTarget.value,p(t))}),w=(t,a,i=!1)=>{try{return(async()=>{if(u)return null;{U({});var e={...d};if(console.log(e),e.detailmeta={...f},console.log("Publish Product",e),""===e.name)return U({message:"Please enter a name for your product",location:"product_name"}),o(!1),1;const n=J,r=Q;v&&v.editing===e.id&&(v.images.forEach(t=>{console.log("Img",t),r.find(e=>e.name===t.name)||(n.append("image",t),r.push({name:t.name,modif:"productImg"}))}),n.delete("imgNames"),n.append("imgNames",JSON.stringify(r))),O(n),I(r),n.append("domainKey",s.domainKey),n.append("hash",s._loggedIn.hash),n.append("identifier",s._loggedIn.identifier),n.append("product",JSON.stringify(e)),n.append("shop",R?.id??null),n.append("status",t),n.append("existing",a),o(!0),setTimeout(()=>{o(!1)},1e4);e=await doPublishProduct(s.apiUrl,s.domainKey,R?.id??null,s._loggedIn,e,n);return console.log(e),e&&(O(new FormData),I([]),e.product)&&(s?.forceOpenRedirectOnDone&&(s.redirect?l.push(s.redirect):s.redirectToProduct&&e?.product?.product?.id&&l.push("/pr?p="+e.product.product.id)),e.product.products)&&(i||(c(e.product.products),T(defaultDefinePriceCurrency),p({})),o(!1)),e}})()}catch(e){return null}},ue=React.useCallback(e=>{var t;e.currentTarget&&e.currentTarget.getAttribute&&e.currentTarget.getAttribute("modif")&&(t=e.currentTarget.getAttribute("modif"),e=e.currentTarget.getAttribute("existing"),w(t,e))});const oe=React.useCallback(e=>K?(H(!1),!1):(H(!0),!0)),ce=(t,e)=>{var n,r;return console.log("Product Value",t,e),t.new?((n=d).meta.currency=e,p(n),e):-1<(r=(n=[...a]).findIndex(e=>e.id===t.id))?(n[r].meta.currency=e,c(n),e):null},de=(e,t="lineup",n)=>{const r=J,a=Q;e&&(e.forEach(e=>{r.append("image",e),a.push({name:e.name,modif:t,id:n})}),r.append("imgNames",JSON.stringify(a))),O(r),I(a)},L=d&&d.styles?d.styles.find(e=>e.sid===i):null,pe=d&&L&&L.option&&(L.option.find(e=>e.sid===g)??1===L.option.length)?L.option[0]:null,ye=e=>{"USD"!==(e=e||C)?.currency&&L.priceTable&&Object.prototype.hasOwnProperty.call(L.priceTable,e.currency)?N.current.value=L.priceTable[e.currency]:L?.price&&(N.current.value=L.price)};var ge=R&&R.status&&"nonexistent"===R.status;return React.createElement("div",{className:""+s.className},React.createElement("div",{className:u?"fetchNotBusy fetchBusy":"fetchNotBusy"}),React.createElement("div",{className:shopStyles.container+" "+(s.smaller?""+PIMStyles.smallContainer:null)},e&&!ge?React.createElement("div",{className:""+shopStyles.adminContainer},React.createElement("div",{className:"heading"},"Shop"),React.createElement("div",{className:"flex options",style:{gap:".25rem"}},React.createElement("button",{disabled:!isObjectEmpty(d),onClick:G},"Create Product"),d&&!isObjectEmpty(d)?React.createElement("button",{onClick:M,modif:"save"},d.new?"Abandon":"Cancel"):null)):null,React.createElement("div",{className:"Product_flex_container"},d?.new?React.createElement(ProductInternal,_extends({},s,{product:d,apiUrl:s.apiUrl,domainKey:s.domainKey,_loggedIn:s._loggedIn,fetchBusy:u,setFetchBusy:o,_setLoggedIn:s._setLoggedIn,handleEdit:z,editing:d,setEditing:p,setCurrentName:le,pageError:r,styleInput:P,setCurrentStyleName:W,changeCurrentStyle:te,resolveStyles:resolveStyles,selectedStyle:L,setCurrentOptionName:X,optionInput:E,changeCurrentOption:ne,optionSelect:x,editingSelectedStyle:i,editingSelectedOption:g,priceInput:N,setCurrentPrice:ee,selectedOption:pe,quantityInput:D,setCurrentQuantity:Y,setInfinity:Z,addStyle:re,addOption:ae,onProductTypeChange:ie,editingOptionsMeta:f,setEditingOptionsMeta:h,setOptionsMetaData:se,handlePublishProduct:ue,publishProduct:w,handleCancelProduct:M,nameRef:V,setEditingSelectedStyle:y,setEditingSelectedOption:m,setCombinedFeed:c,setCurrentLineupEditing:S,currentLineupEditing:b,defaultLineup:defaultLineup,setCurrencySelect:$,changeCurrentCurrency:ce,currentDefinePriceCurrency:C,setCurrentDefinePriceCurrency:T,setDefaultPriceHtml:ye,appendFormData:de,passTempImages:e=>{B({editing:d.id,images:e})},handleSetIsSettingCurrency:oe})):null,a&&a.map&&!s.hideFeed?a.map((e,t)=>React.createElement(ProductInternal,_extends({},s,{product:e,key:t,apiUrl:s.apiUrl,domainKey:s.domainKey,_loggedIn:s._loggedIn,fetchBusy:u,setFetchBusy:o,_setLoggedIn:s._setLoggedIn,handleEdit:z,editing:d,setEditing:p,setCurrentName:le,pageError:r,styleInput:P,setCurrentStyleName:W,changeCurrentStyle:te,resolveStyles:resolveStyles,selectedStyle:L,setCurrentOptionName:X,optionInput:E,changeCurrentOption:ne,optionSelect:x,editingSelectedStyle:i,editingSelectedOption:g,priceInput:N,setCurrentPrice:ee,selectedOption:pe,quantityInput:D,setCurrentQuantity:Y,setInfinity:Z,addStyle:re,addOption:ae,onProductTypeChange:ie,editingOptionsMeta:f,setEditingOptionsMeta:h,setOptionsMetaData:se,handlePublishProduct:ue,publishProduct:w,handleCancelProduct:M,nameRef:V,setEditingSelectedStyle:y,setEditingSelectedOption:m,setCombinedFeed:c,setCurrentLineupEditing:S,currentLineupEditing:b,defaultLineup:defaultLineup,setCurrencySelect:$,changeCurrentCurrency:ce,currentDefinePriceCurrency:C,setCurrentDefinePriceCurrency:T,setDefaultPriceHtml:ye,appendFormData:de,handleSetIsSettingCurrency:oe}))):null)))};export default Module;