{lang === 'no' ? 'Simuler rolle:' : 'Simulate:'}
/* Main app with login wrapper + live data from real backend */ class ErrorBoundary extends React.Component { constructor(p) { super(p); this.state = { err: null }; } static getDerivedStateFromError(err) { return { err }; } componentDidCatch(err, info) { console.error('UI crash:', err, info); } render() { if (this.state.err) { return (
En komponent feilet under rendering. Detaljer:
{String(this.state.err?.message || this.state.err)}
{'\n\n'}
{String(this.state.err?.stack || '').slice(0, 800)}
| {new Date(x.created_at).toLocaleString('no-NO', { dateStyle: 'short', timeStyle: 'short' })} | {x._machineName} | {x.kind === 'exchange'
? |
{x.bottle_out || —} | {stateBadge(x)} | {x._success ? fmtKr(x._amount, lang) : —} |
| {t.ev_time} | {t.ev_sev} | {t.ev_msg} | {t.ev_machine} | ID | |
|---|---|---|---|---|---|
| {e.sev === 'danger' && |
{e.ts.text} {e.ts.date} |
{e.sev === 'danger' && |
{lang === 'no' ? e.msg_no : e.msg_en} | {e.machineName} | {e.id} |
| Rolle | Tilgang |
|---|---|
| {lang === 'no' ? 'Alt — tenants, automater, brukere, Stripe, kvitteringer, alle data' : 'Everything'} | |
| {lang === 'no' ? 'Sin tenant: opprett brukere, endre kvittering-info, se rapporter. Kan IKKE legge til nye automater.' : 'Their tenant: create users, edit receipt info, view reports. Cannot add new automats.'} | |
| {lang === 'no' ? 'Åpne dører + fylle automater. Tilgang til fylling-modul.' : 'Open doors + fill automats. Refill module access.'} |
Installer denne PWA-en på Android-nettbrett for full-skjerm bruk uten browser-chrome.
>) : (<>For å installere som app: åpne nettleser-menyen og velg "Legg til på startskjermen". PWA-en fungerer offline (siste data caches) og åpnes som vanlig app.
| ID | {no ? 'Lokasjon' : 'Location'} | Type | Tenant | {no ? 'Fase' : 'Stage'} | {no ? 'Betalingsruting' : 'Payment routing'} | Status |
|---|---|---|---|---|---|---|
| {a.id} | {a.location} | {a.kind === 'legacy'
? |
{a.kind === 'legacy' ? — : ( )} | {a.kind === 'legacy' ? v1 (Vipps i v1) : ruting(a)} |
{busy === a.id ? ⏳
: a.online ? |
|
| {no ? 'Ingen automater i dette utvalget' : 'No automats in this selection'} | ||||||
STRIPE_SECRET_KEY er ikke satt.
Du kan teste flyten i stub-modus — ekte betalinger og refusjoner krever ekte nøkkel.
| Tenant | Account ID | Type | Charges | Payouts | Onboarding | {lang === 'no' ? 'Handlinger' : 'Actions'} |
|---|---|---|---|---|---|---|
| {a.tenant_name}
{a.tenant_id}
|
{a.stripe_account_id || —} | {a.account_type || —} | {hasAcc
? a.charges_enabled
? |
{hasAcc
? a.payouts_enabled
? |
{hasAcc
? a.details_submitted
? |
{!hasAcc && (
)}
{hasAcc && !a.details_submitted && (
)}
{hasAcc && a.details_submitted && (
)}
{hasAcc && (
)}
{hasAcc && (
)}
|