added s authState which helps conditonaly render components based on this state stored user details in localStoarge so that server side end point does not get hit in every page load. add a guard which protects routes and redirects to login if user is not logged in. create a logout route
40 lines
838 B
TypeScript
40 lines
838 B
TypeScript
import { Injectable } from "@angular/core";
|
|
|
|
@Injectable({
|
|
providedIn: "root",
|
|
})
|
|
export class LocalStorageService {
|
|
setItem<T>(key: string, value: T) {
|
|
try {
|
|
const item = JSON.stringify(value);
|
|
localStorage.setItem(key, item);
|
|
} catch (e) {
|
|
console.error("Error storing item in local storage: ", e);
|
|
}
|
|
}
|
|
|
|
getItem<T>(key: string): T | null {
|
|
try {
|
|
const item = localStorage.getItem(key);
|
|
return item ? (JSON.parse(item) as T) : null;
|
|
} catch (err) {
|
|
console.error("Error getting item from local storage: ", err);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @throws Error if item is not found
|
|
*/
|
|
removeItem(key: string) {
|
|
localStorage.removeItem(key);
|
|
}
|
|
|
|
/**
|
|
* @Throws Error if localstorage API is not available
|
|
*/
|
|
clear() {
|
|
localStorage.clear();
|
|
}
|
|
}
|