Skip to content

Commit 360c13d

Browse files
Merge pull request #1825 from OpenSignLabs/updates-16055306436
v2.26.0
2 parents 4a5b35e + 71b9bd6 commit 360c13d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2153
-1073
lines changed

apps/OpenSign/package-lock.json

Lines changed: 295 additions & 259 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/OpenSign/package.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
"dependencies": {
66
"@formkit/auto-animate": "^0.8.2",
77
"@imgly/background-removal": "^1.6.0",
8-
"@lottiefiles/dotlottie-react": "^0.14.0",
8+
"@lottiefiles/dotlottie-react": "^0.14.2",
99
"@pdf-lib/fontkit": "^1.1.1",
1010
"@radix-ui/themes": "^3.2.1",
1111
"@reduxjs/toolkit": "^2.8.2",
12-
"axios": "^1.9.0",
12+
"axios": "^1.10.0",
1313
"date-fns-tz": "^3.2.0",
1414
"file-saver": "^2.0.5",
15-
"i18next": "^23.16.8",
16-
"i18next-browser-languagedetector": "^8.1.0",
15+
"i18next": "^25.3.0",
16+
"i18next-browser-languagedetector": "^8.2.0",
1717
"i18next-http-backend": "^3.0.2",
1818
"jszip": "^3.10.1",
1919
"jwt-decode": "^4.0.0",
@@ -36,24 +36,24 @@
3636
"react-dom": "^18.3.1",
3737
"react-gtm-module": "^2.0.11",
3838
"react-helmet": "^6.1.0",
39-
"react-i18next": "^15.5.2",
39+
"react-i18next": "^15.5.3",
4040
"react-konva": "^18.2.10",
4141
"react-pdf": "^9.2.1",
4242
"react-quill-new": "^3.4.6",
4343
"react-redux": "^9.2.0",
4444
"react-rnd": "^10.5.2",
45-
"react-router": "^7.6.1",
45+
"react-router": "^7.6.3",
4646
"react-scrollbars-custom": "^4.1.1",
4747
"react-select": "^5.10.1",
4848
"react-signature-canvas": "^1.1.0-alpha.2",
4949
"react-timezone-select": "^3.2.8",
50-
"react-tooltip": "^5.28.1",
50+
"react-tooltip": "^5.29.1",
5151
"reactour": "^1.19.4",
5252
"redux": "^5.0.1",
5353
"regex-parser": "^2.3.1",
5454
"serve": "^14.2.4",
5555
"styled-components": "^5.3.11",
56-
"web-vitals": "^5.0.2",
56+
"web-vitals": "^5.0.3",
5757
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
5858
},
5959
"scripts": {
@@ -94,38 +94,38 @@
9494
}
9595
},
9696
"devDependencies": {
97-
"@babel/core": "^7.27.4",
97+
"@babel/core": "^7.27.7",
9898
"@babel/preset-env": "^7.27.2",
9999
"@babel/preset-react": "^7.27.1",
100-
"@babel/runtime-corejs2": "^7.27.4",
100+
"@babel/runtime-corejs2": "^7.27.6",
101101
"@testing-library/jest-dom": "^6.6.3",
102102
"@testing-library/react": "^16.3.0",
103103
"@testing-library/user-event": "^14.6.1",
104104
"@types/react": "^18.3.23",
105-
"@vitejs/plugin-react": "^4.5.1",
106-
"@vitejs/plugin-react-swc": "^3.10.1",
107-
"@vitest/ui": "^3.2.0",
105+
"@vitejs/plugin-react": "^4.6.0",
106+
"@vitejs/plugin-react-swc": "^3.10.2",
107+
"@vitest/ui": "^3.2.4",
108108
"autoprefixer": "^10.4.21",
109109
"babel-loader": "^10.0.0",
110110
"commitizen": "^4.3.1",
111-
"concurrently": "^9.1.2",
111+
"concurrently": "^9.2.0",
112112
"css-loader": "^7.1.2",
113113
"daisyui": "^4.12.24",
114-
"dotenv": "^16.5.0",
115-
"eslint": "^9.28.0",
116-
"eslint-plugin-prettier": "^5.4.1",
114+
"dotenv": "^16.6.1",
115+
"eslint": "^9.30.0",
116+
"eslint-plugin-prettier": "^5.5.1",
117117
"eslint-plugin-react": "^7.37.5",
118118
"jsdom": "^26.1.0",
119-
"lint-staged": "^16.1.0",
120-
"postcss": "^8.5.4",
121-
"prettier": "^3.5.3",
119+
"lint-staged": "^16.1.2",
120+
"postcss": "^8.5.6",
121+
"prettier": "^3.6.2",
122122
"pretty-quick": "^4.2.2",
123123
"rollup-plugin-node-polyfills": "^0.2.1",
124124
"tailwindcss": "^3.4.17",
125125
"vite": "^6.3.5",
126126
"vite-plugin-svgr": "^4.3.0",
127127
"vite-tsconfig-paths": "^5.1.4",
128-
"vitest": "^3.2.0"
128+
"vitest": "^3.2.4"
129129
},
130130
"engines": {
131131
"node": "18 || 20 || 22"

apps/OpenSign/public/locales/de/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "Seite drehen",
762762
"bulk-import": "Massenimport",
763763
"contacts-file": "Kontaktdatei (xlsx, csv)",
764+
"import-guideline": "Laden Sie eine CSV- oder Excel-Datei mit den Spalten Name, Email und optional Phone hoch. Es werden nur die ersten 100 Kontakte importiert.",
765+
"download-sample": "Beispieldatei herunterladen",
764766
"100-records-only": "Derzeit können Sie nur bis zu 100 Datensätze importieren.",
765767
"csv-excel-support-only": "Laden Sie eine Datei in einem der folgenden Formate hoch: CSV, XLSX oder XLS.",
766768
"contact-imported": "{{imported}} Kontakte wurden importiert. {{failed}} Kontakte konnten nicht importiert werden.",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"Wählen Sie eine aus",
10341036
"search-templates": "Vorlagen durchsuchen…",
10351037
"search-documents": "Dokumente suchen…",
1036-
"search-contacts": "Kontakte durchsuchen…"
1038+
"search-contacts": "Kontakte durchsuchen…",
1039+
"invalid-email-found": "Ungültige E-Mail gefunden: {{email}}",
1040+
"duplicate-email-found": "Doppelte E-Mail gefunden: {{email}}",
1041+
"vertical": "Vertikal",
1042+
"horizontal": "Horizontal",
1043+
"billing": "Abrechnung",
1044+
"console": "Konsole"
10371045
}

