// Onboarding / login / 2FA / setup wizard for Superadmin function LoginScreen({ onLogin }) { const [step, setStep] = React.useState('login'); // login | twofa const [email, setEmail] = React.useState('andrej@clickinpms.com'); const [pw, setPw] = React.useState('••••••••••••'); const [code, setCode] = React.useState(['','','','','','']); const refs = React.useRef([]); const submitLogin = (e)=>{ e && e.preventDefault(); setStep('twofa'); setTimeout(()=>refs.current[0]?.focus(),100); }; const handleCode = (i,v)=>{ if(!/^\d?$/.test(v)) return; const next=[...code]; next[i]=v; setCode(next); if(v && i<5) refs.current[i+1]?.focus(); if(next.every(d=>d)) setTimeout(onLogin, 400); }; return (
{/* Left — brand panel */}
SUPERADMIN KONZOLA

Platforma, ki skrbi za
vse slovenske hotele.

Pregled celotnega omrežja clickinPMS — 12 organizacij, 1.005 sob, 14 aktivnih uporabnikov in rast MRR-a 5,6 % mesečno.

{[['12','Organizacij'],['99,94%','Uptime 30 dni'],['€ 6.950','MRR']].map(([v,l])=>(
{v}
{l}
))}
© 2026 clickinPMS d.o.o. · Podatki EU · GDPR / ZVOP-2
{/* Right — form */}
{step==='login' && ( <>
Prijava

Dobrodošli nazaj

Prijavite se v superadmin konzolo platforme.

setEmail(e.target.value)} style={inpStyle}/>
setPw(e.target.value)} style={inpStyle}/>
ALI
Dostop je omejen na clickinPMS osebje. Vsi dogodki so zabeleženi.
)} {step==='twofa' && ( <>

Dvostopenjska preverba

Vnesite 6-mestno kodo iz aplikacije Google Authenticator, registrirane na napravi
iPhone 15 Pro · Andrejev.

{code.map((d,i)=>( refs.current[i]=el} value={d} onChange={e=>handleCode(i, e.target.value)} onKeyDown={e=>{ if(e.key==='Backspace' && !d && i>0) refs.current[i-1]?.focus(); }} maxLength={1} inputMode="numeric" style={{ width:48, height:58, textAlign:'center', fontSize:24, fontWeight:700, fontFamily:'var(--font-display)', border:'1px solid #E5E5E5', borderRadius:12, outline:'none', background:'#fff', color:'#1A1A1A', }}/> ))}
Koda poteče čez 28 s
Uporabi varnostni ključ · SMS kodo namesto aplikacije
)}
); } const inpStyle = { width:'100%', padding:'12px 14px', fontSize:14, border:'1px solid #E5E5E5', borderRadius:10, fontFamily:'inherit', color:'#1A1A1A', outline:'none', transition:'border-color 120ms, box-shadow 120ms', boxSizing:'border-box', }; function WelcomeTour({ onDone, dark }) { const [step, setStep] = React.useState(0); const steps = [ { title:'Dobrodošli v clickinPMS Superadmin', body:'Od tu upravljate celotno platformo: organizacije, uporabnike, naročnine, podporo in sistemsko zdravje. Hitra predstavitev traja 40 sekund.', icon:'dashboard', tone:'#2196F3', }, { title:'Pregled vseh organizacij', body:'V zavihku Organizacije vidite 12 aktivnih hotelov z razporeditvijo po paketu, lokaciji in zasedenosti. Klik na vrstico odpre detajl z možnostjo impersonacije.', icon:'building', tone:'#00BCD4', }, { title:'Podpora — prednostna obravnava', body:'Trenutno je 5 odprtih prijav. Najvišje prioritete (T-2846, Grand Union) se samodejno prikažejo v obvestilih in na nadzorni plošči.', icon:'headset', tone:'#FF9800', }, { title:'Dnevnik in varnost', body:'Vsa dejanja — vaša in sistemska — so zabeležena v dnevniku dogodkov. Impersonacija ima poseben označevalnik in je vidna lastniku organizacije.', icon:'shield', tone:'#9C27B0', }, ]; const s = steps[step]; return (
{steps.map((_,i)=>(
))}

{s.title}

{s.body}

{step+1} / {steps.length}
{step>0 && }
); } Object.assign(window, { LoginScreen, WelcomeTour });