Files
wc-licensed-product/assets/js/order-licenses.js
magdev f22ae95d6e Implement version 0.0.10 features
- Add license meta box on WooCommerce order edit pages
- Add editable order domain field with AJAX inline editing
- Add editable license domains directly from order page
- Add licenses table showing all licenses for an order
- Support both classic orders and HPOS

New files:
- src/Admin/OrderLicenseController.php
- assets/js/order-licenses.js

New method: LicenseManager::getLicensesByOrder()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:18:27 +01:00

207 lines
7.1 KiB
JavaScript

/**
* WC Licensed Product - Order Licenses Admin
*
* @package Jeremias\WcLicensedProduct
*/
(function($) {
'use strict';
var WCLPOrderLicenses = {
init: function() {
this.bindEvents();
},
bindEvents: function() {
// Order domain save
$('#wclp-save-order-domain').on('click', this.saveOrderDomain.bind(this));
// License domain edit/save/cancel
$(document).on('click', '.wclp-edit-domain-btn', this.startEditDomain);
$(document).on('click', '.wclp-save-domain-btn', this.saveLicenseDomain.bind(this));
$(document).on('click', '.wclp-cancel-domain-btn', this.cancelEditDomain);
// Enter key on domain inputs
$('#wclp-order-domain').on('keypress', function(e) {
if (e.which === 13) {
e.preventDefault();
$('#wclp-save-order-domain').click();
}
});
$(document).on('keypress', '.wclp-domain-input', function(e) {
if (e.which === 13) {
e.preventDefault();
$(this).closest('.wclp-license-domain-edit').find('.wclp-save-domain-btn').click();
}
});
},
/**
* Save order domain
*/
saveOrderDomain: function(e) {
e.preventDefault();
var $btn = $('#wclp-save-order-domain');
var $input = $('#wclp-order-domain');
var $spinner = $btn.siblings('.spinner');
var $message = $btn.siblings('.wclp-status-message');
var orderId = $input.data('order-id');
var domain = $input.val().trim();
$btn.prop('disabled', true);
$spinner.addClass('is-active');
$message.text('').removeClass('success error');
$.ajax({
url: wclpOrderLicenses.ajaxUrl,
type: 'POST',
data: {
action: 'wclp_update_order_domain',
nonce: wclpOrderLicenses.nonce,
order_id: orderId,
domain: domain
},
success: function(response) {
if (response.success) {
$input.val(response.data.domain);
$message.text(wclpOrderLicenses.strings.saved).addClass('success');
} else {
$message.text(response.data.message || wclpOrderLicenses.strings.error).addClass('error');
}
},
error: function() {
$message.text(wclpOrderLicenses.strings.error).addClass('error');
},
complete: function() {
$btn.prop('disabled', false);
$spinner.removeClass('is-active');
// Clear message after 3 seconds
setTimeout(function() {
$message.text('').removeClass('success error');
}, 3000);
}
});
},
/**
* Start editing license domain
*/
startEditDomain: function(e) {
e.preventDefault();
var $container = $(this).closest('.wclp-license-domain-edit');
var $display = $container.find('.wclp-domain-display');
var $input = $container.find('.wclp-domain-input');
var $editBtn = $container.find('.wclp-edit-domain-btn');
var $saveBtn = $container.find('.wclp-save-domain-btn');
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
// Store original value
$input.data('original', $display.text());
// Toggle visibility
$display.hide();
$editBtn.hide();
$input.show().focus().select();
$saveBtn.show();
$cancelBtn.show();
},
/**
* Cancel editing license domain
*/
cancelEditDomain: function(e) {
e.preventDefault();
var $container = $(this).closest('.wclp-license-domain-edit');
var $display = $container.find('.wclp-domain-display');
var $input = $container.find('.wclp-domain-input');
var $editBtn = $container.find('.wclp-edit-domain-btn');
var $saveBtn = $container.find('.wclp-save-domain-btn');
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
// Restore original value
$input.val($input.data('original'));
// Toggle visibility
$input.hide();
$saveBtn.hide();
$cancelBtn.hide();
$display.show();
$editBtn.show();
},
/**
* Save license domain
*/
saveLicenseDomain: function(e) {
e.preventDefault();
var $btn = $(e.currentTarget);
var $container = $btn.closest('.wclp-license-domain-edit');
var $row = $btn.closest('tr');
var $input = $container.find('.wclp-domain-input');
var $display = $container.find('.wclp-domain-display');
var $spinner = $container.find('.spinner');
var $editBtn = $container.find('.wclp-edit-domain-btn');
var $cancelBtn = $container.find('.wclp-cancel-domain-btn');
var licenseId = $row.data('license-id');
var domain = $input.val().trim();
if (!domain) {
alert(wclpOrderLicenses.strings.invalidDomain);
return;
}
$btn.prop('disabled', true);
$cancelBtn.prop('disabled', true);
$spinner.addClass('is-active');
$.ajax({
url: wclpOrderLicenses.ajaxUrl,
type: 'POST',
data: {
action: 'wclp_update_license_domain',
nonce: wclpOrderLicenses.nonce,
license_id: licenseId,
domain: domain
},
success: function(response) {
if (response.success) {
// Update display
$display.text(response.data.domain);
$input.val(response.data.domain);
// Switch back to display mode
$input.hide();
$btn.hide();
$cancelBtn.hide();
$display.show();
$editBtn.show();
} else {
alert(response.data.message || wclpOrderLicenses.strings.error);
}
},
error: function() {
alert(wclpOrderLicenses.strings.error);
},
complete: function() {
$btn.prop('disabled', false);
$cancelBtn.prop('disabled', false);
$spinner.removeClass('is-active');
}
});
}
};
$(document).ready(function() {
WCLPOrderLicenses.init();
});
})(jQuery);