diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index dd97ed9b77..bf1f3d2046 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -1,6 +1,6 @@ { "name": "open_sign", - "version": "2.26.0", + "version": "2.30.0", "private": true, "dependencies": { "@formkit/auto-animate": "^0.9.0", @@ -110,7 +110,7 @@ "concurrently": "^9.2.1", "css-loader": "^7.1.2", "daisyui": "^4.12.24", - "eslint": "^9.34.0", + "eslint": "^9.37.0", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", "jsdom": "^27.0.0", diff --git a/apps/OpenSign/public/locales/de/translation.json b/apps/OpenSign/public/locales/de/translation.json index a31168674b..110de66dfe 100644 --- a/apps/OpenSign/public/locales/de/translation.json +++ b/apps/OpenSign/public/locales/de/translation.json @@ -386,7 +386,8 @@ "dropdown": "Dropdown", "radio button": "Radiobutton", "image": "Bild", - "email": "E-Mail" + "email": "E-Mail", + "number": "Zahl" }, "fields": "Felder", "recipients": "Empfänger", @@ -443,6 +444,19 @@ "maximum-check": "Maximale Anzahl", "cell-count": "Zellzahl", "default-value": "Standardwert", + "formula": "Formel", + "formula-placeholder": "Erstellen Sie eine Formel mit Zahlen-Widgets", + "formula-no-widgets": "Für diesen Unterzeichner sind noch keine weiteren Zahlen-Widgets vorhanden.", + "supported-operators": "Unterstützte Operatoren:", + "formula-helper": "Klicken Sie auf einen Zahlen-Widget-Chip, um ihn einzufügen (z. B. {{number-1}} + {{number-2}}).", + "formula-error-letter": "Widget-Namen müssen in doppelte geschweifte Klammern gesetzt werden (z. B. {{number-1}}).", + "formula-error-characters": "Außerhalb der Klammern sind nur Zahlen sowie +, -, *, /, (, ) erlaubt.", + "formula-error-braces": "Jede öffnende {{ muss eine passende }} haben.", + "formula-error-operators": "Verwenden Sie bei Operatoren oder Klammern mindestens zwei Werte.", + "formula-error-leading-operator": "Formeln dürfen nicht mit Operatoren beginnen.", + "decimal-places": "Dezimalstellen", + "number-of-decimal-places": "Anzahl der Dezimalstellen", + "decimal-places-helper": "Auf 0 setzen für ganze Zahlen", "select": "Auswählen", "read-only": "Ist schreibgeschützt", "hide-labels": "Labels ausblenden", diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index acb87b405d..87e5204453 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -386,7 +386,8 @@ "dropdown": "dropdown", "radio button": "radio button", "image": "image", - "email": "email" + "email": "email", + "number": "number" }, "fields": "Fields", "recipients": "Recipients", @@ -444,6 +445,19 @@ "maximum-check": "Maximum check", "cell-count": "Cell count", "default-value": "Default value", + "formula": "Formula", + "formula-placeholder": "Build a formula using number widgets", + "formula-no-widgets": "No other number widgets are assigned to this signer yet.", + "supported-operators": "Supported operators:", + "formula-helper": "Click a number widget chip to insert it (e.g. {{number-1}} + {{number-2}}).", + "formula-error-letter": "Wrap widget names in double curly braces (e.g. {{number-1}}).", + "formula-error-characters": "Only numbers and +, -, *, /, (, ) are allowed outside of braces.", + "formula-error-braces": "Each opening {{ must have a matching }}.", + "formula-error-operators": "Add at least two values when using operators or parentheses.", + "formula-error-leading-operator": "Formulas cannot start with operators.", + "decimal-places": "Decimal Places", + "number-of-decimal-places": "Number of decimal places", + "decimal-places-helper": "Set to 0 for whole numbers", "select": "Select", "read-only": "read only", "hide-labels": "Hide labels", diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json index 4a48cc1f41..01366e444f 100644 --- a/apps/OpenSign/public/locales/es/translation.json +++ b/apps/OpenSign/public/locales/es/translation.json @@ -386,7 +386,8 @@ "dropdown": "desplegable", "radio button": "botón de radio", "image": "imagen", - "email": "correo" + "email": "correo", + "number": "número" }, "fields": "Campos", "recipients": "Destinatarios", @@ -444,6 +445,19 @@ "maximum-check": "Chequeo máximo", "cell-count": "recuento de células", "default-value": "Valor por defecto", + "formula": "Fórmula", + "formula-placeholder": "Crea una fórmula utilizando widgets numéricos", + "formula-no-widgets": "Todavía no hay otros widgets numéricos asignados a este firmante.", + "supported-operators": "Operadores compatibles:", + "formula-helper": "Haz clic en una ficha de widget numérico para insertarla (p. ej. {{number-1}} + {{number-2}}).", + "formula-error-letter": "Envuelve los nombres de los widgets entre dobles llaves (p. ej. {{number-1}}).", + "formula-error-characters": "Fuera de las llaves solo se permiten números y +, -, *, /, (, ).", + "formula-error-braces": "Cada {{ de apertura debe tener una }} correspondiente.", + "formula-error-operators": "Cuando uses operadores o paréntesis, agrega al menos dos valores.", + "formula-error-leading-operator": "Las fórmulas no pueden comenzar con operadores.", + "decimal-places": "Decimales", + "number-of-decimal-places": "Número de decimales", + "decimal-places-helper": "Establecer en 0 para números enteros", "select": "Seleccionar", "read-only": "Es de solo lectura", "hide-labels": "Esconder etiquetas", diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index 288ed0d0d9..10b0505947 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -386,7 +386,8 @@ "dropdown": "dérouler", "radio button": "bouton radio", "image": "image", - "email": "e-mail" + "email": "e-mail", + "number": "nombre" }, "fields": "Des champs", "recipients": "Destinataires", @@ -443,6 +444,19 @@ "maximum-check": "Contrôle maximum", "cell-count": "numération cellulaire", "default-value": "Valeur par défaut", + "formula": "Formule", + "formula-placeholder": "Créez une formule à l'aide des widgets numériques", + "formula-no-widgets": "Aucun autre widget numérique n'est encore attribué à ce signataire.", + "supported-operators": "Opérateurs pris en charge :", + "formula-helper": "Cliquez sur une puce de widget numérique pour l'insérer (ex. {{number-1}} + {{number-2}}).", + "formula-error-letter": "Encadrez les noms de widget avec des doubles accolades (ex. {{number-1}}).", + "formula-error-characters": "En dehors des accolades, seuls les chiffres et +, -, *, /, (, ) sont autorisés.", + "formula-error-braces": "Chaque {{ ouvrante doit avoir une }} correspondante.", + "formula-error-operators": "Lorsque vous utilisez des opérateurs ou des parenthèses, ajoutez au moins deux valeurs.", + "formula-error-leading-operator": "Les formules ne peuvent pas commencer par des opérateurs.", + "decimal-places": "Décimales", + "number-of-decimal-places": "Nombre de décimales", + "decimal-places-helper": "Définir sur 0 pour les nombres entiers", "select": "Sélectionner", "read-only": "Est en lecture seule", "hide-labels": "Masquer les étiquettes", diff --git a/apps/OpenSign/public/locales/hi/translation.json b/apps/OpenSign/public/locales/hi/translation.json index a4ac53c549..c5a786fd89 100644 --- a/apps/OpenSign/public/locales/hi/translation.json +++ b/apps/OpenSign/public/locales/hi/translation.json @@ -386,7 +386,8 @@ "dropdown": "ड्रॉपडाउन", "radio button": "रेडियो बटन", "image": "छवि", - "email": "ईमेल" + "email": "ईमेल", + "number": "संख्या" }, "fields": "क्षेत्र", "recipients": "प्राप्तकर्ता", @@ -443,6 +444,19 @@ "maximum-check": "अधिकतम जाँच", "cell-count": "सेल्स संख्या", "default-value": "डिफ़ॉल्ट मान", + "formula": "सूत्र", + "formula-placeholder": "संख्या विजेट्स का उपयोग करके एक सूत्र बनाएं", + "formula-no-widgets": "इस हस्ताक्षरकर्ता को अभी तक कोई अन्य संख्या विजेट असाइन नहीं किया गया है।", + "supported-operators": "समर्थित ऑपरेटर:", + "formula-helper": "सूची में से संख्या विजेट चिप पर क्लिक करके उसे जोड़ें (उदा. {{number-1}} + {{number-2}})।", + "formula-error-letter": "विजेट नामों को दोहरी घुंघराली ब्रैकेट में रखें (उदा. {{number-1}})।", + "formula-error-characters": "ब्रैकेट के बाहर केवल संख्याएँ और +, -, *, /, (, ) की अनुमति है।", + "formula-error-braces": "हर खुलने वाली {{ के लिए एक मिलान करने वाली }} होना चाहिए।", + "formula-error-operators": "ऑपरेटर या कोष्ठक का उपयोग करते समय कम से कम दो मान जोड़ें।", + "formula-error-leading-operator": "सूत्र ऑपरेटर से शुरू नहीं हो सकते।", + "decimal-places": "दशमलव स्थान", + "number-of-decimal-places": "दशमलव स्थानों की संख्या", + "decimal-places-helper": "पूर्णांक के लिए 0 पर सेट करें", "select": "चुनें", "read-only": "सिर्फ पढ़ने के लिए है", "hide-labels": "लेबल छिपाएँ", diff --git a/apps/OpenSign/public/locales/it/translation.json b/apps/OpenSign/public/locales/it/translation.json index 95e6bb24c4..fbfadb1f31 100644 --- a/apps/OpenSign/public/locales/it/translation.json +++ b/apps/OpenSign/public/locales/it/translation.json @@ -386,7 +386,8 @@ "dropdown": "menu a tendina", "radio button": "pulsante di opzione", "image": "immagine", - "email": "email" + "email": "email", + "number": "numero" }, "fields": "Campi", "recipients": "Destinatari", @@ -443,6 +444,19 @@ "maximum-check": "Controllo massimo", "cell-count": "conteggio delle cellule", "default-value": "Valore predefinita", + "formula": "Formula", + "formula-placeholder": "Crea una formula utilizzando i widget numerici", + "formula-no-widgets": "Non ci sono ancora altri widget numerici assegnati a questo firmatario.", + "supported-operators": "Operatori supportati:", + "formula-helper": "Fai clic su una chip di widget numerico per inserirla (es. {{number-1}} + {{number-2}}).", + "formula-error-letter": "Racchiudi i nomi dei widget tra doppie parentesi graffe (es. {{number-1}}).", + "formula-error-characters": "Al di fuori delle parentesi sono consentiti solo numeri e +, -, *, /, (, ).", + "formula-error-braces": "Ogni {{ di apertura deve avere una }} corrispondente.", + "formula-error-operators": "Quando usi operatori o parentesi, aggiungi almeno due valori.", + "formula-error-leading-operator": "Le formule non possono iniziare con operatori.", + "decimal-places": "Cifre decimali", + "number-of-decimal-places": "Numero di cifre decimali", + "decimal-places-helper": "Imposta su 0 per numeri interi", "select": "Seleziona", "read-only": "È di sola lettura", "hide-labels": "Nascondi etichette", diff --git a/apps/OpenSign/src/components/opensigndrive/DriveBody.jsx b/apps/OpenSign/src/components/opensigndrive/DriveBody.jsx index 7ea1c52241..0defbb2f41 100644 --- a/apps/OpenSign/src/components/opensigndrive/DriveBody.jsx +++ b/apps/OpenSign/src/components/opensigndrive/DriveBody.jsx @@ -71,11 +71,9 @@ function DriveBody(props) { }); props.setPdfData(updatedData); props.sortingData(null, null, updatedData); - await axios - .put( - `${localStorage.getItem( - "baseUrl" - )}classes/contracts_Document/${docId}`, + try { + await axios.put( + `${localStorage.getItem("baseUrl")}classes/contracts_Document/${docId}`, updateName, { headers: { @@ -84,18 +82,14 @@ function DriveBody(props) { "X-Parse-Session-Token": localStorage.getItem("accesstoken") } } - ) - .then(() => { - // const res = result.data; - // console.log("res", res); - }) - .catch((err) => { - console.log("Err ", err); - props.setIsAlert({ - isShow: true, - alertMessage: t("something-went-wrong-mssg") - }); + ); + } catch (err) { + console.log("Err ", err); + props.setIsAlert({ + isShow: true, + alertMessage: t("something-went-wrong-mssg") }); + } } }; @@ -245,7 +239,6 @@ function DriveBody(props) { ) .then((Listdata) => { - // console.log("Listdata ", Listdata); const res = Listdata.data; if (res) { const updatedData = props.pdfData.filter( diff --git a/apps/OpenSign/src/components/pdf/EmailComponent.jsx b/apps/OpenSign/src/components/pdf/EmailComponent.jsx index afb276d36d..a9fbfab593 100644 --- a/apps/OpenSign/src/components/pdf/EmailComponent.jsx +++ b/apps/OpenSign/src/components/pdf/EmailComponent.jsx @@ -31,7 +31,6 @@ function EmailComponent({ setIsLoading(true); const params = { docId: pdfDetails?.[0]?.objectId, recipients: emailList }; const sendmail = await Parse.Cloud.run("forwarddoc", params); - console.log("sendmail ", sendmail); if (sendmail?.status === "success") { setSuccessEmail(true); setIsEmail(false); diff --git a/apps/OpenSign/src/components/pdf/Placeholder.jsx b/apps/OpenSign/src/components/pdf/Placeholder.jsx index 4116956680..803400dc67 100644 --- a/apps/OpenSign/src/components/pdf/Placeholder.jsx +++ b/apps/OpenSign/src/components/pdf/Placeholder.jsx @@ -267,7 +267,8 @@ function Placeholder(props) { (props.isSignYourself || props.isSelfSign) ) { props.handleTextSettingModal(true); - } else { + } + else { props?.handleNameModal && props?.handleNameModal(true); } @@ -305,13 +306,7 @@ function Placeholder(props) { ) { props.setUniqueId(props?.data?.Id); } - - //checking widget's type and open widget copy modal for required widgets - if ( - ["signature", textInputWidget, textWidget, "stamp", "initials"].includes( - props.pos.type - ) - ) { + if (props?.data?.Role !== "prefill") { props.setIsPageCopy(true); props.setCurrWidgetsDetails(props.pos); } else { @@ -326,7 +321,7 @@ function Placeholder(props) { props.data && props.data?.Id ); //condiiton is used to store copied prefill image base64 url in redux for display image - if (props?.data?.Role === "prefill") { + if (props?.pos?.type === "image") { const getPrefillImg = prefillImg?.find((x) => x.id === props.pos.key); dispatch( setPrefillImg({ diff --git a/apps/OpenSign/src/components/pdf/PlaceholderType.jsx b/apps/OpenSign/src/components/pdf/PlaceholderType.jsx index 1a2dd7f892..146238e0ac 100644 --- a/apps/OpenSign/src/components/pdf/PlaceholderType.jsx +++ b/apps/OpenSign/src/components/pdf/PlaceholderType.jsx @@ -1,4 +1,4 @@ -import { useEffect, useState, forwardRef } from "react"; +import { useEffect, useMemo, useState, forwardRef } from "react"; import { getMonth, getYear, @@ -10,7 +10,8 @@ import { years, selectCheckbox, checkRegularExpress, - isBase64 + isBase64, + getSignerPages } from "../../constant/Utils"; import DatePicker from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; @@ -19,6 +20,7 @@ import { useTranslation } from "react-i18next"; import CellsWidget from "./CellsWidget"; import { useSelector } from "react-redux"; import Loader from "../../primitives/Loader"; + const textWidgetCls = "w-full h-full md:min-w-full md:min-h-full z-[999] text-[12px] overflow-hidden resize-none outline-none text-base-content item-center whitespace-pre-wrap"; const widgetCls = @@ -65,18 +67,21 @@ function PlaceholderType(props) { props?.pos?.options?.defaultValue || [] ); - } else { + } + else { // keep displayed value in sync with the stored response setwidgetValue(widgetData); } if (props.pos?.options?.hint) { setHint(props.pos?.options.hint); } else if (props.pos?.options?.validation?.type) { - checkRegularExpress(props.pos?.options?.validation?.type, setHint); + checkRegularExpress(props.pos?.options?.validation?.type, setHint); } } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.pos]); + }, [props.pos, widgetData, type]); + + const ExampleCustomInput = forwardRef(({ value, onClick }, ref) => (