From dc392adc1de46282cf5bdeb87fb612daf1c97ad3 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 14 May 2024 19:19:17 +0530 Subject: [PATCH 1/2] feat: add delete folder API --- .../cloud/customRoute/v1/apiV1.js | 4 + .../customRoute/v1/routes/deleteFolder.js | 74 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js index 867607f22..ac33cff5a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -30,6 +30,7 @@ import getFolder from './routes/getFolder.js'; import createFolder from './routes/createFolder.js'; import updateFolder from './routes/updateFolder.js'; import getFolderList from './routes/getFolderList.js'; +import deleteFolder from './routes/deleteFolder.js'; dotenv.config(); const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); @@ -116,6 +117,9 @@ app.post('/createfolder', createFolder); // update folder app.put('/folder/:folder_id', updateFolder); +// get folder list +app.delete('/folder/:folder_id', deleteFolder); + // get folder app.get('/folder/:folder_id', getFolder); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js new file mode 100644 index 000000000..d443eb390 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js @@ -0,0 +1,74 @@ +export default async function deleteFolder(request, response) { + const apiToken = request.headers['x-api-token']; + const folderId = request.params.folder_id; + if (!apiToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + try { + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', apiToken); + tokenQuery.include('userId'); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const parseUser = JSON.parse(JSON.stringify(token)); + const userPtr = { + __type: 'Pointer', + className: '_User', + objectId: parseUser.userId.objectId, + }; + + const obj = new Parse.Query('contracts_Document'); + obj.equalTo('objectId', folderId); + obj.equalTo('IsArchive', true); + obj.equalTo('CreatedBy', userPtr); + const isFolderDeleted = await obj.first({ useMasterKey: true }); + if (!isFolderDeleted) { + const folder = new Parse.Query('contracts_Document'); + folder.equalTo('Folder', { + __type: 'Pointer', + className: 'contracts_Document', + objectId: folderId, + }); + + folder.notEqualTo('IsArchive', true); + folder.equalTo('CreatedBy', userPtr); + folder.equalTo('Type', 'Folder'); + const isSubItems = await folder.first({ useMasterKey: true }); + // console.log('isSubItems ', isSubItems); + if (isSubItems) { + return response + .status(400) + .json({ error: 'folder is not empty, contains document or folder.' }); + } else { + const deleteFolder = new Parse.Object('contracts_Document'); + deleteFolder.id = folderId; + deleteFolder.set('IsArchive', true); + const deleteRes = await deleteFolder.save(null, { useMasterKey: true }); + if (request.posthog) { + request.posthog?.capture({ + distinctId: parseUser.userId.email, + event: 'api_delete_folder', + properties: { response_code: 200 }, + }); + } + return response.json({ objectId: deleteRes.id, deletedAt: deleteRes.updatedAt }); + } + } else { + if (request.posthog) { + request.posthog?.capture({ + distinctId: parseUser.userId.email, + event: 'api_delete_folder', + properties: { response_code: 404 }, + }); + } + return response.status(404).json({ error: 'folder not found.' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err is delete folder API', err); + return response.status(400).json({ error: 'Something went wrong, please try again later!' }); + } +} From 067ea68d3bd28aaaa253611d9a3d051f76440264 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Wed, 15 May 2024 13:25:13 +0530 Subject: [PATCH 2/2] feat: add download button in 3 dots beside finish button --- apps/OpenSign/src/components/pdf/PdfHeader.js | 111 ++++++++++++------ 1 file changed, 72 insertions(+), 39 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/PdfHeader.js b/apps/OpenSign/src/components/pdf/PdfHeader.js index da0c45bc1..7a019ed39 100644 --- a/apps/OpenSign/src/components/pdf/PdfHeader.js +++ b/apps/OpenSign/src/components/pdf/PdfHeader.js @@ -326,7 +326,7 @@ function Header({ ) : ( -
+
{/* current signer is checking user send request and check status of pdf sign than if current user exist than show finish button else no */} @@ -334,16 +334,8 @@ function Header({ <> {decline && (
{ - handleDeclinePdfAlert(); - }} - style={{ - color: "red", - border: "none", - fontWeight: "650", - fontSize: "16px", - marginRight: "10px" - }} + onClick={() => handleDeclinePdfAlert()} + className="text-[red] border-none font-[650] text-[14px] mr-2" > Decline
@@ -355,12 +347,8 @@ function Header({ alertSendEmail(); } }} - style={{ - color: isMailSend ? "gray" : themeColor, - border: "none", - fontWeight: "650", - fontSize: "16px" - }} + className="border-none font-[650] text-[14px]" + style={{ color: isMailSend ? "gray" : themeColor }} data-tut={dataTut4} > {completeBtnTitle ? completeBtnTitle : "Send"} @@ -375,16 +363,42 @@ function Header({ embedWidgetsData(); } }} - style={{ - color: themeColor, - border: "none", - fontWeight: "650", - fontSize: "16px" - }} + style={{ color: themeColor }} + className="border-none font-[650] text-[14px]" > Finish
)} + + +
+ +
+
+ + + handleDownloadPdf()} + > + + Download + + + +
)}
@@ -457,7 +471,7 @@ function Header({ ) : isPdfRequestFiles ? ( alreadySign ? ( -
+
{isCompleted && ( + + +
+ +
+
+ + + handleDownloadPdf()} + > + + Download + + + +
)}
) ) : isCompleted ? ( -
+
{isCompleted && (