From cd51ee14ab398e4f520b8d062e2f1b04a3055b4c Mon Sep 17 00:00:00 2001 From: Yasiu1376 Date: Sat, 22 Jul 2023 15:51:44 +0330 Subject: [PATCH 1/2] upload_file --- public/locales/fa/app.json | 8 + .../machinary-office/Form/ConfirmForm.jsx | 30 ++++ .../machinary-office/Form/RejectForm.jsx | 31 ++++ .../passenger-boss/Form/ConfirmForm.jsx | 30 ++++ .../passenger-boss/Form/RejectForm.jsx | 31 ++++ .../passenger-office/Form/ConfirmForm.jsx | 84 ++++------ .../passenger-office/Form/RejectForm.jsx | 33 +++- .../province-manager/Form/ConfirmForm.jsx | 84 ++++------ .../province-manager/Form/RejectForm.jsx | 30 ++++ .../Form/RejectForm.jsx | 31 +++- src/core/components/UploadSystem.jsx | 154 ++++++++++++++++++ 11 files changed, 434 insertions(+), 112 deletions(-) create mode 100644 src/core/components/UploadSystem.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index bf81001..2a80338 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -172,5 +172,13 @@ "button-cancel": "بستن", "description": "توضیحات", "description_error": "وارد کردن توضیحات الزامی است!" + }, + "UploadSystem": { + "upload_file": "آپلود فایل", + "delete": "پاک کردن", + "button-reject": "عدم تایید", + "button-cancel": "بستن", + "description": "توضیحات", + "description_error": "وارد کردن توضیحات الزامی است!" } } diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx index 55ae682..d5d415b 100644 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx +++ b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx @@ -12,11 +12,16 @@ import { useTranslations } from "next-intl"; import { useState } from "react"; import { useFormik } from "formik"; import * as Yup from "yup"; +import UploadSystem from "@/core/components/UploadSystem"; const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const t = useTranslations(); const [proposedAmount, setProposedAmount] = useState(""); const [description, setDescription] = useState(""); + const [selectedImage, setSelectedImage] = useState(""); + const [fileType, setfileType] = useState(null); + const [fileName, setfileName] = useState(null); + const [showAddIcon, setShowAddIcon] = useState(true); //formik const validationSchema = Yup.object().shape({ @@ -47,6 +52,18 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { formik.handleChange(event); }; + const handleUploadChange = (event) => { + const uploadedFile = event.target?.files?.[0]; + if (uploadedFile) { + const fileType = event.target?.files?.[0].type; + const fileName = event.target?.files?.[0].name; + setSelectedImage(URL.createObjectURL(uploadedFile)); + setfileType(fileType); + setfileName(fileName); + formik.setFieldValue("confirm_img", uploadedFile); + setShowAddIcon(false); + } + }; return ( {t("ConfirmDialog.confirm")} @@ -86,6 +103,19 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { sx={{ mt: 1 }} fullWidth /> + - - - - - {formik.errors.fileData && formik.errors.fileData} - + - - - - - {formik.errors.fileData && formik.errors.fileData} - + + + + )} + + + ); +}; + +export default UploadSystem; From 8866cbc52fbb69141a4c86daab91c69689060e0f Mon Sep 17 00:00:00 2001 From: Yasiu1376 Date: Sat, 22 Jul 2023 17:26:19 +0330 Subject: [PATCH 2/2] upload file --- public/locales/fa/app.json | 5 +-- .../machinary-office/Form/ConfirmForm.jsx | 8 ++++ .../machinary-office/Form/RejectForm.jsx | 8 ++++ .../passenger-boss/Form/ConfirmForm.jsx | 8 ++++ .../passenger-boss/Form/RejectForm.jsx | 10 ++++- .../passenger-office/Form/ConfirmForm.jsx | 15 ++++---- .../passenger-office/Form/RejectForm.jsx | 10 ++++- .../province-manager/Form/ConfirmForm.jsx | 13 ++++--- .../province-manager/Form/RejectForm.jsx | 8 ++++ .../Form/ConfirmForm.jsx | 38 +++++++++++++++++++ .../Form/RejectForm.jsx | 8 ++++ src/core/components/UploadSystem.jsx | 7 +++- .../notifications/UploadFileNotification.jsx | 37 ++++++++++++++++++ 13 files changed, 155 insertions(+), 20 deletions(-) create mode 100644 src/core/components/notifications/UploadFileNotification.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index a4791a5..a7b7a9a 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -177,9 +177,6 @@ "UploadSystem": { "upload_file": "آپلود فایل", "delete": "پاک کردن", - "button-reject": "عدم تایید", - "button-cancel": "بستن", - "description": "توضیحات", - "description_error": "وارد کردن توضیحات الزامی است!" + "uploadfile_error": "حجم فایل بیشتر از 2 مگابایت می باشد" } } diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx index f868aa0..6166ff4 100644 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx +++ b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx @@ -13,9 +13,12 @@ import { useState } from "react"; import { useFormik } from "formik"; import * as Yup from "yup"; import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; +import useDirection from "@/lib/app/hooks/useDirection"; const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [proposedAmount, setProposedAmount] = useState(""); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); @@ -55,6 +58,11 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/machinary-office/Form/RejectForm.jsx b/src/components/dashboard/machinary-office/Form/RejectForm.jsx index 69f7e61..70c606c 100644 --- a/src/components/dashboard/machinary-office/Form/RejectForm.jsx +++ b/src/components/dashboard/machinary-office/Form/RejectForm.jsx @@ -13,9 +13,12 @@ import { useFormik } from "formik"; import * as Yup from "yup"; import { useState } from "react"; import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; +import useDirection from "@/lib/app/hooks/useDirection"; const RejectForm = ({ open, handleClose, rowId, rejectData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); @@ -47,6 +50,11 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx index d8f3b00..788305c 100644 --- a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx +++ b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx @@ -13,9 +13,12 @@ import { useState } from "react"; import { useFormik } from "formik"; import * as Yup from "yup"; import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; +import useDirection from "@/lib/app/hooks/useDirection"; const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [proposedAmount, setProposedAmount] = useState(""); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); @@ -56,6 +59,11 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/passenger-boss/Form/RejectForm.jsx b/src/components/dashboard/passenger-boss/Form/RejectForm.jsx index d430af5..eeb23c1 100644 --- a/src/components/dashboard/passenger-boss/Form/RejectForm.jsx +++ b/src/components/dashboard/passenger-boss/Form/RejectForm.jsx @@ -13,9 +13,12 @@ import { useFormik } from "formik"; import * as Yup from "yup"; import { useState } from "react"; import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; +import useDirection from "@/lib/app/hooks/useDirection"; const RejectForm = ({ open, handleClose, rowId, rejectData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); @@ -43,10 +46,15 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => { setDescription(event.target.value); formik.handleChange(event); }; - + const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx b/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx index 86eced4..645c2f6 100644 --- a/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx +++ b/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx @@ -1,5 +1,7 @@ import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; import { CONFIRM_PASSENGER_OFFICE } from "@/core/data/apiRoutes"; +import useDirection from "@/lib/app/hooks/useDirection"; import { Dialog, DialogTitle, @@ -8,39 +10,33 @@ import { DialogActions, Button, TextField, - FormHelperText, } from "@mui/material"; import { useFormik } from "formik"; import { useTranslations } from "next-intl"; import { useRef, useState } from "react"; -const MAX_FILE_SIZE_IN_BYTES = 2 * 1024 * 1024; const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); const [fileName, setfileName] = useState(null); const [showAddIcon, setShowAddIcon] = useState(true); - const formik = useFormik({ initialValues: { description: "", - fileData: null, }, onSubmit: () => { const formData = new FormData(); if (description !== "") formData.append("expert_description", description); - if (fileData !== null) formData.append("file", fileData); handleClose(); confirmData(CONFIRM_PASSENGER_OFFICE, rowId, formData); }, }); - - const handleDescriptionChange = (event) => { setDescription(event.target.value); formik.handleChange(event); @@ -49,6 +45,11 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/passenger-office/Form/RejectForm.jsx b/src/components/dashboard/passenger-office/Form/RejectForm.jsx index 5ee55f1..d4ab6d6 100644 --- a/src/components/dashboard/passenger-office/Form/RejectForm.jsx +++ b/src/components/dashboard/passenger-office/Form/RejectForm.jsx @@ -13,15 +13,18 @@ import { useFormik } from "formik"; import * as Yup from "yup"; import { useState } from "react"; import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; +import useDirection from "@/lib/app/hooks/useDirection"; const RejectForm = ({ open, handleClose, rowId, rejectData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); const [fileName, setfileName] = useState(null); const [showAddIcon, setShowAddIcon] = useState(true); - + const validationSchema = Yup.object().shape({ description: Yup.string().required(t("RejectDialog.description_error")), }); @@ -46,6 +49,11 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); diff --git a/src/components/dashboard/province-manager/Form/ConfirmForm.jsx b/src/components/dashboard/province-manager/Form/ConfirmForm.jsx index 0a8078f..e5c04ec 100644 --- a/src/components/dashboard/province-manager/Form/ConfirmForm.jsx +++ b/src/components/dashboard/province-manager/Form/ConfirmForm.jsx @@ -1,5 +1,7 @@ import UploadSystem from "@/core/components/UploadSystem"; +import UploadFileNotification from "@/core/components/notifications/UploadFileNotification"; import { CONFIRM_PROVINCE_MANAGER } from "@/core/data/apiRoutes"; +import useDirection from "@/lib/app/hooks/useDirection"; import { Dialog, DialogTitle, @@ -8,15 +10,14 @@ import { DialogActions, Button, TextField, - FormHelperText, } from "@mui/material"; import { useFormik } from "formik"; import { useTranslations } from "next-intl"; import { useRef, useState } from "react"; -const MAX_FILE_SIZE_IN_BYTES = 2 * 1024 * 1024; const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const t = useTranslations(); + const { directionApp } = useDirection(); const [description, setDescription] = useState(""); const [selectedImage, setSelectedImage] = useState(""); const [fileType, setfileType] = useState(null); @@ -26,13 +27,11 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const formik = useFormik({ initialValues: { description: "", - fileData: null, }, onSubmit: () => { const formData = new FormData(); if (description !== "") formData.append("expert_description", description); - if (fileData !== null) formData.append("file", fileData); handleClose(); confirmData(CONFIRM_PROVINCE_MANAGER, rowId, formData); }, @@ -46,6 +45,11 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; if (uploadedFile) { + const maxFileSize = 2 * 1024 * 1024; + if (uploadedFile.size > maxFileSize) { + UploadFileNotification(directionApp, t); + return; + } const fileType = event.target?.files?.[0].type; const fileName = event.target?.files?.[0].name; setSelectedImage(URL.createObjectURL(uploadedFile)); @@ -86,7 +90,6 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => { setShowAddIcon={setShowAddIcon} showAddIcon={showAddIcon} /> -