// Módulo LIVE — Planejamento (hub de lives)
const LivePlanejamentoPage = () => {
const [creating, setCreating] = React.useState(false);
const goToApresentar = () => { window.location.hash = "#live-apresentar"; };
const lives = [
{
id: 48, nome: "Live #48 — Vestidos Verão 26", data: "19/05/2026", hora: "20:00", duracao: "38m em andamento",
status: "Ao vivo", roteiro: 10, apresentados: 4,
faturamento: 8240.50, pedidos: 47, clientes: 23, ticket: 175.33,
apresentadora: "Letícia Borges", cor: "var(--red)"
},
{
id: 49, nome: "Live #49 — Vibes praia + linho", data: "22/05/2026", hora: "20:00", duracao: "agendada",
status: "Agendada", roteiro: 14, apresentados: 0,
faturamento: 0, pedidos: 0, clientes: 0, ticket: 0,
apresentadora: "Letícia Borges", convites: 2418, cor: "var(--cyan)"
},
{
id: 50, nome: "Live #50 — Marco · Coleção Inverno", data: "29/05/2026", hora: "20:00", duracao: "rascunho",
status: "Rascunho", roteiro: 6, apresentados: 0,
faturamento: 0, pedidos: 0, clientes: 0, ticket: 0,
apresentadora: "—", cor: "var(--text-3)"
},
];
return (
Gestão de lives
Lives
Crie roteiros, inicie a transmissão, acompanhe resultados. Toque Iniciar para abrir o painel de Apresentar no celular.
{/* Ativa + agendadas */}
Em andamento · Próximas
{lives.map(l => )}
{/* Histórico */}
Lives realizadas
| Live | Data | Pedidos | Clientes | Faturamento | Ticket | % pagos | |
{LIVES_HISTORICO.map((l, i) => (
| {l.nome} |
{l.data} |
{l.pedidos} |
{l.clientes} |
{brl(l.faturamento)} |
{brl(l.ticket)} |
= 85 ? "green" : "amber"} dot>{l.pagos}% |
|
))}
{creating &&
setCreating(false)} onCreate={() => { setCreating(false); }}/>}
);
};
const LiveCard = ({ live, onStart }) => {
const isAtiva = live.status === "Ao vivo";
const isAgendada = live.status === "Agendada";
const isRascunho = live.status === "Rascunho";
return (
{/* status bar lateral */}
{isAtiva && (
AO VIVO
)}
{isAgendada && AGENDADA}
{isRascunho && RASCUNHO}
{live.duracao}
{live.nome}
{live.data} · {live.hora}
·
{live.roteiro} produtos no roteiro
{live.apresentadora !== "—" && <>· {live.apresentadora}>}
{isAtiva && (
FATURADO
{brl(live.faturamento)}
APRESENTADOS
{live.apresentados}/{live.roteiro}
)}
{isAgendada && (
CONVITES ENVIADOS
{numFmt(live.convites)}
destinatários
LEMBRETE AUTO
1h antes · WhatsApp
SE INSCREVERAM
847 pessoas
)}
{isRascunho && (
⚠️ Roteiro incompleto · faltam ao menos 4 produtos para confirmar a live.
)}
{/* Right side: actions */}
{isAtiva && (
<>
>
)}
{isAgendada && (
<>
>
)}
{isRascunho && (
<>
>
)}
);
};
const NovaLiveModal = ({ onClose, onCreate }) => {
const [step, setStep] = React.useState(1);
const [nome, setNome] = React.useState("Live #51 — ");
const [produtos, setProdutos] = React.useState([]);
const toggleProduto = (id) => {
setProdutos(p => p.includes(id) ? p.filter(x => x !== id) : [...p, id]);
};
return (
{ if (e.target === e.currentTarget) onClose(); }}>
NOVA LIVE · ETAPA {step}/3
{step === 1 ? "Quando vai ser?" : step === 2 ? "Quais produtos no roteiro?" : "Convidar audiência"}
{step === 1 && (
Apresentadora
Duplicar de
)}
{step === 2 && (
{produtos.length} produtos selecionados · arraste para reordenar depois
{PRODUTOS.map(p => {
const sel = produtos.includes(p.id);
return (
toggleProduto(p.id)} style={{padding:'10px 12px', borderBottom:'1px solid var(--line)', cursor:'pointer', background: sel ? 'var(--accent-soft)' : 'transparent'}}>
{p.foto}
{p.nome}
{p.id} · {p.estoqueTotal} un
{brl(p.precoLive)}
);
})}
)}
{step === 3 && (
Segmentação dos convites
Champions + Leais
Compraram na última live
+ filtro
Estimativa: 2.418 destinatários · custo R$ 120,90
Lembrete automático
1h antes da live · WhatsApp
Cashback de live
5% sobre cada pedido
)}
{step < 3
?
: }
);
};
Object.assign(window, { LivePlanejamentoPage });