diff --git a/src/feature/AdvancedDropzone.jsx b/src/feature/AdvancedDropzone.jsx
index d0bb5f8..d7c42ab 100644
--- a/src/feature/AdvancedDropzone.jsx
+++ b/src/feature/AdvancedDropzone.jsx
@@ -1,4 +1,6 @@
import React from "react";
+import ArrowLeftIcon from "@mui/icons-material/ArrowLeft";
+import ArrowRightIcon from "@mui/icons-material/ArrowRight";
import {
Dropzone,
FileMosaic,
@@ -13,6 +15,7 @@ const AdvancedDropzone = ({ value, onChange }) => {
const [extFiles, setExtFiles] = React.useState(value || []);
const [imageSrc, setImageSrc] = React.useState(undefined);
const [videoSrc, setVideoSrc] = React.useState(undefined);
+ const [hoveredId, setHoveredId] = React.useState(null);
const updateFiles = (incomingFiles) => {
console.log("incoming files", incomingFiles);
@@ -53,6 +56,17 @@ const AdvancedDropzone = ({ value, onChange }) => {
);
};
+ const moveFile = (fromIndex, toIndex) => {
+ setExtFiles((prev) => {
+ if (toIndex < 0 || toIndex >= prev.length) return prev;
+ const updated = [...prev];
+ const [moved] = updated.splice(fromIndex, 1);
+ updated.splice(toIndex, 0, moved);
+ onChange && onChange(updated);
+ return updated;
+ });
+ };
+
return (
<>
{
uploadButton: {},
}}
>
- {extFiles.map((file) => (
- (
+
+ style={{
+ position: "relative",
+ display: "inline-block",
+ marginBottom: 12,
+ }}
+ onMouseEnter={() => setHoveredId(file.id)}
+ onMouseLeave={() => setHoveredId(null)}
+ >
+
+ {hoveredId === file.id && (
+
+
+
+ {file.name}
+
+
+
+ )}
+
))}
diff --git a/src/feature/PersonalDetailsForm.jsx b/src/feature/PersonalDetailsForm.jsx
index 1e1acc4..02040dc 100644
--- a/src/feature/PersonalDetailsForm.jsx
+++ b/src/feature/PersonalDetailsForm.jsx
@@ -13,8 +13,11 @@ import {
Typography,
Link,
InputAdornment,
+ IconButton,
} from "@mui/material";
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
+import Visibility from "@mui/icons-material/Visibility";
+import VisibilityOff from "@mui/icons-material/VisibilityOff";
import AdvancedDropzone from "./AdvancedDropzone";
import { DatePicker } from "@mui/x-date-pickers/DatePicker";
import toast from "react-hot-toast";
@@ -44,6 +47,8 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
const [otpError, setOtpError] = useState("");
const [mobileOtpVerified, setMobileOtpVerified] = useState(false);
const [mobileNumberError, setMobileNumberError] = useState("");
+ const [showPassword, setShowPassword] = useState(false);
+ const [showConfirmPassword, setShowConfirmPassword] = useState(false);
const sendOtp = useSendOtp();
const verifyOtp = useVerifyOtp();
@@ -102,7 +107,7 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
const raw = cityQuery.data;
if (!raw) return [];
if (Array.isArray(raw)) return raw;
- return raw.city || raw.district || raw.data || [];
+ return raw.subCaste || raw.district || raw.data || [];
}, [cityQuery.data]);
const starOptions = useMemo(() => {
@@ -194,9 +199,10 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
const res = await sendOtp.mutateAsync(data.mobileNumber);
const successMessage =
res?.message ||
+ res?.otp ||
res?.status ||
"OTP sent successfully";
- toast.success(successMessage);
+ toast.success(successMessage, { position: "top-right" });
setShowOtp(true);
resetOtp();
setMobileOtpVerified(false);
@@ -207,7 +213,7 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
error?.response?.data?.otp ||
error?.message ||
"Failed to send OTP";
- toast.error(message);
+ toast.error(message, { position: "top-right" });
}
};
@@ -251,20 +257,21 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
});
const successMessage =
res?.message ||
+ res?.otp ||
res?.status ||
"OTP verified successfully";
- toast.success(successMessage);
+ toast.success(successMessage, { position: "top-right" });
setMobileOtpVerified(true);
setMobileNumberError("");
setOtpError("");
} catch (error) {
const message =
- error?.response?.data?.otp ||
error?.response?.data?.message ||
+ error?.response?.data?.otp ||
error?.message ||
"Invalid or expired OTP";
setOtpError(message);
- toast.error(message);
+ toast.error(message, { position: "top-right" });
}
};
@@ -506,7 +513,7 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
{otpTimer > 0 ? (
- formatTimer(otpTimer)
+ ` ${formatTimer(otpTimer) } Seconds`
) : (
{
{otpError && (
-
+
{otpError}
)}
@@ -925,13 +932,26 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
handleChange("password", e.target.value)}
error={Boolean(errors.password)}
helperText={errors.password}
+ InputProps={{
+ endAdornment: (
+
+ setShowPassword((prev) => !prev)}
+ edge="end"
+ aria-label="toggle password visibility"
+ >
+ {showPassword ? : }
+
+
+ ),
+ }}
variant="outlined"
/>
@@ -943,13 +963,26 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
handleChange("confirmPassword", e.target.value)}
error={Boolean(errors.confirmPassword)}
helperText={errors.confirmPassword}
+ InputProps={{
+ endAdornment: (
+
+ setShowConfirmPassword((prev) => !prev)}
+ edge="end"
+ aria-label="toggle confirm password visibility"
+ >
+ {showConfirmPassword ? : }
+
+
+ ),
+ }}
variant="outlined"
/>
@@ -1022,7 +1055,7 @@ const PersonalDetailsForm = ({ onSubmitStep, errors }) => {
>
{cityOptions.map((city) => (
))}