apps/OpenSign/public/locales/en/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "Rotate page",
762762
"bulk-import": "Bulk import",
763763
"contacts-file": "Contacts file (xlsx, csv)",
764+
"import-guideline": "Upload a CSV or Excel file with columns Name, Email and optional Phone. Only the first 100 records will be imported.",
765+
"download-sample": "Download sample file",
764766
"100-records-only": "Currently you can only import up to 100 records.",
765767
"csv-excel-support-only": "Upload a file in one of the following formats: CSV, XLSX or XLS.",
766768
"contact-imported": "{{imported}} contacts were imported. {{failed}} contacts failed to import.",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"Choose One",
10341036
"search-templates": "Search templates…",
10351037
"search-documents": "Search documents…",
1036-
"search-contacts": "Search contacts…"
1038+
"search-contacts": "Search contacts…",
1039+
"invalid-email-found": "Invalid email found: {{email}}",
1040+
"duplicate-email-found": "Duplicate email found: {{email}}",
1041+
"vertical": "Vertical",
1042+
"horizontal": "Horizontal",
1043+
"billing": "Billing",
1044+
"console": "Console"
10371045
}

apps/OpenSign/public/locales/es/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "Girar página",
762762
"bulk-import": "Importación masiva",
763763
"contacts-file": "Archivo de contactos (xlsx, csv)",
764+
"import-guideline": "Sube un archivo CSV o Excel con las columnas Name, Email y opcionalmente Phone. Solo se importarán los primeros 100 contactos.",
765+
"download-sample": "Descargar archivo de ejemplo",
764766
"100-records-only": "Currently you can only import up to 100 records.",
765767
"csv-excel-support-only": "Cargue un archivo en uno de los siguientes formatos: CSV, XLSX o XLS.",
766768
"contact-imported": "Se importaron {{imported}} contactos. {{failed}} contactos no pudieron importarse.",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"Elige uno",
10341036
"search-templates": "Buscar plantillas…",
10351037
"search-documents": "Buscar documentos…",
1036-
"search-contacts": "Buscar contactos…"
1038+
"search-contacts": "Buscar contactos…",
1039+
"invalid-email-found": "Correo electrónico no válido encontrado: {{email}}",
1040+
"duplicate-email-found": "Correo electrónico duplicado encontrado: {{email}}",
1041+
"vertical": "Vertical",
1042+
"horizontal": "Horizontal",
1043+
"billing": "Facturación",
1044+
"console": "Consola"
10371045
}

