import { Avatar, Button, LoadingOverlay, Menu, Modal, PasswordInput, } from "@mantine/core"; import { useForm, zodResolver } from "@mantine/form"; import { useDisclosure } from "@mantine/hooks"; import { IconCode, IconKey, IconLogout, IconSettings, IconUser, } from "@tabler/icons-react"; import { useState } from "react"; import { useNavigate } from "react-router"; import { Link } from "react-router-dom"; import { z } from "zod"; import { changePassword, logout } from "../apis/auth"; import { useConfirmStore } from "../lib/zustand/use-confirm"; import Links from "../system/links"; const schema = z .object({ currentPassword: z .string() .min(6, "Current password must be at least 6 characters"), newPassword: z .string() .min(6, "New password must be at least 6 characters"), confirmPassword: z.string(), }) .refine((data) => data.newPassword === data.confirmPassword, { path: ["confirmPassword"], message: "Passwords do not match", }); export default function UserMenu() { const [opened, { open, close }] = useDisclosure(false); const { setConfirm } = useConfirmStore(); const [loading, setLoading] = useState(false); const navigate = useNavigate(); const form = useForm({ initialValues: { currentPassword: "", newPassword: "", confirmPassword: "", }, validate: zodResolver(schema), }); const handleSubmit = async (values: typeof form.values) => { await handleChangePassword(values); }; const handleLogout = async () => { setConfirm({ title: "Are you wan't to logout?", message: "This account will logout !", okButton: { value: "Logout" }, handleOk: async () => { const data = await logout(); if (data && data.data) { navigate(Links.LOGIN); } }, }); }; const handleChangePassword = async (values: typeof form.values) => { setConfirm({ title: "Are you wan't to update password", message: "This account will change password !", okButton: { value: "Sure" }, handleOk: async () => { setLoading(true); const data = await changePassword({ newPassword: values.newPassword, password: values.currentPassword, }); setLoading(false); if (data && data.data) { navigate(Links.LOGIN); close(); } }, }); }; return ( <> Account }> Change password } > Keys } > Configs } > Logout
); }