Fase 3: migra gold, transfer, revive y unstuck a islas

- revive/unstuck (acciones SOAP gratuitas): reutilizan CharacterPurchaseForm; se
  hace el precio opcional (botón sin "por X €" cuando no hay precio). El componente
  ya maneja la respuesta sin session_id mostrando el mensaje.
- gold: variante GoldForm (personaje + cantidad de oro -> Stripe). La vista pasa
  ahora character_names y gold_options (serializables) por json_script.
- transfer: variante TransferForm (personaje + cuenta destino + token -> Stripe).
  La vista pasa character_names por json_script.

Verificado: check OK, plantillas renderizan las islas, las 4 páginas redirigen a
login sin sesión.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 21:42:35 +00:00
parent 823b8d0014
commit 6be04e4e37
11 changed files with 270 additions and 66 deletions
+16
View File
@@ -0,0 +1,16 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { GoldForm } from '../components/GoldForm'
const el = document.getElementById('gold-app')
if (el) {
const cEl = document.getElementById('gold-characters-data')
const oEl = document.getElementById('gold-options-data')
const characters: string[] = cEl ? JSON.parse(cEl.textContent || '[]') : []
const options = oEl ? JSON.parse(oEl.textContent || '[]') : []
createRoot(el).render(
<StrictMode>
<GoldForm url={el.dataset.url || ''} csrfToken={el.dataset.csrf || ''} characters={characters} options={options} />
</StrictMode>,
)
}
@@ -0,0 +1,19 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { TransferForm } from '../components/TransferForm'
const el = document.getElementById('transfer-app')
if (el) {
const cEl = document.getElementById('transfer-characters-data')
const characters: string[] = cEl ? JSON.parse(cEl.textContent || '[]') : []
createRoot(el).render(
<StrictMode>
<TransferForm
url={el.dataset.url || ''}
csrfToken={el.dataset.csrf || ''}
characters={characters}
price={el.dataset.price || ''}
/>
</StrictMode>,
)
}