apps/OpenSign/public/locales/fr/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "Faire pivoter la page",
762762
"bulk-import": "Importation en masse",
763763
"contacts-file": "Fichier de contacts (xlsx, csv)",
764+
"import-guideline": "Téléchargez un fichier CSV ou Excel avec les colonnes Name, Email et éventuellement Phone. Seuls les 100 premiers contacts seront importés.",
765+
"download-sample": "Télécharger un fichier d'exemple",
764766
"100-records-only": "Actuellement, vous ne pouvez importer que 100 enregistrements.",
765767
"csv-excel-support-only": "Veuillez télécharger un fichier dans l'un des formats suivants : CSV, XLSX ou XLS.",
766768
"contact-imported": "{{imported}} contacts ont été importés. {{failed}} contacts n'ont pas pu être importés.",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"Choisissez-en un",
10341036
"search-templates": "Rechercher des modèles…",
10351037
"search-documents": "Rechercher des documents…",
1036-
"search-contacts": "Rechercher des contacts…"
1038+
"search-contacts": "Rechercher des contacts…",
1039+
"invalid-email-found": "Adresse e-mail invalide trouvée : {{email}}",
1040+
"duplicate-email-found": "Adresse e-mail en double trouvée : {{email}}",
1041+
"vertical": "Vertical",
1042+
"horizontal": "Horizontal",
1043+
"billing": "Facturation",
1044+
"console": "Console"
10371045
}

