frontend initiatewith shadcn uis
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
'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',
|
||||
],
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user