diff --git a/apps/OpenSign/public/locales/de/translation.json b/apps/OpenSign/public/locales/de/translation.json index d36ebe99f..7374eb7b9 100644 --- a/apps/OpenSign/public/locales/de/translation.json +++ b/apps/OpenSign/public/locales/de/translation.json @@ -901,6 +901,10 @@ "thanks-for-feedback": "Danke für Ihr Feedback 🙏", "share-your-feedback": "Teilen Sie Ihr Feedback", "share-your-review": "Teilen Sie Ihre Bewertung", + "please-select-rating": "Bitte wählen Sie eine Bewertung aus", + "feedback-optional": "Feedback (optional)", + "feedback-saved": "Feedback wurde gespeichert.", + "feedback-save-error": "Feedback konnte nicht gespeichert werden, bitte versuchen Sie es erneut.", "date-format": "Datumsformat", "document-deleted": "Das Dokument wurde gelöscht oder Sie haben keinen Zugriff. Bitte kontaktieren Sie den Absender.", "save-as-template-?": "Sind Sie sicher, dass Sie dieses Dokument als Vorlage speichern möchten?", @@ -1216,6 +1220,15 @@ "p1": "Dies stellt sicher, dass das Abschlusszertifikat im endgültigen PDF-Dokument enthalten ist. Bitte beachten Sie jedoch, dass das Zertifikat nach dem Zusammenführen nicht mehr vom Hauptdokument getrennt werden kann.", "p2": "Wenn Sie sich entscheiden, nicht zusammenzuführen, wird das Abschlusszertifikat als separate PDF-Datei zusammen mit dem unterzeichneten Dokument bereitgestellt." }, + "read-only-date-error": "Das schreibgeschützte Datums-Widget muss ein Standarddatum haben.", + "set-date": "Datum festlegen", + "set-today": "Unterzeichnungsdatum", "enter-name": "Name eingeben", - "enter-email": "E-Mail eingeben" -} + "enter-email": "E-Mail eingeben", + "subscribe-to-opensign-msg": "Abonnieren Sie {{appName}} und genießen Sie unbegrenzt kostenlose digitale Signaturen.", + "duplicate-subscribe-msg": "Mit Duplizieren können Sie eine exakte Kopie der ausgewählten Vorlage erstellen, die Sie wiederverwenden oder ändern können, ohne das Original zu beeinflussen.", + "save-as-template-msg": "Speichern Sie dieses Dokument als wiederverwendbare Vorlage, die Sie für zukünftige Dokumente erneut nutzen können.", + "public-credit-alert": "Das Signieren über diesen Link verbraucht Ihre kostenlosen E-Mail-Credits. Als kostenloser Nutzer erhalten Sie 15 E-Mail-Credits pro Monat, um zu verhindern, dass Spammer unsere Systeme missbrauchen. Um höhere Limits und ununterbrochenen Zugriff zu genießen, abonnieren Sie die <1>OpenSign™-Bezahlpläne.1>", + "know-more-about": "Mehr erfahren über", + "free-unlimited-signatures": "Kostenlose unbegrenzte Signaturen" +} \ No newline at end of file diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index e3768d9f4..8f5cbfd54 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -902,6 +902,10 @@ "thanks-for-feedback": "Thanks for your feedback 🙏", "share-your-feedback": "Share your feedback", "share-your-review": "Share your review", + "please-select-rating": "Please select a rating", + "feedback-optional": "Feedback (Optional)", + "feedback-saved": "Feedback has been saved.", + "feedback-save-error": "Unable to save feedback, please try again.", "date-format": "Date format", "document-deleted": "The document has been deleted or you don't have access. Please contact the sender.", "save-as-template-?": "Are you sure you want to save this document as template?", @@ -1208,8 +1212,8 @@ "enter-region-of-space": "Enter region of space", "enter-access-key": "Enter access key", "enter-secret-access-key": "Enter secret access key", - "otp-email":"We’ve sent a verification code to", - "save-as-temp-warn":"Note: This document includes prefilled widgets, which will be automatically removed as they are already incorporated into the base document.", + "otp-email": "We've sent a verification code to", + "save-as-temp-warn": "Note: This document includes prefilled widgets, which will be automatically removed as they are already incorporated into the base document.", "edit-document": "Edit document", "modify": "Modify", "merge-certificate-to-pdf": "Merge Certificate to PDF", @@ -1217,6 +1221,15 @@ "p1": "This will ensure that the completion certificate is included in the final PDF document. However, please note that once merged, the certificate cannot be separated from the main document.", "p2": "If you choose not to merge, the completion certificate will be provided as a separate PDF file along with the signed document." }, + "read-only-date-error": "Read-only date widget must have a default date.", + "set-date": "Set Date", + "set-today": "Signing Date", "enter-name": "Enter name", - "enter-email": "Enter email" -} + "enter-email": "Enter email", + "subscribe-to-opensign-msg": "Subscribe to {{appName}} and enjoy unlimited free digital signatures.", + "duplicate-subscribe-msg": "Duplicate lets you create an exact copy of the selected template, allowing you to reuse or modify it without affecting the original.", + "save-as-template-msg": "Save this document as a reusable template that you can use again for future documents.", + "public-credit-alert": "Signing through this link consumes your free email credits. As a Free user, you are allotted 15 email credits per month to prevent spammers from abusing our systems. To enjoy higher limits and uninterrupted access, Subscribe to <1>OpenSign™ Paid plans.1>", + "know-more-about": "Know more about", + "free-unlimited-signatures": "Free Unlimited Signatures" +} \ No newline at end of file diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json index d3986d38b..744652fab 100644 --- a/apps/OpenSign/public/locales/es/translation.json +++ b/apps/OpenSign/public/locales/es/translation.json @@ -902,6 +902,10 @@ "thanks-for-feedback": "Gracias por su comentario 🙏", "share-your-feedback": "Comparta sus comentarios", "share-your-review": "Comparta su reseña", + "please-select-rating": "Por favor seleccione una calificación", + "feedback-optional": "Comentarios (opcional)", + "feedback-saved": "Los comentarios han sido guardados.", + "feedback-save-error": "No se pudieron guardar los comentarios, inténtelo de nuevo.", "date-format": "Formato de fecha", "document-deleted": "El documento ha sido eliminado o no tiene acceso. Por favor, contacte al remitente.", "save-as-template-?": "¿Está seguro de que desea guardar este documento como plantilla?", @@ -1217,6 +1221,15 @@ "p1": "Esto garantizará que el certificado de finalización esté incluido en el documento PDF final. Sin embargo, tenga en cuenta que una vez combinado, el certificado no se podrá separar del documento principal.", "p2": "Si elige no combinar, el certificado de finalización se proporcionará como un archivo PDF separado junto con el documento firmado." }, + "read-only-date-error": "El widget de fecha de solo lectura debe tener una fecha predeterminada.", + "set-date": "Establecer fecha", + "set-today": "Fecha de firma", "enter-name": "Ingrese nombre", - "enter-email": "Ingrese correo electrónico" -} + "enter-email": "Ingrese correo electrónico", + "subscribe-to-opensign-msg": "Suscríbase a {{appName}} y disfrute de firmas digitales gratuitas ilimitadas.", + "duplicate-subscribe-msg": "Duplicar le permite crear una copia exacta de la plantilla seleccionada, lo que le permite reutilizarla o modificarla sin afectar al original.", + "save-as-template-msg": "Guarde este documento como una plantilla reutilizable que podrá usar nuevamente para futuros documentos.", + "public-credit-alert": "Firmar a través de este enlace consumirá sus créditos de correo electrónico gratuitos. Como usuario gratuito, se le asignan 15 créditos de correo electrónico por mes para evitar que los spammers abusen de nuestros sistemas. Para disfrutar de límites más altos y acceso ininterrumpido, suscríbase a los planes de pago de <1>OpenSign™.1>", + "know-more-about": "Saber más sobre", + "free-unlimited-signatures": "¿Firmas ilimitadas gratis" +} \ No newline at end of file diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index d3635ff60..d7a1e2f03 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -901,6 +901,10 @@ "thanks-for-feedback": "Merci pour votre retour 🙏", "share-your-feedback": "Partagez votre avis", "share-your-review": "Partagez votre avis", + "please-select-rating": "Veuillez sélectionner une note", + "feedback-optional": "Retour (optionnel)", + "feedback-saved": "Le retour a été enregistré.", + "feedback-save-error": "Impossible d'enregistrer le retour, veuillez réessayer.", "date-format": "Format de date", "document-deleted": "Le document a été supprimé ou vous n'y avez pas accès. Veuillez contacter l'expéditeur.", "save-as-template-?": "Êtes-vous sûr de vouloir enregistrer ce document comme modèle ?", @@ -1216,6 +1220,15 @@ "p1": "Cela garantira que le certificat de finalisation est inclus dans le document PDF final. Cependant, veuillez noter qu'une fois fusionné, le certificat ne peut plus être séparé du document principal.", "p2": "Si vous choisissez de ne pas fusionner, le certificat de finalisation sera fourni sous forme de fichier PDF distinct accompagné du document signé." }, + "read-only-date-error": "Le widget de date en lecture seule doit avoir une date par défaut.", + "set-date": "Définir la date", + "set-today": "Date de signature", "enter-name": "Saisir le nom", - "enter-email": "Saisir l'e-mail" -} + "enter-email": "Saisir l'e-mail", + "subscribe-to-opensign-msg": "Abonnez-vous à {{appName}} et profitez de signatures numériques gratuites illimitées.", + "duplicate-subscribe-msg": "Dupliquer vous permet de créer une copie exacte du modèle sélectionné, que vous pouvez réutiliser ou modifier sans affecter l'original.", + "save-as-template-msg": "Enregistrez ce document comme modèle réutilisable que vous pourrez utiliser à nouveau pour de futurs documents.", + "public-credit-alert": "Signer via ce lien consomme vos crédits e-mail gratuits. En tant qu'utilisateur gratuit, vous disposez de 15 crédits e-mail par mois afin d’empêcher les spammeurs d’abuser de nos systèmes. Pour profiter de limites plus élevées et d'un accès ininterrompu, abonnez-vous aux forfaits payants de <1>OpenSign™.1>", + "know-more-about": "En savoir plus sur", + "free-unlimited-signatures": "Signatures illimitées gratuites" +} \ No newline at end of file diff --git a/apps/OpenSign/public/locales/hi/translation.json b/apps/OpenSign/public/locales/hi/translation.json index 75bd6cf30..76be44849 100644 --- a/apps/OpenSign/public/locales/hi/translation.json +++ b/apps/OpenSign/public/locales/hi/translation.json @@ -901,6 +901,10 @@ "thanks-for-feedback": "आपकी प्रतिक्रिया के लिए धन्यवाद 🙏", "share-your-feedback": "अपनी प्रतिक्रिया साझा करें", "share-your-review": "अपनी समीक्षा साझा करें", + "please-select-rating": "कृपया एक रेटिंग चुनें", + "feedback-optional": "प्रतिक्रिया (वैकल्पिक)", + "feedback-saved": "प्रतिक्रिया सहेज ली गई है।", + "feedback-save-error": "प्रतिक्रिया सहेजी नहीं जा सकी, कृपया पुनः प्रयास करें।", "date-format": "दिनांक प्रारूप", "document-deleted": "दस्तावेज़ हटा दिया गया है या आपके पास पहुंच नहीं है। कृपया प्रेषक से संपर्क करें।", "save-as-template-?": "क्या आप वाकई इस दस्तावेज़ को टेम्पलेट के रूप में सहेजना चाहते हैं?", @@ -1216,7 +1220,15 @@ "p1": "यह सुनिश्चित करेगा कि पूर्णता प्रमाणपत्र अंतिम PDF दस्तावेज़ में शामिल हो। हालाँकि, कृपया ध्यान दें कि एक बार मिलाने के बाद, प्रमाणपत्र को मुख्य दस्तावेज़ से अलग नहीं किया जा सकता।", "p2": "यदि आप मिलाना नहीं चुनते हैं, तो पूर्णता प्रमाणपत्र हस्ताक्षरित दस्तावेज़ के साथ एक अलग PDF फ़ाइल के रूप में प्रदान किया जाएगा।" }, + "read-only-date-error": "रीड-ओनली दिनांक विजेट में एक डिफ़ॉल्ट दिनांक होना आवश्यक है।", + "set-date": "दिनांक सेट करें", + "set-today": "हस्ताक्षर की तिथि", "enter-name": "नाम दर्ज करें", - "enter-email": "ईमेल दर्ज करें" - -} + "enter-email": "ईमेल दर्ज करें", + "subscribe-to-opensign-msg": "{{appName}} की सदस्यता लें और असीमित निःशुल्क डिजिटल हस्ताक्षरों का आनंद लें।", + "duplicate-subscribe-msg": "डुप्लिकेट करने से आप चयनित टेम्पलेट की एक सटीक प्रति बना सकते हैं, जिसे आप पुनः उपयोग या संशोधित कर सकते हैं बिना मूल को प्रभावित किए।", + "save-as-template-msg": "इस दस्तावेज़ को एक पुन: प्रयोज्य टेम्पलेट के रूप में सहेजें जिसे आप भविष्य के दस्तावेज़ों के लिए फिर से उपयोग कर सकते हैं।", + "public-credit-alert": "इस लिंक के माध्यम से हस्ताक्षर करने पर आपके निःशुल्क ईमेल क्रेडिट का उपभोग होगा। एक निःशुल्क उपयोगकर्ता के रूप में, आपको स्पैमर्स को हमारी प्रणाली का दुरुपयोग करने से रोकने के लिए प्रति माह 15 ईमेल क्रेडिट आवंटित किए जाते हैं। उच्च सीमा और निर्बाध पहुँच का आनंद लेने के लिए, <1>OpenSign™ पेड प्लान1> की सदस्यता लें।", + "know-more-about": "इसके बारे में और जानें", + "free-unlimited-signatures": "मुफ़्त असीमित हस्ताक्षर" +} \ No newline at end of file diff --git a/apps/OpenSign/public/locales/it/translation.json b/apps/OpenSign/public/locales/it/translation.json index d9bfa4737..30c1884dd 100644 --- a/apps/OpenSign/public/locales/it/translation.json +++ b/apps/OpenSign/public/locales/it/translation.json @@ -901,6 +901,10 @@ "thanks-for-feedback": "Grazie per il tuo feedback 🙏", "share-your-feedback": "Condividi il tuo feedback", "share-your-review": "Condividi la tua recensione", + "please-select-rating": "Si prega di selezionare una valutazione", + "feedback-optional": "Feedback (opzionale)", + "feedback-saved": "Il feedback è stato salvato.", + "feedback-save-error": "Impossibile salvare il feedback, riprova.", "date-format": "Formato data", "document-deleted": "Il documento è stato eliminato o non hai accesso. Si prega di contattare il mittente.", "save-as-template-?": "Sei sicuro di voler salvare questo documento come modello?", @@ -1216,6 +1220,15 @@ "p1": "Questo garantirà che il certificato di completamento sia incluso nel documento PDF finale. Tuttavia, si noti che una volta unito, il certificato non può essere separato dal documento principale.", "p2": "Se scegli di non unire, il certificato di completamento sarà fornito come file PDF separato insieme al documento firmato." }, + "read-only-date-error": "Il widget data di sola lettura deve avere una data predefinita.", + "set-date": "Imposta data", + "set-today": "Data di firma", "enter-name": "Inserisci nome", - "enter-email": "Inserisci e-mail" -} + "enter-email": "Inserisci e-mail", + "subscribe-to-opensign-msg": "Abbonati a {{appName}} e goditi firme digitali gratuite illimitate.", + "duplicate-subscribe-msg": "Duplicare consente di creare una copia esatta del modello selezionato, permettendoti di riutilizzarlo o modificarlo senza influire sull'originale.", + "save-as-template-msg": "Salva questo documento come modello riutilizzabile che potrai usare di nuovo per documenti futuri.", + "public-credit-alert": "Firmare tramite questo link consumerà i tuoi crediti e-mail gratuiti. Come utente gratuito, ti vengono assegnati 15 crediti e-mail al mese per impedire agli spammer di abusare dei nostri sistemi. Per usufruire di limiti più elevati e accesso ininterrotto, abbonati ai piani a pagamento di <1>OpenSign™.1>", + "know-more-about": "Scopri di più su", + "free-unlimited-signatures": "Firme illimitate gratuite" +} \ No newline at end of file diff --git a/apps/OpenSign/src/components/pdf/PdfHeader.jsx b/apps/OpenSign/src/components/pdf/PdfHeader.jsx index 1c0d2f753..caef19c6e 100644 --- a/apps/OpenSign/src/components/pdf/PdfHeader.jsx +++ b/apps/OpenSign/src/components/pdf/PdfHeader.jsx @@ -75,9 +75,12 @@ function Header(props) { alert(t("only-pdf-allowed")); return; } - const mb = Math.round(file?.size / Math.pow(1024, 2)); - if (mb > maxFileSize) { - alert(`${t("file-alert-1")} ${maxFileSize} MB`); + const fileSize = + maxFileSize; + const pdfsize = file?.size; + const fileSizeBytes = fileSize * 1024 * 1024; + if (pdfsize > fileSizeBytes) { + alert(`${t("file-alert-1")} ${fileSize} MB`); removeFile(e); return; } @@ -134,6 +137,13 @@ function Header(props) { useObjectStreams: false }); const pdfBuffer = base64ToArrayBuffer(pdfBase64); + const pdfsize = pdfBuffer?.byteLength; + const fileSizeBytes = fileSize * 1024 * 1024; + if (pdfsize > fileSizeBytes) { + alert(`${t("file-alert-1")} ${fileSize} MB`); + removeFile(e); + return; + } props.setPdfArrayBuffer(pdfBuffer); props.setPdfBase64Url(pdfBase64); props.setIsUploadPdf && props.setIsUploadPdf(true); diff --git a/apps/OpenSign/src/components/pdf/PdfTools.jsx b/apps/OpenSign/src/components/pdf/PdfTools.jsx index 8a3e55ab1..7434d6891 100644 --- a/apps/OpenSign/src/components/pdf/PdfTools.jsx +++ b/apps/OpenSign/src/components/pdf/PdfTools.jsx @@ -67,9 +67,12 @@ function PdfTools(props) { alert(t("only-pdf-allowed")); return; } - const mb = Math.round(file?.size / Math.pow(1024, 2)); - if (mb > maxFileSize) { - alert(`${t("file-alert-1")} ${maxFileSize} MB`); + const fileSize = + maxFileSize; + const pdfsize = file?.size; + const fileSizeBytes = fileSize * 1024 * 1024; + if (pdfsize > fileSizeBytes) { + alert(`${t("file-alert-1")} ${fileSize} MB`); removeFile(e); return; } @@ -126,6 +129,13 @@ function PdfTools(props) { useObjectStreams: false }); const pdfBuffer = base64ToArrayBuffer(pdfBase64); + const pdfsize = pdfBuffer?.byteLength; + const fileSizeBytes = fileSize * 1024 * 1024; + if (pdfsize > fileSizeBytes) { + alert(`${t("file-alert-1")} ${fileSize} MB`); + removeFile(e); + return; + } props.setPdfArrayBuffer(pdfBuffer); props.setPdfBase64Url(pdfBase64); props.setIsUploadPdf && props.setIsUploadPdf(true); diff --git a/apps/OpenSign/src/components/pdf/Placeholder.jsx b/apps/OpenSign/src/components/pdf/Placeholder.jsx index 00f5ed186..411695668 100644 --- a/apps/OpenSign/src/components/pdf/Placeholder.jsx +++ b/apps/OpenSign/src/components/pdf/Placeholder.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, forwardRef } from "react"; import BorderResize from "./BorderResize"; import { Rnd } from "react-rnd"; import { @@ -15,7 +15,13 @@ import { cellsWidget, textWidget, selectFormat, - randomId + randomId, + getYear, + getMonth, + months, + years, + getDefaultDate, + getDefaultFormat } from "../../constant/Utils"; import PlaceholderType from "./PlaceholderType"; import moment from "moment"; @@ -29,47 +35,34 @@ import { } from "../../redux/reducers/widgetSlice"; import { themeColor } from "../../constant/const"; import { useGuidelinesContext } from "../../context/GuidelinesContext"; - -//function to get default format -const getDefaultFormat = (dateFormat) => dateFormat || "MM/dd/yyyy"; - -//function to convert formated date to new Date() format -const getDefaultDate = (dateStr, format) => { - //get valid date format for moment to convert formated date to new Date() format - const formats = changeDateToMomentFormat(format); - const parsedDate = moment(dateStr, formats); - let date; - if (parsedDate.isValid()) { - date = new Date(parsedDate.toISOString()); - return date; - } else { - date = new Date(); - return date; - } -}; +import DatePicker from "react-datepicker"; function Placeholder(props) { const { t } = useTranslation(); const dispatch = useDispatch(); const prefillImg = useSelector((state) => state.widget.prefillImg); const { showGuidelines } = useGuidelinesContext(); + const statusArr = ["Required", "Optional"]; const widgetData = props.pos?.options?.defaultValue || props.pos?.options?.response; const [isDateModal, setIsDateModal] = useState(false); const [containerScale, setContainerScale] = useState(); const [selectDate, setSelectDate] = useState({}); - const [dateFormat, setDateFormat] = useState([]); + const [dateFormatList, setDateFormatList] = useState([]); const [clickonWidget, setClickonWidget] = useState({}); - const [isDateReadOnly, setIsDateReadOnly] = useState( - props?.pos?.options?.isReadOnly || false + const [formdata, setFormdata] = useState({ + status: props?.pos?.options?.status || "required", + isReadOnly: props?.pos?.options?.isReadOnly || false + }); + const [isToday, setIsToday] = useState( + props.pos?.options?.response === "today" ? true : false ); const startDate = props?.pos?.options?.response ? getDefaultDate( props?.pos?.options?.response, props.pos?.options?.validation?.format ) - : new Date(); - + : ""; useEffect(() => { const getPdfPageWidth = props.pdfOriginalWH.find( (data) => data.pageNumber === props.pageNumber @@ -102,29 +95,87 @@ function Placeholder(props) { } }, [widgetData]); + //function is used to convert date according to selected format + const handleGetFormatDate = (data, isDateChange) => { + const isSpecialDateFormat = + data?.format && + ["dd-MM-yyyy", "dd.MM.yyyy", "dd/MM/yyyy"].includes(data?.format); + let updateDate = data.date; + let date = ""; + if (isSpecialDateFormat && updateDate) { + date = isDateChange + ? moment(updateDate).format(changeDateToMomentFormat(data.format)) + : updateDate; + } else if (updateDate) { + //using moment package is used to change date as per the format provided in selectDate obj e.g. - MM/dd/yyyy -> 03/12/2024 + const newDate = new Date(updateDate); + date = moment(newDate.getTime()).format( + changeDateToMomentFormat(data?.format) + ); + } + setSelectDate({ date: date, format: data?.format }); + return date; + }; + const saveDateSetting = (data) => { + if (formdata?.isReadOnly && !selectDate.date && !isToday) { + alert(t("read-only-date-error")); + return; + } + handleSaveDate(data); + setIsDateModal(false); + props.setFontColor(""); + props.setFontSize(""); + }; + //function to save date and format on local array onchange date and onclick format + const handleSaveDate = (data, isDateChange) => { + const date = isToday ? "today" : handleGetFormatDate(data, isDateChange); + //`onChangeInput` is used to save data related to date in a placeholder field + onChangeInput( + date, + props.pos, + props.xyPosition, + props.index, + props.setXyPosition, + props.data && props.data.Id, + false, + data?.format, + props.fontSize || props.pos?.options?.fontSize || 12, + props.fontColor || props.pos?.options?.fontColor || "black", + formdata + ); + }; + + //Date-picker- accept date - Thu Dec 30 2025 00:00:00 GMT+0530 (India Standard Time) + //if date have in this format - "30/12/2025" + //then first need to be convert in this format - Tue Dec 30 2025 00:00:00 GMT+0530 (India Standard Time) + //Using moment - moment("30/12/2025", "DD/MM/YYYY").toDate(); + + //moment package where we show date according to format in list + //it support date in this type - "2025-09-11"// ISO string, "2025-09-11T14:30:00" // ISO datetime //function change format array list with selected date and format const changeDateFormat = () => { const updateDate = []; dateFormatArr.map((data) => { - let date; - if (selectDate && selectDate.format === "dd-MM-yyyy") { - const [day, month, year] = selectDate.date.split("-"); + let date = selectDate?.date || new Date(); + const isString = typeof date === "string"; + if (selectDate.format === "dd-MM-yyyy" && isString) { + const [day, month, year] = date.split("-"); date = new Date(`${year}-${month}-${day}`); - } else if (selectDate && selectDate.format === "dd.MM.yyyy") { - const [day, month, year] = selectDate.date.split("."); + } else if (selectDate.format === "dd.MM.yyyy" && isString) { + const [day, month, year] = date.split("."); date = new Date(`${year}.${month}.${day}`); - } else if (selectDate && selectDate.format === "dd/MM/yyyy") { - const [day, month, year] = selectDate.date.split("/"); + } else if (selectDate.format === "dd/MM/yyyy" && isString) { + const [day, month, year] = date.split("/"); date = new Date(`${year}/${month}/${day}`); } else { - date = new Date(selectDate?.date); + date = selectDate?.date ? new Date(selectDate?.date) : new Date(); } const milliseconds = date.getTime(); const newDate = moment(milliseconds).format(data); const dateObj = { date: newDate, format: selectFormat(data) }; updateDate.push(dateObj); }); - setDateFormat(updateDate); + setDateFormatList(updateDate); }; useEffect(() => { @@ -287,41 +338,6 @@ function Placeholder(props) { } }; - //function to save date and format on local array onchange date and onclick format - const handleSaveDate = (data, isDateChange) => { - const isSpecialDateFormat = - data?.format && - ["dd-MM-yyyy", "dd.MM.yyyy", "dd/MM/yyyy"].includes(data?.format); - let updateDate = data.date; - let date; - if (isSpecialDateFormat) { - date = isDateChange - ? moment(updateDate).format(changeDateToMomentFormat(data.format)) - : updateDate; - } else { - //using moment package is used to change date as per the format provided in selectDate obj e.g. - MM/dd/yyyy -> 03/12/2024 - const newDate = new Date(updateDate); - date = moment(newDate.getTime()).format( - changeDateToMomentFormat(data?.format) - ); - } - //`onChangeInput` is used to save data related to date in a placeholder field - onChangeInput( - date, - props.pos, - props.xyPosition, - props.index, - props.setXyPosition, - props.data && props.data.Id, - false, - data?.format, - props.fontSize || props.pos?.options?.fontSize || 12, - props.fontColor || props.pos?.options?.fontColor || "black", - isDateReadOnly || false - ); - setSelectDate({ date: date, format: data?.format }); - }; - const setCellCount = (key, newCount) => { props.setXyPosition((prev) => { const isSignerList = prev.some((d) => d.signerPtr); @@ -650,6 +666,40 @@ function Placeholder(props) { return false; } }; + const ExampleCustomInput = forwardRef(({ value, onClick }, ref) => ( +