Skip to content

Commit 9a47d2a

Browse files
get folder id by name
1 parent f9ed95f commit 9a47d2a

File tree

4 files changed

+77
-25
lines changed

4 files changed

+77
-25
lines changed

lib/eSignature/controllers/eg045DeleteRestoreEnvelope.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
/**
22
* @file
3-
* Example 045: Delete and Restore an Envelope
3+
* Example 045: Delete and Undelete an Envelope
44
* @author DocuSign
55
*/
66

77
const path = require('path');
8-
const { moveEnvelope } = require('../examples/deleteRestoreEnvelope');
8+
const { moveEnvelope, getFolders } = require('../examples/deleteRestoreEnvelope');
99
const { getExampleByNumber } = require('../../manifestService');
1010
const dsConfig = require('../../../config/index.js').config;
11-
const { API_TYPES } = require('../../utils.js');
11+
const { API_TYPES, formatString } = require('../../utils.js');
12+
const { getFolderIdByName } = require('../getData.js');
1213

1314
const eg045DeleteRestoreEnvelope = exports;
1415
const exampleNumber = 45;
@@ -65,14 +66,14 @@ eg045DeleteRestoreEnvelope.deleteController = async (req, res) => {
6566
const additionalPageData = example.AdditionalPage.find(p => p.Name === 'envelope_is_deleted');
6667
res.render('pages/example_done', {
6768
title: example.ExampleName,
68-
message: additionalPageData.ResultsPageText,
69+
message: formatString(additionalPageData.ResultsPageText, req.body.envelopeId),
6970
redirectUrl: restoreEndpoint,
7071
});
7172
}
7273
};
7374

7475
/**
75-
* Restore the envelope
76+
* Undelete the envelope
7677
* @param {object} req Request obj
7778
* @param {object} res Response obj
7879
*/
@@ -96,12 +97,28 @@ eg045DeleteRestoreEnvelope.restoreController = async (req, res) => {
9697
folderId: restoreFolderId,
9798
fromFolderId: deleteFolderId,
9899
};
100+
const folderName = req.body.folderName;
101+
let folderId = '';
102+
103+
const example = getExampleByNumber(res.locals.manifest, exampleNumber, api);
99104

100105
// Step 2. Call the worker method
101106
let results = null;
102-
103107
try {
104-
results = await moveEnvelope(args);
108+
const folders = await getFolders(args);
109+
folderId = getFolderIdByName(folders.folders, folderName);
110+
111+
if (!folderId) {
112+
const additionalPageData = example.AdditionalPage.find(page => page.Name === 'folder_does_not_exist');
113+
return res.render('pages/example_done', {
114+
title: example.ExampleName,
115+
message: formatString(additionalPageData.ResultsPageText, folderName),
116+
redirectUrl: restoreEndpoint,
117+
});
118+
119+
}
120+
121+
results = await moveEnvelope({ ...args, folderId });
105122
} catch (error) {
106123
const errorBody = error && error.response && error.response.body;
107124
// we can pull the DocuSign error code and message from the response body
@@ -112,10 +129,9 @@ eg045DeleteRestoreEnvelope.restoreController = async (req, res) => {
112129
res.render('pages/error', {err: error, errorCode, errorMessage});
113130
}
114131
if (results) {
115-
const example = getExampleByNumber(res.locals.manifest, exampleNumber, api);
116132
res.render('pages/example_done', {
117133
title: example.ExampleName,
118-
message: example.ResultsPageText,
134+
message: formatString(example.ResultsPageText, req.session.envelopeId, folderId, folderName),
119135
});
120136
}
121137
};

lib/eSignature/examples/deleteRestoreEnvelope.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,18 @@ const moveEnvelope = async (args) => {
3232
//ds-snippet-end:eSign45Step4
3333
};
3434

35-
module.exports = { moveEnvelope };
35+
/**
36+
* Retrieves the list of folders
37+
*/
38+
const getFolders = async (args) => {
39+
const dsApiClient = new docusign.ApiClient();
40+
dsApiClient.setBasePath(args.basePath);
41+
dsApiClient.addDefaultHeader('Authorization', 'Bearer ' + args.accessToken);
42+
const foldersApi = new docusign.FoldersApi(dsApiClient);
43+
44+
//ds-snippet-start:eSign45Step5
45+
return await foldersApi.list(args.accountId);
46+
//ds-snippet-end:eSign45Step5
47+
};
48+
49+
module.exports = { moveEnvelope, getFolders };

lib/eSignature/getData.js

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
1-
const docusign = require('docusign-esign');
2-
3-
async function getUserInfo(accessToken, basePath){
4-
const apiClient = new docusign.ApiClient();
5-
apiClient.setBasePath(basePath);
6-
apiClient.addDefaultHeader('Authorization', 'Bearer ' + accessToken);
7-
8-
const userInfo = await apiClient.getUserInfo(accessToken);
9-
if (!userInfo) {
10-
throw new Exception('The user does not have access to account');
11-
}
12-
return userInfo;
13-
}
14-
15-
exports.getUserInfo = getUserInfo;
1+
const docusign = require('docusign-esign');
2+
3+
async function getUserInfo(accessToken, basePath){
4+
const apiClient = new docusign.ApiClient();
5+
apiClient.setBasePath(basePath);
6+
apiClient.addDefaultHeader('Authorization', 'Bearer ' + accessToken);
7+
8+
const userInfo = await apiClient.getUserInfo(accessToken);
9+
if (!userInfo) {
10+
throw new Exception('The user does not have access to account');
11+
}
12+
return userInfo;
13+
}
14+
15+
function getFolderIdByName(folders, folderName) {
16+
for (const folder of folders) {
17+
if (folder.name.toLowerCase() === folderName.toLowerCase()) {
18+
return folder.folderId;
19+
}
20+
21+
if (folder.folders?.length > 0) {
22+
return getFolderIdByName(folder.folders, folderName);
23+
}
24+
}
25+
}
26+
27+
module.exports = { getUserInfo, getFolderIdByName };

views/pages/examples/eg045RestoreEnvelope.ejs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
<p><%- formatString(locals.manifest.SupportingTexts.HelpingTexts.EnvelopeWillBeRestored, envelopeId) %></p>
66

77
<form class="eg" action="" method="post" data-busy="form">
8+
<% if(example.Forms && example.Forms[0].FormName) { %>
9+
<%- example.Forms[0].FormName %>
10+
<% } %>
11+
12+
<div class="form-group">
13+
<label for="folderName"><%= example.Forms[0].Inputs[1].InputName %></label>
14+
<input type="text" class="form-control" id="folderName" name="folderName"
15+
placeholder="<%= example.Forms[0].Inputs[1].InputPlaceholder %>" required>
16+
</div>
17+
818
<input type="hidden" name="_csrf" value="<%- csrfToken %>">
919
<%- include("../../partials/submitButton") %>
1020
</form>

0 commit comments

Comments
 (0)