Revert "pig update: decentralization, format date time"
All checks were successful
Build and Release / release (push) Successful in 27s

This reverts commit 49b99289bb.
This commit is contained in:
2026-04-20 01:00:52 +07:00
parent 49b99289bb
commit 1fe25c1944
16 changed files with 242 additions and 781 deletions

View File

@@ -1,62 +0,0 @@
"use client"
import { ReactNode, useEffect } from "react"
import { useRouter } from "next/navigation"
import { useAuth } from "@/hooks/useAuth"
import { UserRole } from "@/config/routes.config"
interface ProtectedRouteProps {
children: ReactNode
requiredRoles?: UserRole[]
fallback?: ReactNode
}
/**
* Component để protect routes dựa trên role
* Sử dụng ở client-side trong layouts hoặc pages
*/
export const ProtectedRoute: React.FC<ProtectedRouteProps> = ({
children,
requiredRoles = [],
fallback,
}) => {
const router = useRouter()
const { isAuthenticated, userRoles, hasAnyRole } = useAuth()
useEffect(() => {
if (!isAuthenticated) {
router.replace("/signin")
}
}, [isAuthenticated, router])
if (!isAuthenticated) {
return null
}
if (requiredRoles.length > 0 && !hasAnyRole(requiredRoles)) {
if (fallback) {
return <>{fallback}</>
}
router.replace("/error-403")
return null
}
return <>{children}</>
}
/**
* Wrapper để render UI dựa trên role
*/
export const RoleGate: React.FC<{
requiredRoles: UserRole[]
children: ReactNode
fallback?: ReactNode
}> = ({ requiredRoles, children, fallback }) => {
const { hasAnyRole } = useAuth()
if (!hasAnyRole(requiredRoles)) {
return <>{fallback || null}</>
}
return <>{children}</>
}

View File

@@ -12,7 +12,6 @@ import { API, HOME_URL } from "../../../api";
import { setUserData } from "@/store/features/userSlice";
import { useDispatch } from "react-redux";
import { useRouter } from "next/navigation";
import { saveUserToCookie } from "@/lib/cookieStorage";
export default function SignInForm() {
const router = useRouter();
@@ -74,9 +73,7 @@ export default function SignInForm() {
// console.log("Current User Data:", data);
if (data?.data) {
// Lưu user data vào Redux và cookies
dispatch(setUserData(data.data));
saveUserToCookie(data.data);
router.push("/");
}
} else {

View File

@@ -4,11 +4,14 @@ import Link from "next/link";
import React, { useEffect, useState } from "react";
import { Dropdown } from "../ui/dropdown/Dropdown";
import { DropdownItem } from "../ui/dropdown/DropdownItem";
import { fullDataUser } from "@/interface/admin";
import { UserMetaCardProps } from "@/interface/user";
import { apiGetCurrentUser, apiLogout } from "@/service/auth";
import { removeUserFromCookie } from "@/lib/cookieStorage";
import { useRouter } from "next/navigation";
export default function UserDropdown() {
const router = useRouter();
const [isOpen, setIsOpen] = useState(false);
const [user, setUser] = useState<UserMetaCardProps | null>(null);
const [loading, setLoading] = useState<boolean>(true);
@@ -44,9 +47,6 @@ export default function UserDropdown() {
} catch (error) {
console.error("Logout failed", error);
} finally {
// Xóa user data từ cookies
removeUserFromCookie();
localStorage.clear();
sessionStorage.clear();