synapse-react-client
Version:
[](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client) [](https://badge.fury.io/js/synaps
574 lines • 33.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = (0, tslib_1.__importStar)(require("react"));
var react_1 = require("react");
var ReactBootstrap = (0, tslib_1.__importStar)(require("react-bootstrap"));
var react_bootstrap_1 = require("react-bootstrap");
var SynapseClient_1 = require("../../../utils/SynapseClient");
var synapseTypes_1 = require("../../../utils/synapseTypes");
var DirectDownloadButton_1 = (0, tslib_1.__importDefault)(require("../../DirectDownloadButton"));
var FileUpload_1 = (0, tslib_1.__importDefault)(require("../../FileUpload"));
var UserSearchBox_1 = (0, tslib_1.__importDefault)(require("../../UserSearchBox"));
var UserCardSmall_1 = require("../../UserCardSmall");
var IconSvg_1 = (0, tslib_1.__importDefault)(require("../../IconSvg"));
var SynapseContext_1 = require("../../../utils/SynapseContext");
var RadioGroup_1 = require("../../widgets/RadioGroup");
var RequestDataAccessStep2 = function (props) {
var requestDataStepCallback = props.requestDataStepCallback, managedACTAccessRequirement = props.managedACTAccessRequirement, entityId = props.entityId, user = props.user, researchProjectId = props.researchProjectId;
var accessToken = (0, SynapseContext_1.useSynapseContext)().accessToken;
var _a = (0, react_1.useState)(), DUCTemplate = _a[0], setDUCTemplate = _a[1];
var _b = (0, react_1.useState)(), DUC = _b[0], setDUC = _b[1];
var _c = (0, react_1.useState)(), IRB = _c[0], setIRB = _c[1];
var _d = (0, react_1.useState)([]), attachments = _d[0], setAttachments = _d[1];
var _e = (0, react_1.useState)(), formSubmitRequestObject = _e[0], setFormSubmitRequestObject = _e[1];
var _f = (0, react_1.useState)(), alert = _f[0], setAlert = _f[1];
var _g = (0, react_1.useState)(false), isRenewal = _g[0], setIsRenewal = _g[1];
var _h = (0, react_1.useState)([]), accessors = _h[0], setAccessors = _h[1];
var requestedFileTypes = {};
var batchFileRequest = {
requestedFiles: [],
includeFileHandles: true,
includePreSignedURLs: false,
includePreviewPreSignedURLs: false,
};
var mounted = true;
(0, react_1.useEffect)(function () {
if (mounted) {
setAlert(undefined);
setFormData();
}
return function () {
mounted = false;
};
}, [accessToken, researchProjectId]);
var setFormData = function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var dataAccessRequestData, seen_1;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, SynapseClient_1.getDataAccessRequestForUpdate)(String(managedACTAccessRequirement.id), accessToken)
// SWC-5765: Filter out duplicate accessors that are in an existing Access Requirement data access request
];
case 1:
dataAccessRequestData = _a.sent();
// SWC-5765: Filter out duplicate accessors that are in an existing Access Requirement data access request
if (dataAccessRequestData.accessorChanges) {
seen_1 = new Set();
dataAccessRequestData.accessorChanges = dataAccessRequestData.accessorChanges.filter(function (accessorChange) {
return seen_1.has(accessorChange.userId) ? false : seen_1.add(accessorChange.userId);
});
}
// renewal case
if (dataAccessRequestData.concreteType === 'org.sagebionetworks.repo.model.dataaccess.Renewal') {
setIsRenewal(true);
}
// initialize form submission request object
dataAccessRequestData.researchProjectId = researchProjectId;
setFormSubmitRequestObject(dataAccessRequestData);
// get assessors' user profiles data for display and save them in the state variables
getAccessorsData(dataAccessRequestData);
// get data access required docs data to display file names
getFilesData(dataAccessRequestData);
return [2 /*return*/];
}
});
}); };
var getAccessorsData = function (dataAccessRequestData) {
var accessorChanges = dataAccessRequestData.accessorChanges;
var ids = [];
if (!accessorChanges || !accessorChanges.length) {
ids.push(user.ownerId);
// Add current user to submission request object
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
accessorChanges: [
{
userId: user.ownerId,
type: synapseTypes_1.AccessType.GAIN_ACCESS,
},
],
});
});
}
else {
accessorChanges.forEach(function (item) {
ids.push(item.userId);
});
}
var promises = ids.map(function (userId) {
return (0, SynapseClient_1.getUserProfileById)(accessToken, userId);
});
Promise.all(promises).then(function (profiles) {
var profileAndAccessType = profiles.map(function (item, i) {
var _a;
var accessType = accessorChanges && ((_a = accessorChanges[i]) === null || _a === void 0 ? void 0 : _a.type) ? accessorChanges[i].type : synapseTypes_1.AccessType.GAIN_ACCESS;
return {
profile: item,
accessType: accessType
};
});
setAccessors(profileAndAccessType);
});
};
var getFilesData = function (dataAccessRequestData) {
// Create the request objects for required documents and save them in the state variables
if (managedACTAccessRequirement.isDUCRequired &&
managedACTAccessRequirement.ducTemplateFileHandleId) {
var requestObj = {
associateObjectId: String(managedACTAccessRequirement.id),
associateObjectType: synapseTypes_1.FileHandleAssociateType.AccessRequirementAttachment,
fileHandleId: managedACTAccessRequirement.ducTemplateFileHandleId,
};
batchFileRequest.requestedFiles.push(requestObj);
if (!requestedFileTypes[managedACTAccessRequirement.ducTemplateFileHandleId]) {
requestedFileTypes[managedACTAccessRequirement.ducTemplateFileHandleId] = [];
}
requestedFileTypes[managedACTAccessRequirement.ducTemplateFileHandleId].push('DUCTemplate');
setDUCTemplate(requestObj);
}
if (managedACTAccessRequirement.isDUCRequired &&
dataAccessRequestData.ducFileHandleId) {
var requestObj = {
associateObjectId: dataAccessRequestData.id,
associateObjectType: synapseTypes_1.FileHandleAssociateType.DataAccessRequestAttachment,
fileHandleId: dataAccessRequestData.ducFileHandleId,
};
batchFileRequest.requestedFiles.push(requestObj);
if (!requestedFileTypes[dataAccessRequestData.ducFileHandleId]) {
requestedFileTypes[dataAccessRequestData.ducFileHandleId] = [];
}
requestedFileTypes[dataAccessRequestData.ducFileHandleId].push('DUC');
setDUC(requestObj);
}
if (managedACTAccessRequirement.isIRBApprovalRequired &&
dataAccessRequestData.irbFileHandleId) {
var requestObj = {
associateObjectId: dataAccessRequestData.id,
associateObjectType: synapseTypes_1.FileHandleAssociateType.DataAccessRequestAttachment,
fileHandleId: dataAccessRequestData.irbFileHandleId,
};
batchFileRequest.requestedFiles.push(requestObj);
if (!requestedFileTypes[dataAccessRequestData.irbFileHandleId]) {
requestedFileTypes[dataAccessRequestData.irbFileHandleId] = [];
}
requestedFileTypes[dataAccessRequestData.irbFileHandleId].push('IRB');
setIRB(requestObj);
}
if (dataAccessRequestData.attachments &&
dataAccessRequestData.attachments.length) {
dataAccessRequestData.attachments.forEach(function (id) {
batchFileRequest.requestedFiles.push({
associateObjectId: dataAccessRequestData.id,
associateObjectType: synapseTypes_1.FileHandleAssociateType.DataAccessRequestAttachment,
fileHandleId: id,
});
if (!requestedFileTypes[id]) {
requestedFileTypes[id] = [];
}
requestedFileTypes[id].push('attachments');
});
}
// Fetch the required doc file names and save them in the state variables
if (batchFileRequest.requestedFiles.length) {
(0, SynapseClient_1.getFiles)(batchFileRequest, accessToken).then(function (resp) {
resp.requestedFiles.forEach(function (file) {
var fileName = file.fileHandle.fileName;
var fileTypes = requestedFileTypes[file.fileHandleId];
fileTypes.forEach(function (type) {
switch (type) {
case 'DUCTemplate':
setDUCTemplate(function (prevState) {
return Object.assign({}, prevState, { fileName: fileName });
});
requestedFileTypes[file.fileHandleId].splice(fileTypes.indexOf('DUCTemplate'), 1);
break;
case 'DUC':
setDUC(function (prevState) {
return Object.assign({}, prevState, { fileName: fileName });
});
requestedFileTypes[file.fileHandleId].splice(fileTypes.indexOf('DUC'), 1);
break;
case 'IRB':
setIRB(function (prevState) {
return Object.assign({}, prevState, { fileName: fileName });
});
requestedFileTypes[file.fileHandleId].splice(fileTypes.indexOf('IRB'), 1);
break;
case 'attachments':
setAttachments(function (prev) { return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], prev, true), [
{
fileName: fileName,
associateObjectId: dataAccessRequestData.id,
associateObjectType: synapseTypes_1.FileHandleAssociateType.DataAccessRequestAttachment,
fileHandleId: file.fileHandleId,
},
], false); });
requestedFileTypes[file.fileHandleId].splice(fileTypes.indexOf('attachments'), 1);
break;
default:
}
});
});
}); // end getFiles
}
};
var handleSubmit = function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var resp_1, requestObject, submission_resp, alertMsg, e_1;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (!formSubmitRequestObject) return [3 /*break*/, 7];
_a.label = 1;
case 1:
_a.trys.push([1, 6, , 7]);
return [4 /*yield*/, (0, SynapseClient_1.updateDataAccessRequest)(formSubmitRequestObject, accessToken)];
case 2:
resp_1 = _a.sent();
if (!(resp_1 && resp_1.etag)) return [3 /*break*/, 4];
requestObject = {
requestId: resp_1.id,
requestEtag: resp_1.etag,
subjectId: entityId,
subjectType: synapseTypes_1.RestrictableObjectType.ENTITY,
};
// Update save etag
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
etag: resp_1.etag,
});
});
return [4 /*yield*/, (0, SynapseClient_1.submitDataAccessRequest)(requestObject, accessToken)];
case 3:
submission_resp = _a.sent();
alertMsg = getSubmissionMsg(submission_resp);
if (submission_resp.state === synapseTypes_1.SUBMISSION_STATE.REJECTED) {
setAlert({
key: 'danger',
message: alertMsg,
});
}
else {
// Navigate to the submission success dialog
requestDataStepCallback === null || requestDataStepCallback === void 0 ? void 0 : requestDataStepCallback({
step: 5
});
}
return [3 /*break*/, 5];
case 4:
setAlert({
key: 'danger',
message: getErrorMessage(),
});
_a.label = 5;
case 5: return [3 /*break*/, 7];
case 6:
e_1 = _a.sent();
console.log('RequestDataAccessStep2: Error updating form', e_1);
setAlert({
key: 'danger',
message: getErrorMessage(e_1.reason),
});
return [3 /*break*/, 7];
case 7: return [2 /*return*/];
}
});
}); };
var getErrorMessage = function (reason) {
if (reason === void 0) { reason = ''; }
return (React.createElement(React.Fragment, null,
React.createElement("strong", null, "Sorry, there is an error in submitting your request."),
React.createElement("br", null),
reason));
};
var getSubmissionMsg = function (submission_resp) {
var msgStart = 'The information has been ';
switch (submission_resp.state) {
case synapseTypes_1.SUBMISSION_STATE.SUBMITTED:
return React.createElement("strong", null,
msgStart,
" submitted.");
case synapseTypes_1.SUBMISSION_STATE.APPROVED:
return React.createElement("strong", null,
msgStart,
" approved.");
case synapseTypes_1.SUBMISSION_STATE.CANCELLED:
return React.createElement("strong", null,
msgStart,
" canceled.");
case synapseTypes_1.SUBMISSION_STATE.REJECTED:
return (React.createElement(React.Fragment, null,
React.createElement("strong", null,
msgStart,
" rejected."),
' ',
submission_resp.rejectedReason,
". Please close this dialog and try again later."));
default:
return React.createElement(React.Fragment, null);
}
};
var onClearAccessor = function (pid) {
// Update the view
var filtered = accessors.filter(function (item) {
return item.profile.ownerId !== pid;
});
setAccessors(filtered);
// Update form submission request object
var newAccessorChanges = filtered.map(function (item) {
return {
userId: item.profile.ownerId,
type: item.accessType
};
});
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
accessorChanges: newAccessorChanges,
});
});
};
var onClearAttachment = function (fid) {
// Update the view
var filtered = attachments.filter(function (item) { return item.fileHandleId !== fid; });
setAttachments(filtered);
// Update form submission request object
var newAttachments = filtered.map(function (item) { return item.fileHandleId; });
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
attachments: newAttachments,
});
});
};
var uploadCallback = function (data) {
if (data.context === 'attachments') {
var docs_1 = (formSubmitRequestObject === null || formSubmitRequestObject === void 0 ? void 0 : formSubmitRequestObject.attachments)
? formSubmitRequestObject === null || formSubmitRequestObject === void 0 ? void 0 : formSubmitRequestObject.attachments
: [];
docs_1 === null || docs_1 === void 0 ? void 0 : docs_1.push(data.resp.fileHandleId);
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, { attachments: docs_1 });
});
// Update the view
setAttachments(function (prev) { return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], prev, true), [
{
fileName: data.resp.fileName,
fileHandleId: data.resp.fileHandleId,
},
], false); });
}
else {
setFormSubmitRequestObject(function (prevState) {
var _a;
return Object.assign({}, prevState, (_a = {},
_a[data.context] = data.resp.fileHandleId,
_a));
});
// Update the view
if (data.context === 'ducFileHandleId') {
setDUC(function (prevState) {
return Object.assign({}, prevState, {
fileName: data.resp.fileName,
fileHandleId: data.resp.fileHandleId,
});
});
}
if (data.context === 'irbFileHandleId') {
setIRB(function (prevState) {
return Object.assign({}, prevState, {
fileName: data.resp.fileName,
fileHandleId: data.resp.fileHandleId,
});
});
}
}
};
// User search input event handler
var onSelectUserCallback = function (selected) {
var currentAccessorIds = accessors.map(function (accessor) { return accessor.profile.ownerId; });
// if user is not already in the accessor list (prevent duplicates in accessor list)
if (!currentAccessorIds.includes(selected.ownerId)) {
setAccessors(function (prev) { return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], prev, true), [
{
profile: {
ownerId: selected.ownerId,
firstName: selected.firstName,
lastName: selected.lastName,
userName: selected.userName,
},
accessType: synapseTypes_1.AccessType.GAIN_ACCESS
}
], false); });
var selectedAccessor = {
userId: selected.ownerId,
type: synapseTypes_1.AccessType.GAIN_ACCESS,
};
var accessorsArr_1 = (formSubmitRequestObject === null || formSubmitRequestObject === void 0 ? void 0 : formSubmitRequestObject.accessorChanges) || [];
accessorsArr_1.push(selectedAccessor);
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
accessorChanges: accessorsArr_1,
});
});
}
};
var handleTextAreaInputChange = function (e, id) {
var value = e.target.value;
switch (id) {
case 'publications':
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
publication: value
});
});
break;
case 'summaryOfUse':
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
summaryOfUse: value
});
});
break;
default:
}
};
// For renewal only
var onAccessorRadioBtnChange = function (accessType, userId) {
// Make the radio button appears selected when clicked.
var copy = (0, tslib_1.__spreadArray)([], accessors, true);
var index = copy.findIndex(function (item) { return item.profile.ownerId === userId; });
copy[index].accessType = accessType;
setAccessors(copy);
// Update formSubmitRequestObject
var formCopy = (formSubmitRequestObject === null || formSubmitRequestObject === void 0 ? void 0 : formSubmitRequestObject.accessorChanges) || [];
var index2 = formCopy.findIndex(function (item) { return item.userId === userId; });
formCopy[index2].type = accessType;
setFormSubmitRequestObject(function (prevState) {
return Object.assign({}, prevState, {
accessorChanges: formCopy
});
});
};
var getAccessorRequirementHelpText = function () {
var link = '';
var msg = '';
if (managedACTAccessRequirement.isCertifiedUserRequired) {
link = 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-CertifiedUsers';
msg = 'All data requesters must be a certified user.';
}
if (managedACTAccessRequirement.isValidatedProfileRequired) {
link = 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-ValidatedUsers';
msg = 'All data requesters must have a validated user profile.';
}
return link && msg ? React.createElement(React.Fragment, null,
msg,
React.createElement("a", { href: link, target: '_blank', rel: 'noreferrer' },
React.createElement(IconSvg_1.default, { options: {
icon: 'info',
} }))) : React.createElement(React.Fragment, null);
};
return (React.createElement(React.Fragment, null,
React.createElement(react_bootstrap_1.Form, { className: 'access-request-form2', onSubmit: function (e) { return e.preventDefault(); } },
React.createElement(ReactBootstrap.Modal.Header, { closeButton: true },
React.createElement(ReactBootstrap.Modal.Title, { className: "AccessRequirementList__title" }, "Request Access")),
React.createElement(ReactBootstrap.Modal.Body, null,
React.createElement("p", null, "Please provide the information below to submit the request for access."),
React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'requesters', style: { margin: '0' } }, "Data Requesters"),
React.createElement("br", null),
React.createElement("span", { className: 'requester-label' },
managedACTAccessRequirement.isDUCRequired && (React.createElement(React.Fragment, null,
"This list should match those listed on your DUC.",
React.createElement("br", null))),
getAccessorRequirementHelpText()),
React.createElement(UserSearchBox_1.default, { id: 'requesters', onSelectCallback: onSelectUserCallback, filterUserIds: accessors.map(function (user) { return user.profile.ownerId; }) })),
React.createElement(react_bootstrap_1.Form.Group, { style: { marginBottom: '4rem' } }, accessors.map(function (accessor, i) {
return (React.createElement("div", { className: 'list-items', key: "accessor-" + i },
React.createElement(UserCardSmall_1.UserCardSmall, { userProfile: accessor.profile, showAccountLevelIcon: true, disableLink: true, showFullName: true }),
// only display delete button if the user profile is other users and has not access before
(user.ownerId !== accessor.profile.ownerId) && (accessor.accessType === synapseTypes_1.AccessType.GAIN_ACCESS) && (React.createElement(react_bootstrap_1.Button, { className: 'clear-x', variant: 'link', onClick: function () { return onClearAccessor(accessor.profile.ownerId); } },
React.createElement(IconSvg_1.default, { options: { icon: 'clear' } }))),
// Renewal/Revoke data access, only display if isRenewal is true
isRenewal && (accessor.accessType !== synapseTypes_1.AccessType.GAIN_ACCESS) && (React.createElement(React.Fragment, null,
React.createElement(RadioGroup_1.RadioGroup, { id: "accessor-renewal-" + accessor.profile.ownerId, value: accessor.accessType, options: [
{
label: 'Renew',
value: synapseTypes_1.AccessType.RENEW_ACCESS
},
{
label: 'Revoke',
value: synapseTypes_1.AccessType.REVOKE_ACCESS
},
], onChange: function (value) {
return onAccessorRadioBtnChange(value, accessor.profile.ownerId);
} })))));
})),
(managedACTAccessRequirement === null || managedACTAccessRequirement === void 0 ? void 0 : managedACTAccessRequirement.isDUCRequired) && (React.createElement(React.Fragment, null,
React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'duc-temp', className: 'SRC-noMargin' }, "DUC template"),
React.createElement("br", null),
DUCTemplate && (React.createElement("div", null,
React.createElement(DirectDownloadButton_1.default, { fileHandleAssociation: {
associateObjectId: DUCTemplate === null || DUCTemplate === void 0 ? void 0 : DUCTemplate.associateObjectId,
associateObjectType: DUCTemplate.associateObjectType,
fileHandleId: DUCTemplate.fileHandleId,
}, fileName: DUCTemplate.fileName, id: 'duc-temp', variant: 'link', className: 'SRC-noPadding' })))),
React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'duc', className: 'SRC-noMargin' }, "Upload DUC"),
React.createElement("br", null),
DUC && (React.createElement("div", null,
React.createElement(DirectDownloadButton_1.default, { fileHandleAssociation: {
associateObjectId: DUC.associateObjectId,
associateObjectType: DUC.associateObjectType,
fileHandleId: DUC.fileHandleId,
}, fileName: DUC === null || DUC === void 0 ? void 0 : DUC.fileName, id: 'duc-download', variant: 'link', className: 'SRC-noPadding' }))),
React.createElement(FileUpload_1.default, { id: 'duc-browse', variant: 'light-primary-base', uploadCallback: uploadCallback, context: 'ducFileHandleId' })))),
(managedACTAccessRequirement === null || managedACTAccessRequirement === void 0 ? void 0 : managedACTAccessRequirement.isIRBApprovalRequired) && (React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'irb', className: 'SRC-noMargin' }, "Upload IRB approval"),
React.createElement("br", null),
IRB && (React.createElement("div", null,
React.createElement(DirectDownloadButton_1.default, { fileHandleAssociation: {
associateObjectId: IRB.associateObjectId,
associateObjectType: IRB.associateObjectType,
fileHandleId: IRB.fileHandleId,
}, fileName: IRB === null || IRB === void 0 ? void 0 : IRB.fileName, id: 'irb-download', variant: 'link', className: 'SRC-noPadding' }))),
React.createElement(FileUpload_1.default, { id: 'irb-browse', variant: 'light-primary-base', uploadCallback: uploadCallback, context: 'irbFileHandleId' }))),
/* Attachments */
(managedACTAccessRequirement === null || managedACTAccessRequirement === void 0 ? void 0 : managedACTAccessRequirement.areOtherAttachmentsRequired) && (React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { className: 'SRC-noMargin' }, "Upload other required documents"),
React.createElement("br", null),
attachments.map(function (attachment, i) {
return (React.createElement("div", { className: 'list-items', key: "file-attachment-" + i },
React.createElement(DirectDownloadButton_1.default, { fileHandleAssociation: {
associateObjectId: attachment.associateObjectId,
associateObjectType: attachment.associateObjectType,
fileHandleId: attachment.fileHandleId,
}, fileName: attachment === null || attachment === void 0 ? void 0 : attachment.fileName, variant: 'link', className: 'SRC-noPadding attachment-download' }),
React.createElement(react_bootstrap_1.Button, { className: 'clear-x', variant: 'link', onClick: function () {
return onClearAttachment(attachment.fileHandleId);
} },
React.createElement(IconSvg_1.default, { options: { icon: 'clear' } }))));
}),
React.createElement(FileUpload_1.default, { id: 'attachment-browse', variant: 'light-primary-base', uploadCallback: uploadCallback, context: 'attachments' }))),
isRenewal && (React.createElement(React.Fragment, null,
React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'publications', className: 'SRC-noMargin' }, "Publication(s)"),
React.createElement(react_bootstrap_1.Form.Control, { id: "publications", as: "textarea", rows: 3, onChange: function (e) {
return handleTextAreaInputChange(e, 'publications');
} })),
React.createElement(react_bootstrap_1.Form.Group, null,
React.createElement(react_bootstrap_1.Form.Label, { htmlFor: 'summaryOfUse', className: 'SRC-noMargin' }, "Summary of use"),
React.createElement(react_bootstrap_1.Form.Control, { id: "summaryOfUse", as: "textarea", rows: 3, onChange: function (e) {
return handleTextAreaInputChange(e, 'summaryOfUse');
} })))),
/* Alert message */
alert && React.createElement(react_bootstrap_1.Alert, { variant: alert.key }, alert.message)),
React.createElement(ReactBootstrap.Modal.Footer, null, React.createElement(React.Fragment, null,
React.createElement(react_bootstrap_1.Button, { variant: "link", onClick: function () {
return requestDataStepCallback === null || requestDataStepCallback === void 0 ? void 0 : requestDataStepCallback({
step: 3,
formSubmitRequestObject: formSubmitRequestObject,
});
} }, "Cancel"),
React.createElement(react_bootstrap_1.Button, { variant: "primary", onClick: function () { return handleSubmit(); } }, "Submit"))))));
};
exports.default = RequestDataAccessStep2;
//# sourceMappingURL=RequestDataAccessStep2.js.map