From 088ec5580ac49ffe967238910decf713c79304fc Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 30 Sep 2024 12:27:33 +0530 Subject: [PATCH 01/12] feat: add enable tour option in request signature and template form --- .../public/locales/en/translation.json | 8 ++- .../public/locales/fr/translation.json | 8 ++- .../src/components/pdf/EditTemplate.js | 60 +++++++++++++++- apps/OpenSign/src/constant/Utils.js | 3 +- apps/OpenSign/src/pages/Form.js | 69 ++++++++++++++++++- apps/OpenSign/src/pages/PdfRequestFiles.js | 5 +- .../OpenSign/src/pages/TemplatePlaceholder.js | 1 + .../src/primitives/GetReportDisplay.js | 3 +- .../src/script/locales/en/translation.json | 9 ++- .../src/script/locales/fr/translation.json | 8 ++- .../v1/routes/CreateDocumentWithTemplate.js | 4 ++ .../v1/routes/createDocumentwithCoordinate.js | 2 + .../customRoute/v1/routes/createTemplate.js | 2 + .../v1/routes/createTemplatewithCoordinate.js | 2 + .../customRoute/v1/routes/draftDocument.js | 2 + .../customRoute/v1/routes/getDocument.js | 1 + .../customRoute/v1/routes/getDocumentList.js | 1 + .../customRoute/v1/routes/getTemplate.js | 1 + .../customRoute/v1/routes/getTemplateList.js | 1 + .../customRoute/v1/routes/updateDocument.js | 6 +- .../customRoute/v1/routes/updateTemplate.js | 5 +- .../PublicUserLinkContactToDoc.js | 3 +- .../cloud/parsefunction/createBatchDocs.js | 1 + ...240926163209-add_istourenabled_doc_cjs.cjs | 29 ++++++++ 24 files changed, 219 insertions(+), 15 deletions(-) create mode 100644 apps/OpenSignServer/databases/migrations/20240926163209-add_istourenabled_doc_cjs.cjs diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index 79b1b2b65..a0be38533 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -668,6 +668,12 @@ "download-files":"Download files", "download-pdf":"Download Pdf", "pdf-certificate":"Download Pdf + Certificate", - "document-logs":"Document logs" + "document-logs":"Document logs", + "enable-tour":"Enable Tour", + "istourenabled-help":{ + "p1":"This will enable a guided tour for signers, providing instructions during the signing process.", + "p2":"This will disable the guided tour, ensuring a faster, uninterrupted signing experience.", + "p3":"Tip: If your signers are familiar with OpenSign and frequently use it, you may want to disable the guided tour for a more seamless experience. Choose the option that best fits your document signing needs." + } } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index b98d45cb0..47a618b14 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -667,6 +667,12 @@ "download-files" :"Télécharger des fichiers", "download-pdf" :"Télécharger le PDF", "pdf-certificate" :"Télécharger Pdf + Certificat", - "document-logs":"Journaux de documents" + "document-logs":"Journaux de documents", + "enable-tour": "Activer la visite", + "istourenabled-otp-help":{ + "p1": "Cela permettra une visite guidée pour les signataires, fournissant des instructions pendant le processus de signature.", + "p2": "Cela désactivera la visite guidée, garantissant ainsi une expérience de signature plus rapide et ininterrompue.", + "p3": "Conseil : si vos signataires connaissent OpenSign et l'utilisent fréquemment, vous souhaiterez peut-être désactiver la visite guidée pour une expérience plus fluide. Choisissez l'option qui correspond le mieux à vos besoins en matière de signature de documents." + } } diff --git a/apps/OpenSign/src/components/pdf/EditTemplate.js b/apps/OpenSign/src/components/pdf/EditTemplate.js index 713906fa8..735ac2a9e 100644 --- a/apps/OpenSign/src/components/pdf/EditTemplate.js +++ b/apps/OpenSign/src/components/pdf/EditTemplate.js @@ -17,7 +17,10 @@ const EditTemplate = ({ template, onSuccess }) => { SendinOrder: template?.SendinOrder ? `${template?.SendinOrder}` : "false", AutomaticReminders: template?.AutomaticReminders || false, RemindOnceInEvery: template?.RemindOnceInEvery || 5, - IsEnableOTP: template?.IsEnableOTP ? `${template?.IsEnableOTP}` : "false" + IsEnableOTP: template?.IsEnableOTP ? `${template?.IsEnableOTP}` : "false", + IsTourEnabled: template?.IsTourEnabled + ? `${template?.IsTourEnabled}` + : "false" }); const [isSubscribe, setIsSubscribe] = useState(false); useEffect(() => { @@ -43,6 +46,7 @@ const EditTemplate = ({ template, onSuccess }) => { e.preventDefault(); e.stopPropagation(); const isChecked = formData.SendinOrder === "true" ? true : false; + const isTourEnabled = formData?.IsTourEnabled === "false" ? false : true; const AutoReminder = formData?.AutomaticReminders || false; const IsEnableOTP = formData.IsEnableOTP === "true" ? true : false; let reminderDate = {}; @@ -56,6 +60,7 @@ const EditTemplate = ({ template, onSuccess }) => { ...formData, SendinOrder: isChecked, IsEnableOTP: IsEnableOTP, + IsTourEnabled: isTourEnabled, ...reminderDate }; onSuccess(data); @@ -256,6 +261,59 @@ const EditTemplate = ({ template, onSuccess }) => { )} + +
+ +
+ +
{t("yes")}
+
+
+ +
{t("no")}
+
+
)} +
+ +
+ +
{t("yes")}
+
+
+ +
{t("no")}
+
+
)} diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index ea6fa89f4..a2127fea3 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -421,6 +421,8 @@ function PdfRequestFiles(props) { const expireUpdateDate = new Date(expireDate).getTime(); const currDate = new Date().getTime(); const getSigners = documentData[0].Signers; + const isTourEnabled = + documentData[0]?.IsTourEnabled === true ? true : false; const getCurrentSigner = getSigners?.find( (data) => data.UserId.objectId === jsonSender?.objectId ); @@ -596,7 +598,8 @@ function PdfRequestFiles(props) { checkAlreadySign || !currUserId || declined || - currDate > expireUpdateDate + currDate > expireUpdateDate || + !isTourEnabled ) { setRequestSignTour(true); } else { diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index 42d0fbd9c..0dbf96c51 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -781,6 +781,7 @@ const TemplatePlaceholder = () => { RemindOnceInEvery: parseInt(pdfDetails[0]?.RemindOnceInEvery), NextReminderDate: pdfDetails[0]?.NextReminderDate, IsEnableOTP: pdfDetails[0]?.IsEnableOTP === true ? true : false, + IsTourEnabled: pdfDetails[0]?.IsTourEnabled === true ? true : false, URL: pdfUrl }; const updateTemplate = new Parse.Object("contracts_Template"); diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 8e3d305dd..8c58ad10d 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -273,7 +273,8 @@ const ReportTable = (props) => { SendinOrder: Doc?.SendinOrder || false, AutomaticReminders: Doc?.AutomaticReminders || false, RemindOnceInEvery: Doc?.RemindOnceInEvery || 5, - IsEnableOTP: Doc?.IsEnableOTP || false + IsEnableOTP: Doc?.IsEnableOTP || false, + IsTourEnabled: Doc?.IsTourEnabled || false }; try { const res = await axios.post( diff --git a/apps/OpenSign/src/script/locales/en/translation.json b/apps/OpenSign/src/script/locales/en/translation.json index 36cdae714..a0be38533 100644 --- a/apps/OpenSign/src/script/locales/en/translation.json +++ b/apps/OpenSign/src/script/locales/en/translation.json @@ -668,5 +668,12 @@ "download-files":"Download files", "download-pdf":"Download Pdf", "pdf-certificate":"Download Pdf + Certificate", - "document-logs":"Document logs" + "document-logs":"Document logs", + "enable-tour":"Enable Tour", + "istourenabled-help":{ + "p1":"This will enable a guided tour for signers, providing instructions during the signing process.", + "p2":"This will disable the guided tour, ensuring a faster, uninterrupted signing experience.", + "p3":"Tip: If your signers are familiar with OpenSign and frequently use it, you may want to disable the guided tour for a more seamless experience. Choose the option that best fits your document signing needs." + } + } diff --git a/apps/OpenSign/src/script/locales/fr/translation.json b/apps/OpenSign/src/script/locales/fr/translation.json index b98d45cb0..47a618b14 100644 --- a/apps/OpenSign/src/script/locales/fr/translation.json +++ b/apps/OpenSign/src/script/locales/fr/translation.json @@ -667,6 +667,12 @@ "download-files" :"Télécharger des fichiers", "download-pdf" :"Télécharger le PDF", "pdf-certificate" :"Télécharger Pdf + Certificat", - "document-logs":"Journaux de documents" + "document-logs":"Journaux de documents", + "enable-tour": "Activer la visite", + "istourenabled-otp-help":{ + "p1": "Cela permettra une visite guidée pour les signataires, fournissant des instructions pendant le processus de signature.", + "p2": "Cela désactivera la visite guidée, garantissant ainsi une expérience de signature plus rapide et ininterrompue.", + "p3": "Conseil : si vos signataires connaissent OpenSign et l'utilisent fréquemment, vous souhaiterez peut-être désactiver la visite guidée pour une expérience plus fluide. Choisissez l'option qui correspond le mieux à vos besoins en matière de signature de documents." + } } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index ec344b130..1bf615786 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -198,6 +198,10 @@ export default async function createDocumentWithTemplate(request, response) { } const enableOTP = request.body?.enableOTP === true ? true : false; const IsEnableOTP = enableOTP || template?.IsEnableOTP || false; + const enableTour = request.body?.enableOTP; + const isTourEnabled = + enableTour !== undefined ? enableTour : template?.IsTourEnabled || false; + object.set('IsTourEnabled', isTourEnabled); object.set('IsEnableOTP', IsEnableOTP); object.set('CreatedBy', template.CreatedBy); object.set('ExtUserPtr', { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index 29404049c..dc86e3ced 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -64,6 +64,7 @@ export default async function createDocumentwithCoordinate(request, response) { const sendInOrder = request.body.sendInOrder || false; const TimeToCompleteDays = request.body.timeToCompleteDays || 15; const IsEnableOTP = request.body?.enableOTP === true ? true : false; + const isTourEnabled = request.body?.enableTour || false; // console.log('fileData ', fileData); const protocol = customAPIurl(); const baseUrl = new URL(process.env.PUBLIC_URL); @@ -164,6 +165,7 @@ export default async function createDocumentwithCoordinate(request, response) { object.set('TimeToCompleteDays', TimeToCompleteDays); } object.set('IsEnableOTP', IsEnableOTP); + object.set('IsTourEnabled', isTourEnabled); object.set('IsSendMail', send_email); let contact = []; if (signers && signers.length > 0) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js index ad9462ca3..b03b84219 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js @@ -10,6 +10,7 @@ export default async function createTemplate(request, response) { const fileData = request.files?.[0] ? request.files[0].buffer : null; const baseUrl = new URL(process.env.PUBLIC_URL); const isEnableOTP = request.body?.enableOTP === true ? true : false; + const isTourEnabled = request.body?.enableTour || false; try { const reqToken = request.headers['x-api-token']; @@ -67,6 +68,7 @@ export default async function createTemplate(request, response) { object.set('CreatedBy', userPtr); object.set('ExtUserPtr', extUserPtr); object.set('IsEnableOTP', isEnableOTP); + object.set('IsTourEnabled', isTourEnabled); if (SendinOrder) { object.set('SendinOrder', SendinOrder); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js index ebbbd0a60..a7a57227e 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js @@ -18,6 +18,7 @@ export default async function createTemplatewithCoordinate(request, response) { const fileData = request.files?.[0] ? request.files[0].buffer : null; const SendinOrder = request.body.sendInOrder || false; const isEnableOTP = request.body?.enableOTP === true ? true : false; + const isTourEnabled = request.body?.enableTour || false; // console.log('fileData ', fileData); const protocol = customAPIurl(); @@ -83,6 +84,7 @@ export default async function createTemplatewithCoordinate(request, response) { object.set('CreatedBy', userPtr); object.set('ExtUserPtr', extUserPtr); object.set('IsEnableOTP', isEnableOTP); + object.set('IsTourEnabled', isTourEnabled); let contact = []; if (signers && signers.length > 0) { let parseSigners; diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/draftDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/draftDocument.js index 2673d262c..9a04bbbfd 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/draftDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/draftDocument.js @@ -13,6 +13,7 @@ export default async function draftDocument(request, response) { const fileData = request.files?.[0] ? request.files[0].buffer : null; const SendinOrder = request.body.sendInOrder || false; const isEnableOTP = request.body?.enableOTP === true ? true : false; + const isTourEnabled = request.body?.enableTour || false; // console.log('fileData ', fileData); const protocol = customAPIurl(); @@ -86,6 +87,7 @@ export default async function draftDocument(request, response) { object.set('ExtUserPtr', extUserPtr); object.set('IsSendMail', send_email); object.set('IsEnableOTP', isEnableOTP); + object.set('IsTourEnabled', isTourEnabled); if (signers && signers.length > 0) { let parseSigners; if (base64File) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js index 5f2150293..12751a62d 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js @@ -65,6 +65,7 @@ export default async function getDocument(request, response) { enableOTP: document?.IsEnableOTP || false, createdAt: document.createdAt, updatedAt: document.updatedAt, + enableTour: document?.IsTourEnabled || false, }); } else { if (request.posthog) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js index a25e7bd2f..d98e939f4 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js @@ -103,6 +103,7 @@ export default async function getDocumentList(request, response) { enableOTP: x?.IsEnableOTP || false, createdAt: x.createdAt, updatedAt: x.updatedAt, + enableTour: x?.IsTourEnabled || false, })); return response.json({ result: updateRes }); } else { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js index 43a0ec966..a6377915b 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js @@ -64,6 +64,7 @@ export default async function getTemplate(request, response) { enableOTP: template?.IsEnableOTP || false, createdAt: template.createdAt, updatedAt: template.updatedAt, + enableTour: template?.IsTourEnabled || false, }); } else { if (request.posthog) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js index dcf05ae60..b4f1274fe 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js @@ -91,6 +91,7 @@ export default async function getTemplatetList(request, response) { enableOTP: template?.IsEnableOTP || false, createdAt: template.createdAt, updatedAt: template.updatedAt, + enableTour: template?.IsTourEnabled || false, })); return response.json({ result: updateRes }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js index 81a3fa5d3..48a145128 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js @@ -10,7 +10,7 @@ export default async function updateDocument(request, response) { const token = await tokenQuery.first({ useMasterKey: true }); if (token !== undefined) { // Valid Token then proceed request - const allowedKeys = ['name', 'note', 'description', 'folderId', 'enableOTP']; + const allowedKeys = ['name', 'note', 'description', 'folderId', 'enableOTP', 'enableTour']; const objectKeys = Object.keys(request.body); const isValid = objectKeys.every(key => allowedKeys.includes(key)) && objectKeys.length > 0; const parseUser = JSON.parse(JSON.stringify(token)); @@ -48,10 +48,12 @@ export default async function updateDocument(request, response) { objectId: request?.body?.folderId, }); } - if (request.body?.enableOTP) { updateQuery.set('IsEnableOTP', request.body?.enableOTP); } + if (request.body?.enableTour !== undefined) { + updateQuery.set('IsTourEnabled', request.body?.enableTour); + } const updatedRes = await updateQuery.save(null, { useMasterKey: true }); if (updatedRes) { if (request.posthog) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js index 735e699aa..6d3f35463 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js @@ -10,7 +10,7 @@ export default async function updateTemplate(request, response) { const token = await tokenQuery.first({ useMasterKey: true }); if (token !== undefined) { // Valid Token then proceed request - const allowedKeys = ['name', 'note', 'description', 'folderId', 'enableOTP']; + const allowedKeys = ['name', 'note', 'description', 'folderId', 'enableOTP', 'enableTour']; const objectKeys = Object.keys(request.body); const isValid = objectKeys.every(key => allowedKeys.includes(key)) && objectKeys.length > 0; const parseUser = JSON.parse(JSON.stringify(token)); @@ -51,6 +51,9 @@ export default async function updateTemplate(request, response) { if (request.body?.enableOTP) { updateQuery.set('IsEnableOTP', request.body?.enableOTP); } + if (request.body?.enableTour !== undefined) { + updateQuery.set('IsTourEnabled', request.body?.enableTour); + } const updatedRes = await updateQuery.save(null, { useMasterKey: true }); if (updatedRes) { if (request.posthog) { diff --git a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js index 0b103d83b..b20087832 100644 --- a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js +++ b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js @@ -55,7 +55,7 @@ const createDocumentFromTemplate = async (template, existContact, index) => { object.set('Description', template?.Description); object.set('Note', template?.Note); object.set('TimeToCompleteDays', template?.TimeToCompleteDays || 15); - object.set('SendinOrder', template?.SendinOrder); + object.set('SendinOrder', template?.SendinOrder || false); object.set('AutomaticReminders', template?.AutomaticReminders || false); object.set('RemindOnceInEvery', template?.RemindOnceInEvery || 5); object.set('URL', template?.URL); @@ -63,6 +63,7 @@ const createDocumentFromTemplate = async (template, existContact, index) => { object.set('ExtUserPtr', template?.ExtUserPtr); object.set('OriginIp', template?.OriginIp || ''); object.set('IsEnableOTP', template?.IsEnableOTP || false); + object.set('IsTourEnabled', template?.IsTourEnabled || false); let signers = template?.Signers || []; const signerobj = { __type: 'Pointer', diff --git a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js index 3df13cc65..4a6ab0999 100644 --- a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js +++ b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js @@ -201,6 +201,7 @@ export default async function createBatchDocs(request) { OriginIp: Ip, DocSentAt: { __type: 'Date', iso: isoDate }, IsEnableOTP: x?.IsEnableOTP || false, + IsTourEnabled: x?.IsTourEnabled || false, }, }; }); diff --git a/apps/OpenSignServer/databases/migrations/20240926163209-add_istourenabled_doc_cjs.cjs b/apps/OpenSignServer/databases/migrations/20240926163209-add_istourenabled_doc_cjs.cjs new file mode 100644 index 000000000..9270be17e --- /dev/null +++ b/apps/OpenSignServer/databases/migrations/20240926163209-add_istourenabled_doc_cjs.cjs @@ -0,0 +1,29 @@ +/** + * + * @param {Parse} Parse + */ +exports.up = async (Parse) => { + const templateSchema = new Parse.Schema('contracts_Template'); + templateSchema.addBoolean('IsTourEnabled'); + await templateSchema.update(); + + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.addBoolean('IsTourEnabled'); + return schema.update(); +}; + +/** + * + * @param {Parse} Parse + */ +exports.down = async (Parse) => { + const templateSchema = new Parse.Schema('contracts_Template'); + templateSchema.deleteField('IsTourEnabled'); + await templateSchema.update(); + + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.deleteField('IsTourEnabled'); + return schema.update(); +}; From 85ad7ca187327fa7d9ebec47e67dce60fdc6fed1 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 30 Sep 2024 17:20:31 +0530 Subject: [PATCH 02/12] feat: re-design form layout --- .../public/locales/en/translation.json | 4 +- .../public/locales/fr/translation.json | 4 +- apps/OpenSign/src/pages/Form.js | 386 ++++++++++-------- .../src/script/locales/en/translation.json | 14 +- .../src/script/locales/fr/translation.json | 4 +- 5 files changed, 233 insertions(+), 179 deletions(-) diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index 12345eecb..20329737c 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -678,6 +678,8 @@ "p1":"This will enable a guided tour for signers, providing instructions during the signing process.", "p2":"This will disable the guided tour, ensuring a faster, uninterrupted signing experience.", "p3":"Tip: If your signers are familiar with OpenSign and frequently use it, you may want to disable the guided tour for a more seamless experience. Choose the option that best fits your document signing needs." - } + }, + "form-title-1":"Document Flow Setting", + "form-title-2":"Security Setting" } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index d6dbfc8e3..724de893d 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -677,7 +677,9 @@ "p1": "Cela permettra une visite guidée pour les signataires, fournissant des instructions pendant le processus de signature.", "p2": "Cela désactivera la visite guidée, garantissant ainsi une expérience de signature plus rapide et ininterrompue.", "p3": "Conseil : si vos signataires connaissent OpenSign et l'utilisent fréquemment, vous souhaiterez peut-être désactiver la visite guidée pour une expérience plus fluide. Choisissez l'option qui correspond le mieux à vos besoins en matière de signature de documents." - } + }, + "form-title-1": "Paramètre du flux de documents", + "form-title-2": "Paramètre de sécurité" } diff --git a/apps/OpenSign/src/pages/Form.js b/apps/OpenSign/src/pages/Form.js index 43c0df362..61b446da0 100644 --- a/apps/OpenSign/src/pages/Form.js +++ b/apps/OpenSign/src/pages/Form.js @@ -81,7 +81,6 @@ const Forms = (props) => { const [isDecrypting, setIsDecrypting] = useState(false); const [isCorrectPass, setIsCorrectPass] = useState(true); const [isSubscribe, setIsSubscribe] = useState(false); - const [isAdvanceOpt, setIsAdvanceOpt] = useState(false); const handleStrInput = (e) => { setIsCorrectPass(true); setFormData({ ...formData, [e.target.name]: e.target.value }); @@ -792,92 +791,24 @@ const Forms = (props) => { required /> - {props.title !== "New Template" && ( + {props.title === "Sign Yourself" ? ( - )} - {props.title !== "Sign Yourself" && ( -
- -
- -
{t("yes")}
-
-
- -
{t("no")}
-
-
- )} - {isAdvanceOpt && ( -
- {props.title === "Request Signatures" && ( -
- - handleStrInput(e)} - onInvalid={(e) => - e.target.setCustomValidity(t("input-required")) - } - onInput={(e) => e.target.setCustomValidity("")} - required + ) : ( +
+
+ {props.title !== "New Template" ? ( + -
- )} - {props.title !== "Sign Yourself" && ( - <> - {isEnableSubscription && ( -
+ ) : ( + <> +
{t("auto-reminder")}{" "} {!isSubscribe && isEnableSubscription && } @@ -897,8 +828,134 @@ const Forms = (props) => { />
+ + {formData?.autoreminder === true && ( +
+ + + e.target.setCustomValidity(t("input-required")) + } + onInput={(e) => e.target.setCustomValidity("")} + required + /> +
+ )} + + )} + + {t("form-title-1")} + +
+ +
+
+ +
{t("yes")}
+
+
+ +
{t("no")}
+
+
+
+ +
+ {props.title === "Request Signatures" && ( +
+ + handleStrInput(e)} + onInvalid={(e) => + e.target.setCustomValidity(t("input-required")) + } + onInput={(e) => e.target.setCustomValidity("")} + required + /> +
)} - {formData?.autoreminder === true && ( +
+
+
+ {isEnableSubscription && props.title !== "New Template" && ( +
+ + {t("auto-reminder")}{" "} + {!isSubscribe && isEnableSubscription && } + + +
+ )} + {formData?.autoreminder === true && + props.title !== "New Template" && (
)} - {isEnableSubscription && ( -
- + {t("form-title-2")} + {isEnableSubscription && ( +
+ +
{
{t("no")}
- )} -
- +
+ )} +
+ +
{
{t("no")}
- - )} -
- )} - {props.title !== "Sign Yourself" && ( -
setIsAdvanceOpt(!isAdvanceOpt)} - className={`mt-2.5 op-link op-link-primary text-sm`} - > - {isAdvanceOpt - ? t("hide-advanced-options") - : t("advanced-options")} +
+
)} +