Files
Mav-Mobile-UI/src/components/SettingForms/Sound/SoundUpload.tsx

69 lines
2.0 KiB
TypeScript
Raw Normal View History

2025-09-30 13:25:11 +01:00
import { Form, Formik } from "formik";
import FormGroup from "../components/FormGroup";
import type { SoundUploadValue } from "../../../types/types";
import { useSoundContext } from "../../../context/SoundContext";
import { toast } from "sonner";
2025-09-30 13:25:11 +01:00
const SoundUpload = () => {
const { dispatch } = useSoundContext();
2025-09-30 13:25:11 +01:00
const initialValues: SoundUploadValue = {
name: "",
2025-09-30 13:25:11 +01:00
soundFile: null,
};
const handleSubmit = (values: SoundUploadValue) => {
if (!values.soundFile) {
toast.warning("Please select an audio file");
} else {
dispatch({ type: "ADD", payload: values });
toast.success("Sound file upload successfully");
}
2025-09-30 13:25:11 +01:00
};
return (
<Formik
initialValues={initialValues}
onSubmit={handleSubmit}
enableReinitialize
>
{({ setFieldValue, errors, setFieldError }) => (
2025-09-30 13:25:11 +01:00
<Form>
<FormGroup>
<label htmlFor="soundFile">Sound File</label>
2025-09-30 13:25:11 +01:00
<input
type="file"
name="soundFile"
id="sightingSoundinput"
accept="audio/mpeg"
2025-09-30 13:25:11 +01:00
onChange={(e) => {
if (
e.target?.files &&
e.target?.files[0]?.type === "audio/mpeg"
) {
setFieldValue("name", e.target.files[0].name);
setFieldValue("soundFile", e.target.files[0]);
} else {
setFieldError("soundFile", "Not an mp3 file");
toast.error("Not an mp3 file");
}
2025-09-30 13:25:11 +01:00
}}
/>
</FormGroup>
{errors.soundFile && (
<p className="text-red-500 text-sm mt-1">Not an mp3 file</p>
)}
2025-09-30 13:25:11 +01:00
<button
type="submit"
className="w-1/4 text-white bg-green-700 hover:bg-green-800 font-small rounded-lg text-sm px-2 py-2.5"
disabled={errors.soundFile ? true : false}
2025-09-30 13:25:11 +01:00
>
Upload
</button>
</Form>
)}
</Formik>
);
};
export default SoundUpload;