Redesign login UI, add theme toggle, refactor user update

- Redesigned login page with two-panel layout and branding
- Added HexaDistro logo and theme toggle to sidebar/header
- Refactored user update: roles via update endpoint, removed assignRole API/controller
- Extended UpdateUserRequest for username, role, password changes
- UserService.UpdateAsync syncs changes with AuthHex, with rollback
- Stock balances client dedupes by itemId-locationId
- Middleware matcher excludes static assets from auth checks
- Improved localStorage clearing for user context
- Added lucide-react for icons
- Minor UI/code cleanups for consistency and UX
This commit is contained in:
Kalana B. Thilakarathna
2026-10-19 02:20:14 +05:30
parent 4ef63420b7
commit 531b3a7fef
17 changed files with 300 additions and 94 deletions
+5 -4
View File
@@ -22,6 +22,7 @@ interface AuthContextValue {
}
const PERMISSIONS_KEY = 'app:permissions'
const USER_STORAGE_KEYS = [PERMISSIONS_KEY, 'distribution-dashboard-widgets-v3']
function savePermissions(perms: string[]): void {
try {
@@ -37,9 +38,9 @@ function readPermissions(): Set<string> {
return new Set()
}
function clearPermissions(): void {
function clearUserStorage(): void {
try {
localStorage.removeItem(PERMISSIONS_KEY)
USER_STORAGE_KEYS.forEach(k => localStorage.removeItem(k))
} catch {}
}
@@ -71,7 +72,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
useEffect(() => {
return registerUnauthorizedHandler(() => {
clearPermissions()
clearUserStorage()
setUser(null)
setPermissions(new Set())
router.push('/login')
@@ -95,7 +96,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
try {
await api.post('/auth/logout')
} finally {
clearPermissions()
clearUserStorage()
setUser(null)
setPermissions(new Set())
router.push('/login')