Files
ladill-servers/resources/js/ladill-domain-purchase.js
T
isaaccladandCursor 942d996f12
Deploy Ladill Servers / deploy (push) Successful in 27s
Wire Ladill domain picker and purchase modal into servers flows.
Use the Domains API for owned domains across panel, account, and order forms, with an embedded iframe purchase modal instead of redirecting to domains.ladill.com.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 18:01:23 +00:00

100 lines
2.9 KiB
JavaScript

import { closeLadillModal, openLadillModal } from './ladill-modals';
const PURCHASE_MODAL = 'domain-purchase';
function allowedParentOrigin(origin) {
try {
const host = new URL(origin).hostname;
return host === 'ladill.com' || host.endsWith('.ladill.com');
} catch {
return false;
}
}
function loadPurchaseFrame() {
const frame = document.getElementById('ladill-domain-purchase-frame');
if (!frame || frame.dataset.loaded === '1') {
return;
}
const embedUrl = frame.dataset.embedUrl;
if (embedUrl) {
frame.src = embedUrl;
frame.dataset.loaded = '1';
}
}
export function registerLadillDomainPurchase() {
window.ladillDomainSourceForm = (initial = {}) => ({
domainSource: initial.domainSource ?? 'external',
selectedOwnedDomain: initial.selectedOwnedDomain ?? '',
externalDomain: initial.externalDomain ?? '',
ownedDomains: initial.ownedDomains ?? [],
ownedUrl: initial.ownedUrl ?? '',
onboardingMode: initial.onboardingMode ?? 'ns_auto',
openPurchaseModal() {
loadPurchaseFrame();
openLadillModal(PURCHASE_MODAL);
},
async refreshOwnedDomains() {
if (!this.ownedUrl) {
return;
}
try {
const res = await fetch(this.ownedUrl, {
headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
});
if (!res.ok) {
return;
}
const payload = await res.json();
this.ownedDomains = Array.isArray(payload.data) ? payload.data : [];
this.domainSource = 'ladill';
} catch {
// Non-fatal.
}
},
});
window.addEventListener('message', (event) => {
if (!allowedParentOrigin(event.origin)) {
return;
}
const data = event.data;
if (!data || data.type !== 'ladill:domains:purchase-complete') {
return;
}
closeLadillModal(PURCHASE_MODAL);
const domains = Array.isArray(data.domains) ? data.domains : (data.domain ? [data.domain] : []);
document.querySelectorAll('[x-data*="ladillDomainSourceForm"]').forEach((el) => {
const component = el._x_dataStack?.[0];
if (!component?.refreshOwnedDomains) {
return;
}
component.refreshOwnedDomains().then(() => {
const newest = domains.map((d) => String(d).toLowerCase()).find(Boolean);
if (newest) {
component.selectedOwnedDomain = newest;
component.domainSource = 'ladill';
}
});
});
});
window.addEventListener('open-modal', (event) => {
if (String(event.detail) === PURCHASE_MODAL) {
loadPurchaseFrame();
}
});
}