vkashti / components / ui / AccountForms / NameForm.tsx
NameForm.tsx
Raw
'use client';

import Button from '@/components/ui/Button';
import Card from '@/components/ui/Card';
import { updateName } from '@/utils/auth-helpers/server';
import { handleRequest } from '@/utils/auth-helpers/client';
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { FaUser } from 'react-icons/fa';

export default function NameForm({ userName }: { userName: string }) {
  const router = useRouter();
  const [isSubmitting, setIsSubmitting] = useState(false);

  const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
    setIsSubmitting(true);
    // Check if the new name is the same as the old name
    if (e.currentTarget.fullName.value === userName) {
      e.preventDefault();
      setIsSubmitting(false);
      return;
    }
    handleRequest(e, updateName, router);
    setIsSubmitting(false);
  };

  return (
    <Card
      title="Вашето Име"
      description="Моля, въведете пълното си име или име, с което се чувствате комфортно."
      footer={
        <div className="flex flex-col items-start justify-between sm:flex-row sm:items-center">
          <p className="pb-4 sm:pb-0 text-base-content/70">Максимум 64 символа</p>
          <Button
            variant="slim"
            type="submit"
            form="nameForm"
            loading={isSubmitting}
            className="btn btn-primary"
          >
            Обнови Име
          </Button>
        </div>
      }
    >
      <div className="flex items-center gap-3">
        <div className="bg-transparent p-3 rounded-lg">
          <FaUser className="w-5 h-5 text-primary" />
        </div>
        <form id="nameForm" onSubmit={(e) => handleSubmit(e)} className="flex-1">
          <input
            type="text"
            name="fullName"
            className="input input-bordered w-full max-w-md bg-transparent"
            defaultValue={userName}
            placeholder="Вашето име"
            maxLength={64}
          />
        </form>
      </div>
    </Card>
  );
}