Snai3i-MarketPlace / frontend / src / pages / Dashboard / Settings / index.tsx
index.tsx
Raw
import { useLogoutMutation } from '@/app/backend/endpoints/auth';
import avatar from '@/assets/avatar.png';
import { Button } from '@/components/ui/button';
import { LogOutIcon, TextCursorInput } from 'lucide-react';
import { toast } from 'sonner';
import { useNavigate } from 'react-router-dom';
import useUser from '@/hooks/useUser';
import AlertDialogResetPassword from '@/components/AlertDialogResetPassword';
import useTitle from '@/hooks/useTitle';

function SettingsPage() {
  useTitle('Settings');
  const { user } = useUser();
  const role =
    user?.role === 'inst_designer'
      ? 'Instructor Designer'
      : user?.role === 'school'
      ? 'School'
      : user?.role === 'teacher'
      ? 'Teacher'
      : user?.role === 'admin'
      ? 'Admin'
      : user?.role === 'super_admin'
      ? 'Super Admin'
      : 'inst_admin';
  const [logout, { isLoading }] = useLogoutMutation();
  const navigate = useNavigate();
  return (
    <div className="w-full flex flex-col items-start justify-between p-16 gap-4">
      <div className="bg-white flex flex-row p-6 rounded-lg border-2 justify-start gap-8 items-center w-full">
        <img
          src={avatar}
          draggable="false"
          alt="avatar"
          className="w-36 h-36 rounded-full"
        />
        <div className="flex flex-col gap-2">
          <div className="flex flex-row gap-2 items-center justify-center">
            <div className="text-3xl font-semibold">
              {role === 'School'
                ? (user as SchoolI)?.schoolName
                : `${user?.firstName} ${user?.lastName}`}
            </div>
            <div className="bg-purple-200 rounded-2xl mt-2 border border-purple-700 w-fit items-center justify-center">
              <div className="text-center text-purple-800 px-4 text-sm">
                {role}
              </div>
            </div>
          </div>
          <div className="text-xl text-slate-400">{user?.email}</div>
        </div>
      </div>
      <div className="bg-white flex flex-row p-6 rounded-lg border-2 justify-between gap-8 items-center w-full">
        <AlertDialogResetPassword userId={user?.user_id!}>
          <Button
            variant={'outline'}
            className="pl-6 pr-8 rounded-md bg-slate-50 gap-2"
          >
            <TextCursorInput />
            Reset Password
          </Button>
        </AlertDialogResetPassword>
        <Button
          variant={'destructive'}
          className="pl-10 pr-12 rounded-md gap-2"
          isLoading={isLoading}
          onClick={() => {
            logout()
              .unwrap()
              .then(() => {
                toast.success('Logged out successfully!');
                navigate('/login');
              })
              .catch((error: any) => {
                toast.error(error?.data?.message ?? error?.error.toString());
              });
          }}
        >
          <LogOutIcon /> Logout
        </Button>
      </div>
      <div className="bg-white flex flex-row p-6 rounded-lg border-2 justify-center gap-8 items-center w-full">
        <div className="text-sm text-slate-500">
          if you need any help contact: super.snai3i@snai3i.com
        </div>
      </div>
    </div>
  );
}

export default SettingsPage;