Show membership quote before tx and localize membership status states
This commit is contained in:
parent
434a97a184
commit
df02b106eb
@ -36,10 +36,8 @@ Implemented now:
|
||||
|
||||
Remaining in this repo:
|
||||
|
||||
1. Add explicit UI rendering of quote price/currency before wallet tx submit.
|
||||
2. Add localization keys for membership-stage status strings in all non-English bundles.
|
||||
3. Add static marketplace skeleton page showing membership-gated checkout states.
|
||||
4. Add deployment-ready docs for contract addresses and chain/network configuration.
|
||||
1. Add static marketplace skeleton page showing membership-gated checkout states.
|
||||
2. Add deployment-ready docs for contract addresses and chain/network configuration.
|
||||
|
||||
Cross-repo dependencies (kernel/backend/contracts):
|
||||
|
||||
|
||||
@ -570,12 +570,50 @@ function setFlowStatus(key, fallback, isError) {
|
||||
showElement(flowStatus);
|
||||
}
|
||||
|
||||
function setFlowStatusMessage(message, isError) {
|
||||
flowStatus.textContent = message;
|
||||
flowStatus.classList.toggle('error', !!isError);
|
||||
showElement(flowStatus);
|
||||
}
|
||||
|
||||
function clearFlowStatus() {
|
||||
flowStatus.textContent = '';
|
||||
flowStatus.classList.remove('error');
|
||||
hideElement(flowStatus);
|
||||
}
|
||||
|
||||
function formatAtomicAmount(atomicRaw, decimalsRaw) {
|
||||
if (atomicRaw === undefined || atomicRaw === null) return null;
|
||||
if (decimalsRaw === undefined || decimalsRaw === null) return String(atomicRaw);
|
||||
const atomic = String(atomicRaw);
|
||||
const decimals = Number(decimalsRaw);
|
||||
if (!/^[0-9]+$/.test(atomic) || Number.isNaN(decimals) || decimals < 0) {
|
||||
return null;
|
||||
}
|
||||
if (decimals === 0) return atomic;
|
||||
const padded = atomic.padStart(decimals + 1, '0');
|
||||
const intPart = padded.slice(0, -decimals);
|
||||
const fracPart = padded.slice(-decimals).replace(/0+$/, '');
|
||||
return fracPart ? (intPart + '.' + fracPart) : intPart;
|
||||
}
|
||||
|
||||
function formatQuoteDisplay(quote) {
|
||||
if (!quote || typeof quote !== 'object') return null;
|
||||
const currency = quote.currency ? String(quote.currency) : '';
|
||||
let amount = null;
|
||||
if (quote.amount !== undefined && quote.amount !== null) {
|
||||
amount = String(quote.amount);
|
||||
} else if (quote.display_amount !== undefined && quote.display_amount !== null) {
|
||||
amount = String(quote.display_amount);
|
||||
} else if (quote.amount_atomic !== undefined && quote.amount_atomic !== null) {
|
||||
amount = formatAtomicAmount(quote.amount_atomic, quote.decimals);
|
||||
}
|
||||
if (amount && currency) return amount + ' ' + currency;
|
||||
if (amount) return amount;
|
||||
if (currency) return currency;
|
||||
return null;
|
||||
}
|
||||
|
||||
async function postJSON(url, payload) {
|
||||
const res = await fetch(url, {
|
||||
method: 'POST',
|
||||
@ -761,7 +799,13 @@ async function startWalletFlow() {
|
||||
throw new Error('Membership quote is missing destination contract.');
|
||||
}
|
||||
|
||||
setFlowStatus('membership_minting', 'Confirm membership mint in your wallet...', false);
|
||||
const quoteDisplay = formatQuoteDisplay(quote);
|
||||
const mintPrompt = t('membership_minting', 'Confirm membership mint in your wallet...');
|
||||
if (quoteDisplay) {
|
||||
setFlowStatusMessage(mintPrompt + ' (' + quoteDisplay + ')', false);
|
||||
} else {
|
||||
setFlowStatus('membership_minting', 'Confirm membership mint in your wallet...', false);
|
||||
}
|
||||
const txHash = await window.ethereum.request({
|
||||
method: 'eth_sendTransaction',
|
||||
params: [txParams],
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "بانتظار التوقيع...",
|
||||
"wallet_verifying": "جارٍ التحقق من التوقيع...",
|
||||
"wallet_success": "تم تأكيد التعيين.",
|
||||
"membership_quoting": "جارٍ إعداد سك العضوية...",
|
||||
"membership_minting": "أكد سك العضوية في محفظتك...",
|
||||
"membership_confirming": "جارٍ تأكيد العضوية على السلسلة...",
|
||||
"membership_active": "العضوية نشطة. تم تأكيد التعيين.",
|
||||
"wallet_failed": "فشل مسار المحفظة.",
|
||||
"wallet_missing": "لم يتم العثور على محفظة على هذا الجهاز.",
|
||||
"notify_me": "أبلغني",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "Warte auf Signatur...",
|
||||
"wallet_verifying": "Signatur wird verifiziert...",
|
||||
"wallet_success": "Designation bestätigt.",
|
||||
"membership_quoting": "Membership-Praegung wird vorbereitet...",
|
||||
"membership_minting": "Bestaetige die Membership-Praegung in deiner Wallet...",
|
||||
"membership_confirming": "Membership wird on-chain bestaetigt...",
|
||||
"membership_active": "Membership aktiv. Designation bestaetigt.",
|
||||
"wallet_failed": "Wallet-Ablauf fehlgeschlagen.",
|
||||
"wallet_missing": "Kein Wallet auf diesem Gerät erkannt.",
|
||||
"notify_me": "benachrichtige mich",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "Esperando firma...",
|
||||
"wallet_verifying": "Verificando firma...",
|
||||
"wallet_success": "Designación reconocida.",
|
||||
"membership_quoting": "Preparando acuñación de membresía...",
|
||||
"membership_minting": "Confirma la acuñación de membresía en tu wallet...",
|
||||
"membership_confirming": "Confirmando membresía en la cadena...",
|
||||
"membership_active": "Membresía activa. Designación reconocida.",
|
||||
"wallet_failed": "Falló el flujo de wallet.",
|
||||
"wallet_missing": "No se detectó wallet en este dispositivo.",
|
||||
"notify_me": "notifícame",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "Signature en attente...",
|
||||
"wallet_verifying": "Verification de la signature...",
|
||||
"wallet_success": "Designation confirmee.",
|
||||
"membership_quoting": "Preparation du mint dadhesion...",
|
||||
"membership_minting": "Confirmez le mint dadhesion dans votre wallet...",
|
||||
"membership_confirming": "Confirmation de ladhesion on-chain...",
|
||||
"membership_active": "Adhesion active. Designation confirmee.",
|
||||
"wallet_failed": "Le flux wallet a echoue.",
|
||||
"wallet_missing": "Aucun wallet detecte sur cet appareil.",
|
||||
"notify_me": "me notifier",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "ממתין לחתימה...",
|
||||
"wallet_verifying": "מאמת חתימה...",
|
||||
"wallet_success": "הייעוד אושר.",
|
||||
"membership_quoting": "מכין הטבעת חברות...",
|
||||
"membership_minting": "אשר הטבעת חברות בארנק שלך...",
|
||||
"membership_confirming": "מאשר חברות על השרשרת...",
|
||||
"membership_active": "החברות פעילה. הייעוד אושר.",
|
||||
"wallet_failed": "תהליך הארנק נכשל.",
|
||||
"wallet_missing": "לא זוהה ארנק במכשיר זה.",
|
||||
"notify_me": "עדכנו אותי",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "सिग्नेचर की प्रतीक्षा...",
|
||||
"wallet_verifying": "सिग्नेचर सत्यापित किया जा रहा है...",
|
||||
"wallet_success": "नामांकन स्वीकार किया गया।",
|
||||
"membership_quoting": "सदस्यता मिंट तैयार की जा रही है...",
|
||||
"membership_minting": "अपने वॉलेट में सदस्यता मिंट की पुष्टि करें...",
|
||||
"membership_confirming": "ऑन-चेन सदस्यता की पुष्टि की जा रही है...",
|
||||
"membership_active": "सदस्यता सक्रिय है। नामांकन स्वीकार किया गया।",
|
||||
"wallet_failed": "वॉलेट फ़्लो विफल रहा।",
|
||||
"wallet_missing": "इस डिवाइस पर कोई वॉलेट नहीं मिला।",
|
||||
"notify_me": "मुझे सूचित करें",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "署名を待機中...",
|
||||
"wallet_verifying": "署名を検証しています...",
|
||||
"wallet_success": "指定が確認されました。",
|
||||
"membership_quoting": "メンバーシップのミントを準備中...",
|
||||
"membership_minting": "ウォレットでメンバーシップのミントを確認してください...",
|
||||
"membership_confirming": "オンチェーンでメンバーシップを確認中...",
|
||||
"membership_active": "メンバーシップが有効です。指定が確認されました。",
|
||||
"wallet_failed": "ウォレットフローに失敗しました。",
|
||||
"wallet_missing": "この端末でウォレットが見つかりません。",
|
||||
"notify_me": "通知を受け取る",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "서명 대기 중...",
|
||||
"wallet_verifying": "서명 검증 중...",
|
||||
"wallet_success": "지정이 확인되었습니다.",
|
||||
"membership_quoting": "멤버십 민팅을 준비하는 중...",
|
||||
"membership_minting": "지갑에서 멤버십 민팅을 확인하세요...",
|
||||
"membership_confirming": "온체인 멤버십을 확인하는 중...",
|
||||
"membership_active": "멤버십이 활성화되었습니다. 지정이 확인되었습니다.",
|
||||
"wallet_failed": "지갑 흐름에 실패했습니다.",
|
||||
"wallet_missing": "이 기기에서 지갑을 찾을 수 없습니다.",
|
||||
"notify_me": "알림 받기",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "Aguardando assinatura...",
|
||||
"wallet_verifying": "Verificando assinatura...",
|
||||
"wallet_success": "Designação confirmada.",
|
||||
"membership_quoting": "Preparando mint de associação...",
|
||||
"membership_minting": "Confirme o mint de associação na sua wallet...",
|
||||
"membership_confirming": "Confirmando associação on-chain...",
|
||||
"membership_active": "Associação ativa. Designação confirmada.",
|
||||
"wallet_failed": "Falha no fluxo de wallet.",
|
||||
"wallet_missing": "Nenhuma wallet detectada neste dispositivo.",
|
||||
"notify_me": "me avise",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "Ожидание подписи...",
|
||||
"wallet_verifying": "Проверка подписи...",
|
||||
"wallet_success": "Назначение подтверждено.",
|
||||
"membership_quoting": "Подготовка минта членства...",
|
||||
"membership_minting": "Подтвердите минт членства в вашем кошельке...",
|
||||
"membership_confirming": "Подтверждение членства в сети...",
|
||||
"membership_active": "Членство активно. Назначение подтверждено.",
|
||||
"wallet_failed": "Сбой процесса кошелька.",
|
||||
"wallet_missing": "Кошелек на этом устройстве не обнаружен.",
|
||||
"notify_me": "уведомить меня",
|
||||
|
||||
@ -41,6 +41,10 @@
|
||||
"wallet_signing": "等待签名...",
|
||||
"wallet_verifying": "正在验证签名...",
|
||||
"wallet_success": "指定已确认。",
|
||||
"membership_quoting": "正在准备会员铸造...",
|
||||
"membership_minting": "请在钱包中确认会员铸造...",
|
||||
"membership_confirming": "正在链上确认会员资格...",
|
||||
"membership_active": "会员已激活。指定已确认。",
|
||||
"wallet_failed": "钱包流程失败。",
|
||||
"wallet_missing": "此设备未检测到钱包。",
|
||||
"notify_me": "通知我",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user