From 8529cfa2c0c2d6feecb502775a8aea0cf9470753 Mon Sep 17 00:00:00 2001 From: dwindown Date: Sat, 18 Apr 2026 17:10:45 +0700 Subject: [PATCH] feat: implement full-featured DataTable component Implement comprehensive DataTable with all Grid.js features: - Checkbox selection with "Select All" - Bulk delete button (shows when rows selected) - Inline row actions (edit, delete, duplicate) on hover - Status filter tabs with counts - Search input with debounce - Sort dropdown (ID, date, title ASC/DESC) - Server-side pagination - "Add New" modal with SweetAlert2 - SweetAlert2 loaded via WordPress global scope Updated Forms page to use new DataTable component with: - Full column rendering (ID, title, date, status, shortcode) - Copy shortcode button with toast notification - All filter, search, sort, pagination features Co-authored-by: Claude Opus 4.7 --- build/admin-rtl.css | 2 +- build/admin.asset.php | 2 +- build/admin.css | 2 +- build/admin.js | 2 +- ...6e3ce0455b2ffc6fe20655310e48e3fcfa.json.gz | Bin 0 -> 3682 bytes ...076758a922a7013dae8f82212b9abb6739.json.gz | Bin 0 -> 3773 bytes ...d91023a3de95e1efd6f29d107893ef8cde.json.gz | Bin 0 -> 10213 bytes ...a26bbd7b51edc56eb9447ae968ea1f9725.json.gz | Bin 0 -> 1460 bytes ...e236cca65f4149c9c42135fa79a1f8d24b.json.gz | Bin 0 -> 10150 bytes ...308dacff02cd1b74d9d32eff007bcff386.json.gz | Bin 0 -> 3851 bytes ...cf3d64a741cb2fb022cf781fac4171a8f0.json.gz | Bin 0 -> 1512 bytes ...354be15632d4208fff53cb9d84f7309af6.json.gz | Bin 0 -> 3729 bytes ...4cbeaf869a996fcecc39b58034960a9cdb.json.gz | Bin 0 -> 10171 bytes ...ca1bac0185e9a5467996f9400108d8b99c.json.gz | Bin 0 -> 10175 bytes src/admin/components/shared/DataTable.css | 269 +++++++- src/admin/components/shared/DataTable.js | 587 ++++++++++++++++-- src/admin/pages/Forms.js | 169 ++--- 17 files changed, 901 insertions(+), 132 deletions(-) create mode 100644 node_modules/.cache/babel-loader/14b79987dc3a84ec3a760fa9a4ef506e3ce0455b2ffc6fe20655310e48e3fcfa.json.gz create mode 100644 node_modules/.cache/babel-loader/3a08871aa808e620b9298452a2638f076758a922a7013dae8f82212b9abb6739.json.gz create mode 100644 node_modules/.cache/babel-loader/3e0c80852595c04cdb34c154a893d8d91023a3de95e1efd6f29d107893ef8cde.json.gz create mode 100644 node_modules/.cache/babel-loader/565207e7fbd18187e191263c954119a26bbd7b51edc56eb9447ae968ea1f9725.json.gz create mode 100644 node_modules/.cache/babel-loader/59e6cb50a62c21cd73de0ec3a02847e236cca65f4149c9c42135fa79a1f8d24b.json.gz create mode 100644 node_modules/.cache/babel-loader/5aab4366ac87b889d35d3e884b6b07308dacff02cd1b74d9d32eff007bcff386.json.gz create mode 100644 node_modules/.cache/babel-loader/7e14adc209a2f91edde190f1c99acfcf3d64a741cb2fb022cf781fac4171a8f0.json.gz create mode 100644 node_modules/.cache/babel-loader/8c0f4882f684e83867700f22af9cdb354be15632d4208fff53cb9d84f7309af6.json.gz create mode 100644 node_modules/.cache/babel-loader/c606103bba57e717885d000da0ada54cbeaf869a996fcecc39b58034960a9cdb.json.gz create mode 100644 node_modules/.cache/babel-loader/e45f6611ae3be43cc6b5aa48e32a8dca1bac0185e9a5467996f9400108d8b99c.json.gz diff --git a/build/admin-rtl.css b/build/admin-rtl.css index 8f9dbf0df..a003764f2 100644 --- a/build/admin-rtl.css +++ b/build/admin-rtl.css @@ -3,6 +3,6 @@ .formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;right:50%;position:absolute;top:50%;transform:translate(50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;right:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:left}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center} .formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px} .formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:right}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0} -.formipay-data-table-empty,.formipay-data-table-loading{padding:40px;text-align:center}.formipay-data-table{margin-top:20px}.formipay-data-table thead th{font-weight:600;padding:12px 10px}.formipay-data-table tbody td{padding:10px}.formipay-data-table tbody tr.is-clickable{cursor:pointer}.formipay-data-table tbody tr.is-clickable:hover{background-color:#f0f0f1} +.formipay-data-table-wrapper{margin:20px 0}.formipay-table-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.formipay-table-search{flex-grow:1;max-width:300px}.formipay-table-toolbar .components-select-control{min-width:150px}.formipay-filter-tabs{border-bottom:1px solid #ddd;display:flex;gap:4px;margin-bottom:16px}.formipay-filter-tabs .filter-tab{background:transparent;border:none;border-bottom:3px solid transparent;color:#646970;cursor:pointer;font-size:13px;padding:8px 16px;transition:all .2s}.formipay-filter-tabs .filter-tab:hover{background:#f0f0f1;color:#135e96}.formipay-filter-tabs .filter-tab.active{border-bottom-color:#135e96;color:#135e96;font-weight:600}.formipay-filter-tabs .filter-tab .count{background:#dcdcde;border-radius:10px;display:inline-block;font-size:11px;line-height:1.4;margin-right:6px;min-width:18px;padding:2px 6px}.formipay-filter-tabs .filter-tab.active .count{background:#135e96;color:#fff}.formipay-table-container{background:#fff;border:1px solid #c3c4c7;box-shadow:0 1px 1px rgba(0,0,0,.04)}.formipay-table-loading{padding:60px;text-align:center}.formipay-table-empty{color:#646970;padding:40px;text-align:center}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead th{background:#f6f7f7;border-bottom:1px solid #c3c4c7;font-weight:600;padding:12px 10px;text-align:right}.formipay-table tbody td{border-bottom:1px solid #c3c4c7;padding:10px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f0f0f1}.formipay-table .column-select{text-align:center;width:40px}.formipay-table tbody td:first-child input[type=checkbox]{margin:0}.formipay-table .column-actions{width:200px}.formipay-table .row-actions{display:none;visibility:hidden}.formipay-table tbody tr:hover .row-actions{display:block;visibility:visible}.formipay-table .row-actions .button-link,.formipay-table .row-actions a{color:#a7aaad;cursor:pointer;text-decoration:none}.formipay-table .row-actions .button-link:hover,.formipay-table .row-actions a:hover{color:#135e96}.formipay-table .row-actions .delete{color:#b32d2e}.formipay-table .row-actions .delete:hover{color:#d63638}.formipay-table .status-label{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.formipay-table .status-label.publish{background:#edfaef;color:#007017}.formipay-table .status-label.draft{background:#f0f0f1;color:#646970}.formipay-table .status-label.pending{background:#fff8e5;color:#d63638}.formipay-table input.formipay-form-shortcode{background:#f6f7f7;border:1px solid #8c8f94;border-radius:4px;color:#646970;font-family:monospace;font-size:12px;min-width:150px;padding:4px 8px}.formipay-table button.copy-shortcode{align-items:center;background:#fff;border:1px solid #8c8f94;border-radius:4px;cursor:pointer;display:inline-flex;gap:4px;margin-right:4px;padding:4px 8px}.formipay-table button.copy-shortcode:hover{background:#f6f7f7}.formipay-table button.copy-shortcode svg{height:16px;width:16px}.formipay-table-pagination{align-items:center;background:#fff;border:1px solid #c3c4c7;border-top:none;display:flex;justify-content:space-between;padding:12px 16px}.formipay-table-pagination .pagination-info{color:#646970;font-size:13px}.formipay-table-pagination .pagination-controls{align-items:center;display:flex;gap:8px}.formipay-table-pagination .page-info{color:#646970;font-size:13px;padding:0 8px}.formipay-table-pagination .components-select-control{min-width:80px}.formipay-modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px}.formipay-table thead th.sorted{padding-left:20px;position:relative}.formipay-table thead th .sort-indicator{color:#135e96;position:absolute;left:8px;top:50%;transform:translateY(-50%)} .formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px} .formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:right}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-right:4px} diff --git a/build/admin.asset.php b/build/admin.asset.php index b9bd00146..8ec749820 100644 --- a/build/admin.asset.php +++ b/build/admin.asset.php @@ -1 +1 @@ - array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/eye-closed', 'wp-icons/build/eye-opened', 'wp-icons/build/list', 'wp-icons/build/message', 'wp-icons/build/minus', 'wp-icons/build/plus', 'wp-icons/build/trash', 'wp-icons/build/visible'), 'version' => 'a62306d2a4d673c06ceb'); + array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/eye-closed', 'wp-icons/build/eye-opened', 'wp-icons/build/list', 'wp-icons/build/message', 'wp-icons/build/minus', 'wp-icons/build/plus', 'wp-icons/build/trash', 'wp-icons/build/visible'), 'version' => '164b137f81dde0451242'); diff --git a/build/admin.css b/build/admin.css index 8a60a1481..46f99de01 100644 --- a/build/admin.css +++ b/build/admin.css @@ -3,6 +3,6 @@ .formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;left:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:right}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center} .formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px} .formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:left}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0} -.formipay-data-table-empty,.formipay-data-table-loading{padding:40px;text-align:center}.formipay-data-table{margin-top:20px}.formipay-data-table thead th{font-weight:600;padding:12px 10px}.formipay-data-table tbody td{padding:10px}.formipay-data-table tbody tr.is-clickable{cursor:pointer}.formipay-data-table tbody tr.is-clickable:hover{background-color:#f0f0f1} +.formipay-data-table-wrapper{margin:20px 0}.formipay-table-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.formipay-table-search{flex-grow:1;max-width:300px}.formipay-table-toolbar .components-select-control{min-width:150px}.formipay-filter-tabs{border-bottom:1px solid #ddd;display:flex;gap:4px;margin-bottom:16px}.formipay-filter-tabs .filter-tab{background:transparent;border:none;border-bottom:3px solid transparent;color:#646970;cursor:pointer;font-size:13px;padding:8px 16px;transition:all .2s}.formipay-filter-tabs .filter-tab:hover{background:#f0f0f1;color:#135e96}.formipay-filter-tabs .filter-tab.active{border-bottom-color:#135e96;color:#135e96;font-weight:600}.formipay-filter-tabs .filter-tab .count{background:#dcdcde;border-radius:10px;display:inline-block;font-size:11px;line-height:1.4;margin-left:6px;min-width:18px;padding:2px 6px}.formipay-filter-tabs .filter-tab.active .count{background:#135e96;color:#fff}.formipay-table-container{background:#fff;border:1px solid #c3c4c7;box-shadow:0 1px 1px rgba(0,0,0,.04)}.formipay-table-loading{padding:60px;text-align:center}.formipay-table-empty{color:#646970;padding:40px;text-align:center}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead th{background:#f6f7f7;border-bottom:1px solid #c3c4c7;font-weight:600;padding:12px 10px;text-align:left}.formipay-table tbody td{border-bottom:1px solid #c3c4c7;padding:10px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f0f0f1}.formipay-table .column-select{text-align:center;width:40px}.formipay-table tbody td:first-child input[type=checkbox]{margin:0}.formipay-table .column-actions{width:200px}.formipay-table .row-actions{display:none;visibility:hidden}.formipay-table tbody tr:hover .row-actions{display:block;visibility:visible}.formipay-table .row-actions .button-link,.formipay-table .row-actions a{color:#a7aaad;cursor:pointer;text-decoration:none}.formipay-table .row-actions .button-link:hover,.formipay-table .row-actions a:hover{color:#135e96}.formipay-table .row-actions .delete{color:#b32d2e}.formipay-table .row-actions .delete:hover{color:#d63638}.formipay-table .status-label{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.formipay-table .status-label.publish{background:#edfaef;color:#007017}.formipay-table .status-label.draft{background:#f0f0f1;color:#646970}.formipay-table .status-label.pending{background:#fff8e5;color:#d63638}.formipay-table input.formipay-form-shortcode{background:#f6f7f7;border:1px solid #8c8f94;border-radius:4px;color:#646970;font-family:monospace;font-size:12px;min-width:150px;padding:4px 8px}.formipay-table button.copy-shortcode{align-items:center;background:#fff;border:1px solid #8c8f94;border-radius:4px;cursor:pointer;display:inline-flex;gap:4px;margin-left:4px;padding:4px 8px}.formipay-table button.copy-shortcode:hover{background:#f6f7f7}.formipay-table button.copy-shortcode svg{height:16px;width:16px}.formipay-table-pagination{align-items:center;background:#fff;border:1px solid #c3c4c7;border-top:none;display:flex;justify-content:space-between;padding:12px 16px}.formipay-table-pagination .pagination-info{color:#646970;font-size:13px}.formipay-table-pagination .pagination-controls{align-items:center;display:flex;gap:8px}.formipay-table-pagination .page-info{color:#646970;font-size:13px;padding:0 8px}.formipay-table-pagination .components-select-control{min-width:80px}.formipay-modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px}.formipay-table thead th.sorted{padding-right:20px;position:relative}.formipay-table thead th .sort-indicator{color:#135e96;position:absolute;right:8px;top:50%;transform:translateY(-50%)} .formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px} .formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:left}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-left:4px} diff --git a/build/admin.js b/build/admin.js index e48e19c4e..0bc890956 100644 --- a/build/admin.js +++ b/build/admin.js @@ -1 +1 @@ -(()=>{"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(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()})(); \ No newline at end of file +(()=>{"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 n in a)e.o(a,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:a[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,a=window.wp.element,n=window.wp.i18n,r=window.wp.components,l=(0,a.forwardRef)(function({icon:e,size:t=24,...n},r){return(0,a.cloneElement)(e,{width:t,height:t,...n,ref:r})}),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 n=await t.json();if(console.log(`[AJAX] Response data: ${e}`,n),!t.ok||!1===n.success){const e=n.data?.message||n.message||"Request failed";throw new Error(e)}return n}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,n.__)("On Hold","formipay"),"payment-confirm":(0,n.__)("Payment Confirmed","formipay"),"in-progress":(0,n.__)("In Progress","formipay"),shipping:(0,n.__)("Shipping","formipay"),completed:(0,n.__)("Completed","formipay"),failed:(0,n.__)("Failed","formipay"),refunded:(0,n.__)("Refunded","formipay"),cancelled:(0,n.__)("Cancelled","formipay")};function y({order:e,onSelect:a}){const r=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:r}},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,n.__)("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,h]=(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 g=(e,t)=>{_({...f,[e]:t}),h({...E,offset:0})},w=e=>{h({...E,offset:e})},v={"":(0,n.__)("All Statuses","formipay"),"on-hold":(0,n.__)("On Hold","formipay"),"payment-confirm":(0,n.__)("Payment Confirmed","formipay"),"in-progress":(0,n.__)("In Progress","formipay"),shipping:(0,n.__)("Shipping","formipay"),completed:(0,n.__)("Completed","formipay"),failed:(0,n.__)("Failed","formipay"),refunded:(0,n.__)("Refunded","formipay"),cancelled:(0,n.__)("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,n.__)("Orders","formipay")),(0,t.createElement)("span",{className:"order-count"},p," ",(0,n.__)("orders","formipay"))),(0,t.createElement)("div",{className:"formipay-orders-filters"},(0,t.createElement)(r.SearchControl,{value:f.keyword,onChange:e=>{g("keyword",e)},placeholder:(0,n.__)("Search by order ID, customer name, email...","formipay")}),(0,t.createElement)(r.SelectControl,{value:f.status,options:Object.entries(v).map(([e,t])=>({value:e,label:t})),onChange:e=>g("status",e),label:(0,n.__)("Status","formipay")}),(0,t.createElement)("input",{type:"date",value:f.date_from,onChange:e=>g("date_from",e.target.value),className:"formipay-date-input"}),(0,t.createElement)("input",{type:"date",value:f.date_to,onChange:e=>g("date_to",e.target.value),className:"formipay-date-input"}),(f.keyword||f.status||f.date_from||f.date_to)&&(0,t.createElement)(r.Button,{variant:"secondary",onClick:()=>{_({keyword:"",status:"",date_from:"",date_to:""}),h({limit:20,offset:0})}},(0,n.__)("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,n.__)("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,n.__)("ID","formipay")),(0,t.createElement)("th",null,(0,n.__)("Date","formipay")),(0,t.createElement)("th",null,(0,n.__)("Customer","formipay")),(0,t.createElement)("th",null,(0,n.__)("Total","formipay")),(0,t.createElement)("th",null,(0,n.__)("Status","formipay")),(0,t.createElement)("th",null,(0,n.__)("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)(r.Button,{variant:"secondary",disabled:1===k,onClick:()=>w(E.offset-E.limit)},(0,n.__)("Previous","formipay")),(0,t.createElement)("span",{className:"pagination-info"},(0,n.__)("Page","formipay")," ",k," ",(0,n.__)("of","formipay")," ",N),(0,t.createElement)(r.Button,{variant:"secondary",disabled:k===N,onClick:()=>w(E.offset+E.limit)},(0,n.__)("Next","formipay"))))))}const E=window.wp["icons/build/arrowLeft"];var h=e.n(E);const b=window.wp["icons/build/trash"];var g=e.n(b);const w=["on-hold","payment-confirm","in-progress","shipping","completed"],v={"on-hold":(0,n.__)("On Hold","formipay"),"payment-confirm":(0,n.__)("Payment Confirmed","formipay"),"in-progress":(0,n.__)("In Progress","formipay"),shipping:(0,n.__)("Shipping","formipay"),completed:(0,n.__)("Completed","formipay"),failed:(0,n.__)("Failed","formipay"),refunded:(0,n.__)("Refunded","formipay"),cancelled:(0,n.__)("Cancelled","formipay")};function N({orderId:e}){const[r,l]=(0,a.useState)([]);return(0,a.useEffect)(()=>{const e=[{status:"on-hold",date:(new Date).toISOString(),note:(0,n.__)("Order placed","formipay")}];l(e)},[e]),(0,t.createElement)("div",{className:"formipay-order-timeline"},(0,t.createElement)("h3",null,(0,n.__)("Order Timeline","formipay")),(0,t.createElement)("div",{className:"timeline-progress"},w.map((e,a)=>(0,t.createElement)("div",{key:e,className:`timeline-step ${0===a?"first":""} ${a===w.length-1?"last":""}`},(0,t.createElement)("div",{className:"timeline-dot"}),a(0,t.createElement)("li",{key:a},(0,t.createElement)("span",{className:"event-status"},v[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,n.__)("Notification Log","formipay")),0===e.length?(0,t.createElement)("p",{className:"no-logs"},(0,n.__)("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,n.__)("To:","formipay")," ",e.recipient)),(0,t.createElement)("div",{className:"notification-date"},new Date(e.date).toLocaleString()))))))}const I=[{value:"on-hold",label:(0,n.__)("On Hold","formipay")},{value:"payment-confirm",label:(0,n.__)("Payment Confirmed","formipay")},{value:"in-progress",label:(0,n.__)("In Progress","formipay")},{value:"shipping",label:(0,n.__)("Shipping","formipay")},{value:"completed",label:(0,n.__)("Completed","formipay")},{value:"failed",label:(0,n.__)("Failed","formipay")},{value:"refunded",label:(0,n.__)("Refunded","formipay")},{value:"cancelled",label:(0,n.__)("Cancelled","formipay")}];function P({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)(r.Button,{variant:"secondary",onClick:o},(0,t.createElement)(l,{icon:h()(),size:16}),(0,n.__)("Back","formipay")),(0,t.createElement)("h1",null,(0,n.__)("Order","formipay")," #",i.id),(0,t.createElement)("div",{className:"header-actions"},(0,t.createElement)(r.Button,{variant:"secondary",isDestructive:!0,onClick:()=>{var t;confirm((0,n.__)("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:g()(),size:16}),(0,n.__)("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,n.__)("Order Details","formipay")),(0,t.createElement)("dl",{className:"detail-list"},(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,n.__)("Status","formipay")),(0,t.createElement)("dd",null,(0,t.createElement)(r.SelectControl,{value:f,options:I,onChange:y,disabled:p}),f!==i.status&&(0,t.createElement)(r.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,n.__)("Updating...","formipay"):(0,n.__)("Update Status","formipay")))),(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,n.__)("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,n.__)("Form ID","formipay")),(0,t.createElement)("dd",null,i.form_id)),(0,t.createElement)("div",null,(0,t.createElement)("dt",null,(0,n.__)("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,n.__)("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,n.__)("Item","formipay")),(0,t.createElement)("th",null,(0,n.__)("Qty","formipay")),(0,t.createElement)("th",null,(0,n.__)("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,n.__)("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,n.__)("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,n.__)("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,n.__)("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,n.__)("Order not found","formipay")),(0,t.createElement)(r.Button,{variant:"secondary",onClick:o},(0,t.createElement)(l,{icon:h()(),size:16}),(0,n.__)("Back to Orders","formipay"))));var E}const O=window.Swal;function T({initialData:e=[],columns:l,filterOptions:o=null,statusCounts:i=null,searchable:c=!0,searchPlaceholder:s=(0,n.__)("Search...","formipay"),sortable:m=!0,defaultSort:d={id:"ID",desc:!0},selectable:p=!0,pagination:u=!0,pageSize:f=10,pageSizeOptions:y=[10,20,50,100],actions:_={addNew:!1,bulkDelete:!0,inline:!0},emptyMessage:E=(0,n.__)("No items found","formipay"),ajaxUrl:h,nonce:b,tableAction:g,deleteAction:w,duplicateAction:v}){const[N,k]=(0,a.useState)(e),[S,C]=(0,a.useState)(!0),[D,A]=(0,a.useState)(0),[I,P]=(0,a.useState)("all"),[T,x]=(0,a.useState)(""),[B,L]=(0,a.useState)(d.id||"ID"),[$,F]=(0,a.useState)(d.desc?"desc":"asc"),[j,U]=(0,a.useState)(1),[M,R]=(0,a.useState)(f),[z,J]=(0,a.useState)(new Set),[q,H]=(0,a.useState)(!1),[X,V]=(0,a.useState)(!1),[Z,G]=(0,a.useState)(""),K=g.replace("formipay-tabledata-",""),Q=_.bulkDelete?.action||`formipay-bulk-delete-${K}`,W=w||`formipay-delete-${K}`,Y=v||`formipay-duplicate-${K}`,ee=(0,a.useCallback)(async()=>{C(!0);const e=new URLSearchParams({action:g,_wpnonce:b,limit:M.toString(),offset:((j-1)*M).toString()});o&&"all"!==I&&e.append(o.key,I),T&&e.append("search",T),e.append("orderby",B),e.append("sort",$);try{const t=await fetch(`${h}?${e.toString()}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e}),a=await t.json(),n=a.data?.results||a.results||a.data||[];k(n),A(a.total||n.length)}catch(e){console.error("Load data error:",e)}finally{C(!1)}},[h,b,g,M,j,I,T,B,$,o]);return(0,a.useEffect)(()=>{ee()},[ee]),(0,a.useEffect)(()=>{const e=setTimeout(()=>{null!==T&&U(1)},500);return()=>clearTimeout(e)},[T]),(0,t.createElement)("div",{className:"formipay-data-table-wrapper"},(0,t.createElement)("div",{className:"formipay-table-toolbar"},_.addNew&&(0,t.createElement)(r.Button,{variant:"primary",onClick:()=>V(!0)},_.addNew.label||(0,n.__)("+ Add New","formipay")),_.bulkDelete&&p&&z.size>0&&(0,t.createElement)(r.Button,{variant:"secondary",isDestructive:!0,onClick:async()=>{0!==z.size&&(await O.fire({icon:"info",html:(0,n.__)("Do you want to delete the selected item(s)?","formipay"),showCancelButton:!0,confirmButtonText:(0,n.__)("Confirm","formipay"),cancelButtonText:(0,n.__)("Cancel","formipay")})).isConfirmed&&(await fetch(`${h}?action=${Q}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({ids:Array.from(z),_wpnonce:b})}),J(new Set),H(!1),ee(),O.fire({title:(0,n.__)("Done!","formipay"),html:(0,n.__)("Items deleted successfully.","formipay"),icon:"success"}))}},(0,n.__)("Delete Selected","formipay")," (",z.size,")"),c&&(0,t.createElement)(r.TextControl,{placeholder:s,value:T,onChange:x,className:"formipay-table-search"}),m&&(0,t.createElement)(r.SelectControl,{value:`${B}-${$}`,options:[{label:(0,n.__)("ID ↓","formipay"),value:"ID-desc"},{label:(0,n.__)("ID ↑","formipay"),value:"ID-asc"},{label:(0,n.__)("Date ↓","formipay"),value:"date-desc"},{label:(0,n.__)("Date ↑","formipay"),value:"date-asc"},{label:(0,n.__)("Title A-Z","formipay"),value:"title-asc"},{label:(0,n.__)("Title Z-A","formipay"),value:"title-desc"}],onChange:e=>{const[t,a]=e.split("-");L(t),F(a)}})),o&&(0,t.createElement)("div",{className:"formipay-filter-tabs"},o.options.map(e=>(0,t.createElement)("button",{key:e.value,className:"filter-tab "+(I===e.value?"active":""),onClick:()=>{return t=e.value,P(t),void U(1);var t}},e.label,i&&(0,t.createElement)("span",{className:"count"},i[e.value]||0)))),(0,t.createElement)("div",{className:"formipay-table-container"},S?(0,t.createElement)("div",{className:"formipay-table-loading"},(0,t.createElement)(r.Spinner,null)):0===N.length?(0,t.createElement)("div",{className:"formipay-table-empty"},E):(0,t.createElement)("table",{className:"formipay-table wp-list-table widefat fixed striped"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,p&&(0,t.createElement)("th",{className:"column-select"},(0,t.createElement)("input",{type:"checkbox",checked:q,onChange:()=>{J(q?new Set:new Set(N.map(e=>e.ID||e.id))),H(!q)}})),l.map(e=>(0,t.createElement)("th",{key:e.key,className:`column-${e.key}`},e.label)),_.inline&&(0,t.createElement)("th",{className:"column-actions"},(0,n.__)("Actions","formipay")))),(0,t.createElement)("tbody",null,N.map((e,a)=>{const r=e.ID||e.id;return(0,t.createElement)("tr",{key:a,className:"formipay-table-row"},p&&(0,t.createElement)("td",null,(0,t.createElement)("input",{type:"checkbox",checked:z.has(r),onChange:()=>(e=>{const t=new Set(z);t.has(e)?t.delete(e):t.add(e),J(t),H(!1)})(r)})),l.map(a=>(0,t.createElement)("td",{key:a.key},a.render?a.render(e):e[a.key])),_.inline&&(0,t.createElement)("td",{className:"column-actions"},(0,t.createElement)("div",{className:"row-actions"},(0,t.createElement)("a",{href:`${window.formipayAdmin?.siteUrl||""}/wp-admin/post.php?post=${r}&action=edit`},(0,n.__)("Edit","formipay"))," | ",(0,t.createElement)("button",{className:"button-link delete",onClick:()=>(async e=>{(await O.fire({icon:"info",html:(0,n.__)("Do you want to delete this item?","formipay"),showCancelButton:!0,confirmButtonText:(0,n.__)("Delete Permanently","formipay"),cancelButtonText:(0,n.__)("Cancel","formipay")})).isConfirmed&&(await fetch(`${h}?action=${W}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({id:e,_wpnonce:b})}),ee())})(r)},(0,n.__)("Delete","formipay"))," | ",(0,t.createElement)("button",{className:"button-link duplicate",onClick:()=>(async e=>{(await O.fire({icon:"info",html:(0,n.__)("Do you want to duplicate this item?","formipay"),showCancelButton:!0,confirmButtonText:(0,n.__)("Confirm","formipay"),cancelButtonText:(0,n.__)("Cancel","formipay")})).isConfirmed&&(await fetch(`${h}?action=${Y}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({id:e,_wpnonce:b})}),ee())})(r)},(0,n.__)("Duplicate","formipay")))))})))),u&&D>M&&(0,t.createElement)("div",{className:"formipay-table-pagination"},(0,t.createElement)("div",{className:"pagination-info"},(0,n.__)("Showing","formipay")," ",(j-1)*M+1," - ",Math.min(j*M,D)," ",(0,n.__)("of","formipay")," ",D),(0,t.createElement)("div",{className:"pagination-controls"},(0,t.createElement)(r.Button,{variant:"secondary",disabled:1===j,onClick:()=>U(1)},"««"),(0,t.createElement)(r.Button,{variant:"secondary",disabled:1===j,onClick:()=>U(j-1)},"‹"),(0,t.createElement)("span",{className:"page-info"},(0,n.__)("Page","formipay")," ",j," ",(0,n.__)("of","formipay")," ",Math.ceil(D/M)),(0,t.createElement)(r.Button,{variant:"secondary",disabled:j>=Math.ceil(D/M),onClick:()=>U(j+1)},"›"),(0,t.createElement)(r.Button,{variant:"secondary",disabled:j>=Math.ceil(D/M),onClick:()=>U(Math.ceil(D/M))},"»"),(0,t.createElement)(r.SelectControl,{value:M.toString(),options:y.map(e=>({label:e.toString(),value:e.toString()})),onChange:e=>{R(parseInt(e)),U(1)}}))),_.addNew&&(0,t.createElement)(r.Modal,{title:_.addNew.label||(0,n.__)("Add New","formipay"),isOpen:X,onClose:()=>V(!1)},(0,t.createElement)(r.TextControl,{label:(0,n.__)("Title","formipay"),value:Z,onChange:G,autoFocus:!0}),(0,t.createElement)("div",{className:"formipay-modal-actions"},(0,t.createElement)(r.Button,{variant:"secondary",onClick:()=>V(!1)},(0,n.__)("Cancel","formipay")),(0,t.createElement)(r.Button,{variant:"primary",onClick:async()=>{if(!Z.trim())return void O.fire({html:(0,n.__)("Title is required.","formipay"),icon:"error"});const e=_.addNew.action,t=await fetch(`${h}?action=${e}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({title:Z,_wpnonce:b})}),a=await t.json();a.success?(V(!1),G(""),a.data.edit_post_url?window.location.href=a.data.edit_post_url:ee()):O.fire({html:a.data.message||(0,n.__)("Error creating item.","formipay"),icon:"error"})}},(0,n.__)("Create","formipay")))))}const x=window.wp["icons/build/plus"];var B=e.n(x);const L=window.wp["icons/build/minus"];var $=e.n(L);const F=window.wp["icons/build/eyeClosed"];var j=e.n(F);const U=window.wp["icons/build/eyeOpened"];var M=e.n(U);function R({productId:e,productDetails:r}){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(r?.default_currency||"").split(":::")[0]||r?.default_currency_code||"USD",[r]),y=(0,a.useCallback)(e=>{const t=r?.global_currencies||[],a=String(e).split(":::")[0],n=t.find(e=>String(e.currency).split(":::")[0]===a);return parseInt(n?.decimal_digits,10)||2},[r]),_=(0,a.useCallback)(()=>{const e=r?.global_selected_currencies||{};let t=Object.keys(e);if(!t.length){const e=r?.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)}})},[r,y]),E=(0,a.useCallback)(e=>{const t={...e};void 0===t.expanded&&(t.expanded=!1);const a=_(),n=e=>String(e).split(":::")[0];if(Array.isArray(t.prices)){const e=new Set(a.map(e=>n(e.currency)));t.prices=t.prices.filter(t=>t&&e.has(n(t.currency))),a.forEach(e=>{const a=n(e.currency);t.prices.some(e=>n(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=n(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 r=f();return t.prices.sort((e,t)=>n(e.currency)===r?-1:n(t.currency)===r?1:0),delete t.price,delete t.sale,t},[_,y,f]),h=(0,a.useCallback)(()=>new Promise(e=>{let t=0;const a=setInterval(()=>{const n=document.querySelector('input[name="product_variation_attributes"]');if(n&&n.value)try{const t=JSON.parse(n.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(" - ")}}):[]},[]),g=(0,a.useCallback)(async()=>{try{const e=await h();if(!e.length)return o([]),void w([]);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),w(t)}catch(e){console.warn("Attributes not available; initializing empty variations."),o([]),w([])}},[h,b,i,l,E]),w=(0,a.useCallback)(e=>{d.current&&(d.current.value=JSON.stringify(e||[]))},[]),v=(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}),n=await a.json();if(n.success&&Array.isArray(n.data)&&n.data.length){const e=n.data.map(e=>E(e));o(e),c([]),w(e)}else await g()}catch{await g()}else await g()},[e,E,g,w]),N=(0,a.useCallback)(()=>{const e=()=>{setTimeout(()=>{g()},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)}},[g]);(0,a.useEffect)(()=>{const e=r?.multicurrency,t=r?.global_selected_currencies||{},a=Object.keys(t).length;return m(!e||a<=1),v(),N()},[r,v,N]);const k=(0,a.useCallback)((e,t,a,n)=>{const r=[...l];r[e].prices[t][a]=n,o(r),w(r)},[l,w]),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 n=[...l];n[e][t]=a,o(n),w(n)},[l,w]),D=(0,a.useCallback)(e=>{const t=l[e],a=[...i,t.key];c(a);const n=l.filter((t,a)=>a!==e);o(n),w(n)},[l,i,w]),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=(r?.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,r]),(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,n.__)("Variation","formipay")),s?(0,t.createElement)(t.Fragment,null,(0,t.createElement)("th",null,(0,n.__)("Price","formipay")),(0,t.createElement)("th",null,(0,n.__)("Sale Price","formipay"))):null,(0,t.createElement)("th",null,(0,n.__)("Stock","formipay")),(0,t.createElement)("th",null,(0,n.__)("Weight","formipay")),(0,t.createElement)("th",null,(0,n.__)("Actions","formipay")))),(0,t.createElement)("tbody",null,l.map((e,a)=>(0,t.createElement)(z,{key:e.key,row:e,rowIndex:a,showFlatPricing:s,defaultCurrencyCode:f(),onToggleExpanded:()=>S(a),onUpdatePrice:(e,t,n)=>k(a,e,t,n),onUpdateField:(e,t)=>C(a,e,t),onDelete:()=>D(a)})))))}function z({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():j(),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)(r.TextControl,{type:"number",value:e.stock,onChange:e=>m("stock",e),placeholder:"Unlimited"})),(0,t.createElement)("td",{className:"variation-weight"},(0,t.createElement)(r.TextControl,{type:"number",value:e.weight,onChange:e=>m("weight",e),step:"0.01"})),(0,t.createElement)("td",{className:"variation-actions"},(0,t.createElement)(r.Button,{variant:"secondary",size:"small",isDestructive:!0,onClick:d,icon:$()()},(0,n.__)("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 n=String(e.currency).split(":::")[0]===i,r=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,n&&(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:r,placeholder:"Regular Price",required:n})),(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:r,placeholder:"Sale Price"})))}))))))}function J({price:e,field:a,onChange:n}){const r=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=>n(a,e.target.value),step:r,placeholder:"Auto"}))}const q=window.Swal,H={orders:function({initialData:e}){const[n,r]=(0,a.useState)(null);return n?(0,t.createElement)(P,{orderId:n,onBack:()=>r(null)}):(0,t.createElement)(_,{onSelectOrder:e=>r(e)})},customers:function({initialData:e}){const[r,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,n.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"name",label:(0,n.__)("Name","formipay"),render:e=>e.name||e.full_name||"-"},{key:"email",label:(0,n.__)("Email","formipay")},{key:"phone",label:(0,n.__)("Phone","formipay"),render:e=>e.phone||e.whatsapp||"-"},{key:"total_order",label:(0,n.__)("Total Orders","formipay"),render:e=>e.total_order||e.total_orders||0},{key:"created_date",label:(0,n.__)("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,n.__)("Customers","formipay"))),(0,t.createElement)(T,{columns:s,data:r,loading:o,emptyMessage:(0,n.__)("No customers found","formipay")}))},products:function({initialData:e}){const[r,o]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),s=e?.productDetails||{};return r&&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,n.__)("Back to Products","formipay")),(0,t.createElement)("h1",null,(0,n.__)("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,n.__)("Products","formipay")),(0,t.createElement)("button",{type:"button",className:"button button-primary",onClick:()=>{c(null),o(!0)}},(0,t.createElement)(l,{icon:B()(),size:16}),(0,n.__)("Add New Product","formipay"))),(0,t.createElement)("p",{className:"formipay-coming-soon"},(0,n.__)("Products list coming soon. Use the classic editor for now.","formipay")))},forms:function(){const e=[{key:"ID",label:(0,n.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.ID)},{key:"title",label:(0,n.__)("Title","formipay"),render:e=>(0,t.createElement)(t.Fragment,null,(0,t.createElement)("strong",null,e.title),(0,t.createElement)("br",null),(0,t.createElement)("span",{className:"row-actions",style:{display:"none",visibility:"hidden"}},(0,t.createElement)("a",{href:`${window.formipayAdmin?.siteUrl||""}/wp-admin/post.php?post=${e.ID}&action=edit`},(0,n.__)("Edit","formipay"))," | ",(0,t.createElement)("button",{className:"button-link delete","data-id":e.ID},(0,n.__)("Delete","formipay"))," | ",(0,t.createElement)("button",{className:"button-link duplicate","data-id":e.ID},(0,n.__)("Duplicate","formipay"))))},{key:"date",label:(0,n.__)("Date","formipay"),render:e=>{const a=new Date(e.date);return(0,t.createElement)("span",{style:{whiteSpace:"nowrap"}},a.toLocaleDateString(),(0,t.createElement)("br",null),(0,t.createElement)("span",{style:{fontSize:"smaller",color:"#646970"}},a.toLocaleTimeString()))}},{key:"status",label:(0,n.__)("Status","formipay"),render:e=>{const a=e.post_status||e.status||"unknown",r={publish:(0,n.__)("Published","formipay"),draft:(0,n.__)("Draft","formipay"),pending:(0,n.__)("Pending","formipay")};return(0,t.createElement)("span",{className:`status-label ${a}`},r[a]||a)}},{key:"shortcode",label:(0,n.__)("Shortcode","formipay"),render:e=>(0,t.createElement)(t.Fragment,null,(0,t.createElement)("input",{className:"formipay-form-shortcode",value:`[formipay form=${e.ID}]`,disabled:!0}),(0,t.createElement)("button",{className:"copy-shortcode","data-copy":`[formipay form=${e.ID}]`,onClick:e=>{const t=e.currentTarget.dataset.copy;navigator.clipboard.writeText(t).then(()=>{const t=e.currentTarget.innerHTML;e.currentTarget.innerHTML="✓ Copied",setTimeout(()=>{e.currentTarget.innerHTML=t},2e3),q.fire({icon:"success",title:(0,n.__)("Shortcode copied!","formipay"),toast:!0,position:"top-end",showConfirmButton:!1,timer:3e3,timerProgressBar:!0})})}},"📋 ",(0,n.__)("Copy","formipay")))}];return(0,t.createElement)("div",{className:"formipay-page-forms"},(0,t.createElement)("div",{className:"formipay-page-header"},(0,t.createElement)("h1",null,(0,n.__)("Forms","formipay"))),(0,t.createElement)(T,{columns:e,ajaxUrl:window.formipayAdmin?.ajaxUrl||"/wp-admin/admin-ajax.php",nonce:window.formipayAdmin?.nonce||"",tableAction:"formipay-tabledata-forms",deleteAction:"formipay-delete-form",duplicateAction:"formipay-duplicate-form",filterOptions:{key:"post_status",options:[{value:"all",label:(0,n.__)("All","formipay")},{value:"publish",label:(0,n.__)("Published","formipay")},{value:"draft",label:(0,n.__)("Draft","formipay")}]},actions:{addNew:{label:(0,n.__)("+ Add New Form","formipay"),action:"formipay-create-form-post"},bulkDelete:{action:"formipay-bulk-delete-form"},inline:!0},emptyMessage:(0,n.__)("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,n.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"code",label:(0,n.__)("Coupon Code","formipay"),render:e=>(0,t.createElement)("strong",null,e.code||e.post_title)},{key:"type",label:(0,n.__)("Type","formipay"),render:e=>"percentage"===(e.coupon_type||e.type||"percentage")?(0,n.__)("%","formipay"):(0,n.__)("Fixed","formipay")},{key:"amount",label:(0,n.__)("Amount","formipay")},{key:"usages",label:(0,n.__)("Usages","formipay"),render:e=>e.usage_count||e.usages||0},{key:"status",label:(0,n.__)("Status","formipay"),render:e=>"publish"===(e.post_status||e.status||"unknown")?(0,n.__)("Active","formipay"):(0,n.__)("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,n.__)("Coupons","formipay")),(0,t.createElement)(r.Button,{variant:"primary",onClick:()=>{const e=prompt((0,n.__)("Enter coupon code:","formipay"));var t;e&&(t={code:e},m("formipay-create-coupon-post",t)).then(()=>s()).catch(console.error)}},(0,n.__)("+ Add New Coupon","formipay"))),(0,t.createElement)(T,{columns:d,data:l,loading:i,emptyMessage:(0,n.__)("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,n.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"title",label:(0,n.__)("Title","formipay")},{key:"product_name",label:(0,n.__)("Product","formipay")},{key:"status",label:(0,n.__)("Status","formipay"),render:e=>{const a=e.post_status||e.status||"unknown",r={publish:(0,n.__)("Published","formipay"),draft:(0,n.__)("Draft","formipay")}[a]||a;return(0,t.createElement)("span",{className:`status-badge status-${a}`},r)}},{key:"date",label:(0,n.__)("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,n.__)("Access Items","formipay")),(0,t.createElement)(r.Button,{variant:"primary",href:window.formipayAdmin?.siteUrl+"/wp-admin/post-new.php?post_type=formipay-access"},(0,n.__)("+ Add New Item","formipay"))),(0,t.createElement)(T,{columns:d,data:l,loading:i,emptyMessage:(0,n.__)("No access items found","formipay")}))},licenses:function({initialData:e}){const[r,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,n.__)("ID","formipay"),render:e=>(0,t.createElement)("strong",null,"#",e.id)},{key:"license_key",label:(0,n.__)("License Key","formipay"),render:e=>(0,t.createElement)("code",null,e.license_key||"-")},{key:"product",label:(0,n.__)("Product","formipay"),render:e=>e.product_name||e.product||"-"},{key:"order",label:(0,n.__)("Order","formipay"),render:e=>e.order_id||`#${e.order}`||"-"},{key:"email",label:(0,n.__)("Email","formipay")},{key:"status",label:(0,n.__)("Status","formipay"),render:e=>{const t=e.status||"unknown";return{active:(0,n.__)("Active","formipay"),inactive:(0,n.__)("Inactive","formipay"),expired:(0,n.__)("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,n.__)("Licenses","formipay"))),(0,t.createElement)(T,{columns:s,data:r,loading:o,emptyMessage:(0,n.__)("No licenses found","formipay")})))}};function X({page:e,initialData:n}){(0,a.useEffect)(()=>{console.log("[Formipay App] Rendering page:",e,"with data:",n)},[e,n]);const r=H[e];return r?(0,t.createElement)("div",{className:"formipay-admin-wrap"},(0,t.createElement)(r,{initialData:n})):(0,t.createElement)("div",{className:"formipay-error"},(0,t.createElement)("p",null,"Unknown page: ",e))}const V=()=>{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 n=e.dataset.formipayMount,r=window.formipayAdmin?.[n]||{};console.log("[Formipay] Mounting page:",n,"with data:",r);try{(0,a.render)((0,t.createElement)(X,{page:n,initialData:r}),e),console.log("[Formipay] Successfully mounted:",n)}catch(e){console.error("[Formipay] Failed to mount:",n,e)}})};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",V):V()})(); \ No newline at end of file diff --git a/node_modules/.cache/babel-loader/14b79987dc3a84ec3a760fa9a4ef506e3ce0455b2ffc6fe20655310e48e3fcfa.json.gz b/node_modules/.cache/babel-loader/14b79987dc3a84ec3a760fa9a4ef506e3ce0455b2ffc6fe20655310e48e3fcfa.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..da9224def74e79b2b07e25863255b1de0c5fd6e9 GIT binary patch literal 3682 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 A%K!iX literal 0 HcmV?d00001 diff --git a/node_modules/.cache/babel-loader/3a08871aa808e620b9298452a2638f076758a922a7013dae8f82212b9abb6739.json.gz b/node_modules/.cache/babel-loader/3a08871aa808e620b9298452a2638f076758a922a7013dae8f82212b9abb6739.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d8a727a91fdc42ce20aea277aa689396933056a8 GIT binary patch literal 3773 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 literal 0 HcmV?d00001 diff --git a/node_modules/.cache/babel-loader/565207e7fbd18187e191263c954119a26bbd7b51edc56eb9447ae968ea1f9725.json.gz b/node_modules/.cache/babel-loader/565207e7fbd18187e191263c954119a26bbd7b51edc56eb9447ae968ea1f9725.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b4a1e43e4820f6900337838152c1699d36e716a1 GIT binary patch literal 1460 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 N|1b3H2K!Ar005`Wbk_g? literal 0 HcmV?d00001 diff --git a/node_modules/.cache/babel-loader/7e14adc209a2f91edde190f1c99acfcf3d64a741cb2fb022cf781fac4171a8f0.json.gz b/node_modules/.cache/babel-loader/7e14adc209a2f91edde190f1c99acfcf3d64a741cb2fb022cf781fac4171a8f0.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..7b144abf4f563bc660ed2b999b0052759c769d28 GIT binary patch literal 1512 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 literal 0 HcmV?d00001 diff --git a/node_modules/.cache/babel-loader/c606103bba57e717885d000da0ada54cbeaf869a996fcecc39b58034960a9cdb.json.gz b/node_modules/.cache/babel-loader/c606103bba57e717885d000da0ada54cbeaf869a996fcecc39b58034960a9cdb.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..90c7fb22984868a9460c739f1d1909a74e336d41 GIT binary patch literal 10171 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%0ACo-=7S2$Q400}Lt%bNF=c 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 literal 0 HcmV?d00001 diff --git a/src/admin/components/shared/DataTable.css b/src/admin/components/shared/DataTable.css index 4662ecb56..bafd3c92f 100644 --- a/src/admin/components/shared/DataTable.css +++ b/src/admin/components/shared/DataTable.css @@ -1,26 +1,269 @@ -.formipay-data-table-loading, -.formipay-data-table-empty { - padding: 40px; - text-align: center; +/* DataTable Wrapper */ +.formipay-data-table-wrapper { + margin: 20px 0; } -.formipay-data-table { - margin-top: 20px; +/* Toolbar */ +.formipay-table-toolbar { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; + margin-bottom: 16px; } -.formipay-data-table thead th { - padding: 12px 10px; +.formipay-table-search { + max-width: 300px; + flex-grow: 1; +} + +.formipay-table-toolbar .components-select-control { + min-width: 150px; +} + +/* Filter Tabs */ +.formipay-filter-tabs { + display: flex; + gap: 4px; + margin-bottom: 16px; + border-bottom: 1px solid #ddd; +} + +.formipay-filter-tabs .filter-tab { + padding: 8px 16px; + background: transparent; + border: none; + border-bottom: 3px solid transparent; + cursor: pointer; + font-size: 13px; + color: #646970; + transition: all 0.2s; +} + +.formipay-filter-tabs .filter-tab:hover { + color: #135e96; + background: #f0f0f1; +} + +.formipay-filter-tabs .filter-tab.active { + color: #135e96; + border-bottom-color: #135e96; font-weight: 600; } -.formipay-data-table tbody td { - padding: 10px; +.formipay-filter-tabs .filter-tab .count { + display: inline-block; + min-width: 18px; + padding: 2px 6px; + margin-left: 6px; + background: #dcdcde; + border-radius: 10px; + font-size: 11px; + line-height: 1.4; } -.formipay-data-table tbody tr.is-clickable { +.formipay-filter-tabs .filter-tab.active .count { + background: #135e96; + color: #fff; +} + +/* Table Container */ +.formipay-table-container { + background: #fff; + border: 1px solid #c3c4c7; + box-shadow: 0 1px 1px rgba(0,0,0,.04); +} + +.formipay-table-loading { + padding: 60px; + text-align: center; +} + +.formipay-table-empty { + padding: 40px; + text-align: center; + color: #646970; +} + +/* Table */ +.formipay-table { + width: 100%; + border-collapse: collapse; +} + +.formipay-table thead th { + padding: 12px 10px; + font-weight: 600; + text-align: left; + border-bottom: 1px solid #c3c4c7; + background: #f6f7f7; +} + +.formipay-table tbody td { + padding: 10px; + border-bottom: 1px solid #c3c4c7; +} + +.formipay-table tbody tr:last-child td { + border-bottom: none; +} + +.formipay-table tbody tr:hover { + background-color: #f0f0f1; +} + +/* Checkbox Column */ +.formipay-table .column-select { + width: 40px; + text-align: center; +} + +.formipay-table tbody td:first-child input[type="checkbox"] { + margin: 0; +} + +/* Actions Column */ +.formipay-table .column-actions { + width: 200px; +} + +.formipay-table .row-actions { + display: none; + visibility: hidden; +} + +.formipay-table tbody tr:hover .row-actions { + display: block; + visibility: visible; +} + +.formipay-table .row-actions a, +.formipay-table .row-actions .button-link { + text-decoration: none; + color: #a7aaad; cursor: pointer; } -.formipay-data-table tbody tr.is-clickable:hover { - background-color: #f0f0f1; +.formipay-table .row-actions a:hover, +.formipay-table .row-actions .button-link:hover { + color: #135e96; +} + +.formipay-table .row-actions .delete { + color: #b32d2e; +} + +.formipay-table .row-actions .delete:hover { + color: #d63638; +} + +/* Status Labels */ +.formipay-table .status-label { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; +} + +.formipay-table .status-label.publish { + background: #edfaef; + color: #007017; +} + +.formipay-table .status-label.draft { + background: #f0f0f1; + color: #646970; +} + +.formipay-table .status-label.pending { + background: #fff8e5; + color: #d63638; +} + +/* Shortcode Input */ +.formipay-table input.formipay-form-shortcode { + padding: 4px 8px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #f6f7f7; + color: #646970; + font-family: monospace; + font-size: 12px; + min-width: 150px; +} + +.formipay-table button.copy-shortcode { + padding: 4px 8px; + margin-left: 4px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #fff; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 4px; +} + +.formipay-table button.copy-shortcode:hover { + background: #f6f7f7; +} + +.formipay-table button.copy-shortcode svg { + width: 16px; + height: 16px; +} + +/* Pagination */ +.formipay-table-pagination { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 16px; + background: #fff; + border: 1px solid #c3c4c7; + border-top: none; +} + +.formipay-table-pagination .pagination-info { + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .pagination-controls { + display: flex; + gap: 8px; + align-items: center; +} + +.formipay-table-pagination .page-info { + padding: 0 8px; + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .components-select-control { + min-width: 80px; +} + +/* Modal Actions */ +.formipay-modal-actions { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 20px; +} + +/* Sort Indicator */ +.formipay-table thead th.sorted { + position: relative; + padding-right: 20px; +} + +.formipay-table thead th .sort-indicator { + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + color: #135e96; } diff --git a/src/admin/components/shared/DataTable.js b/src/admin/components/shared/DataTable.js index 53528fde0..697ec0764 100644 --- a/src/admin/components/shared/DataTable.js +++ b/src/admin/components/shared/DataTable.js @@ -1,57 +1,554 @@ /** - * Data Table - Simple table component for admin listings + * Full-featured DataTable component + * Supports: selection, filtering, search, sort, pagination, actions */ import { __ } from '@wordpress/i18n'; +import { useState, useCallback, useEffect } from '@wordpress/element'; +import { + Button, + Modal, + TextControl, + SelectControl, + Spinner, +} from '@wordpress/components'; import './DataTable.css'; -export default function DataTable({ - columns, - data, - loading, - emptyMessage = __('No items found', 'formipay'), - onRowClick -}) { - if (loading) { - return ( -
- -
- ); - } +// SweetAlert2 is loaded via WordPress (global scope) +const Swal = window.Swal; - if (!data || data.length === 0) { - return ( -
-

