/* global React, window */ /* IMPORT MODAL — colagem de código de ficha para sobrescrever personagem atual. */ (function () { "use strict"; const { useState, useEffect, useRef } = React; function ImportSheetModal({ open, onClose }) { const [code, setCode] = useState(""); const [preview, setPreview] = useState(null); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); const taRef = useRef(null); useEffect(() => { if (open) { setCode(""); setPreview(null); setError(null); setBusy(false); setTimeout(() => taRef.current && taRef.current.focus(), 50); } }, [open]); function tryDecode(text) { setError(null); setPreview(null); if (!text.trim()) return; try { const payload = window.SHEET_EXPORT.decodeCode(text.trim()); const classes = (payload.classes || []).map(c => `${c.className} ${c.level}`).join(" · ") || "—"; const race = payload.race ? `Raça #${payload.race.id}` : null; setPreview({ char_name: payload.char_name || "(sem nome)", classes, race, version: payload.version, }); } catch (e) { setError(e.message || "Código inválido"); } } async function onImport() { setError(null); setBusy(true); try { const payload = window.SHEET_EXPORT.decodeCode(code.trim()); let cur = ""; try { cur = JSON.parse(localStorage.getItem("arton_char_name")) || ""; } catch {} if (cur && !confirm(`Sobrescrever o personagem atual${cur ? ` (${cur})` : ""}?`)) { setBusy(false); return; } await window.SHEET_EXPORT.applyPayload(payload); // pequena espera defensiva para garantir que o evento se propague // antes do modal fechar e os componentes re-renderem setBusy(false); onClose(); } catch (e) { setBusy(false); setError(e.message || "Falha ao importar"); } } if (!open) return null; return (
e.stopPropagation()} role="dialog" aria-modal="true">

Importar ficha

Cole o código gerado por outro PDF do Escriba para carregar o personagem aqui. Isso substitui o personagem atual.