apps/OpenSign/public/locales/hi/translation.json

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@
355355
"widgets-name": {
356356
"signature": "हस्ताक्षर",
357357
"stamp": "मोहर",
358-
"initials": "हस्ताक्षर",
358+
"initials": "प्रारंभिक अक्षर",
359359
"name": "नाम",
360360
"job title": "पद",
361361
"company": "कंपनी",
@@ -389,7 +389,7 @@
389389
"Email-verified-alert-2": "ईमेल पहले से ही सत्यापित है।",
390390
"upload-stamp-image": "मोहर छवि अपलोड करें",
391391
"draw": "आरेखित करें",
392-
"type": "प्रकार",
392+
"type": "टाइप",
393393
"color-type": {
394394
"red": "लाल",
395395
"blue": "नीला",
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "पृष्ठ घुमाएँ",
762762
"bulk-import": "थोक आयात",
763763
"contacts-file": "संपर्क फ़ाइल (xlsx, csv)",
764+
"import-guideline": "नाम, ईमेल और वैकल्पिक फोन कॉलम वाली CSV या Excel फ़ाइल अपलोड करें। केवल पहले 100 संपर्क आयात किए जाएंगे.",
765+
"download-sample": "उदाहरण फ़ाइल डाउनलोड करें",
764766
"100-records-only": "वर्तमान में आप केवल 100 रिकॉर्ड तक आयात कर सकते हैं।",
765767
"csv-excel-support-only": "निम्नलिखित प्रारूपों में से किसी एक में फ़ाइल अपलोड करें: CSV, XLSX या XLS।",
766768
"contact-imported": "{{imported}} संपर्क आयात किए गए। {{failed}} संपर्क आयात करने में विफल रहे।",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"एक का चयन",
10341036
"search-templates": "टेम्पलेट खोजें…",
10351037
"search-documents": "दस्तावेज़ खोजें…",
1036-
"search-contacts": "संपर्क खोजें…"
1038+
"search-contacts": "संपर्क खोजें…",
1039+
"invalid-email-found": "अमान्य ईमेल पाया गया: {{email}}",
1040+
"duplicate-email-found": "डुप्लिकेट ईमेल पाया गया: {{email}}",
1041+
"vertical": "वर्टिकल",
1042+
"horizontal": "हॉरिज़ॉन्टल",
1043+
"billing": "बिलिंग",
1044+
"console": "कंसोल"
10371045
}

apps/OpenSign/public/locales/it/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@
761761
"Rotation-alert": "Ruota pagina",
762762
"bulk-import": "Importazione massiva",
763763
"contacts-file": "File contatti (xlsx, csv)",
764+
"import-guideline": "Carica un file CSV o Excel con le colonne Name, Email e opzionale Phone. Verranno importati solo i primi 100 contatti.",
765+
"download-sample": "Scarica file di esempio",
764766
"100-records-only": "Attualmente puoi importare solo fino a 100 record.",
765767
"csv-excel-support-only": "Carica un file nei seguenti formati: CSV, XLSX o XLS.",
766768
"contact-imported": "{{imported}} contatti importati. {{failed}} contatti non sono stati importati.",
@@ -1033,5 +1035,11 @@
10331035
"choose-one":"Scegline uno",
10341036
"search-templates": "Cerca modelli…",
10351037
"search-documents": "Cerca documenti…",
1036-
"search-contacts": "Cerca contatti…"
1038+
"search-contacts": "Cerca contatti…",
1039+
"invalid-email-found": "Email non valida trovata: {{email}}",
1040+
"duplicate-email-found": "Email duplicata trovata: {{email}}",
1041+
"vertical": "Verticale",
1042+
"horizontal": "Orizzontale",
1043+
"billing": "Fatturazione",
1044+
"console": "Console"
10371045
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Name,Email,Phone
2+
John Doe,[email protected],1234567890
3+
Jane Smith,[email protected],9876543210
4+
Foo Bar,[email protected],5555555555

apps/OpenSign/src/components/BulkSendUi.jsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const BulkSendUi = (props) => {
1515
const [isSignatureExist, setIsSignatureExist] = useState();
1616
const [isDisableBulkSend, setIsDisableBulkSend] = useState(false);
1717
const [isLoader, setIsLoader] = useState(false);
18+
const [signers, setSigners] = useState([]);
1819
useEffect(() => {
1920
signatureExist();
2021
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -47,7 +48,14 @@ const BulkSendUi = (props) => {
4748
(() => {
4849
if (props?.Placeholders?.length > 0) {
4950
let users = [];
51+
let emails = [];
5052
props?.Placeholders?.forEach((element) => {
53+
const signerEmail = element?.email || element?.signerPtr?.Email;
54+
55+
// only add when there's a non-empty signerEmail
56+
if (signerEmail) {
57+
emails = [...emails, signerEmail];
58+
}
5159
if (!element.signerObjId) {
5260
users = [
5361
...users,
@@ -60,7 +68,10 @@ const BulkSendUi = (props) => {
6068
];
6169
}
6270
});
71+
setEmails(emails);
6372
setForms((prevForms) => [...prevForms, { Id: 1, fields: users }]);
73+
const signer = props.item?.Signers?.filter((x) => x?.objectId);
74+
setSigners(signer);
6475
}
6576
})();
6677
// eslint-disable-next-line
@@ -82,10 +93,16 @@ const BulkSendUi = (props) => {
8293

8394
function validateEmails(data) {
8495
for (const item of data) {
96+
let email = "";
8597
for (const field of item.fields) {
8698
if (!emailRegex.test(field.email)) {
87-
alert(`Invalid email found: ${field.email}`);
99+
alert(t("invalid-email-found", { email: field.email }));
100+
return false;
101+
} else if (email === field.email || emails?.includes(field.email)) {
102+
alert(t("duplicate-email-found", { email: field.email }));
88103
return false;
104+
} else {
105+
email = field.email;
89106
}
90107
}
91108
}
@@ -143,15 +160,14 @@ const BulkSendUi = (props) => {
143160
Documents.push({
144161
...props.item,
145162
Placeholders: updatedPlaceholders,
146-
Signers: props.item.Signers
147-
? [...props.item.Signers, ...existSigner]
148-
: [...existSigner]
163+
Signers: signers ? [...signers, ...existSigner] : [...existSigner]
149164
});
150165
} else {
151166
Documents.push({
152167
...props.item,
153168
Placeholders: updatedPlaceholders,
154-
SignatureType: props.signatureType
169+
SignatureType: props.signatureType,
170+
Signers: signers
155171
});
156172
}
157173
});

0 commit comments

Comments
 (0)