// Mieter screens const MieterDashboard = ({onNav, ctx}) => { const session = ctx?.session; const firstName = session?.name?.split(' ')[0] || 'Mieter'; const [tickets, setTickets] = React.useState([]); const now = new Date(); const dateStr = now.toLocaleDateString('de-CH', {weekday:'long', day:'numeric', month:'long', year:'numeric'}); React.useEffect(() => { Store.getTickets().then(setTickets); }, [ctx?.dataTick]); const myTickets = tickets.filter(t => t.status !== 'erledigt'); return ( <>
IHRE WOHNUNG

{session?.unit || 'Ihre Wohnung'}

{session?.email}
Vertrag aktiv
onNav('meldung-neu')} leftIcon="plus">Neu}> {myTickets.length === 0 ? (
Keine offenen Meldungen.
) : (
{myTickets.slice(0,3).map(t=>(
{t.id} {t.title}
{t.category} {t.created_at ? new Date(t.created_at).toLocaleDateString('de-CH') : ''}
))}
)}
{[['Name', session?.name], ['E-Mail', session?.email], ['Rolle', 'Mieter'], ['Einheit', session?.unit || '—']].map(([k,v])=>(
{k} {v||'—'}
))}
); }; const MeldungPipe = ({status}) => { const steps = ['neu','gesichtet','auftrag','termin','erledigt']; const cur = STATUS_LABELS[status]?.idx ?? 0; const labels = {neu:'Gemeldet', gesichtet:'Gesichtet', auftrag:'Auftrag', termin:'Termin', erledigt:'Erledigt'}; return (
{steps.map((s,i)=>(
{labels[s]}
))}
); }; const MeldungNeu = ({onDone, ctx}) => { const [step, setStep] = React.useState(0); const [cat, setCat] = React.useState('Sanitär'); const [urg, setUrg] = React.useState('normal'); const [title, setTitle] = React.useState(''); const [desc, setDesc] = React.useState(''); const [ticketId, setTicketId] = React.useState(''); const [submitting, setSubmitting] = React.useState(false); const cats = [ {k:'Sanitär',ic:'sanitar'},{k:'Elektro',ic:'electro'},{k:'Fenster/Türen',ic:'door'}, {k:'Heizung',ic:'heat'},{k:'Schimmel',ic:'mold'},{k:'Geräte',ic:'device'}, {k:'Allgemeinbereich',ic:'cube'},{k:'Sonstiges',ic:'cube'} ]; const submit = async () => { if (!title || submitting) return; setSubmitting(true); try { const t = await Store.createTicket({ title, description: desc, category: cat, urgency: urg, unit: ctx?.session?.unit || '', propId: ctx?.session?.prop_id || null, }); setTicketId(t.id); setStep(2); } catch(e) { alert(e.message); } setSubmitting(false); }; return ( <> onDone()}>Dashboard / Neue Meldung} title="Schaden melden" sub="Eingang: Verwaltung & Hauswart werden sofort benachrichtigt. Sie erhalten eine Ticket-Nummer." />
{step===0 && (
SCHRITT 1 VON 3

Um welche Art Schaden handelt es sich?

{cats.map(c=>( ))}
)} {step===1 && (
SCHRITT 2 VON 3

Beschreibung

setTitle(e.target.value)} placeholder="z.B. Wasserhahn tropft, Heizung kalt…"/>