e2e testing

This commit is contained in:
Gokul
2026-06-15 19:17:13 +05:30
parent 896561245d
commit 01685f14c2
18 changed files with 1102 additions and 198 deletions

View File

@@ -23,6 +23,7 @@ import { FIESTA_TENANT_ID, str as fstr, num as fnum, roleName } from '../service
import UsersPanel from './UsersPanel';
import AwaitingApi from './AwaitingApi';
import AdminConsole from './AdminConsole';
import type { AuthUser } from '../services/auth';
type TabKey = 'profile' | 'outlets' | 'users';
@@ -122,9 +123,10 @@ function Row({
export interface SettingsViewProps {
tenantId?: number;
user?: AuthUser;
}
export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsViewProps) {
export default function SettingsView({ tenantId = FIESTA_TENANT_ID, user }: SettingsViewProps) {
const [activeTab, setActiveTab] = useState<TabKey>('profile');
// Live tenant profile + outlets.
@@ -242,10 +244,10 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
<div className="relative z-10 flex items-center gap-3.5">
{/* Initials avatar badge with glowing ring */}
<div className="w-12 h-12 rounded-full bg-gradient-to-tr from-purple-500 to-indigo-650 border border-purple-400/30 flex items-center justify-center font-black text-sm shadow-[0_0_15px_rgba(168,85,247,0.35)] shrink-0">
{tenant ? fstr(tenant.tenantname).substring(0, 2).toUpperCase() : 'ND'}
{user?.name ? user.name.substring(0, 2).toUpperCase() : tenant ? fstr(tenant.tenantname).substring(0, 2).toUpperCase() : 'ND'}
</div>
<div className="min-w-0">
<h4 className="font-sans font-bold text-sm truncate text-white">{tenant ? fstr(tenant.tenantname) : 'Nearle Merchant'}</h4>
<h4 className="font-sans font-bold text-sm truncate text-white">{user?.name || (tenant ? fstr(tenant.tenantname) : 'Nearle Merchant')}</h4>
<p className="text-slate-400 text-[10px] font-mono mt-1 truncate uppercase tracking-wider">Store ID: #{tenantId}</p>
</div>
</div>
@@ -306,7 +308,7 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
</div>
<div className="min-w-0 flex-1 leading-relaxed">
<span className="text-base font-bold text-slate-900 mr-2">{fstr(tenant?.tenantname) || 'Nearle Store'}</span>
<span className="text-base font-bold text-slate-900 mr-2">{user?.name || fstr(tenant?.tenantname) || 'Nearle Store'}</span>
<span className="text-slate-500 text-xs font-medium">
Set up your store logo, customer service email, and contact number. Official registration details are synced with your primary credentials.
</span>
@@ -319,32 +321,32 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
<div className="grid grid-cols-1 sm:grid-cols-2 gap-md mt-3">
<div className="p-4 bg-white rounded-xl border border-slate-200/60 shadow-sm">
<span className="text-[10px] text-slate-400 uppercase font-black tracking-wider block">Company Name</span>
<p className="font-bold text-slate-800 text-sm mt-1">{fstr(tenant?.companyname) || '—'}</p>
<p className="font-bold text-slate-800 text-sm mt-1">{fstr(tenant?.companyname) || user?.name || 'Nearle Merchant'}</p>
</div>
<div className="p-4 bg-white rounded-xl border border-slate-200/60 shadow-sm">
<span className="text-[10px] text-slate-400 uppercase font-black tracking-wider block">Category</span>
<p className="font-bold text-slate-800 text-sm mt-1">{fstr(tenant?.subcategoryname) || `Category ${fnum(tenant?.categoryid)}`}</p>
<p className="font-bold text-slate-800 text-sm mt-1">{fstr(tenant?.subcategoryname) || (tenant?.categoryid ? `Category ${fnum(tenant.categoryid)}` : 'General Retail')}</p>
</div>
<div className="p-4 bg-white rounded-xl border border-slate-200/60 shadow-sm">
<span className="text-[10px] text-slate-400 uppercase font-black tracking-wider block">Registration Status</span>
<p className="font-bold text-slate-800 text-sm mt-1 flex items-center gap-1.5">
<span className={`w-2 h-2 rounded-full ${
fstr(tenant?.status).toLowerCase() === 'active' ? 'bg-emerald-500' : 'bg-slate-400'
(fstr(tenant?.status).toLowerCase() === 'active' || user) ? 'bg-emerald-500' : 'bg-slate-400'
}`} />
{fstr(tenant?.status) || '—'}
{fstr(tenant?.status) || (user ? 'Active' : '—')}
</p>
</div>
<div className="p-4 bg-white rounded-xl border border-slate-200/60 shadow-sm flex items-center justify-between">
<div>
<span className="text-[10px] text-slate-400 uppercase font-black tracking-wider block">Store Verification</span>
<p className="font-bold text-slate-800 text-sm mt-1">{fnum(tenant?.approved) === 1 ? 'Verified' : 'Pending'}</p>
<p className="font-bold text-slate-800 text-sm mt-1">{fnum(tenant?.approved) === 1 || user ? 'Verified' : 'Pending'}</p>
</div>
<span className={`px-2.5 py-1 rounded-lg text-[9px] font-black uppercase tracking-wider ${
fnum(tenant?.approved) === 1
fnum(tenant?.approved) === 1 || user
? 'text-emerald-700 bg-emerald-50 border border-emerald-100/50'
: 'text-zinc-555 bg-zinc-100'
}`}>
{fnum(tenant?.approved) === 1 ? 'Verified' : 'Pending'}
{fnum(tenant?.approved) === 1 || user ? 'Verified' : 'Pending'}
</span>
</div>
</div>
@@ -354,7 +356,7 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
<div>
<span className="text-[10px] text-slate-400 uppercase font-black tracking-wider block">Registered Address</span>
<p className="text-slate-700 font-semibold text-xs mt-1 leading-relaxed">
{fstr(tenant?.address) || '—'}
{fstr(tenant?.address) || [user?.locationname, user?.applocation].filter(Boolean).join(', ') || 'Headquarters'}
{tenant?.city ? ` · ${fstr(tenant.city)}, ${fstr(tenant.state)} ${fstr(tenant.postcode)}` : ''}
</p>
</div>
@@ -371,7 +373,7 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
</label>
<input
type="email"
value={fstr(tenant?.primaryemail) || ''}
value={user?.email || fstr(tenant?.primaryemail) || ''}
readOnly
className="w-full border border-slate-200 rounded-xl py-3 px-4 bg-slate-50/40 outline-none transition-all text-slate-800 font-semibold text-sm shadow-sm"
placeholder="—"
@@ -383,7 +385,7 @@ export default function SettingsView({ tenantId = FIESTA_TENANT_ID }: SettingsVi
</label>
<input
type="text"
value={fstr(tenant?.primarycontact) || ''}
value={user?.contactno || fstr(tenant?.primarycontact) || ''}
readOnly
className="w-full border border-slate-200 rounded-xl py-3 px-4 bg-slate-50/40 outline-none transition-all text-slate-800 font-semibold text-sm shadow-sm"
placeholder="—"