avatar update and manage user table

This commit is contained in:
2026-04-07 17:54:42 +07:00
parent e3065e1bf5
commit 9159b2f0e6
10 changed files with 332 additions and 191 deletions

View File

@@ -1,37 +1,60 @@
"use client";
import Image from "next/image";
import Link from "next/link";
import React, { useState } from "react";
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 } from "@/service/auth";
export default function UserDropdown() {
const [isOpen, setIsOpen] = useState(false);
function toggleDropdown(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
e.stopPropagation();
setIsOpen((prev) => !prev);
}
const [user, setUser] = useState<UserMetaCardProps | null>(null);
const [loading, setLoading] = useState<boolean>(true);
function toggleDropdown(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
e.stopPropagation();
setIsOpen((prev) => !prev);
}
function closeDropdown() {
setIsOpen(false);
}
useEffect(() => {
const fetchUser = async () => {
try {
const userData = await apiGetCurrentUser();
console.log("User data in dropdown:", userData);
setUser(userData);
} catch (err) {
console.error("Lỗi:", err);
} finally {
setLoading(false);
}
};
fetchUser();
}, []);
return (
<div className="relative">
<button
onClick={toggleDropdown}
onClick={toggleDropdown}
className="flex items-center text-gray-700 dark:text-gray-400 dropdown-toggle"
>
<span className="mr-3 overflow-hidden rounded-full h-11 w-11">
<Image
width={44}
height={44}
src="/images/user/owner.jpg"
src={user?.data?.profile?.avatar_url || "/images/no-images.jpg"}
alt="User"
/>
</span>
<span className="block mr-1 font-medium text-theme-sm">Musharof</span>
<span className="block mr-1 font-medium text-theme-sm">
{user?.data?.profile?.display_name || "User"}
</span>
<svg
className={`stroke-gray-500 dark:stroke-gray-400 transition-transform duration-200 ${
@@ -60,10 +83,10 @@ function toggleDropdown(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
>
<div>
<span className="block font-medium text-gray-700 text-theme-sm dark:text-gray-400">
Musharof Chowdhury
{user?.data?.profile?.display_name || "User"}
</span>
<span className="mt-0.5 block text-theme-xs text-gray-500 dark:text-gray-400">
randomuser@pimjo.com
{user?.data?.email || "email"}
</span>
</div>
@@ -93,7 +116,7 @@ function toggleDropdown(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
Edit profile
</DropdownItem>
</li>
<li>
{/* <li>
<DropdownItem
onItemClick={closeDropdown}
tag="a"
@@ -117,7 +140,7 @@ function toggleDropdown(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
</svg>
Account settings
</DropdownItem>
</li>
</li> */}
<li>
<DropdownItem
onItemClick={closeDropdown}