From 4089ba01e0881c89a72332e13bc3a80b6bddec2a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 29 Jun 2026 22:15:55 +0000
Subject: [PATCH] =DashboardManager overhaul. A bit easier to modify the output of pages. Still have to get the account pages to work as expected, as well as verify the integrations and others are working - but registrar/content pages work as expected. Also fixed up the table generation in CRUD.js and CRUDSkeleton.php
---
assets/js/concise/Checkout.js | 56 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/assets/js/concise/Checkout.js b/assets/js/concise/Checkout.js
index 594914e..04801fa 100644
--- a/assets/js/concise/Checkout.js
+++ b/assets/js/concise/Checkout.js
@@ -15,6 +15,7 @@
class Checkout {
constructor(config = {}) {
this.config = config;
+ this.isActive = false;
this.isInitialized = false;
this.cartItems = new Map();
@@ -22,8 +23,11 @@
this.provider = this.checkout?.querySelector('form')?.dataset.provider || '';
this.isOpen = this.config.isOpen === '1' || false;
+ //TODO: Remove this.
this.isOpen = true;
+ this.api = `${jvbSettings.api}${this.provider}/`;
+
this.isLoggedIn = this.config.is_logged_in || false;
this.userEmail = this.config.user_email || '';
this.savedCards = [];
@@ -43,7 +47,8 @@
this.initListeners();
this.defineTemplates();
- if (this.isLoggedIn) {
+ if (this.isLoggedIn && this.isActive) {
+ console.log('Loading saved cards');
this.loadSavedCards();
}
}
@@ -184,6 +189,7 @@
initElements() {
this.restoreElement = false;
this.selectors = {
+ pass: '#magic-link-form a[data-tab]',
toggle: {
btn: '.toggle-cart',
count: '.toggle-cart .count',
@@ -192,7 +198,13 @@
panels: {
checkout: {
toggle: 'button[data-tab="checkout"]',
- form: '#cart form'
+ form: 'form#checkout'
+ },
+ order: {
+ toggle: 'button[data-tab="order"]',
+ },
+ login: {
+ pass: 'button[data-tab="login"]',
}
},
cart: {
@@ -206,8 +218,8 @@
total: '#cart tfoot .total',
tax: '#cart tfoot .tax',
},
- grandTotal: '#cart .total span',
- tax: '#cart .cart-total .tax span',
+ // grandTotal: '#cart .total span',
+ // tax: '#cart .cart-total .tax span',
}
};
this.ui = window.uiFromSelectors(this.selectors);
@@ -218,9 +230,8 @@
this.ui.toggle.btn.title = 'Currently closed for online ordering';
}
- this.checkoutForm = this.checkout.querySelector('form');
- this.tabs = window.jvbTabs.registerTab(this.checkoutForm, {
+ this.tabs = window.jvbTabs.registerTab(this.checkout, {
updateURL: false
});
}
@@ -230,7 +241,7 @@
this.keyHandler = this.handleEscape.bind(this);
this.changeHandler = this.handleChange.bind(this);
- this.checkoutForm.addEventListener('submit', (e) => this.handleFormSubmit(e));
+ this.ui.panels.checkout.form?.addEventListener('submit', (e) => this.handleFormSubmit(e));
document.addEventListener('click', this.clickHandler);
document.addEventListener('change', this.changeHandler);
// document.addEventListener('keydown', this.keyHandler);
@@ -241,7 +252,10 @@
*****************************************************************/
handleClick(e) {
- if (window.targetCheck(e, 'button') && window.targetCheck(e, 'div.quantity')) {
+ if (e.target === this.ui.pass) {
+ e.preventDefault();
+ window.jvbTabs.switchTab('login', window.jvbTabs.getConfig(this.ui.panels.login.pass));
+ } else if (window.targetCheck(e, 'button') && window.targetCheck(e, 'div.quantity')) {
let quantity = window.targetCheck(e, 'div.quantity');
this.handleNumberClick(e, quantity);
} else if (window.targetCheck(e, '[data-add-to-cart]') && window.targetCheck(e, 'button')) {
@@ -511,13 +525,16 @@
this.ui.panels.checkout.toggle.title = 'Add some things to your cart first!';
this.ui.cart.empty.hidden = false;
this.ui.cart.table.hidden = true;
- this.ui.cart.total.hidden = true;
+ // this.ui.cart.total.hidden = true;
this.a11y.announce('Nothing in Cart');
} else {
this.ui.cart.empty.hidden = true;
- this.ui.panels.checkout.toggle.disabled = false;
+ this.ui.panels.checkout.toggle.disabled = !this.isActive;
+ if (!this.isActive) {
+ this.ui.panels.checkout.toggle.title = 'We\'re experiencing technical difficulties. Try calling or coming in person.';
+ }
this.ui.cart.table.hidden = false;
- this.ui.cart.total.hidden = false;
+ // this.ui.cart.total.hidden = false;
this.ui.panels.checkout.toggle.title = 'Checkout';
}
}
@@ -563,13 +580,14 @@
let total = 0;
this.cartItems.forEach(item => total += item.total);
let tax = total * 0.05;
- window.eraseText(this.ui.cart.tax);
+ // window.eraseText(this.ui.cart.tax);
window.eraseText(this.ui.cart.foot.tax);
window.eraseText(this.ui.cart.foot.total);
window.typeText(this.ui.cart.foot.tax, window.formatPrice(tax));
- window.typeText(this.ui.cart.grandTotal, window.formatPrice(total + tax));
+ // window.typeText(this.ui.cart.grandTotal, window.formatPrice(total + tax));
window.typeText(this.ui.cart.foot.total, window.formatPrice(total + tax));
- this.ui.cart.tax.classList.remove('typeText');
+ this.ui.cart.foot.tax.classList.remove('typeText');
+ this.ui.cart.foot.total.classList.remove('typeText');
}
/*****************************************************************
@@ -614,13 +632,10 @@
const orderData = this.extractOrderData(form);
try {
- window.jvbLoading?.showLoading?.('Processing payment...');
const result = await this.processPayment(orderData);
this.handleSuccess(result, form);
} catch (error) {
this.handleError(error);
- } finally {
- window.jvbLoading?.hideLoading?.();
}
}
@@ -631,7 +646,7 @@
trackOrder(orderNum) {
this.orderId = orderNum;
this.scheduleOrderCheck();
- this.checkout.querySelector('button[data-tab=order]').hidden = false;
+ this.ui.panels.order.toggle.hidden = false;
}
scheduleOrderCheck() {
@@ -643,9 +658,7 @@
}
async checkOrderStatus() {
- const response = await fetch(`${this.config.api_url}order-status/${this.orderId}`, {
- headers: { 'X-WP-Nonce': this.config.nonce }
- });
+ const response = await window.auth.fetch(`${this.api}order-status/${this.orderId}`, );
const data = await response.json();
if (data.status !== 'ready') {
this.scheduleOrderCheck();
@@ -670,6 +683,7 @@
const container = document.getElementById('saved-cards');
if (!container || this.savedCards.length === 0) return;
+ console.log('Yup');
const html = `
<div class="saved-cards-section">
<h4>Saved Payment Methods</h4>
--
Gitblit v1.10.0