Add coexistence checks to all enqueue methods to prevent loading both React and Grid.js assets simultaneously. Changes: - ReactAdmin.php: Only enqueue React assets when ?react=1 - Init.php: Skip Grid.js when React active on admin pages - Form.php, Coupon.php, Access.php: Restore classic assets when ?react=0 - Customer.php, Product.php, License.php: Add coexistence checks Now the toggle between Classic and React versions works correctly. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 line
34 KiB
JavaScript
1 line
34 KiB
JavaScript
(()=>{"use strict";var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,a=window.wp.element,r=window.wp.i18n,n=window.wp.components,l=(0,a.forwardRef)(function({icon:e,size:t=24,...r},n){return(0,a.cloneElement)(e,{width:t,height:t,...r,ref:n})}),o=window.wp["icons/build/list"];var i=e.n(o);const c=window.formipayAdmin?.ajaxUrl||"/wp-admin/admin-ajax.php",s=window.formipayAdmin?.nonce||"";async function m(e,t={}){const a=new FormData;a.append("action",e),a.append("_wpnonce",s),Object.keys(t).forEach(e=>{"object"==typeof t[e]?a.append(e,JSON.stringify(t[e])):a.append(e,t[e])}),console.log(`[AJAX] Sending request: ${e}`,{nonce:s,data:t});try{const t=await fetch(c,{method:"POST",credentials:"same-origin",body:a});console.log(`[AJAX] Response status: ${e}`,t.status);const r=await t.json();if(console.log(`[AJAX] Response data: ${e}`,r),!t.ok||!1===r.success){const e=r.data?.message||r.message||"Request failed";throw new Error(e)}return r}catch(t){throw console.error(`AJAX error [${e}]:`,t),t}}window.formipayAdmin;const d=window.wp["icons/build/visible"];var p=e.n(d);const u={"on-hold":"#f0ad4e","payment-confirm":"#17a2b8","in-progress":"#17a2b8",shipping:"#6c757d",completed:"#28a745",failed:"#dc3545",refunded:"#6c757d",cancelled:"#dc3545"},f={"on-hold":(0,r.__)("On Hold","formipay"),"payment-confirm":(0,r.__)("Payment Confirmed","formipay"),"in-progress":(0,r.__)("In Progress","formipay"),shipping:(0,r.__)("Shipping","formipay"),completed:(0,r.__)("Completed","formipay"),failed:(0,r.__)("Failed","formipay"),refunded:(0,r.__)("Refunded","formipay"),cancelled:(0,r.__)("Cancelled","formipay")};function y({order:e,onSelect:a}){const n=u[e.status]||"#6c757d",o=f[e.status]||e.status,i=(e=>{if(e.form_data){const t=Object.values(e.form_data).find(e=>e.name&&e.name.includes("name"));return t?.value||"-"}return"-"})(e);return(0,t.createElement)("tr",{className:"formipay-order-item"},(0,t.createElement)("td",null,(0,t.createElement)("strong",null,"#",e.id)),(0,t.createElement)("td",null,(c=e.created_date)?new Date(c).toLocaleDateString():"-"),(0,t.createElement)("td",null,"-"!==i?i:(0,t.createElement)("em",null,"Unknown")),(0,t.createElement)("td",null,(0,t.createElement)("strong",null,e.total_formatted||e.total)),(0,t.createElement)("td",null,(0,t.createElement)("span",{className:"status-badge",style:{backgroundColor:n}},o)),(0,t.createElement)("td",null,(0,t.createElement)("button",{type:"button",className:"button button-small",onClick:a},(0,t.createElement)(l,{icon:p()(),size:16}),(0,r.__)("View","formipay"))));var c}function _({onSelectOrder:e}){const[o,c]=(0,a.useState)([]),[s,d]=(0,a.useState)(!0),[p,u]=(0,a.useState)(0),[f,_]=(0,a.useState)({keyword:"",status:"",date_from:"",date_to:""}),[E,g]=(0,a.useState)({limit:20,offset:0}),b=(0,a.useCallback)(()=>{d(!0),((e={})=>m("formipay-tabledata-orders",e))({keyword:f.keyword,status:f.status,date_from:f.date_from,date_to:f.date_to,limit:E.limit,offset:E.offset}).then(e=>{e.data&&(c(e.data.results||[]),u(e.data.total||0))}).catch(e=>{console.error("Load orders error:",e)}).finally(()=>{d(!1)})},[f,E]);(0,a.useEffect)(()=>{b()},[b]);const h=(e,t)=>{_({...f,[e]:t}),g({...E,offset:0})},v=e=>{g({...E,offset:e})},w={"":(0,r.__)("All Statuses","formipay"),"on-hold":(0,r.__)("On Hold","formipay"),"payment-confirm":(0,r.__)("Payment Confirmed","formipay"),"in-progress":(0,r.__)("In Progress","formipay"),shipping:(0,r.__)("Shipping","formipay"),completed:(0,r.__)("Completed","formipay"),failed:(0,r.__)("Failed","formipay"),refunded:(0,r.__)("Refunded","formipay"),cancelled:(0,r.__)("Cancelled","formipay")},N=Math.ceil(p/E.limit),k=Math.floor(E.offset/E.limit)+1;return(0,t.createElement)("div",{className:"formipay-order-list"},(0,t.createElement)("div",{className:"formipay-orders-header"},(0,t.createElement)("h2",null,(0,t.createElement)(l,{icon:i()()}),(0,r.__)("Orders","formipay")),(0,t.createElement)("span",{className:"order-count"},p," ",(0,r.__)("orders","formipay"))),(0,t.createElement)("div",{className:"formipay-orders-filters"},(0,t.createElement)(n.SearchControl,{value:f.keyword,onChange:e=>{h("keyword",e)},placeholder:(0,r.__)("Search by order ID, customer name, email...","formipay")}),(0,t.createElement)(n.SelectControl,{value:f.status,options:Object.entries(w).map(([e,t])=>({value:e,label:t})),onChange:e=>h("status",e),label:(0,r.__)("Status","formipay")}),(0,t.createElement)("input",{type:"date",value:f.date_from,onChange:e=>h("date_from",e.target.value),className:"formipay-date-input"}),(0,t.createElement)("input",{type:"date",value:f.date_to,onChange:e=>h("date_to",e.target.value),className:"formipay-date-input"}),(f.keyword||f.status||f.date_from||f.date_to)&&(0,t.createElement)(n.Button,{variant:"secondary",onClick:()=>{_({keyword:"",status:"",date_from:"",date_to:""}),g({limit:20,offset:0})}},(0,r.__)("Clear Filters","formipay"))),(0,t.createElement)("div",{className:"formipay-orders-table-wrapper"},s?(0,t.createElement)("div",{className:"formipay-loading"},(0,t.createElement)("span",{className:"spinner is-active"})):0===o.length?(0,t.createElement)("div",{className:"formipay-no-results"},(0,t.createElement)("p",null,(0,r.__)("No orders found","formipay"))):(0,t.createElement)(t.Fragment,null,(0,t.createElement)("table",{className:"formipay-orders-table wp-list-table widefat fixed striped"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,(0,r.__)("ID","formipay")),(0,t.createElement)("th",null,(0,r.__)("Date","formipay")),(0,t.createElement)("th",null,(0,r.__)("Customer","formipay")),(0,t.createElement)("th",null,(0,r.__)("Total","formipay")),(0,t.createElement)("th",null,(0,r.__)("Status","formipay")),(0,t.createElement)("th",null,(0,r.__)("Actions","formipay")))),(0,t.createElement)("tbody",null,o.map(a=>(0,t.createElement)(y,{key:a.id,order:a,onSelect:()=>e?.(a.id)})))),N>1&&(0,t.createElement)("div",{className:"formipay-pagination"},(0,t.createElement)(n.Button,{variant:"secondary",disabled:1===k,onClick:()=>v(E.offset-E.limit)},(0,r.__)("Previous","formipay")),(0,t.createElement)("span",{className:"pagination-info"},(0,r.__)("Page","formipay")," ",k," ",(0,r.__)("of","formipay")," ",N),(0,t.createElement)(n.Button,{variant:"secondary",disabled:k===N,onClick:()=>v(E.offset+E.limit)},(0,r.__)("Next","formipay"))))))}const E=window.wp["icons/build/arrowLeft"];var g=e.n(E);const b=window.wp["icons/build/trash"];var h=e.n(b);const v=["on-hold","payment-confirm","in-progress","shipping","completed"],w={"on-hold":(0,r.__)("On Hold","formipay"),"payment-confirm":(0,r.__)("Payment Confirmed","formipay"),"in-progress":(0,r.__)("In Progress","formipay"),shipping:(0,r.__)("Shipping","formipay"),completed:(0,r.__)("Completed","formipay"),failed:(0,r.__)("Failed","formipay"),refunded:(0,r.__)("Refunded","formipay"),cancelled:(0,r.__)("Cancelled","formipay")};function N({orderId:e}){const[n,l]=(0,a.useState)([]);return(0,a.useEffect)(()=>{const e=[{status:"on-hold",date:(new Date).toISOString(),note:(0,r.__)("Order placed","formipay")}];l(e)},[e]),(0,t.createElement)("div",{className:"formipay-order-timeline"},(0,t.createElement)("h3",null,(0,r.__)("Order Timeline","formipay")),(0,t.createElement)("div",{className:"timeline-progress"},v.map((e,a)=>(0,t.createElement)("div",{key:e,className:`timeline-step ${0===a?"first":""} ${a===v.length-1?"last":""}`},(0,t.createElement)("div",{className:"timeline-dot"}),a<v.length-1&&(0,t.createElement)("div",{className:"timeline-line"}),(0,t.createElement)("span",{className:"timeline-label"},w[e])))),(0,t.createElement)("div",{className:"timeline-events"},0===n.length?(0,t.createElement)("p",{className:"no-events"},(0,r.__)("No timeline events yet","formipay")):(0,t.createElement)("ul",null,n.map((e,a)=>(0,t.createElement)("li",{key:a},(0,t.createElement)("span",{className:"event-status"},w[e.status]||e.status),(0,t.createElement)("span",{className:"event-date"},new Date(e.date).toLocaleString()),e.note&&(0,t.createElement)("span",{className:"event-note"},e.note))))))}const k=window.wp["icons/build/bell"];var S=e.n(k);const C=window.wp["icons/build/message"];var D=e.n(C);function A(){const e=[{id:1,type:"email",recipient:"customer@example.com",subject:"Order Confirmation",status:"sent",date:(new Date).toISOString()}],a=e=>{switch(e){case"email":default:return S()();case"sms":case"whatsapp":return D()()}};return(0,t.createElement)("div",{className:"formipay-notification-log"},(0,t.createElement)("h3",null,(0,t.createElement)(l,{icon:S()(),size:18}),(0,r.__)("Notification Log","formipay")),0===e.length?(0,t.createElement)("p",{className:"no-logs"},(0,r.__)("No notifications sent yet","formipay")):(0,t.createElement)("ul",{className:"notification-list"},e.map(e=>(0,t.createElement)("li",{key:e.id,className:`notification-item ${e.status}`},(0,t.createElement)("div",{className:"notification-icon"},(0,t.createElement)(l,{icon:a(e.type),size:20})),(0,t.createElement)("div",{className:"notification-content"},(0,t.createElement)("div",{className:"notification-header"},(0,t.createElement)("span",{className:"notification-type"},e.type.toUpperCase()),(0,t.createElement)("span",{className:"notification-status"},e.status)),(0,t.createElement)("div",{className:"notification-details"},(0,t.createElement)("strong",null,e.subject||e.type),(0,t.createElement)("span",{className:"notification-recipient"},(0,r.__)("To:","formipay")," ",e.recipient)),(0,t.createElement)("div",{className:"notification-date"},new Date(e.date).toLocaleString()))))))}const O=[{value:"on-hold",label:(0,r.__)("On Hold","formipay")},{value:"payment-confirm",label:(0,r.__)("Payment Confirmed","formipay")},{value:"in-progress",label:(0,r.__)("In Progress","formipay")},{value:"shipping",label:(0,r.__)("Shipping","formipay")},{value:"completed",label:(0,r.__)("Completed","formipay")},{value:"failed",label:(0,r.__)("Failed","formipay")},{value:"refunded",label:(0,r.__)("Refunded","formipay")},{value:"cancelled",label:(0,r.__)("Cancelled","formipay")}];function I({orderId:e,onBack:o}){const[i,c]=(0,a.useState)(null),[s,d]=(0,a.useState)(!0),[p,u]=(0,a.useState)(!1),[f,y]=(0,a.useState)(""),_=(0,a.useCallback)(()=>{d(!0),(e=>m("formipay-get-order",{order_id:e}))(e).then(e=>{e.data&&(c(e.data),y(e.data.status))}).catch(e=>{console.error("Load order error:",e)}).finally(()=>{d(!1)})},[e]);return(0,a.useEffect)(()=>{_()},[_]),s?(0,t.createElement)("div",{className:"formipay-order-detail"},(0,t.createElement)("div",{className:"formipay-loading"},(0,t.createElement)("span",{className:"spinner is-active"}))):i?(0,t.createElement)("div",{className:"formipay-order-detail"},(0,t.createElement)("div",{className:"formipay-detail-header"},(0,t.createElement)(n.Button,{variant:"secondary",onClick:o},(0,t.createElement)(l,{icon:g()(),size:16}),(0,r.__)("Back","formipay")),(0,t.createElement)("h1",null,(0,r.__)("Order","formipay")," #",i.id),(0,t.createElement)("div",{className:"header-actions"},(0,t.createElement)(n.Button,{variant:"secondary",isDestructive:!0,onClick:()=>{var t;confirm((0,r.__)("Are you sure you want to delete this order?","formipay"))&&(t=[e],m("formipay-bulk-delete-order",{ids:t})).then(e=>{e.success&&o?.()}).catch(e=>{console.error("Delete order error:",e)})}},(0,t.createElement)(l,{icon:h()(),size:16}),(0,r.__)("Delete","formipay")))),(0,t.createElement)("div",{className:"formipay-detail-content"},(0,t.createElement)("div",{className:"formipay-detail-main"},(0,t.createElement)("div",{className:"formipay-detail-card"},(0,t.createElement)("h3",null,(0,r.__)("Order Details","formipay")),(0,t.createElement)("dl",{className:"detail-list"},(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,r.__)("Status","formipay")),(0,t.createElement)("dd",null,(0,t.createElement)(n.SelectControl,{value:f,options:O,onChange:y,disabled:p}),f!==i.status&&(0,t.createElement)(n.Button,{variant:"primary",size:"small",onClick:()=>{f&&f!==i.status&&(u(!0),((e,t)=>m("formipay-update-order-status",{order_id:e,status:t}))(e,f).then(e=>{(e.success||e.data?.valid)&&_()}).catch(e=>{console.error("Update status error:",e)}).finally(()=>{u(!1)}))},disabled:p,isBusy:p},p?(0,r.__)("Updating...","formipay"):(0,r.__)("Update Status","formipay")))),(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,r.__)("Date Created","formipay")),(0,t.createElement)("dd",null,(E=i.created_date)?new Date(E).toLocaleString():"-")),(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,r.__)("Form ID","formipay")),(0,t.createElement)("dd",null,i.form_id)),(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,r.__)("Payment Gateway","formipay")),(0,t.createElement)("dd",null,i.payment_gateway||"-")))),(0,t.createElement)("div",{className:"formipay-detail-card"},(0,t.createElement)("h3",null,(0,r.__)("Items","formipay")),(0,t.createElement)("table",{className:"items-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,(0,r.__)("Item","formipay")),(0,t.createElement)("th",null,(0,r.__)("Qty","formipay")),(0,t.createElement)("th",null,(0,r.__)("Subtotal","formipay")))),(0,t.createElement)("tbody",null,i.items?.map((e,a)=>(0,t.createElement)("tr",{key:a},(0,t.createElement)("td",null,(0,t.createElement)("strong",null,e.item),e.description&&(0,t.createElement)("small",null,e.description)),(0,t.createElement)("td",null,e.qty||1),(0,t.createElement)("td",null,e.subtotal_formatted||e.subtotal)))||(0,t.createElement)("tr",null,(0,t.createElement)("td",{colSpan:"3",className:"text-center"},(0,r.__)("No items","formipay")))),(0,t.createElement)("tfoot",null,(0,t.createElement)("tr",null,(0,t.createElement)("td",{colSpan:"2"},(0,t.createElement)("strong",null,(0,r.__)("Total","formipay"))),(0,t.createElement)("td",null,(0,t.createElement)("strong",null,i.total_formatted||i.total))))))),(0,t.createElement)("div",{className:"formipay-detail-sidebar"},(0,t.createElement)("div",{className:"formipay-detail-card"},(0,t.createElement)("h3",null,(0,r.__)("Customer Information","formipay")),i.form_data?(0,t.createElement)("dl",{className:"customer-info"},Object.entries(i.form_data).map(([e,a])=>["payment","payment_gateway","coupon_code","qty"].includes(e)?null:(0,t.createElement)("div",{key:e},(0,t.createElement)("dt",null,e.replace(/_/g," ")),(0,t.createElement)("dd",null,a?.value||a||"-")))):(0,t.createElement)("p",{className:"no-data"},(0,r.__)("No customer data available","formipay"))),(0,t.createElement)(N,{orderId:e}),(0,t.createElement)(A,null)))):(0,t.createElement)("div",{className:"formipay-order-detail"},(0,t.createElement)("div",{className:"formipay-error"},(0,t.createElement)("p",null,(0,r.__)("Order not found","formipay")),(0,t.createElement)(n.Button,{variant:"secondary",onClick:o},(0,t.createElement)(l,{icon:g()(),size:16}),(0,r.__)("Back to Orders","formipay"))));var E}function P({columns:e,data:a,loading:n,emptyMessage:l=(0,r.__)("No items found","formipay"),onRowClick:o}){return n?(0,t.createElement)("div",{className:"formipay-data-table-loading"},(0,t.createElement)("span",{className:"spinner is-active"})):a&&0!==a.length?(0,t.createElement)("table",{className:"formipay-data-table wp-list-table widefat fixed striped"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,e.map(e=>(0,t.createElement)("th",{key:e.key},e.label)))),(0,t.createElement)("tbody",null,a.map((a,r)=>(0,t.createElement)("tr",{key:r,onClick:o?()=>o(a):void 0,className:o?"is-clickable":""},e.map(e=>(0,t.createElement)("td",{key:e.key},e.render?e.render(a):a[e.key])))))):(0,t.createElement)("div",{className:"formipay-data-table-empty"},(0,t.createElement)("p",null,l))}const F=window.wp["icons/build/plus"];var x=e.n(F);const L=window.wp["icons/build/minus"];var j=e.n(L);const U=window.wp["icons/build/eyeClosed"];var B=e.n(U);const $=window.wp["icons/build/eyeOpened"];var M=e.n($);function R({productId:e,productDetails:n}){const[l,o]=(0,a.useState)([]),[i,c]=(0,a.useState)([]),[s,m]=(0,a.useState)(!0),d=(0,a.useRef)(null),p=(0,a.useRef)(null),u=(0,a.useRef)(null),f=(0,a.useCallback)(()=>String(n?.default_currency||"").split(":::")[0]||n?.default_currency_code||"USD",[n]),y=(0,a.useCallback)(e=>{const t=n?.global_currencies||[],a=String(e).split(":::")[0],r=t.find(e=>String(e.currency).split(":::")[0]===a);return parseInt(r?.decimal_digits,10)||2},[n]),_=(0,a.useCallback)(()=>{const e=n?.global_selected_currencies||{};let t=Object.keys(e);if(!t.length){const e=n?.default_currency||"";e&&(t=[e])}return t.map(e=>{const t=String(e).split(":::")[0];return{currency:e,regular_price:"",sale_price:"",currency_decimal_digits:y(t)}})},[n,y]),E=(0,a.useCallback)(e=>{const t={...e};void 0===t.expanded&&(t.expanded=!1);const a=_(),r=e=>String(e).split(":::")[0];if(Array.isArray(t.prices)){const e=new Set(a.map(e=>r(e.currency)));t.prices=t.prices.filter(t=>t&&e.has(r(t.currency))),a.forEach(e=>{const a=r(e.currency);t.prices.some(e=>r(e.currency)===a)||t.prices.push(JSON.parse(JSON.stringify(e)))})}else t.prices=JSON.parse(JSON.stringify(a));Array.isArray(t.prices)&&0!==t.prices.length||(t.prices=JSON.parse(JSON.stringify(a))),t.prices.forEach(e=>{const t=r(e.currency);e.currency_decimal_digits=y(t),void 0!==e.regular_price&&null!==e.regular_price||(e.regular_price=""),void 0!==e.sale_price&&null!==e.sale_price||(e.sale_price="")});const n=f();return t.prices.sort((e,t)=>r(e.currency)===n?-1:r(t.currency)===n?1:0),delete t.price,delete t.sale,t},[_,y,f]),g=(0,a.useCallback)(()=>new Promise(e=>{let t=0;const a=setInterval(()=>{const r=document.querySelector('input[name="product_variation_attributes"]');if(r&&r.value)try{const t=JSON.parse(r.value);clearInterval(a),e(Array.isArray(t)?t:[])}catch(t){clearInterval(a),e([])}else++t>=100&&(clearInterval(a),e([]))},50)}),[]),b=(0,a.useCallback)(e=>{const t=e.map(e=>(e.attribute_variations||[]).map(e=>({label:e.variation_label}))).filter(e=>e.length>0);return t.length?t.reduce((e,t)=>e.flatMap(e=>t.map(t=>[].concat(e,t)))).map(e=>{const t=Array.isArray(e)?e.map(e=>e.label):[e.label];return{key:t.join("||"),label:t.join(" - ")}}):[]},[]),h=(0,a.useCallback)(async()=>{try{const e=await g();if(!e.length)return o([]),void v([]);const t=b(e).filter(e=>!i.includes(e.key)).map(e=>{const t=l.find(t=>t.key===e.key);return t?Object.assign(E(t),{name:e.label}):E({key:e.key,name:e.label,stock:"",weight:0,active:!0})});o(t),v(t)}catch(e){console.warn("Attributes not available; initializing empty variations."),o([]),v([])}},[g,b,i,l,E]),v=(0,a.useCallback)(e=>{d.current&&(d.current.value=JSON.stringify(e||[]))},[]),w=(0,a.useCallback)(async()=>{if(e)try{const t=new FormData;t.append("action","get_product_variables"),t.append("post_id",e),t.append("_wpnonce",window.formipayAdmin?.nonce||"");const a=await fetch(window.formipayAdmin?.ajaxUrl||"/wp-admin/admin-ajax.php",{method:"POST",credentials:"same-origin",body:t}),r=await a.json();if(r.success&&Array.isArray(r.data)&&r.data.length){const e=r.data.map(e=>E(e));o(e),c([]),v(e)}else await h()}catch{await h()}else await h()},[e,E,h,v]),N=(0,a.useCallback)(()=>{const e=()=>{setTimeout(()=>{h()},200)},t=document.querySelector('input[name="product_variation_attributes"]');if(t){t.addEventListener("input",e),t.addEventListener("change",e);const a=new MutationObserver(e);a.observe(t,{attributes:!0,attributeFilter:["value"]}),u.current=a,p.current=setInterval(()=>{const t=document.querySelector('input[name="product_variation_attributes"]');t&&t.value!==d.current?.value&&e()},300)}return()=>{u.current&&u.current.disconnect(),p.current&&clearInterval(p.current)}},[h]);(0,a.useEffect)(()=>{const e=n?.multicurrency,t=n?.global_selected_currencies||{},a=Object.keys(t).length;return m(!e||a<=1),w(),N()},[n,w,N]);const k=(0,a.useCallback)((e,t,a,r)=>{const n=[...l];n[e].prices[t][a]=r,o(n),v(n)},[l,v]),S=(0,a.useCallback)(e=>{const t=[...l];t[e].expanded=!t[e].expanded,o(t)},[l]),C=(0,a.useCallback)((e,t,a)=>{const r=[...l];r[e][t]=a,o(r),v(r)},[l,v]),D=(0,a.useCallback)(e=>{const t=l[e],a=[...i,t.key];c(a);const r=l.filter((t,a)=>a!==e);o(r),v(r)},[l,i,v]),A=(0,a.useCallback)(()=>{const e=f();for(const t of l){const a=t.prices?.find(t=>String(t.currency).split(":::")[0]===e);if(!a||!a.regular_price)return{currencyCode:e,rowLabel:t.name}}return null},[l,f]);return(0,a.useEffect)(()=>{const e=document.getElementById("post");if(!e)return;const t=e=>{const t=A();if(t){e.preventDefault(),e.stopImmediatePropagation();const a=(n?.variation_table?.error_missing_default_price||'Please fill Regular Price for default currency (%1$s) in variation "%2$s".').replace("%1$s",t.currencyCode).replace("%2$s",t.rowLabel);return alert(a),!1}};return e.addEventListener("submit",t,!0),()=>e.removeEventListener("submit",t,!0)},[A,n]),(0,t.createElement)(t.Fragment,null,(0,t.createElement)("input",{ref:d,type:"hidden",name:"product_variation_variables",value:JSON.stringify(l)}),(0,t.createElement)("table",{className:"formipay-variation-table",id:"product-variables-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,(0,r.__)("Variation","formipay")),s?(0,t.createElement)(t.Fragment,null,(0,t.createElement)("th",null,(0,r.__)("Price","formipay")),(0,t.createElement)("th",null,(0,r.__)("Sale Price","formipay"))):null,(0,t.createElement)("th",null,(0,r.__)("Stock","formipay")),(0,t.createElement)("th",null,(0,r.__)("Weight","formipay")),(0,t.createElement)("th",null,(0,r.__)("Actions","formipay")))),(0,t.createElement)("tbody",null,l.map((e,a)=>(0,t.createElement)(T,{key:e.key,row:e,rowIndex:a,showFlatPricing:s,defaultCurrencyCode:f(),onToggleExpanded:()=>S(a),onUpdatePrice:(e,t,r)=>k(a,e,t,r),onUpdateField:(e,t)=>C(a,e,t),onDelete:()=>D(a)})))))}function T({row:e,rowIndex:a,showFlatPricing:o,defaultCurrencyCode:i,onToggleExpanded:c,onUpdatePrice:s,onUpdateField:m,onDelete:d}){return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("tr",{className:"variation-row"},(0,t.createElement)("td",{className:"variation-name"},(0,t.createElement)("button",{type:"button",className:"toggle-expand",onClick:c},(0,t.createElement)(l,{icon:e.expanded?M():B(),size:16})),(0,t.createElement)("strong",null,e.name)),o?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(J,{price:e.prices[0],field:"regular_price",onChange:(e,t)=>s(0,e,t)}),(0,t.createElement)(J,{price:e.prices[0],field:"sale_price",onChange:(e,t)=>s(0,e,t)})):null,(0,t.createElement)("td",{className:"variation-stock"},(0,t.createElement)(n.TextControl,{type:"number",value:e.stock,onChange:e=>m("stock",e),placeholder:"Unlimited"})),(0,t.createElement)("td",{className:"variation-weight"},(0,t.createElement)(n.TextControl,{type:"number",value:e.weight,onChange:e=>m("weight",e),step:"0.01"})),(0,t.createElement)("td",{className:"variation-actions"},(0,t.createElement)(n.Button,{variant:"secondary",size:"small",isDestructive:!0,onClick:d,icon:j()()},(0,r.__)("Delete","formipay")))),!o&&e.expanded&&(0,t.createElement)("tr",{className:"variation-details-row"},(0,t.createElement)("td",{colSpan:"5"},(0,t.createElement)("table",{className:"inner-table"},(0,t.createElement)("tbody",null,e.prices.map((e,a)=>{const r=String(e.currency).split(":::")[0]===i,n=e.currency_decimal_digits?1/Math.pow(10,e.currency_decimal_digits):.01;return(0,t.createElement)("tr",{key:a},(0,t.createElement)("td",{className:"currency-name"},e.currency,r&&(0,t.createElement)("span",{className:"required"},"*")),(0,t.createElement)("td",null,(0,t.createElement)("input",{type:"number",value:e.regular_price,onChange:e=>s(a,"regular_price",e.target.value),step:n,placeholder:"Regular Price",required:r})),(0,t.createElement)("td",null,(0,t.createElement)("input",{type:"number",value:e.sale_price,onChange:e=>s(a,"sale_price",e.target.value),step:n,placeholder:"Sale Price"})))}))))))}function J({price:e,field:a,onChange:r}){const n=e.currency_decimal_digits?1/Math.pow(10,e.currency_decimal_digits):.01;return(0,t.createElement)("td",{className:"price-cell"},(0,t.createElement)("input",{type:"number",value:e[a],onChange:e=>r(a,e.target.value),step:n,placeholder:"Auto"}))}const z={orders:function({initialData:e}){const[r,n]=(0,a.useState)(null);return r?(0,t.createElement)(I,{orderId:r,onBack:()=>n(null)}):(0,t.createElement)(_,{onSelectOrder:e=>n(e)})},customers:function({initialData:e}){const[n,l]=(0,a.useState)([]),[o,i]=(0,a.useState)(!0),c=(0,a.useCallback)(()=>{i(!0),((e={})=>m("formipay-tabledata-customers",e))().then(e=>{const t=e.data?.results||e.results||e.data||[];l(t)}).catch(e=>{console.error("Load customers error:",e)}).finally(()=>{i(!1)})},[]);(0,a.useEffect)(()=>{c()},[c]);const s=[{key:"id",label:(0,r.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"name",label:(0,r.__)("Name","formipay"),render:e=>e.name||e.full_name||"-"},{key:"email",label:(0,r.__)("Email","formipay")},{key:"phone",label:(0,r.__)("Phone","formipay"),render:e=>e.phone||e.whatsapp||"-"},{key:"total_order",label:(0,r.__)("Total Orders","formipay"),render:e=>e.total_order||e.total_orders||0},{key:"created_date",label:(0,r.__)("Date","formipay"),render:e=>{const t=e.created_date||e.date;return t?new Date(t).toLocaleDateString():"-"}}];return(0,t.createElement)("div",{className:"formipay-page-customers"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,r.__)("Customers","formipay"))),(0,t.createElement)(P,{columns:s,data:n,loading:o,emptyMessage:(0,r.__)("No customers found","formipay")}))},products:function({initialData:e}){const[n,o]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),s=e?.productDetails||{};return n&&i?(0,t.createElement)("div",{className:"formipay-page-products"},(0,t.createElement)("div",{className:"formipay-products-header"},(0,t.createElement)("button",{type:"button",className:"button button-secondary",onClick:()=>o(!1)},"← ",(0,r.__)("Back to Products","formipay")),(0,t.createElement)("h1",null,(0,r.__)("Edit Product","formipay"))),(0,t.createElement)("div",{className:"formipay-product-editor"},(0,t.createElement)(R,{productId:i,productDetails:s}))):(0,t.createElement)("div",{className:"formipay-page-products"},(0,t.createElement)("div",{className:"formipay-products-list-header"},(0,t.createElement)("h1",null,(0,r.__)("Products","formipay")),(0,t.createElement)("button",{type:"button",className:"button button-primary",onClick:()=>{c(null),o(!0)}},(0,t.createElement)(l,{icon:x()(),size:16}),(0,r.__)("Add New Product","formipay"))),(0,t.createElement)("p",{className:"formipay-coming-soon"},(0,r.__)("Products list coming soon. Use the classic editor for now.","formipay")))},forms:function({initialData:e}){const[l,o]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),[s,d]=(0,a.useState)([]),[p,u]=(0,a.useState)(!0),f=(0,a.useCallback)(()=>{u(!0),((e={})=>m("formipay-tabledata-forms",e))().then(e=>{console.log("Forms API result:",e);const t=e.data?.results||e.results||e.data||[];console.log("Forms data extracted:",t),console.log("Forms data length:",t.length),d(t)}).catch(e=>{console.error("Load forms error:",e)}).finally(()=>{u(!1)})},[]);if((0,a.useEffect)(()=>{f()},[f]),l&&i)return window.location.href=`${window.formipayAdmin?.siteUrl||""}/wp-admin/post.php?post=${i}&action=edit`,null;const y=[{key:"id",label:(0,r.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.ID||e.id)},{key:"title",label:(0,r.__)("Title","formipay"),render:e=>(0,t.createElement)("a",{href:`${window.formipayAdmin?.siteUrl||""}/wp-admin/post.php?post=${e.ID||e.id}&action=edit`,onClick:t=>{t.preventDefault(),o(!0),c(e.ID||e.id)}},e.post_title||e.title||(0,r.__)("Untitled","formipay"))},{key:"shortcode",label:(0,r.__)("Shortcode","formipay"),render:e=>(0,t.createElement)("code",null,'[formipay id="',e.ID||e.id,'"]')},{key:"status",label:(0,r.__)("Status","formipay"),render:e=>{const a=e.post_status||e.status||"unknown",n={publish:(0,r.__)("Published","formipay"),draft:(0,r.__)("Draft","formipay"),pending:(0,r.__)("Pending","formipay")}[a]||a;return(0,t.createElement)("span",{className:"status-badge status-"+("publish"===a?"active":"draft")},n)}},{key:"date",label:(0,r.__)("Date","formipay"),render:e=>{const t=e.post_date||e.date;return t?new Date(t).toLocaleDateString():"-"}}];return(0,t.createElement)("div",{className:"formipay-page-forms"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,r.__)("Forms","formipay")),(0,t.createElement)(n.Button,{variant:"primary",href:`${window.formipayAdmin?.siteUrl||""}/wp-admin/post-new.php?post_type=formipay-form`},(0,r.__)("+ Add New Form","formipay"))),(0,t.createElement)(P,{columns:y,data:s,loading:p,emptyMessage:(0,r.__)("No forms found","formipay")}))},coupons:function({initialData:e}){const[l,o]=(0,a.useState)([]),[i,c]=(0,a.useState)(!0),s=(0,a.useCallback)(()=>{c(!0),((e={})=>m("formipay-tabledata-coupons",e))().then(e=>{const t=e.data?.results||e.results||e.data||[];o(t)}).catch(e=>{console.error("Load coupons error:",e)}).finally(()=>{c(!1)})},[]);(0,a.useEffect)(()=>{s()},[s]);const d=[{key:"id",label:(0,r.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"code",label:(0,r.__)("Coupon Code","formipay"),render:e=>(0,t.createElement)("strong",null,e.code||e.post_title)},{key:"type",label:(0,r.__)("Type","formipay"),render:e=>"percentage"===(e.coupon_type||e.type||"percentage")?(0,r.__)("%","formipay"):(0,r.__)("Fixed","formipay")},{key:"amount",label:(0,r.__)("Amount","formipay")},{key:"usages",label:(0,r.__)("Usages","formipay"),render:e=>e.usage_count||e.usages||0},{key:"status",label:(0,r.__)("Status","formipay"),render:e=>"publish"===(e.post_status||e.status||"unknown")?(0,r.__)("Active","formipay"):(0,r.__)("Inactive","formipay")}];return(0,t.createElement)("div",{className:"formipay-page-coupons"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,r.__)("Coupons","formipay")),(0,t.createElement)(n.Button,{variant:"primary",onClick:()=>{const e=prompt((0,r.__)("Enter coupon code:","formipay"));var t;e&&(t={code:e},m("formipay-create-coupon-post",t)).then(()=>s()).catch(console.error)}},(0,r.__)("+ Add New Coupon","formipay"))),(0,t.createElement)(P,{columns:d,data:l,loading:i,emptyMessage:(0,r.__)("No coupons found","formipay")}))},access:function({initialData:e}){const[l,o]=(0,a.useState)([]),[i,c]=(0,a.useState)(!0),s=(0,a.useCallback)(()=>{c(!0),((e={})=>m("formipay-tabledata-access-items",e))().then(e=>{const t=e.data?.results||e.results||e.data||[];o(t)}).catch(e=>{console.error("Load access items error:",e)}).finally(()=>{c(!1)})},[]);(0,a.useEffect)(()=>{s()},[s]);const d=[{key:"id",label:(0,r.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"title",label:(0,r.__)("Title","formipay")},{key:"product_name",label:(0,r.__)("Product","formipay")},{key:"status",label:(0,r.__)("Status","formipay"),render:e=>{const a=e.post_status||e.status||"unknown",n={publish:(0,r.__)("Published","formipay"),draft:(0,r.__)("Draft","formipay")}[a]||a;return(0,t.createElement)("span",{className:`status-badge status-${a}`},n)}},{key:"date",label:(0,r.__)("Date","formipay"),render:e=>{const t=e.post_date||e.date;return t?new Date(t).toLocaleDateString():"-"}}];return(0,t.createElement)("div",{className:"formipay-page-access"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,r.__)("Access Items","formipay")),(0,t.createElement)(n.Button,{variant:"primary",href:window.formipayAdmin?.siteUrl+"/wp-admin/post-new.php?post_type=formipay-access"},(0,r.__)("+ Add New Item","formipay"))),(0,t.createElement)(P,{columns:d,data:l,loading:i,emptyMessage:(0,r.__)("No access items found","formipay")}))},licenses:function({initialData:e}){const[n,l]=(0,a.useState)([]),[o,i]=(0,a.useState)(!0),c=(0,a.useCallback)(()=>{i(!0),fetch(window.formipayAdmin?.ajaxUrl||"/wp-admin/admin-ajax.php",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"formipay-tabledata-licenses",_wpnonce:window.formipayAdmin?.nonce||""})}).then(e=>e.json()).then(e=>{const t=e.data?.results||e.results||e.data||[];l(t)}).catch(e=>{console.error("Load licenses error:",e)}).finally(()=>{i(!1)})},[]);(0,a.useEffect)(()=>{c()},[c]);const s=[{key:"id",label:(0,r.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"license_key",label:(0,r.__)("License Key","formipay"),render:e=>(0,t.createElement)("code",null,e.license_key||"-")},{key:"product",label:(0,r.__)("Product","formipay"),render:e=>e.product_name||e.product||"-"},{key:"order",label:(0,r.__)("Order","formipay"),render:e=>e.order_id||`#${e.order}`||"-"},{key:"email",label:(0,r.__)("Email","formipay")},{key:"status",label:(0,r.__)("Status","formipay"),render:e=>{const t=e.status||"unknown";return{active:(0,r.__)("Active","formipay"),inactive:(0,r.__)("Inactive","formipay"),expired:(0,r.__)("Expired","formipay")}[t]||t}}];return(0,t.createElement)("div",{className:"formipay-page-licenses"},(0,t.createElement)("div",{className:"formipay-page-licenses"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,r.__)("Licenses","formipay"))),(0,t.createElement)(P,{columns:s,data:n,loading:o,emptyMessage:(0,r.__)("No licenses found","formipay")})))}};function q({page:e,initialData:r}){(0,a.useEffect)(()=>{console.log("[Formipay App] Rendering page:",e,"with data:",r)},[e,r]);const n=z[e];return n?(0,t.createElement)("div",{className:"formipay-admin-wrap"},(0,t.createElement)(n,{initialData:r})):(0,t.createElement)("div",{className:"formipay-error"},(0,t.createElement)("p",null,"Unknown page: ",e))}const H=()=>{const e=document.querySelectorAll("[data-formipay-mount]");console.log("[Formipay] Mount points found:",e.length),console.log("[Formipay] formipayAdmin data:",window.formipayAdmin),e.forEach(e=>{const r=e.dataset.formipayMount,n=window.formipayAdmin?.[r]||{};console.log("[Formipay] Mounting page:",r,"with data:",n);try{(0,a.render)((0,t.createElement)(q,{page:r,initialData:n}),e),console.log("[Formipay] Successfully mounted:",r)}catch(e){console.error("[Formipay] Failed to mount:",r,e)}})};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",H):H()})(); |