{ emptyMessage }

-
- ); - } +export default function DataTable({ + // Data fetching + initialData = [], + + // Columns definition + columns, + + // Filtering + filterOptions = null, // { key: 'post_status', options: [{value, label}] } + statusCounts = null, // { all: 10, publish: 5, draft: 5 } + + // Search + searchable = true, + searchPlaceholder = __('Search...', 'formipay'), + + // Sorting + sortable = true, + defaultSort = { id: 'ID', desc: true }, + + // Selection + selectable = true, + + // Pagination + pagination = true, + pageSize = 10, + pageSizeOptions = [10, 20, 50, 100], + + // Actions + actions = { + addNew: false, // { label, action: 'formipay-create-form-post' } + bulkDelete: true, // { action: 'formipay-bulk-delete-form' } + inline: true, // edit, delete, duplicate + }, + + // Empty state + emptyMessage = __('No items found', 'formipay'), + + // AJAX config + ajaxUrl, + nonce, + tableAction, // e.g., 'formipay-tabledata-forms' + deleteAction, + duplicateAction, +}) { + // State + const [data, setData] = useState(initialData); + const [loading, setLoading] = useState(true); + const [total, setTotal] = useState(0); + + // Filters + const [activeFilter, setActiveFilter] = useState('all'); + const [searchQuery, setSearchQuery] = useState(''); + + // Sorting + const [sortBy, setSortBy] = useState(defaultSort.id || 'ID'); + const [sortOrder, setSortOrder] = useState(defaultSort.desc ? 'desc' : 'asc'); + + // Pagination + const [currentPage, setCurrentPage] = useState(1); + const [currentPageSize, setCurrentPageSize] = useState(pageSize); + + // Selection + const [selectedRows, setSelectedRows] = useState(new Set()); + const [selectAll, setSelectAll] = useState(false); + + // Add New Modal + const [isAddModalOpen, setIsAddModalOpen] = useState(false); + const [newItemTitle, setNewItemTitle] = useState(''); + + // Derive action names from tableAction + const baseActionName = tableAction.replace('formipay-tabledata-', ''); + const bulkDeleteAction = actions.bulkDelete?.action || `formipay-bulk-delete-${baseActionName}`; + const deleteActionName = deleteAction || `formipay-delete-${baseActionName}`; + const duplicateActionName = duplicateAction || `formipay-duplicate-${baseActionName}`; + + // Load data + const loadData = useCallback(async () => { + setLoading(true); + + const params = new URLSearchParams({ + action: tableAction, + _wpnonce: nonce, + limit: currentPageSize.toString(), + offset: ((currentPage - 1) * currentPageSize).toString(), + }); + + // Add filter + if (filterOptions && activeFilter !== 'all') { + params.append(filterOptions.key, activeFilter); + } + + // Add search + if (searchQuery) { + params.append('search', searchQuery); + } + + // Add sort + params.append('orderby', sortBy); + params.append('sort', sortOrder); + + try { + const response = await fetch(`${ajaxUrl}?${params.toString()}`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: params, + }); + + const result = await response.json(); + const items = result.data?.results || result.results || result.data || []; + setData(items); + setTotal(result.total || items.length); + } catch (error) { + console.error('Load data error:', error); + } finally { + setLoading(false); + } + }, [ajaxUrl, nonce, tableAction, currentPageSize, currentPage, activeFilter, searchQuery, sortBy, sortOrder, filterOptions]); + + // Initial load and refresh on filter/sort/page change + useEffect(() => { + loadData(); + }, [loadData]); + + // Handle filter change + const handleFilterChange = (value) => { + setActiveFilter(value); + setCurrentPage(1); + }; + + // Handle search (debounced) + useEffect(() => { + const timeoutId = setTimeout(() => { + if (searchQuery !== null) { + setCurrentPage(1); + } + }, 500); + return () => clearTimeout(timeoutId); + }, [searchQuery]); + + // Handle selection + const handleRowSelect = (id) => { + const newSelected = new Set(selectedRows); + if (newSelected.has(id)) { + newSelected.delete(id); + } else { + newSelected.add(id); + } + setSelectedRows(newSelected); + setSelectAll(false); + }; + + const handleSelectAll = () => { + if (selectAll) { + setSelectedRows(new Set()); + } else { + setSelectedRows(new Set(data.map(row => row.ID || row.id))); + } + setSelectAll(!selectAll); + }; + + // Handle bulk delete + const handleBulkDelete = async () => { + if (selectedRows.size === 0) return; + + const result = await Swal.fire({ + icon: 'info', + html: __('Do you want to delete the selected item(s)?', 'formipay'), + showCancelButton: true, + confirmButtonText: __('Confirm', 'formipay'), + cancelButtonText: __('Cancel', 'formipay'), + }); + + if (result.isConfirmed) { + await fetch(`${ajaxUrl}?action=${bulkDeleteAction}`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ + ids: Array.from(selectedRows), + _wpnonce: nonce, + }), + }); + + setSelectedRows(new Set()); + setSelectAll(false); + loadData(); + + Swal.fire({ + title: __('Done!', 'formipay'), + html: __('Items deleted successfully.', 'formipay'), + icon: 'success', + }); + } + }; + + // Handle inline delete + const handleDelete = async (id) => { + const result = await Swal.fire({ + icon: 'info', + html: __('Do you want to delete this item?', 'formipay'), + showCancelButton: true, + confirmButtonText: __('Delete Permanently', 'formipay'), + cancelButtonText: __('Cancel', 'formipay'), + }); + + if (result.isConfirmed) { + await fetch(`${ajaxUrl}?action=${deleteActionName}`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ + id, + _wpnonce: nonce, + }), + }); + + loadData(); + } + }; + + // Handle duplicate + const handleDuplicate = async (id) => { + const result = await Swal.fire({ + icon: 'info', + html: __('Do you want to duplicate this item?', 'formipay'), + showCancelButton: true, + confirmButtonText: __('Confirm', 'formipay'), + cancelButtonText: __('Cancel', 'formipay'), + }); + + if (result.isConfirmed) { + await fetch(`${ajaxUrl}?action=${duplicateActionName}`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ + id, + _wpnonce: nonce, + }), + }); + + loadData(); + } + }; + + // Handle Add New + const handleAddNew = async () => { + if (!newItemTitle.trim()) { + Swal.fire({ + html: __('Title is required.', 'formipay'), + icon: 'error', + }); + return; + } + + const createAction = actions.addNew.action; + const result = await fetch(`${ajaxUrl}?action=${createAction}`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ + title: newItemTitle, + _wpnonce: nonce, + }), + }); + + const response = await result.json(); + + if (response.success) { + setIsAddModalOpen(false); + setNewItemTitle(''); + if (response.data.edit_post_url) { + window.location.href = response.data.edit_post_url; + } else { + loadData(); + } + } else { + Swal.fire({ + html: response.data.message || __('Error creating item.', 'formipay'), + icon: 'error', + }); + } + }; return ( - - - - {columns.map((column) => ( - - ))} - - - - {data.map((row, rowIndex) => ( - onRowClick(row) : undefined} - className={onRowClick ? 'is-clickable' : ''} +
+ {/* Toolbar */} +
+ {/* Add New Button */} + {actions.addNew && ( +
- ))} - - ))} - -
{column.label}
- {column.render ? column.render(row) : row[column.key]} -
+ {actions.addNew.label || __('+ Add New', 'formipay')} + + )} + + {/* Bulk Delete Button */} + {actions.bulkDelete && selectable && selectedRows.size > 0 && ( + + )} + + {/* Search */} + {searchable && ( + + )} + + {/* Sort */} + {sortable && ( + { + const [id, sort] = value.split('-'); + setSortBy(id); + setSortOrder(sort); + }} + /> + )} + + + {/* Filter Tabs */} + {filterOptions && ( +
+ {filterOptions.options.map(option => ( + + ))} +
+ )} + + {/* Table */} +
+ {loading ? ( +
+ +
+ ) : data.length === 0 ? ( +
+ {emptyMessage} +
+ ) : ( + + + + {/* Checkbox column */} + {selectable && ( + + )} + {/* Data columns */} + {columns.map((column) => ( + + ))} + {/* Actions column */} + {actions.inline && ( + + )} + + + + {data.map((row, rowIndex) => { + const rowId = row.ID || row.id; + return ( + + {/* Checkbox */} + {selectable && ( + + )} + {/* Data columns */} + {columns.map((column) => ( + + ))} + {/* Actions */} + {actions.inline && ( + + )} + + ); + })} + +
+ + + {column.label} + {__('Actions', 'formipay')}
+ handleRowSelect(rowId)} + /> + + {column.render ? column.render(row) : row[column.key]} + +
+ + {__('Edit', 'formipay')} + + {' | '} + + {' | '} + +
+
+ )} +
+ + {/* Pagination */} + {pagination && total > currentPageSize && ( +
+
+ {__('Showing', 'formipay')} {((currentPage - 1) * currentPageSize) + 1} - {Math.min(currentPage * currentPageSize, total)} {__('of', 'formipay')} {total} +
+
+ + + + {__('Page', 'formipay')} {currentPage} {__('of', 'formipay')} {Math.ceil(total / currentPageSize)} + + + + ({ + label: size.toString(), + value: size.toString(), + }))} + onChange={(value) => { + setCurrentPageSize(parseInt(value)); + setCurrentPage(1); + }} + /> +
+
+ )} + + {/* Add New Modal */} + {actions.addNew && ( + setIsAddModalOpen(false)} + > + +
+ + +
+
+ )} + ); } diff --git a/src/admin/pages/Forms.js b/src/admin/pages/Forms.js index 7462b28e9..9ada82d7a 100644 --- a/src/admin/pages/Forms.js +++ b/src/admin/pages/Forms.js @@ -1,74 +1,59 @@ /** - * Forms Page - List view and Form Builder + * Forms Page - Form management with full table features */ import { __ } from '@wordpress/i18n'; -import { useState, useCallback, useEffect } from '@wordpress/element'; -import { Button } from '@wordpress/components'; -import { formsApi } from '../api/client'; import DataTable from '../components/shared/DataTable'; import './AdminPages.css'; -export default function FormsPage({ initialData }) { - const [isBuilder, setIsBuilder] = useState(false); - const [selectedFormId, setSelectedFormId] = useState(null); - const [forms, setForms] = useState([]); - const [loading, setLoading] = useState(true); - - const loadForms = useCallback(() => { - setLoading(true); - formsApi.list() - .then(result => { - console.log('Forms API result:', result); - // Handle both WordPress format and direct format - const formsData = result.data?.results || result.results || result.data || []; - console.log('Forms data extracted:', formsData); - console.log('Forms data length:', formsData.length); - setForms(formsData); - }) - .catch(error => { - console.error('Load forms error:', error); - }) - .finally(() => { - setLoading(false); - }); - }, []); - - useEffect(() => { - loadForms(); - }, [loadForms]); - - if (isBuilder && selectedFormId) { - window.location.href = `${window.formipayAdmin?.siteUrl || ''}/wp-admin/post.php?post=${selectedFormId}&action=edit`; - return null; - } +// SweetAlert2 is loaded via WordPress (global scope) +const Swal = window.Swal; +export default function FormsPage() { const columns = [ { - key: 'id', + key: 'ID', label: __('ID', 'formipay'), - render: (row) => #{row.ID || row.id} + render: (row) => #{row.ID} }, { key: 'title', label: __('Title', 'formipay'), render: (row) => ( - { - e.preventDefault(); - setIsBuilder(true); - setSelectedFormId(row.ID || row.id); - }} - > - {row.post_title || row.title || __('Untitled', 'formipay')} - + <> + {row.title} +
+ + + {__('Edit', 'formipay')} + + {' | '} + + {' | '} + + + ) }, { - key: 'shortcode', - label: __('Shortcode', 'formipay'), - render: (row) => [formipay id="{row.ID || row.id}"] + key: 'date', + label: __('Date', 'formipay'), + render: (row) => { + const date = new Date(row.date); + return ( + + {date.toLocaleDateString()} +
+ + {date.toLocaleTimeString()} + +
+ ); + } }, { key: 'status', @@ -80,22 +65,51 @@ export default function FormsPage({ initialData }) { draft: __('Draft', 'formipay'), pending: __('Pending', 'formipay'), }; - const statusLabel = statusLabels[status] || status; return ( - - {statusLabel} + + {statusLabels[status] || status} ); } }, { - key: 'date', - label: __('Date', 'formipay'), - render: (row) => { - const date = row.post_date || row.date; - if (!date) return '-'; - return new Date(date).toLocaleDateString(); - } + key: 'shortcode', + label: __('Shortcode', 'formipay'), + render: (row) => ( + <> + + + + ) }, ]; @@ -103,18 +117,33 @@ export default function FormsPage({ initialData }) {

{ __('Forms', 'formipay') }

-