Files
2026-08-31 13:00:33 +05:30

109 lines
2.4 KiB
TypeScript

'use client'
import { createContext, useContext, useState, type ReactNode } from 'react'
export type Role = 'admin' | 'warehouse' | 'sales'
export interface MockUser {
id: string
fullName: string
username: string
roleId: string
role: Role
}
interface AuthContextValue {
user: MockUser
permissions: string[]
setRole: (role: Role) => void
}
// Mock permissions per role — replace with real API call once auth is implemented
const MOCK_PERMISSIONS: Record<Role, string[]> = {
admin: ['*'],
warehouse: [
'items.view',
'categories.view',
'regions.view',
'routes.view',
'vehicles.view',
'warehouses.view',
'loading.view',
'loading.dispatch',
'loading.receive',
'loading.resolve',
'rides.view',
'rides.manage',
'rides.cancel.request',
'driver_profiles.view',
'compliance.manage',
],
sales: [
'stores.view',
'stores.create',
'stores.update',
'orders.view',
'orders.create',
'orders.update',
'items.view',
'categories.view',
'regions.view',
'routes.view',
'rides.view',
'driver_profiles.view',
'sales_visits.checkin',
],
}
const MOCK_USERS: Record<Role, MockUser> = {
admin: {
id: '00000000-0000-0000-0000-000000000001',
fullName: 'Admin User',
username: 'admin',
roleId: '00000000-0000-0000-0000-000000000010',
role: 'admin',
},
warehouse: {
id: '00000000-0000-0000-0000-000000000002',
fullName: 'Warehouse Staff',
username: 'warehouse',
roleId: '00000000-0000-0000-0000-000000000011',
role: 'warehouse',
},
sales: {
id: '00000000-0000-0000-0000-000000000003',
fullName: 'Sales Rep',
username: 'sales',
roleId: '00000000-0000-0000-0000-000000000012',
role: 'sales',
},
}
const AuthContext = createContext<AuthContextValue | null>(null)
export function AuthProvider({ children }: { children: ReactNode }) {
const [role, setRoleState] = useState<Role>('admin')
function setRole(newRole: Role) {
setRoleState(newRole)
}
return (
<AuthContext.Provider
value={{
user: MOCK_USERS[role],
permissions: MOCK_PERMISSIONS[role],
setRole,
}}
>
{children}
</AuthContext.Provider>
)
}
export function useAuth(): AuthContextValue {
const ctx = useContext(AuthContext)
if (!ctx) throw new Error('useAuth must be used inside AuthProvider')
return ctx
}