{"version":3,"sources":["components/Errors/AwafError.jsx","services/logService.js","services/authService.js","services/httpService.js","services/applicationService.js","components/ChatComponent.js","components/Footer.jsx","components/Errors/AppAccessDenied.jsx","components/Errors/Error.jsx","components/Errors/DeadlineError.jsx","components/Errors/Error404.jsx","components/Errors/AuthenticationFail.jsx","components/About.jsx","components/HowToSubmit.jsx","components/ContactUs.jsx","components/Faq.jsx","components/Errors/AccountLocked.jsx","components/NameTag.jsx","components/NavMenu.jsx","services/analytics.js","components/BannerHeader.jsx","components/secure/SessionExpireModal.jsx","components/secure/NavMenuAuthenticated.jsx","components/secure/BannerHeaderSecure.jsx","components/common/siteMaintenanceBanner.jsx","components/common/browserCheckBanner.jsx","components/common/supportNoticeBanner.jsx","components/Layout.jsx","components/secure/LayoutSecure.jsx","components/LoginSection.jsx","enums/SolicitationType.js","components/SolicitationListSections.jsx","components/common/input.jsx","enums/RecordStatus.js","components/common/DateTimeConversionMethods.jsx","services/solicitationService.js","enums/HTTPStatusCodes.js","components/secure/SolicitationDelegateStaffModal.jsx","utilities/UrlUtility.js","services/fileService.js","components/secure/SolicitationTaskOrderDownloadsModal.jsx","components/SolicitationList.jsx","components/common/constants.jsx","components/common/sidebar.jsx","components/secure/SolicitationFilter.jsx","components/Home.jsx","components/FetchData.js","components/common/fileUpload.jsx","components/common/select.jsx","components/common/textArea.jsx","components/common/dateInput.jsx","components/common/form.jsx","components/common/dataColumn.jsx","components/secure/SolicitationHeader.jsx","services/submitProposalService.js","components/secure/progressModal.jsx","components/secure/SubmitProposal.jsx","components/secure/SubmitSpecialProposal.jsx","components/secure/ProposalSubmissionSuccessModal.jsx","components/secure/ReviseProposal.jsx","components/Counter.js","components/LoginForm.jsx","components/Logout.jsx","components/common/protectedRoute.jsx","components/secure/EditSolicitationSideBar.jsx","components/common/toggleButton.jsx","components/common/checkInput.jsx","components/secure/Proposal.jsx","components/secure/Solicitation.jsx","components/secure/StaffManagement.jsx","services/urlService.js","components/OtpLogin.jsx","components/common/ErrorRedirect.jsx","services/submissionHistoryService.js","components/secure/SubmissionHistoryFilter.jsx","components/secure/ProposalSubmissionHistory.jsx","components/secure/SolicitationSubmissionHistory.jsx","components/secure/SubmissionHistory.jsx","App.js","registerServiceWorker.js","index.js"],"names":["AwafError","Component","constructor","props","super","this","state","supportId","localStorage","getItem","config","awafTk","componentDidMount","render","React","createElement","className","href","Footer","logIt","async","level","message","body","https","post","getCurrentUser","userJson","ecpsExternalCurrentUser_Key","JSON","parse","ex","isTokenRefreshed","ecpsExternalIsAccessTokenRefreshed_Key","login","then","response","otpIdToken","otpUser","data","otpUserJson","stringify","setItem","ecpsExternalIdToken_Key","date","Date","getTime","ecpsExtTokenCreation_Key","logout","idToken","removeItem","ecpsExtRefreshInProgress_Key","params","getUserRoles","icRoles","user","Object","keys","forEach","key","res","split","length","len","i","t","push","refreshToken","status","onRefreshing","onRefreshedError","onAwafError","indexOf","matches","replace","match","logger","val","m","test","isValid","Promise","window","location","err","Error","statusCode","name","reject","axios","interceptors","request","use","url","setTimeout","currentDate","tokenCreationJson","minDiff","inProgress","shouldRefresh","authService","error","expectedError","resolve","isLoginUrl","isRefreshUrl","onRefreshed","catch","get","put","delete","cancelToken","CancelToken","getSiteMaintenanceSetting","getSupportBannerSetting","getAsureChatGptSettings","ChatContainer","styled","div","MessageContainer","InputContainer","ChatComponent","chat","setChat","useState","enableChatSetting","setChatSetting","display","setDisplay","input","setInput","messages","setMessages","showChat","setShowChat","handleShowChat","el","document","getElementById","ol","il","classList","add","remove","chatGPTWelcome","content","role","prevMessages","useEffect","adjustViewPort","scrollTop","scrollHeight","getChatSettings","resp","Service","id","onClick","type","aria-label","aria-hidden","handleCloseChat","onSubmit","e","preventDefault","newMessage","chatGPTThinking","amount","getElementsByClassName","children","scrollBy","stream","fetch","method","headers","responseStream","getReader","decoder","TextDecoder","accumulatedMessage","buffer","done","value","read","decode","lines","filter","line","trim","endsWith","pop","console","log","startsWith","_json$choices$","_json$choices$$delta","json","substring","choices","delta","chatGPTResponse","slice","map","index","Markdown","onChange","target","placeholder","Fragment","alt","rel","src","hidden","accessDeniedStyle","backgroundColor","margin","padding","borderRadius","AppAccessDenied","style","DeadlineError","marginTop","Error404","invalidAppUser","AuthenticationFail","About","Paper","HowToSubmit","ContactUs","Faq","faqData","Accordion","AccordionSummary","expandIcon","aria-controls","summary","AccordionDetails","dangerouslySetInnerHTML","__html","AccountLocked","NavMenu","toggleNavbar","bind","collapsed","navCollapse","setState","username","data-toggle","data-target","aria-expanded","Link","to","_NavMenu","displayName","analytics","trackingTimeStamps","environments","prod","qa","stage","dev","detectEnvironment","environment","host","toLowerCase","String","gaKey","setTimestamp","getTimestamp","initGoogleAnalytics","callback","scriptElement","setAttribute","onload","appendChild","addScript","dataLayer","gtag","arguments","initAnalytics","trackPageView","trackPage","trackEvent","options","category","action","label","trackTiming","timeStamp","trackError","description","fatal","BannerHeader","SessionExpireModal","Dialog","disableBackdropClick","disableEscapeKeyDown","aria-labelledby","aria-describedby","open","showModal","onClose","handleClose","fullWidth","maxWidth","DialogTitle","DialogContent","DialogActions","Button","handleLogout","handleRefresh","NavMenuAuthenticated","timeout","ecpsExternal_UserInactiveTimeoutInMinutes","timeout_modalInactive","ecpsExternal_ModalInactiveTimeoutInMinutes","timeout_userInactive","userLoggedIn","isTimedOut","eventsToTrack","idleTimer","onAction","_onAction","onActive","_onActive","onIdle","_onIdle","reset","IdleTimer","ref","events","debounce","_NavMenuAuthenticated","BannerHeaderSecure","icSelectHandler","trg","selectedIcRole","getIcRole","reload","idx","selectedRole","selectChanged","componentWillMount","auth","defaultIcRole","componentWillReceiveProps","nextProps","updatedIcRole","userName","firstName","lastName","NavLink","tag","SiteMaintenanceBanner","showBanner","closeBanner","maintenanceMessage","BrowserCheckBanner","showCheck","closeCheck","SupportNoticeBanner","supportNoticeBannerMessage","isIE","navigator","userAgent","Layout","selectChangedH2","icRoleSelector","siteMaintenance","supportBanner","applicationService","renderSiteMaintenanceBanner","isActive","siteMaintenanceMessage","renderSupportBanner","supportBannerMessage","renderBannerHeader","icTrigger","renderNavMenu","FirstName","LastName","Email","marginBottom","marginLeft","marginRight","_Layout","LayoutSecure","_LayoutSecure","LoginSection","redirectToOTP","tabIndex","SolicitationType","Base","RTOP","Other","ARPA","sectionNonSpecialInvite","obj","sol","noticeTypeName","solicitationTypeId","renderSamUrl","renderInvitedAttachmentsButtons","solicitationTitle","isUserLoggedIn","solicitationID","handleOpenStaff","taskAreaContractID","scope","data-label","primaryPoc","solicitationTargetIcAgency","solicitationTargetIC","responseDeadlineDateString","responseDeadlineTimeString","sectionSpecialInvite","renderSpecialInvitedAttachmentsButtons","paddingRight","specialInvites","baseProposalId","fontSize","opacity","paddingLeft","baseProposal","proposalName","Input","_ref","required","isDisabled","inputSize","onInput","data-shrink","htmlFor","aria-invalid","defaultValue","RecordStatus","NEW","EDITABLE","DELETED","READ_ONLY","getDate","dt","toLocaleDateString","getDateEt","moment","tz","format","getTimeHhMm","toLocaleTimeString","lastIndexOf","getTimeHhMmSs","getTimeHhMmWithTimeZone","getTimeHhMmWithTimeZoneEt","getTimeHhMmWithTimeZoneString","getDateTimeWithTimeZone","d","getDateIso","dateTimeStr","isNaN","getFullYear","getMonth","getSolicitations","search","sortBy","dateStart","setFullYear","closingDateStartStr","DateTime","closingDateStart","parsed","originalclosingDateStart","dateEnd","closingDateEndStr","closingDateEnd","searchQuery","institute","agency","keyword","sortByQuery","getDropDownListForSolicitation","icId","saveSolicitation","icid","solicitation","ActiveIc","getSolicitation","solId","getProposalById","proposalId","editSolicitation","getInstituteList","getSolicitationAttachments","solicitationId","getSolicitationDelegateStaff","saveSolicitationDelegateStaff","dto","HTTPStatusCodes","SUCCESS","DelegateStaffModal","inputHandler","delegateStaff","delegateStaffUser","find","u","includes","email","formData","handleDelegateStaffChange","vendorOrgName","errors","loading","save","close","addNewDelegateStaff","createInitialState","delegateStaffLoading","delegateStaffErrors","getLastUserIndex","newUser","createNewUser","newDelegateStaff","users","deleteDelegateStaffUser","updatedDelegateStaffUsers","getUpdatedDelegateStaff","getUpdatedErrors","handleDelegateStaffErrorsChange","deletedUserIndex","updatedDelegateStaff","updateIndexes","toast","updatedErrors","items","deletedIndex","item","handleCloseStaff","handleDelegateStaffLoadingChange","validateDelegateStaff","getDelegateStaffDto","solicitationService","result","success","taskAreaContractId","schema","Joi","array","object","string","toValidate","validate","abortEarly","detail","details","errObj","fieldName","path","checkDuplicateEmails","duplicateEmailUsers","parentState","selectedSolicitationId","selectedTaskAreaContractID","ds","getErrorMessage","propertyName","renderDelegateStaffUserRow","isEmailDisabled","height","renderDelegateStaffUserCell","renderDeleteStaffUserCell","labelPrefix","placeholderText","renderDelegateStaffHeaderCell","header","loader","delegateStaffModal","colSpan","getUrl","area","handleDownload","filename","responseType","getDownloadUrl","RtopAttachmentsModal","showDownloadProgress","showDownloadAllProgress","downloadAttachmentId","downloadFile","fileDbId","fileName","UrlUtility","fileService","fileDownload","downloadAllAttachments","renderAttachment","attachment","position","fileSize","dateAdded","renderAttachmentGroup","attachmentGroup","subHeading","time","rtopAttachments","rtopAttachmentGroups","hasAttachmentGroups","rtopAttachmentsModal","handleCloseRtop","selectedSolicitationTitle","disabled","SolicitationList","isSaving","assign","delegateStaffWithStatus","roleName","delegateStaffData","openRolePanel","openUserList","ldapUserList","handleOpenRtop","solicitationTypeClass","setPageNumber","currentPage","resultsPerPage","frontEndPagination","mode","solicitationNumber","samUrl","totalPages","Math","ceil","solList","startIndex","endIndex","solsCurrentPage","updatePage","event","newPageNumber","documentElement","Pagination","count","page","ShowSidebar","ShowEditSolicitationSidebar","MaxContentSizeAllowed","NotAllowed","MaxContentSizeLimitExceeded","TechPdf","HumanPdf","BusinessPdf","BusinessExcel","NonRDBusinessDocs","sidebar","searchInfo","stateChangeComplete","defaultFields","getDefaultSearchFields","getEstDate","theDate","getUTCHours","getTimezoneOffset","getEDTEndDate","getEDTBeginDate","toDateString","institutes","allIcsDdList","getMinDate","initStartDate","n","isSidebarShown","setDefaultSearchInfo","fetchInstituteList","resetSearchFields","onSortBy","getInstitutesCorrespondingToAgency","nihIcsDdList","sbirIcsDdList","days","testDt","month","day","getDay","dates","_Object$keys","toggleSidebar","cToAgent","zIndex","maxLength","MuiPickersUtilsProvider","utils","DateFnsUtils","KeyboardDatePicker","KeyboardButtonProps","InputProps","disableUnderline","minDate","showTodayButton","clearable","SolicitationFilter","isToggleOn","handleClickInvited","isBaseSolicitation","isToggleOnResult","filterClick","Home","defaultSearchInfo","populateSolicitations","handleSortBy","sortSolicitationList","redirect","source","sols","currentCount","filterBaseSolicitation","filterSolicitations","_mounted","solicitations","stack","sortedSols","_","orderBy","filterResult","noSolFoundLanguage","top","left","Sidebar","_Home","FetchData","forecasts","populateWeatherData","forecast","temperatureC","temperatureF","contents","renderForecastsTable","_FetchData","FileUpload","onFileChange","selectedFile","files","isFileUploading","totalUploadedFileSize","isFileUploaded","fileDelete","uploadedFileDbId","uploadedFileGuid","uploadResult","fileUpload","constants","fileSizeError","IsFileAlreadySubmitted","onFileDelete","defaultFile","onFileDownload","isReviseUrl","componentDidUpdate","prevProps","isDownloadAllowed","undefined","renderDownloadButton","deleteButton","errorMessage","round","tabindex","accept","Select","isRequired","option","TextArea","rows","DateInput","Form","validateProperty","handleSubmit","doSubmit","handleChange","_ref2","currentTarget","handleDateChange","renderButton","renderSelect","renderInput","renderTextArea","renderDateInput","HtmlTooltip","withStyles","theme","tooltip","color","border","flexDirection","arrow","Tooltip","DataColumn","valueChecker","dataDecider","text","reviewStatus","title","reviewName","SolicitationHeader","newProps","_headerInfo$samUrl","headerInfo","isBaseSol","responseDeadlineDateStr","responseDeadlineTimeStr","noticeType","primaryCs","globalCancellation","postSubmitGateway","buttonType","cancelSubmission","token","getSolProposalSubmissionData","getSpecialSolProposalSubmissionData","specialInviteId","getSolProposalSubmissionDataByProposalID","postSubmitProposalFileUpload","pageGuid","onUploadProgress","progressEvent","loaded","getPageHeaderInfo","getSpecialPageHeaderInfo","vendorContactInfo","postSubmitProposalFileDelete","fileGuid","postSubmitProposal","submissionType","proposal","surroundingState","endPoint","actionType","cancel","filesToUpload","FormData","uploadedFiles","newFile","file","fileType","uploadedFileChanges","append","selectedFastTrackValue","selectedPhase2Value","Array","from","startCountDown","percentCompleted","total","loadedAmount","countdownInterval","backEndStatus","setInterval","clearInterval","setLoadedAmount","postUpdateProposal","File","GetReviseProposalData","guid","isGUID","uuid","s","ProgressModal","selectedValue","progressBar","width","SubmitProposal","solicitationIsRD","isTechPdfLoaded","isBusinessPdfLoaded","techPdfRequired","businessPdfRequired","isError","businessDocFiles","element","isLoaded","newThis","submitProposalService","history","pathname","showProposalSubmissionSuccessModal","toString","warning","setopenProgressModal","openProgressModal","onCancelUploading","setFastTrack","checkedValue","setPhase2","businessExcelFiles","businessExcelFileCount","businessDocFileCount","pageError","previousBusinessDocFileLoaded","previousBusinessExcelFileLoaded","uploadedFileTotalSize","isRequiredDocumentsUploaded","techPdfValidationError","businessPdfValidationError","humanPdfValidationError","showRadioButtons","newItemInput","buyItems","onFileUpload","addBusinessDoc","addBusinessExcelDoc","onBusinessExcelFileUpload","onBusinessExcelFileDelete","onBusinessDocFileUpload","onBusinessDocFileDelete","deleteFileFromTemp","verifyAllBusinessDocUpload","isAllBusDocUploaded","fileObjToDelete","o","uploadedFilesFiltered","size","isReplace","businessExcelFilesFiltered","businessDocFilesFiltered","objIndex","findIndex","totalSizeAfterUpload","validExts","fileExt","_solicitation$icId","_solicitation$solicit","toUpperCase","resetOptions","submitDisabled","checked","dynamicClass","solicitationEnableOther","uploading","modalType","SubmitSpecialProposal","ProposalSubmissionSuccessModal","responseDeadlineDateLongStr","confirmationModal","proposalModifiedDateStr","proposalModifiedTimeStr","proposalModifiedDateLongStr","ReviseProposal","loadPage","getPageHeaderWithVendorContactInfo","fetchedBusinessExcelFiles","f","defaultFileName","businessExcelFileIndex","businessDocFileIndex","originalSelectedFastTrackValue","originalSelectedPhase2Value","originalProposalName","submitHistory","historyLogs","createBrowserHistory","handleOpen","changedDocumentIds","showDownloadButton","proposalData","newSelf","refreshPage","isPdf","historyText","ph","proposalLogComment","filesFromComment","oldFile","newValue","totalUploadedFileChangesSize","onFileReplace","docId","objToRemove","updateStateForFileChanges","removeBusinessExcelDoc","removeBusinessDocFile","businessDocToRemove","isRedirectedFromSubmitProposal","checkSubmitDisabled","_this$state$uploadedF","_this$state$uploadedF2","_this$state$uploadedF3","_this$state$uploadedF4","_this$state$uploadedF5","_this$state$uploadedF6","_this$state$uploadedF7","_this$state$uploadedF8","_this$state$uploadedF9","isSubmitDisabled","specialInvite","vendor","phone","maxHeight","proposalLogDateStr","proposalLogTimeStr","Counter","incrementCounter","aria-live","_Counter","Logout","logoutUrl","datadogRum","removeUser","ProtectedRoute","component","Route","Redirect","customStyles","right","bottom","transform","Modal","setAppElement","StaffManagement","openModal","afterOpenModal","subtitle","closeModal","isOpen","onAfterOpen","onRequestClose","contentLabel","_subtitle","str","query","substr","part","decodeURIComponent","OtpLogin","authenticated","hash","UrlService","accTk","access_token","id_token","reserved","getSubmissionHistoryData","SubmissionHistoryFilter","setFilter","filterName","activeFilter","setActiveFilter","solicitationsSubmittedTo","solicitationsSubmitted","openSolicitationCount","submittedProposals","ProposalSubmissionHistory","expanded","handleRevise","proposalCreateDateString","proposalCreateTimeString","isRd","SolicitationSubmissionHistory","currentTime","_this$props$solicitat","_this$props$solicitat2","_this$props$solicitat3","solicitationProposals","responseDeadline","solicitationResponseDeadline","_sol$solicitationProp","_sol$solicitationProp2","_sol$solicitationProp3","_sol$solicitationProp4","_sol$solicitationProp5","_sol$solicitationProp6","_sol$solicitationProp7","_sol$solicitationProp8","fontWeight","data-parent","SubmissionHistory","isFilter","filterSolicitationSubmissions","filterModel","currentFilterModel","solSubmissions","solicitationsFiltered","filteredSolicitations","submissionHistoryService","domain","env","rumStart","startSessionReplayRecording","App","routes","ToastContainer","autoClose","Switch","MySolicitations","exact","init","applicationId","clientToken","site","service","project","sampleRate","premiumSampleRate","trackInteractions","defaultPrivacyLevel","beforeSend","context","_context$response$hea","_context$response","resource","responseHeaders","xhrresponse","xhr","addRumGlobalContext","setUser","appId","plan","_App","Boolean","hostname","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","BrowserRouter","basename","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b111d315.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\nimport config from \"../../config.json\";\r\n\r\nclass AwafError extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            /*supportId: this.props.match.params.id?.toString()*/\r\n            supportId: localStorage.getItem(config.awafTk)\r\n        };\r\n    }\r\n\r\n    componentDidMount() {\r\n        //localStorage.removeItem(config.awafTk);\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content\">\r\n                        <div className=\"tile-section contact-section\">\r\n                            <h2> Request Rejected </h2>\r\n                            {this.state.supportId && (\r\n                                <div>\r\n                                    <p>\r\n                                        The requested URL was rejected. Please contact\r\n                                        <a href=\"mailto:NIAIDeCPSeRDSSupport@niaid.nih.gov\"> NIAIDeCPSeRDSSupport@niaid.nih.gov </a>\r\n                                        with the Support ID information.\r\n                                    </p>\r\n\r\n                                    <p>\r\n                                        Your support ID is: {this.state.supportId}\r\n                                    </p>\r\n                                </div>\r\n                                )\r\n                            }\r\n\r\n                            {!this.state.supportId && (\r\n                                <div>\r\n                                    <p>\r\n                                        The requested URL was rejected. Please contact\r\n                                        <a href=\"mailto:NIAIDeCPSeRDSSupport@niaid.nih.gov\"> NIAIDeCPSeRDSSupport@niaid.nih.gov. </a>\r\n                                    </p>\r\n                                </div>\r\n                                )\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer/>\r\n            </div>\r\n);\r\n}\r\n};\r\n\r\nexport default AwafError;","import https from \"./httpService\";\r\n\r\nexport async function logIt(level, message) {\r\n    const body = { level: level, message: message };\r\n    return https.post(\"/api/application/LogIt\", body);\r\n}\r\n\r\nexport default {\r\n    logIt: logIt\r\n};\r\n","import React from \"react\";\r\nimport JwtDecode from \"jwt-decode\";\r\nimport { Redirect } from \"react-router\";\r\nimport { toast } from \"react-toastify\";\r\nimport https from \"./httpService\";\r\nimport {\r\n    ecpsExternalAccessToken_Key,\r\n    ecpsExternalRefreshToken_Key,\r\n    ecpsExtTokenCreation_Key,\r\n    ecpsExtRefreshInProgress_Key,\r\n    ecpsExternalIdToken_Key,\r\n    ecpsExternalIsAccessTokenRefreshed_Key,\r\n    ecpsExternalCurrentUser_Key\r\n} from \"../config.json\";\r\n\r\nexport async function login(body) {\r\n    return (\r\n    https.post(\"/otp/callback\", body)\r\n        .then((response) => {\r\n            const { otpIdToken, otpUser } = response.data;\r\n            var otpUserJson = JSON.stringify(otpUser);\r\n            localStorage.setItem(ecpsExternalIdToken_Key, otpIdToken);\r\n            localStorage.setItem(ecpsExternalCurrentUser_Key, otpUserJson);\r\n\r\n            let newDate = new Date();\r\n            let date = newDate.getTime();\r\n            localStorage.setItem(ecpsExtTokenCreation_Key, JSON.stringify(date));\r\n\r\n            return response;\r\n        })\r\n    );\r\n }\r\n\r\nexport async function refreshToken() {\r\n    try {\r\n   \r\n        const response = await https.post(\"/otp/refresh\"); \r\n \r\n        const { otpIdToken, otpUser } = response.data;\r\n        var otpUserJson = JSON.stringify(otpUser);\r\n        localStorage.setItem(ecpsExternalIdToken_Key, otpIdToken);\r\n        localStorage.setItem(ecpsExternalCurrentUser_Key, otpUserJson);\r\n\r\n        localStorage.removeItem(ecpsExtTokenCreation_Key);\r\n\r\n        localStorage.setItem(ecpsExternalIsAccessTokenRefreshed_Key, \"true\");\r\n      \r\n        let newDate = new Date();\r\n        let date = newDate.getTime();\r\n        localStorage.setItem(ecpsExtTokenCreation_Key, JSON.stringify(date));\r\n        localStorage.removeItem(ecpsExtRefreshInProgress_Key);\r\n    } catch (ex) {\r\n      if (ex.response && ex.response.status === 401) {\r\n      if (isTokenRefreshed()) {\r\n          localStorage.removeItem(ecpsExternalIsAccessTokenRefreshed_Key);\r\n      }\r\n\r\n      if (localStorage.getItem(ecpsExtRefreshInProgress_Key)) {\r\n          localStorage.removeItem(ecpsExtRefreshInProgress_Key);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport async function logout() {\r\n    const idToken = localStorage.getItem(ecpsExternalIdToken_Key);\r\n\r\n    localStorage.removeItem(ecpsExternalIdToken_Key);\r\n    localStorage.removeItem(ecpsExtTokenCreation_Key);\r\n    if (isTokenRefreshed()) {\r\n        localStorage.removeItem(ecpsExternalIsAccessTokenRefreshed_Key);\r\n    }\r\n    localStorage.removeItem(ecpsExternalCurrentUser_Key);\r\n    if (localStorage.getItem(ecpsExtRefreshInProgress_Key)) {\r\n        localStorage.removeItem(ecpsExtRefreshInProgress_Key);\r\n    }\r\n    return await https.post(\"/logoutOtp\", null, { params: { idToken } } );\r\n}\r\n\r\nexport function getCurrentUser() {\r\n    try {\r\n        var userJson = localStorage.getItem(ecpsExternalCurrentUser_Key);\r\n        if (userJson) {\r\n            return JSON.parse(userJson);\r\n        }\r\n        return null;\r\n    } catch (ex) {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport function getUserRoles() {\r\n    var icRoles = [];\r\n    try {\r\n        const user = getCurrentUser();\r\n        Object.keys(user).forEach(function (key) {\r\n            let res = key.split(\"/\");\r\n            if (res.length > 1) {\r\n                if (res[res.length - 1] === 'role') {\r\n                    var len = user[key].length;\r\n                    for (var i = 0; i < len; i++) {\r\n                        var t = JSON.parse(user[key][i]);\r\n                        icRoles.push(t);                    \r\n                    }\r\n                }\r\n            }\r\n        });\r\n    } catch (ex) {\r\n        \r\n    }\r\n\r\n    if (icRoles.length === 0) {\r\n        icRoles = JSON.parse('[{\"icid\": \"\", \"role\": \"\"}]');\r\n    }\r\n\r\n    return icRoles;\r\n}\r\n\r\n/* export function getJwt() {\r\n  return localStorage.getItem(\"accessToken\");\r\n} */\r\n\r\nexport function isTokenRefreshed() {\r\n    return localStorage.getItem(ecpsExternalIsAccessTokenRefreshed_Key);\r\n}\r\n\r\nexport default {\r\n    login,\r\n    logout,\r\n    getCurrentUser,\r\n    getUserRoles,\r\n    refreshToken,\r\n    isTokenRefreshed,\r\n};\r\n","import axios from \"axios\";\r\n//import { toast } from \"react-toastify\";\r\n//import auth from \"./authService\";\r\nimport { ecpsExtTokenCreation_Key, ecpsExtRefreshInProgress_Key } from \"../config.json\";\r\nimport AwafError from \"../components/Errors/AwafError\";\r\nimport logger from \"./logService\";\r\nimport config from \"../config.json\";\r\n\r\nimport {\r\n    ecpsExternalIdToken_Key,\r\n    ecpsExternalAccessToken_Key,\r\n    ecpsExternalRefreshToken_Key,\r\n    ecpsExternalIsAccessTokenRefreshed_Key,\r\n    ecpsExternalCurrentUser_Key\r\n} from \"../config.json\";\r\nimport authService from \"./authService\";\r\n\r\nfunction shouldRefresh() {\r\n    let newDate = new Date();\r\n    let currentDate = newDate.getTime();\r\n\r\n    const tokenCreationJson = localStorage.getItem(ecpsExtTokenCreation_Key);\r\n    var tokenCreation = tokenCreationJson ? new Date(JSON.parse(tokenCreationJson)).getTime() : currentDate;\r\n\r\n    var minDiff = (currentDate - tokenCreation) / 60 / 1000; //in minutes\r\n    var inProgress = localStorage.getItem(ecpsExtRefreshInProgress_Key);\r\n\r\n    return (minDiff > 40 && (inProgress == null || inProgress !== \"true\"));\r\n}\r\n\r\nfunction isInRefreshing() {\r\n    return localStorage.getItem(ecpsExtRefreshInProgress_Key) === \"true\";\r\n}\r\n\r\nfunction onRefreshing() {\r\n    localStorage.setItem(ecpsExtRefreshInProgress_Key, \"true\");\r\n}\r\n\r\nfunction onRefreshed() {\r\n    let newDate = new Date();\r\n    let date = newDate.getTime();\r\n    localStorage.setItem(ecpsExtTokenCreation_Key, JSON.stringify(date));\r\n    localStorage.removeItem(ecpsExtRefreshInProgress_Key);\r\n}\r\n\r\nfunction onRefreshedError() {\r\n    if (localStorage.getItem(ecpsExtRefreshInProgress_Key)) {\r\n        localStorage.removeItem(ecpsExtRefreshInProgress_Key);\r\n    }\r\n}\r\n\r\nfunction isValid(m) {\r\n\tlet val = m;\r\n    let isnum = /^\\d+$/.test(val);\r\n    if (isnum === true) return val;\r\n    else return '0';\r\n}\r\n\r\nasync function onAwafError(response) {\r\n    try {\r\n        //localStorage.removeItem(config.awafTk);\r\n        if (response.data.indexOf(\"Request Rejected\") >= 0 &&\r\n            response.data.indexOf(\"with the Support ID information\") >= 0) {\r\n            var str = response.data.replace(/<[^>]*>/g, \"\");\r\n            var matches = str.match(/\\d+/g);\r\n\r\n            if (matches.length > 0) {\r\n                await logger.logIt(\"ERROR\", \"AWAF Error Support ID \" + matches[0]);\r\n                let val = isValid(matches[0]);\r\n\r\n                if (val !== '0') {\r\n                    localStorage.setItem(config.awafTk, val);\r\n                }\r\n            } else {\r\n                await logger.logIt(\"ERROR\", \"AWAF Error with undetermined Support ID\");\r\n            }\r\n\r\n            var _ = new Promise(() => { window.location = \"/AwafError/\"; });\r\n            var err = new Error(\"AWAF Error\");\r\n            err.statusCode = 9999;\r\n            err.name = \"AWAF Blocked\";\r\n            return Promise.reject(err);\r\n        }\r\n        return false;\r\n    } catch (ex) {\r\n        //Let it pass for other expected response.\r\n        return false;\r\n    }\r\n}\r\n\r\naxios.interceptors.request.use(async function (config) {\r\n  //  config.headers.Authorization = \r\n  //      \"Bearer \" + localStorage.getItem(ecpsExternalAccessToken_Key);\r\n  return config;\r\n});\r\n\r\naxios.interceptors.response.use(async (response) => {\r\n    await onAwafError(response);\r\n    const noError = response.status === 200;\r\n    if (noError && response.config.url.indexOf(\"SiteMaintenanceSetting\") < 1\r\n        && response.config.url.indexOf(\"/otp/\") < 1\r\n        && response.config.url.indexOf(\"refresh\") < 1) {\r\n\r\n        //var random = Math.floor(Math.random() * 20) * 100; // to eliminate parallel execution possibilities\r\n\r\n        setTimeout(function () {\r\n            if (shouldRefresh()) {\r\n                onRefreshing();\r\n                authService.refreshToken();\r\n            }\r\n        }, 2000);\r\n    }\r\n    \r\n    return response;\r\n}, async (error) => {\r\n    await onAwafError(error.response);\r\n    const expectedError = error.response && error.response.status === 401;\r\n    if (!error.response || error.response.status !== 401) {\r\n        return new Promise((resolve, reject) => {\r\n            reject(error);\r\n        });\r\n    }\r\n\r\n    var isLoginUrl = error.config.url.indexOf('otp/callback') >= 0;\r\n    var isRefreshUrl = error.config.url.indexOf('refresh') > 0;\r\n\r\n    if (expectedError && !isRefreshUrl && !isLoginUrl) {\r\n        onRefreshing();\r\n        return axios.post(\"/otp/refresh\") \r\n        .then((response) => {\r\n            const { otpIdToken, otpUser } = response.data;\r\n            var otpUserJson = JSON.stringify(otpUser);\r\n            localStorage.setItem(ecpsExternalIdToken_Key, otpIdToken);\r\n            localStorage.setItem(ecpsExternalCurrentUser_Key, otpUserJson);\r\n\r\n            localStorage.setItem(ecpsExternalIsAccessTokenRefreshed_Key, \"true\");\r\n            onRefreshed();\r\n\r\n            const config = error.config;\r\n            return new Promise((resolve, reject) => {\r\n                axios.request(config).then(response => {\r\n                    resolve(response);\r\n                }).catch((ex) => {\r\n                    authService.logout();\r\n                    onRefreshedError();\r\n                    window.location = '/';\r\n                })\r\n            });\r\n        })\r\n            .catch((ex) => {\r\n            authService.logout();\r\n            onRefreshedError();\r\n            window.location = '/';\r\n        });\r\n    }\r\n    return Promise.reject(error);\r\n});\r\n\r\nexport default {\r\n    get: axios.get,\r\n    post: axios.post,\r\n    put: axios.put,\r\n    request: axios.request,\r\n    delete: axios.delete,\r\n    cancelToken: axios.CancelToken\r\n};\r\n","import https from \"./httpService\";\r\n\r\nexport async function getSiteMaintenanceSetting() {\r\n    return https.get(\"api/application/SiteMaintenanceSetting\");\r\n}\r\nexport async function getSupportBannerSetting() {\r\n    return https.get(\"api/application/SupportBannerSetting\");\r\n}\r\n\r\nexport async function getEnableChat() {\r\n    return https.get(\"GetEnableChat\");\r\n}\r\n\r\nexport default {\r\n    getSiteMaintenanceSetting: getSiteMaintenanceSetting,\r\n    getSupportBannerSetting: getSupportBannerSetting,\r\n    getAsureChatGptSettings: getEnableChat\r\n};","// ChatComponent.js\r\n\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport axios from 'axios';\r\nimport styled from 'styled-components';\r\n\r\nimport Markdown from 'react-markdown';\r\nimport Service from '../services/applicationService';\r\n\r\nconst ChatContainer = styled.div`\r\n  max-width: 70%;\r\n  margin: auto;\r\n  padding: 10px 20px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n`;\r\n\r\nconst MessageContainer = styled.div`\r\n  margin-bottom: 10px;\r\n`;\r\n\r\nconst InputContainer = styled.div`\r\n  display: flex;\r\n  margin-top: 20px;\r\n\r\n  input {\r\n    flex: 1;\r\n    padding: 8px;\r\n    border: 1px solid #ccc;\r\n    border-radius: 4px;\r\n    margin-right: 10px;\r\n  }\r\n\r\n  button {\r\n    background-color: #006AE6;\r\n    color: #fff;\r\n    padding: 8px 12px;\r\n    border: none;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n  }\r\n`;\r\n\r\n\r\n\r\nconst ChatComponent = () => {\r\n    const [chat, setChat] = useState(false);\r\n    const [enableChatSetting, setChatSetting] = useState(-1);\r\n    const [display, setDisplay] = useState('none');\r\n    const [input, setInput] = useState('');\r\n    const [messages, setMessages] = useState([]);\r\n    const [showChat, setShowChat] = useState(false);\r\n\r\n    const adjustViewPort = () => {\r\n        var content = document.getElementById('container-message');\r\n        if (content == null) return;\r\n        content.scrollTop = content.scrollHeight;\r\n    }\r\n\r\n    const nudgeViewPort = (amount) => {\r\n        var content = document.getElementById('chatContainer');\r\n        content.scrollBy(0, amount);\r\n    } \r\n\r\n    const adjustWindow = () => {\r\n        window.scrollTo(0, document.body.scrollHeight);\r\n    }\r\n\r\n    const handleShowChat = () => {\r\n        const el = document.getElementById(\"chatContainer\");\r\n        const ol = document.getElementById(\"container-chat\");\r\n        const il = document.getElementById(\"chatTrigger\");\r\n        if (chat === true) {\r\n            setChat(false);\r\n            setDisplay('none');\r\n            el.classList.add('hide-chat');\r\n            ol.classList.add('hide-chat');\r\n            il.classList.remove('hide-button');\r\n        } else if (chat === false) {\r\n            setChat(true);\r\n            setDisplay('block');\r\n            el.classList.remove('hide-chat');\r\n            ol.classList.remove('hide-chat');\r\n            il.classList.add('hide-button');\r\n        }\r\n\r\n        const chatGPTWelcome = {\r\n            content: 'Please ask your questions about eCPS portal.',\r\n            role: 'assistant',\r\n        };\r\n\r\n        if (messages.length === 0) {\r\n            setMessages((prevMessages) => [chatGPTWelcome]);\r\n        } else {\r\n            setMessages((prevMessages) => [...prevMessages]);\r\n        }\r\n\r\n        //setMessages((prevMessages) => [...prevMessages, chatGPTWelcome]);\r\n    }\r\n\r\n    const handleMinimizeChat = () => {\r\n        const el = document.getElementById(\"chatContainer\");\r\n        const ol = document.getElementById(\"container-chat\");\r\n        const il = document.getElementById(\"chatTrigger\");\r\n        if (chat === true) {\r\n            setChat(false);\r\n            setDisplay('none');\r\n            el.classList.add('hide-chat');\r\n            ol.classList.add('hide-chat');\r\n            il.classList.remove('hide-button');\r\n        } else if (chat === false) {\r\n            setChat(true);\r\n            setDisplay('block');\r\n            el.classList.remove('hide-chat');\r\n            ol.classList.remove('hide-chat');\r\n            il.classList.add('hide-button');\r\n        }\r\n        setMessages((prevMessages) => [...prevMessages]);\r\n    }\r\n\r\n    const handleCloseChat = () => {\r\n        const el = document.getElementById(\"chatContainer\");\r\n        const ol = document.getElementById(\"container-chat\");\r\n        const il = document.getElementById(\"chatTrigger\");\r\n        if (chat === true) {\r\n            setChat(false);\r\n            setDisplay('none');\r\n            el.classList.add('hide-chat');\r\n            ol.classList.add('hide-chat');\r\n            il.classList.remove('hide-button');\r\n        } else if (chat === false) {\r\n            setChat(true);\r\n            setDisplay('block');\r\n            el.classList.remove('hide-chat');\r\n            ol.classList.remove('hide-chat');\r\n            il.classList.add('hide-button');\r\n        }\r\n\r\n        const chatGPTWelcome = {\r\n            content: 'Please ask your questions about eCPS portal.',\r\n            role: 'assistant',\r\n        };\r\n        setMessages((prevMessages) => [chatGPTWelcome]);\r\n    }\r\n\r\n    useEffect(() => {\r\n        adjustViewPort();\r\n        getChatSettings();\r\n    }, [messages]);\r\n\r\n    const handleInputChange = (e) => {\r\n        setInput(e.target.value);\r\n    };\r\n\r\n    const getChatSettings = async () => {\r\n        if (enableChatSetting === -1) {\r\n            var resp = await Service.getAsureChatGptSettings();\r\n            if (resp.status === 200) {\r\n                setChatSetting(200);\r\n                setShowChat(resp.data);\r\n            }\r\n        }\r\n        else {\r\n            setChatSetting('0');\r\n        }\r\n    }\r\n\r\n    const showLoading = () => {\r\n        setTimeout(() => {\r\n            //console.log('show loading');\r\n            const parentElement = document.getElementsByClassName('chat-admin')[0];\r\n            const childElement = parentElement.children[0];\r\n            childElement.classList.add('thinking');\r\n        }, 100);\r\n    }\r\n\r\n    const hideLoading = () => {\r\n        //console.log('hide loading');\r\n        const parentElement = document.getElementsByClassName('thinking')[0];\r\n        parentElement.classList.remove('thinking');\r\n    }\r\n\r\n    const handleSendMessage = async (e) => {\r\n\r\n        e.preventDefault();\r\n        const newMessage = {\r\n            content: input,\r\n            role: \"user\",\r\n        };\r\n        setMessages((prevMessages) => [...prevMessages, newMessage]);\r\n\r\n        const chatGPTThinking = {\r\n            content: \"Thinking \",\r\n            role: \"chat-admin\",\r\n        };\r\n        showLoading();\r\n        nudgeViewPort(100);\r\n        setMessages((prevMessages) => [...prevMessages, chatGPTThinking]);        \r\n\r\n        const proxyUrl = 'api/chat/SendMessage/'; // Update with your API URL\r\n\r\n\r\n        const body = {\r\n            messages: [\r\n                {\r\n                    role: 'system',\r\n                    content: \"You are a helpful assistant tasked with answering user questions based on the FAQ and user manual provided. Your goal is to provide accurate, concise, and clear responses. Do not include any references, citations in your responses under any circumstances.\"\r\n                },\r\n                {\r\n                    role: 'user',\r\n                    content: input + \". Answer the question clearly, but do not include any references or citations in your response.\"\r\n                },\r\n            ],\r\n            stream: true\r\n        };\r\n\r\n        try {\r\n            const response = await fetch(proxyUrl, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                },\r\n                body: JSON.stringify(body),\r\n            });\r\n\r\n            const responseStream = await response.body.getReader();\r\n            const decoder = new TextDecoder('utf-8');\r\n            let accumulatedMessage = '';\r\n            let buffer = '';\r\n\r\n            hideLoading();\r\n\r\n            while (true) {\r\n                const { done, value } = await responseStream.read();\r\n                if (done) break;\r\n\r\n                const chunk = decoder.decode(value, { stream: true });\r\n                buffer += chunk;\r\n                const lines = buffer.split('\\n').filter(line => line.trim());\r\n\r\n                if (!buffer.endsWith('\\n')) {\r\n                    buffer = lines.pop() || '';\r\n                } else {\r\n                    buffer = '';\r\n                }\r\n\r\n                for (const line of lines) {\r\n                    if (line.trim() === 'data: [DONE]') {\r\n                        console.log('[DONE] - Stream completed');\r\n                        return;\r\n                    }\r\n\r\n                    if (line.startsWith('data: ')) {\r\n                        try {\r\n                            const json = JSON.parse(line.substring(6));\r\n\r\n                            if (json.choices && json.choices[0]?.delta?.content) {\r\n                                accumulatedMessage += json.choices[0].delta.content;\r\n\r\n                                const chatGPTResponse = {\r\n                                    content: accumulatedMessage,\r\n                                    role: 'assistant',\r\n                                };\r\n                                setMessages((prevMessages) => [\r\n                                    ...prevMessages.slice(0, -1),\r\n                                    chatGPTResponse,\r\n                                ]);\r\n                                setInput('');\r\n                            }\r\n                        } catch (error) {\r\n                            console.error('Error parsing JSON:', error);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error('Error:', error);\r\n            const chatGPTResponse = {\r\n                content: 'An error occurred while processing the request.',\r\n                role: 'assistant',\r\n            };\r\n        }\r\n        setInput('');\r\n    };\r\n\r\n    \r\n    if (!showChat) {\r\n        return (<></>);\r\n    }\r\n    return (\r\n        <div className=\"container-chat hide-chat\" id='container-chat'>\r\n            <button className=\"btn chat-trigger float-trigger\" id=\"chatTrigger\" onClick={() => { handleShowChat() }}>\r\n                <div><span>Chat with the eCPS</span>AI Assistant</div>                \r\n            </button>\r\n            <div className=\"overall-chat-container\">\r\n                <div className=\"chat-header\"><div>eCPS<span>AI Assistant</span></div>\r\n                    <button type=\"button\" className=\"close minimize\" onClick={() => { handleShowChat() }} aria-label=\"Minimize\">\r\n                        <span aria-hidden=\"true\">&mdash;</span>\r\n                    </button>\r\n                    <button type=\"button\" className=\"close\" onClick={() => { handleCloseChat() }} aria-label=\"Close\">\r\n                        <span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                </div>\r\n                <form onSubmit={handleSendMessage}>\r\n                    <ChatContainer className='hide-chat' id='chatContainer'>\r\n                        <div id=\"container-message\">\r\n                            {messages.map((message, index) => (\r\n                                <MessageContainer id='messageContainer' key={index} className={message.role} >\r\n                                    <Markdown>{message.content}</Markdown>\r\n                                </MessageContainer>\r\n                            ))}\r\n                        </div>\r\n                        <InputContainer id='inputContainer' >\r\n                            <input type=\"text\" value={input} onChange={handleInputChange} placeholder=\"Ask a question\" />\r\n                            <button type=\"submit\">Send</button>\r\n                        </InputContainer>\r\n                    </ChatContainer>\r\n                </form>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default ChatComponent;","import React, { Component } from \"react\";\r\n// import auth from \"../services/authService\";\r\nimport preval from 'preval.macro';\r\nimport ChatComponent from './ChatComponent';\r\n\r\nclass Footer extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        //this.state = {\r\n        //    showComponent:true\r\n        //};\r\n    }\r\n\r\n    // <img src=\"images/logo-hhs-gray.svg\" alt=\"Logo HHS\" className=\"logo-footer-hhs\" />\r\n    // <img src=\"images/logo-nih-mark-gray.svg\" alt=\"Logo NIH\" className=\"logo-footer-nih\" />\r\n    // <img src=\"images/logo-usagov-gray.svg\" alt=\"Logo HHS\" className=\"logo-footer-usagov\" />\r\n\r\n    render() {\r\n        return (\r\n            <div className=\"container-footer\">\r\n                {<ChatComponent /> }                \r\n                <div className=\"footer\">\r\n                    <div className=\"container-fluid\">\r\n                        <div className=\"row\">\r\n                            <div className=\"col-xl-12\">\r\n                                <div className=\"footer-logos\">\r\n                                    <a href=\"https://www.hhs.gov/\" alt=\"www.hhs.gov\" aria-label=\"visit HHS.gov\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"images/logo-hhs-gray.svg\" className=\"logo-footer-hhs\" alt=\"National Institutes of Health (NIH) Logo\" /></a>\r\n                                    <a href=\"https://www.nih.gov/\" alt=\"www.nih.gov\" aria-label=\"visit NIH.gov\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"images/logo-nih-mark-gray.svg\" alt=\"Logo NIH\" className=\"logo-footer-nih\" /></a>\r\n                                    <a href=\"https://www.usa.gov/\" alt=\"www.usa.gov\" aria-label=\"visit USA.gov\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"images/logo-usagov-gray.svg\" alt=\"Logo HHS\" className=\"logo-footer-usagov\" /></a>\r\n                                </div>\r\n                                <div className=\"footer-text\">\r\n                                    <div className=\"footer-content\">\r\n                                        <div className=\"req-links\">\r\n                                            <a href=\"https://www.hhs.gov/vulnerability-disclosure-policy/index.html\" alt=\"view Vulnerability Disclosure Policy\" target=\"_blank\" rel=\"noopener noreferrer\">HHS Vulnerabillity Disclosure Policy </a>\r\n                                            <a href=\"https://www.niaid.nih.gov\" alt=\"visit NIAID.NIH.gov\" target=\"_blank\" rel=\"noopener noreferrer\">NIAID.NIH.GOV</a>\r\n                                            <a href=\"https://www.niaid.nih.gov/node/5228\" alt=\"view the No Fear Act\" target=\"_blank\" rel=\"noopener noreferrer\">No Fear Act</a>\r\n                                            <a href=\"https://www.niaid.nih.gov/node/5229\" alt=\"view the Privacy Policy\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a>\r\n                                            <a href=\"https://www.niaid.nih.gov/node/5225\" alt=\"view the Freedom of Information Act\" target=\"_blank\" rel=\"noopener noreferrer\">FOIA</a>\r\n                                            <a href=\"https://inside.niaid.nih.gov/communications-media/accessibility-and-reasonable-accommodations\" alt=\"view Accessibility Guidelines\" target=\"_blank\" rel=\"noopener noreferrer\">Accessibility</a>\r\n                                            <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" alt=\"contact us\" target=\"_blank\" rel=\"noopener noreferrer\">Contact Us</a>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div className=\"application-details\">\r\n                                        <div className=\"footer-title\">electronic Contract Proposal Submission</div>\r\n                                        <div className=\"footer-version\">2025.1</div>\r\n                                        <div className=\"footer-version\" hidden>Build Date: {preval`module.exports = new Date().toLocaleString();`}</div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Footer;\r\n","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\nconst accessDeniedStyle = {\r\n    backgroundColor: \"#e3e3e3\",\r\n    margin: \"20px\",\r\n    padding: \"20px\",\r\n    borderRadius: \"10px\"\r\n    \r\n}\r\n\r\nclass AppAccessDenied extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                \r\n                {/*<div className=\"primary-jumbo-text jumbotron-lg-content primary-jumbo-text jumbotron-text container jumbotron-notice\">*/}\r\n                {/*<h1>Sorry, you are not authorized to access this page. Please click <a href=\"/\">here</a> to go back!</h1>*/}\r\n\r\n                <div style={accessDeniedStyle}>\r\n\r\n                <h2>Access Denied</h2>\r\n                    Sorry, you are not authorized to access this page. Please click <a href=\"/logout\">here</a> to go back!\r\n                <br />\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n\r\n        )\r\n    };\r\n};\r\n\r\nexport default AppAccessDenied;\r\n","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\n//const errorStyle = {\r\n//    backgroundColor: \"#e3e3e3\",\r\n//    margin: \"20px\",\r\n//    padding: \"20px\",\r\n//    borderRadius: \"10px\"\r\n    \r\n//}\r\n\r\nclass Error extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content\">\r\n                        <div className=\"tile-section contact-section\">\r\n                            <h2>Internal Server Error</h2>\r\n\r\n                            <p>For questions regarding a specific solicitation, contact the primary point of contact listed in the solicitation.\r\n                    For technical questions about this site, contact <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" target=\"blank\">eCPS Admin</a></p>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        )\r\n    };\r\n};\r\n\r\nexport default Error;\r\n","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\nclass DeadlineError extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content\">\r\n                        <div className=\"tile-section contact-section\">\r\n                            \r\n                            <h4>Proposal could not be received. Solicitation response deadline has passed.</h4>\r\n\r\n                            <p style={{ marginTop: 30 }}>For questions regarding a specific solicitation, contact the primary point of contact listed in the solicitation.</p>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        )\r\n    };\r\n};\r\n\r\nexport default DeadlineError;","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\nconst errorStyle = {\r\n    backgroundColor: \"#e3e3e3\",\r\n    margin: \"20px\",\r\n    padding: \"20px\",\r\n    borderRadius: \"10px\"\r\n    \r\n}\r\n\r\nclass Error404 extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content\">\r\n                        <div className=\"tile-section contact-section\">\r\n                            <h2>404 Page Not Found</h2>\r\n\r\n                            <p>Page does not exit.</p>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        )\r\n    };\r\n};\r\n\r\nexport default Error404;\r\n","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\nconst invalidAppUser = {\r\n    backgroundColor: \"#e3e3e3\",\r\n    margin: \"20px\",\r\n    padding: \"20px\",\r\n    borderRadius: \"10px\"\r\n    \r\n}\r\n\r\nclass AuthenticationFail extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                \r\n                {/*<div className=\"primary-jumbo-text jumbotron-lg-content primary-jumbo-text jumbotron-text container jumbotron-notice\">*/}\r\n                {/*<h1>Sorry, you are not authorized to access this page. Please click <a href=\"/\">here</a> to go back!</h1>*/}\r\n\r\n                <div style={invalidAppUser}>\r\n\r\n                <h2>Authentication Fail</h2>\r\n\r\n                Sorry, your authenticationFail to eCPS failed. Please contact the <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" target=\"_blank\">eCPS Admin</a>\r\n\r\n                <br />\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n\r\n        )\r\n    };\r\n};\r\n\r\nexport default AuthenticationFail;\r\n","import React, { Component } from 'react';\r\nimport Footer from \"./Footer\";\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nclass About extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"section-heading\">Electronic Contract Proposal Submission</div>\r\n                            <Paper className=\"content-container\">\r\n                                <React.Fragment>\r\n                                    <p>NIH has implemented a new process for electronic submission of contract proposals. The electronic Contract Proposal Submission (eCPS) is one component of NIH’s integrated, secure system for the electronic submission, capture, tracking and review of contract proposals. eCPS was developed for the purposes of streamlining our contract proposal submission and review processes, preparing for the eventual elimination of paper submissions, and reducing costs associated with storage of large paper files.</p>\r\n\r\n                                    <div className=\"sub-header\">Features:</div>\r\n                                    <ul>\r\n                                        <li>Upload files for electronic submission against a list of active contract solicitations</li>\r\n                                        <li>Link to solicitations in sam.gov</li>\r\n                                        <li>View solicitation titles and submission deadlines</li>\r\n                                        <li>Track proposal submission actions through \"My Submission History\"</li>\r\n                                        <li>Revise a proposal, which will over-write previous versions</li>\r\n                                    </ul>\r\n                                    <div className=\"sub-header\">Benefits to the research community:</div>\r\n                                    <ul>\r\n                                        <li>Easy-to-locate active solicitations available for electronic submission</li>\r\n                                        <li>Reduced costs for printing and mailing of paper files</li>\r\n                                        <li>Eliminate security risk of paper processing and transportation time</li>\r\n                                        <li>Real-time feedback on transmission success</li>\r\n                                    </ul>\r\n                                    <div className=\"sub-header\">Benefits to the Office of Acquisitions:</div>\r\n                                    <ul>\r\n                                        <li>Single source for all proposal submissions</li>\r\n                                        <li>Reduced costs for storing large paper files</li>\r\n                                        <li>Enhanced security with electronic files</li>\r\n                                        <li>Reduced processing and review time</li>\r\n                                    </ul>\r\n                                </React.Fragment>\r\n                            </Paper>\r\n                        </div>\r\n                    </div >\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        )\r\n    };\r\n};\r\n\r\nexport default About;","import React, { Component } from 'react';\r\nimport Footer from \"./Footer\";\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nclass HowToSubmit extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"section-heading\">How To Submit an Electronic Proposal</div>\r\n                            <Paper className=\"content-container\">\r\n                            <ol>\r\n                                    <li>Log in to the NIH eCPS (electronic Contract Proposal Submission system).</li>\r\n                                    <li>Click <strong>Submit a Proposal</strong> for the Solicitation for which you wish to submit a proposal from “Contract Solicitations Available for Electronic Submission” page.</li>\r\n                                <li>Enter a name for the proposal.</li>\r\n                                <li>Browse and select the Technical PDF, PHS Human Subjects and Clinical Trials PDF, Business PDF, and Excel file(s).\r\n                                    <ol type=\"a\">\r\n                                            <li>The Technical Proposal, including all appendices, must be saved in a single PDF file. The Technical PDF file must enable word searches to the maximum extent practicable. Forms and/or documents requiring signature(s) may be scanned, but must be merged into the single Technical PDF file.</li>\r\n                                            <li>PHS Human Subjects and Clinical Trials Document - Upload the Human Subjects and Clinical Trials Information Form as required by the solicitation.<br />Please ensure that you are using correct version of the <a href=\"https://oamp.od.nih.gov/nih-document-generation-system/dgs-workform-information/attachment-files-section-j\" className=\"link-textonly\" target=\"_blank\">Human Subject and Clinical Trial form</a>.</li>\r\n                                            <li>The Business Proposal must be comprised of the following files:\r\n                                                <ol type=\"I\">\r\n                                                    <li><strong>Required:</strong> A single PDF of your Business Proposal, including all attachments and/or appendices as required by the solicitation. The Business Proposal should be created in a PDF format that enables word searches to the maximum extent practicable. Forms and/or documents requiring signature(s) may be scanned, but must be merged into the single Business Proposal PDF file. Do NOT password-protect or encrypt the PDF file.</li>\r\n                                                    <li><strong>Optional:</strong> Cost breakdown(s) as required by the solicitation, in its original Excel format, not the PDF format. The cost breakdown(s) in excel must be identical to the one(s) in the Business Proposal PDF.</li>\r\n                                                </ol>\r\n                                            </li>\r\n                                    </ol>\r\n                                </li>\r\n                                \r\n                                <li>Click <strong>Submit Proposal.</strong></li>\r\n                                <li>Once you upload and submit your proposal, you can only revise your proposal by overwriting previously uploaded documents. You can find submissions to revise or view under <strong>My Submission History</strong>. You have up until the closing date and time of the solicitation to make as many revisions as you need.</li>\r\n                                <li>After the closing date and time, the system prevents further proposal submissions or revisions. You may still view your submissions after the proposal closing date and time under <strong>My Submission History</strong>.</li>\r\n                                </ol>\r\n                            </Paper>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer/>\r\n            </div>\r\n        );\r\n    }\r\n};\r\n\r\nexport default HowToSubmit;","import React, { Component } from 'react';\r\nimport Footer from \"./Footer\";\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nclass ContactUs extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"section-heading\">\r\n                                <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" alt=\"contact us\" target=\"_blank\" rel=\"noopener noreferrer\">Contact Us</a>\r\n                            </div>\r\n                            <Paper className=\"content-container\">For questions regarding a specific solicitation, contact the primary point of contact listed in the solicitation. For technical questions about this site, contact <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" className=\"link-textonly\" target=\"blank\">eCPS Admin</a>.</Paper>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        );\r\n    }\r\n};\r\n\r\nexport default ContactUs;","import React, { Component } from 'react';\r\nimport Footer from \"./Footer\";\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport faqData from \"./common/faqDataJson\";\r\n\r\nclass Faq extends Component {\r\n\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"content\">\r\n                    <div className=\"overshadow\"></div>\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n\r\n                            <div className=\"section-heading\">Frequently Asked Questions</div>\r\n                            <div className=\"white-accordions faq\">\r\n\r\n                                {faqData.map((data, key) => {\r\n                                    return (<div className=\"accordion top-level-accordion\" key={key}>\r\n                                                <Accordion>\r\n                                                    <AccordionSummary\r\n                                                        expandIcon={<img src=\"images/icon-arrow-down-med-blue.svg\" alt=\"arrow right icon\" />}\r\n                                                        aria-controls={`panel${data.id}-content`}\r\n                                                        id={`panel${data.id}-header`}\r\n                                                    >\r\n                                                        <div className=\"sub-header\">{data.summary}</div>\r\n                                                    </AccordionSummary>\r\n                                                    <AccordionDetails><span dangerouslySetInnerHTML={{ __html: data[\"details\"] }}></span>\r\n                                                    </AccordionDetails>\r\n                                                </Accordion>\r\n                                            </div>);\r\n                                })}\r\n\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n        )\r\n    }\r\n};\r\n\r\nexport default Faq;","import React, { Component } from 'react';\r\nimport Footer from \"../Footer\";\r\n\r\nconst invalidAppUser = {\r\n    backgroundColor: \"#e3e3e3\",\r\n    margin: \"20px\",\r\n    padding: \"20px\",\r\n    borderRadius: \"10px\"\r\n    \r\n}\r\n\r\nclass AccountLocked extends Component {\r\n    render() {\r\n        return (\r\n            <div>\r\n                \r\n                {/*<div className=\"primary-jumbo-text jumbotron-lg-content primary-jumbo-text jumbotron-text container jumbotron-notice\">*/}\r\n                {/*<h1>Sorry, you are not authorized to access this page. Please click <a href=\"/\">here</a> to go back!</h1>*/}\r\n\r\n                <div style={invalidAppUser}>\r\n\r\n                <h2>Account Locked</h2>\r\n\r\n                Sorry, your eCPS account is locked or is no longer active. Please contact the <a href=\"mailto:eCPSAdministrator@niaid.nih.gov\" target=\"_blank\">eCPS Admin</a>\r\n\r\n                <br />\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n\r\n        )\r\n    };\r\n};\r\n\r\nexport default AccountLocked;\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../services/authService\";\r\n\r\nconst styleObj = {\r\n    fontSize: \"10pt\",\r\n    color: \"#a12\",\r\n    textAlign: \"center\",\r\n    paddingTop: \"0\",\r\n    position: \"absolute\",\r\n    top: \"0\",\r\n    left: \"620px\"\r\n}\r\n\r\nexport class NameTag extends Component {\r\n    \r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {};\r\n    }\r\n\r\n    componentDidMount() {\r\n        try {\r\n            const user = auth.getCurrentUser();\r\n            //console.log(\"user:\", user);\r\n            this.setState({ user: user });\r\n        } catch (ex) { }\r\n    }\r\n\r\n    render() {\r\n        const userName = this.state.user ? this.state.user.FirstName + \" \" + this.state.user.LastName + \"[\" + this.state.user.Email + \"]\": \"\";\r\n        return (<span style={styleObj} > { userName }</ span>);\r\n    }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport {\r\n  Collapse,\r\n  Container,\r\n  Navbar,\r\n  NavbarBrand,\r\n  NavbarToggler,\r\n  NavItem,\r\n  NavLink,\r\n} from \"reactstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport \"./NavMenu.css\";\r\nimport { NameTag } from \"./NameTag\";\r\n\r\nexport class NavMenu extends Component {\r\n  static displayName = NavMenu.name;\r\n\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.toggleNavbar = this.toggleNavbar.bind(this);\r\n    this.state = {\r\n        collapsed: 'collapse'\r\n    };\r\n  }\r\n\r\n  toggleNavbar() {\r\n    let navCollapse;\r\n\r\n    if (this.state.collapsed) {\r\n      navCollapse = '';\r\n    } else if (!this.state.collapsed) {\r\n      navCollapse = 'collapse';\r\n    }\r\n\r\n    this.setState({\r\n        collapsed: navCollapse\r\n    });\r\n  }\r\n\r\n  render() {\r\n      const username = this.props.username;\r\n\r\n      return (\r\n          <nav className=\"navbar navbar-expand-md navbar-dark\">\r\n              <button className=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\" onClick={this.toggleNavbar}>\r\n                  <span className=\"navbar-toggler-icon\"></span>\r\n              </button>\r\n\r\n              <div className={`${this.state.collapsed} navbar-collapse`} id=\"navbarSupportedContent\">\r\n                  <ul className=\"navbar-nav mr-auto\">\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/\">Home<span className=\"sr-only\"></span></Link>\r\n                      </li>\r\n                      \r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/About\">About</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/HowToSubmit\">How to Submit</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/faq\">FAQ</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/contactUs\">Contact</Link>\r\n                      </li>\r\n                  </ul>\r\n              </div>\r\n          </nav>\r\n      );\r\n  }\r\n}\r\n","//(function () {\r\n//    // external site\r\n//    'use strict';\r\n\r\nvar analytics = {\r\n    trackingTimeStamps: {}\r\n},\r\n    environments = {\r\n        // Project specific Analytics Keys DO NOT USE IN OTHER PROJECTS!\r\n        prod: {\r\n            // Example-\r\n            //     url: 'websiteaddress.com',\r\n            //\r\n            //     Do NOT include https://\r\n            url: 'ecps.nih.gov',\r\n            key: 'G-9N8TEB5VCD',\r\n        },\r\n        qa: {\r\n            url: 'ecps-qa.nih.gov',\r\n            key: 'G-NG7HNJ87TL',\r\n        },\r\n        stage: {\r\n            url: 'ecps-ext-stg.niaid.nih.gov',\r\n            key: 'G-5GX3GC4V4B',\r\n        },\r\n        dev: {\r\n            url: 'ecps-ext-dev.niaid.nih.gov',\r\n            key: 'G-EZ0FMWRQHK',\r\n        },\r\n    };\r\n\r\nanalytics.detectEnvironment = function () {\r\n\r\n    for (var environment in environments) {\r\n        if (window.location.host.toLowerCase() === String(environments[environment].url).toLowerCase()) {\r\n            analytics.gaKey = environments[environment].key;\r\n        }\r\n\r\n        if (!analytics.gaKey) {\r\n            analytics.gaKey = environments.dev.key;\r\n        }\r\n    }\r\n};\r\n\r\nanalytics.setTimestamp = function (id) {\r\n    analytics.trackingTimeStamps[id] = new Date().getTime();\r\n};\r\n\r\nanalytics.getTimestamp = function (id) {\r\n    return analytics.trackingTimeStamps[id];\r\n};\r\n\r\nanalytics.initGoogleAnalytics = function () {\r\n    //console.info('init GA4');\r\n\r\n    function addScript(src, callback) {\r\n        var scriptElement = document.createElement('script');\r\n        scriptElement.setAttribute('src', src);\r\n        scriptElement.onload = callback;\r\n        document.body.appendChild(scriptElement);\r\n    }\r\n\r\n    // Disable linting for 3rd party tracking codes\r\n    /* eslint-disable */\r\n    /* jshint ignore:start */\r\n    // jscs:disable\r\n\r\n    // Google Analytics\r\n    function init() {\r\n        window.dataLayer = window.dataLayer || [];\r\n        analytics.gtag = function () { dataLayer.push(arguments); }\r\n        analytics.gtag('js', new Date());\r\n\r\n        analytics.gtag('config', analytics.gaKey);\r\n    }\r\n\r\n    addScript('https://www.googletagmanager.com/gtag/js?id=' + analytics.gaKey, init);\r\n\r\n    // jscs:enable\r\n    /* jshint ignore:end */\r\n    /* eslint-enable */\r\n};\r\n\r\nanalytics.initAnalytics = function () {\r\n    analytics.detectEnvironment();\r\n    analytics.initGoogleAnalytics();\r\n};\r\n\r\n// track current URL as page view, especially useful for SPAs.\r\nanalytics.trackPageView = function () {\r\n    analytics.gtag('set', 'send_page_view', false);\r\n};\r\n\r\n// trackPage is depreciated, please use trackPageView\r\nanalytics.trackPage = function () {\r\n    analytics.trackPageView();\r\n};\r\n\r\nanalytics.trackEvent = function (options) {\r\n    if (options.category && options.action && options.label) {\r\n        analytics.gtag('event', options.action, {\r\n            'event_category': options.category,\r\n            'event_label': options.label,\r\n            'value': options.value\r\n        });\r\n    }\r\n};\r\n\r\nanalytics.trackTiming = function (options) {\r\n    if (options.category && options.name && options.timeStamp) {\r\n        analytics.gtag('event', 'timing_complete', {\r\n            'name': options.name || 'load',\r\n            'value': new Date().getTime() - analytics.getTimestamp(options.timeStamp),\r\n            'event_category': options.category,\r\n            'label': options.label\r\n        });\r\n    }\r\n};\r\n\r\nanalytics.trackError = function (options) {\r\n    if (options.description && options.fatal) {\r\n        analytics.gtag('event', 'exception', {\r\n            'description': options.description,\r\n            'fatal': options.fatal || false // set to true if the error is fatal\r\n        });\r\n    }\r\n};\r\n\r\n//window.onload = function () {\r\n//    analytics.initAnalytics();\r\n//};\r\n/*}());*/\r\n\r\nexport default analytics;","import React, { Component } from \"react\";\r\nimport auth from \"../services/authService\";\r\nimport analytics from \"../services/analytics\";\r\n\r\nconst styleObj = {\r\n    fontSize: \"10pt\",\r\n    color: \"#a12\",\r\n    textAlign: \"center\",\r\n    paddingTop: \"0\",\r\n    position: \"absolute\",\r\n    top: \"0\",\r\n    left: \"620px\"\r\n}\r\n\r\nexport class BannerHeader extends Component {\r\n    \r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {};\r\n    }\r\n\r\n    componentDidMount() {\r\n        //try {\r\n        //    const user = auth.getCurrentUser();\r\n        //    console.log(\"user:\", user);\r\n        //    this.setState({ user: user });\r\n        //} catch (ex) { }\r\n    }\r\n\r\n    render() {\r\n        //const userName = this.state.user ? this.state.user.FirstName + \" \" + this.state.user.LastName + \"[\" + this.state.user.Email + \"]\": \"\";\r\n        return ( \r\n            <div>\r\n                <div className=\"top-header\">\r\n                    <div className=\"nih-details\">\r\n                        <a href=\"#\" className=\"logo-nih\" onClick={function(){analytics.trackEvent({ category: 'navigation', action: 'click', label: 'return to external homepage' })}}>\r\n                            <img src=\"images/logo-nih-mark.svg\" className=\"logo-nih-mark\" alt=\"National Institutes of Health (NIH) Logo\" />\r\n                            <img src=\"images/logo-nih-niaid-keyline-white.svg\" className=\"logo-nih-niaid-text\" alt=\"National Institute of Allergy and Infectious Diseases\" />\r\n                        </a><div className=\"samhsa-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-samhsa\">\r\n\t\t\t                    <img src=\"images/samhsa_logo.png\" className=\"logo-samhsa\" alt=\"Substances Abuse and Mental Health Services Administration (SAMHSA) logo\" /></a>\r\n\t                    </div>\r\n\t                    <div className=\"cdc-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-cdc\">\r\n\t\t\t                    <img src=\"images/cdc_logo.png\" className=\"logo-cdc\" alt=\"Centers for Disease Control and Prevention (CDC) logo\" /></a>\r\n\t                    </div>\r\n\t                    <div className=\"arpa-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-arpa\">\r\n\t\t\t                    <img src=\"images/arpa-h_logo_white_notagline.png\" className=\"logo-arpah\" alt=\"Advanced Research Projects Agency for Health (ARPA-H) logo\" /></a>\r\n\t                    </div>\r\n                        {/*<div className=\"application-details\">*/}\r\n                        {/*    <h1>electronic Contract Proposal Submission</h1>*/}\r\n                        {/*</div>*/}\r\n                        \r\n                    </div>\r\n                </div>\r\n            </div>           \r\n        );\r\n    }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport IdleTimer from 'react-idle-timer';\r\nimport { Button } from 'react-bootstrap';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogActions from '@material-ui/core/DialogContent';\r\nimport config from \"../../config.json\";\r\nimport authService from \"../../services/authService\";\r\n\r\nexport class SessionExpireModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n        };\r\n\r\n        \r\n    }\r\n\r\n    \r\n\r\n    render() {\r\n        return (\r\n            <Dialog\r\n                disableBackdropClick\r\n                disableEscapeKeyDown\r\n                aria-labelledby=\"session-expire\"\r\n                aria-describedby=\"session-expire\"\r\n                open={this.props.showModal === true}\r\n                onClose={this.props.handleClose}\r\n                fullWidth={true}\r\n                maxWidth=\"xs\">\r\n               \r\n                <DialogTitle className={`vendor-modal-title`}>\r\n                    <span className=\"modal-title\" id=\"session-expire-modal-label\">User Session Expiring</span>\r\n                    <button type=\"button\" className=\"close\" onClick={this.props.handleClose} aria-label=\"Close\">\r\n                        <span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                </DialogTitle>\r\n                <DialogContent className=\"dialog-no-padding-top\">\r\n                    <div className={`modal-body`}>\r\n                        Your session is about to expire. To keep working, click <strong>Stay on Page</strong> button. To end session, click <strong>Go to Login Page</strong>.\r\n                    </div>\r\n                </DialogContent>\r\n                <DialogActions>\r\n                    <div className=\"dialog-footer\">\r\n                        <Button\r\n                            type=\"button\"\r\n                            className=\"MuiButtonBase-root MuiButton-root btn btn-secondary\"\r\n                            id=\"goToLogin\"\r\n                            onClick={this.props.handleLogout}>\r\n                            Go to Login Page\r\n                        </Button>\r\n                        <Button\r\n                            type=\"button\"\r\n                            className=\"MuiButtonBase-root MuiButton-root btn btn-primary\"\r\n                            id=\"stayOnPage\"\r\n                            onClick={this.props.handleRefresh}>\r\n                            Stay on Page\r\n                        </Button>\r\n                    </div>\r\n                </DialogActions>\r\n            </Dialog>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SessionExpireModal;\r\n","import React, { Component } from \"react\";\r\nimport authService from \"../../services/authService\";\r\nimport IdleTimer from 'react-idle-timer';\r\nimport SessionExpireModal from \"./SessionExpireModal\";\r\n\r\nimport {\r\n  Collapse,\r\n  Container,\r\n  Navbar,\r\n  NavbarBrand,\r\n  NavbarToggler,\r\n  NavItem,\r\n  NavLink,\r\n} from \"reactstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport \"../NavMenu.css\";\r\nimport { NameTag } from \"../NameTag\";\r\nimport config from \"../../config.json\";\r\n\r\nexport class NavMenuAuthenticated extends Component {\r\n  static displayName = NavMenuAuthenticated.name;\r\n\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.toggleNavbar = this.toggleNavbar.bind(this);\r\n    this.state = {\r\n        collapsed: true,\r\n        timeout: 1000 * 60 * config.ecpsExternal_UserInactiveTimeoutInMinutes, //in milliseconds 1000*60*minutes \r\n        timeout_modalInactive: 1000 * 60 * config.ecpsExternal_ModalInactiveTimeoutInMinutes,\r\n        timeout_userInactive: 1000 * 60 * config.ecpsExternal_UserInactiveTimeoutInMinutes,\r\n        showModal: false,\r\n        userLoggedIn: true,\r\n        isTimedOut: false,\r\n        eventsToTrack:[\"mousedown\",\"keydown\",\"wheel\"]\r\n      };\r\n\r\n      this.idleTimer = null;\r\n      this.onAction = this._onAction.bind(this);\r\n      this.onActive = this._onActive.bind(this);\r\n      this.onIdle = this._onIdle.bind(this);\r\n      this.handleClose = this.handleClose.bind(this);\r\n      this.handleLogout = this.handleLogout.bind(this);\r\n      this.handleRefresh = this.handleRefresh.bind(this);\r\n\r\n    }\r\n\r\n  \r\n    _onAction(e) {\r\n        //console.log(\"_onAction\");\r\n        //if (e) {\r\n        //    console.log('user did something', e.type);\r\n        //}\r\n      \r\n      this.setState({ isTimedOut: false });\r\n      \r\n      \r\n  }\r\n\r\n    _onActive(e) {\r\n      //  console.log(\"_onActive\");\r\n      //if (e) {\r\n      //    console.log('user is active', e.type);\r\n      //}\r\n      this.setState({ isTimedOut: false });\r\n      \r\n  }\r\n\r\n  _onIdle(e) {\r\n      //console.log('user is idle', e);\r\n      this.setState({ showModal: true });\r\n      setTimeout(function() {\r\n              window.location = '/logout';    \r\n          },\r\n          this.state.timeout_modalInactive);\r\n\r\n\r\n      //const isTimedOut = this.state.isTimedOut;\r\n      //if (isTimedOut) {\r\n      //    //console.log(\"now redirecting to logout\");\r\n      //    window.location = '/logout';          \r\n      //} else {\r\n      //    this.setState({ showModal: true });\r\n      //    //console.log(\"idle timer before reset\", this.idleTimer);\r\n      //    this.setState({ timeout: this.state.timeout_modalInactive });\r\n      //    this.idleTimer.reset();\r\n      //    //console.log(\"idle timer after reset\", this.idleTimer);\r\n      //    this.setState({ isTimedOut: true });\r\n      //}\r\n\r\n  }\r\n  handleClose() {\r\n      this.setState({ showModal: false });\r\n      //console.log(\"handle close - logout for now.\"); \r\n      window.location = '/logout'; \r\n  }\r\n\r\n  handleLogout() {\r\n      this.setState({ showModal: false });\r\n      //console.log(\"handle logout\");\r\n      window.location = '/logout'; \r\n  }\r\n\r\n  handleRefresh() {\r\n      this.setState({ showModal: false, isTimedOut: false, timeout: this.state.timeout_userInactive });\r\n      //console.log(\"handle refresh\");\r\n      authService.refreshToken();\r\n      this.idleTimer.reset();\r\n  }\r\n\r\n  toggleNavbar() {\r\n    this.setState({\r\n        collapsed: !this.state.collapsed\r\n    });\r\n  }\r\n\r\n  render() {\r\n      const username = this.props.username;\r\n\r\n      return (\r\n          <nav className=\"navbar navbar-expand-md navbar-dark\">\r\n              <IdleTimer\r\n                  ref={ref => { this.idleTimer = ref }}\r\n                  events={this.state.eventsToTrack}\r\n                  onActive={this.onActive}\r\n                  onIdle={this.onIdle}\r\n                  onAction={this.onAction}\r\n                  debounce={250}\r\n                  timeout={this.state.timeout}\r\n              />\r\n              <SessionExpireModal\r\n                  showModal={this.state.showModal}\r\n                  handleClose={this.handleClose}\r\n                  handleRefresh={this.handleRefresh}\r\n                  handleLogout={this.handleLogout}\r\n              />\r\n              <button className=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\r\n                  <span className=\"navbar-toggler-icon\"></span>\r\n              </button>\r\n\r\n              <div className=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">\r\n                  <ul className=\"navbar-nav mr-auto\">\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/\">Home<span className=\"sr-only\"></span></Link>\r\n                          {/*<NavLink tag={Link} className=\"btn-logout\" to=\"/\">Home</NavLink>*/}\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/submissionHistory\">Submission History</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/About\">About</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/HowToSubmit\">How to Submit</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/Faq\">FAQ</Link>\r\n                      </li>\r\n                      <li className=\"nav-item\">\r\n                          <Link className=\"nav-link\" to=\"/contactUs\">Contact</Link>\r\n                      </li>\r\n                  </ul>\r\n              </div>\r\n          </nav>\r\n    );\r\n  }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { NavLink } from \"reactstrap\";\r\nimport auth from \"../../services/authService\";\r\n\r\nconst styleObj = {\r\n    fontSize: \"10pt\",\r\n    color: \"#a12\",\r\n    textAlign: \"center\",\r\n    paddingTop: \"0\",\r\n    position: \"absolute\",\r\n    top: \"0\",\r\n    left: \"620px\"\r\n}\r\n\r\nexport class BannerHeaderSecure extends Component {\r\n    \r\n    constructor(props) {\r\n        super(props);\r\n        this.state = { user: null, icRoles: [], selectedRole: \"\", selectChanged: false};\r\n    }\r\n\r\n    icSelectHandler = function (trg) {\r\n        const selectedIcRole = this.getIcRole(trg.value);\r\n        localStorage.setItem(\"selectedIcRole\", JSON.stringify(selectedIcRole));\r\n        //this.props.icTrigger(selectedIcRole);\r\n        window.location.reload();\r\n    }\r\n\r\n    getIcRole = (idx) => {\r\n        const icRoles = this.state.icRoles;\r\n        if (idx < icRoles.length) return icRoles[idx];\r\n        else return null;\r\n    }\r\n\r\n    componentWillMount() {\r\n        const user = auth.getCurrentUser();\r\n        this.setState({ user: user });\r\n        var icRoles = auth.getUserRoles();\r\n        var defaultIcRole = this.props.defaultIcRole; \r\n        //console.log('%%%%%%%%%%%%%%%%%%% Mount IcRole');\r\n        //console.log(defaultIcRole);\r\n        this.setState({ icRoles: icRoles, selectedRole: defaultIcRole, defaultIcRole: defaultIcRole });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        var updatedIcRole = nextProps.defaultIcRole;\r\n        //console.log('!!!!!!!!!!!!!!! updated props IcRole');\r\n        //console.log(updatedIcRole);\r\n        this.setState({ selectedRole: updatedIcRole, defaultIcRole: updatedIcRole });\r\n    }\r\n\r\n    render() {\r\n        const userName = this.state.user ? this.state.user.firstName + \" \" + this.state.user.lastName : \"\";\r\n        const selectedRole = this.state.selectedRole;\r\n        const defaultIcRole = this.state.defaultIcRole;\r\n\r\n        return (  \r\n            <div>\r\n                <div className=\"top-header\">\r\n                    <div className=\"nih-details\">\r\n                        <a href=\"#\" className=\"logo-nih\">\r\n                            <img src=\"images/logo-nih-mark.svg\" className=\"logo-nih-mark\" alt=\"NIAID Logo\" />\r\n                            <img src=\"images/logo-nih-niaid-keyline-white.svg\" className=\"logo-nih-niaid-text\" alt=\"National Institute of Allergy and Infectious Diseases\" />\r\n                        </a>\r\n\t                    <div className=\"samhsa-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-samhsa\">\r\n\t\t\t                    <img src=\"images/samhsa_logo.png\" className=\"logo-samhsa\" alt=\"Substances Abuse and Mental Health Services Administration (SAMHSA) logo\" /></a>\r\n                        </div>\r\n\t                    <div className=\"cdc-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-cdc\">\r\n\t\t\t                    <img src=\"images/cdc_logo.png\" className=\"logo-cdc\" alt=\"Centers for Disease Control and Prevention (CDC) logo\" /></a>\r\n\t                    </div>\r\n\t                    <div className=\"arpa-logo-container\">\r\n\t\t                    <a href=\"#\" className=\"logo-arpa\">\r\n\t\t\t                    <img src=\"images/arpa-h_logo_white_notagline.png\" className=\"logo-arpah\" alt=\"Advanced Research Projects Agency for Health (ARPA-H) logo\" /></a>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"user-info\">\r\n                        <div className=\"user-vert-container\">\r\n                            <div className=\"user-name-title\">\r\n                                <div className=\"user-name\">\r\n                                    <strong>{userName}</strong>\r\n                                </div>\r\n                                <div className=\"user-title\">\r\n                                    External User\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"logout\">\r\n                                <NavLink tag={Link} className=\"btn-logout\" to=\"/logout\">Logout</NavLink>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>              \r\n        );\r\n    }\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nexport class SiteMaintenanceBanner extends Component {\r\n\r\n    state = {\r\n        showBanner: true\r\n    }\r\n\r\n    closeBanner = () => {\r\n        this.setState({\r\n            showBanner: false\r\n        });\r\n    }\r\n\r\n    render() {\r\n        const maintenanceMessage = this.props.maintenanceMessage;\r\n        const message = maintenanceMessage !== \"\" ? maintenanceMessage : \"Website is temporarily unavailable.\";\r\n        return (\r\n            <div>\r\n                {this.state.showBanner &&\r\n                    <div className=\"banner-site-status\">\r\n                        <div>\r\n                            <img src=\"/images/icon-exclamation-circle-orange.svg\" alt=\"icon warning\" />\r\n                            <div dangerouslySetInnerHTML={{ __html: message }} ></div>\r\n                        </div>\r\n                        <div>\r\n                            <img src=\"/images/x-gray.svg\" alt=\"icon close\" onClick={this.closeBanner} />\r\n                        </div>\r\n                    </div >}\r\n            </div>\r\n        );\r\n    }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class BrowserCheckBanner extends Component {\r\n    state = {\r\n        showCheck: true\r\n    }\r\n\r\n    closeCheck = () => {\r\n        this.setState({\r\n            showCheck: false\r\n        });\r\n    }\r\n\r\n    render() {\r\n        const browserMessage = \"Note: Lower versions of Internet Explorer are not supported by eCPS system. Please use Internet Explorer version 11 or higher, Google Chrome, Safari or Mozilla Firefox.\";\r\n        return (\r\n            <div>\r\n                {this.state.showCheck &&\r\n                    <div className=\"browser-site-status\">\r\n                        <div>\r\n                            <img src=\"/images/icon-exclamation-circle-orange.svg\" alt=\"alert icon\"/>\r\n                            <div dangerouslySetInnerHTML={{ __html: browserMessage }} ></div>\r\n                        </div>\r\n                        <div>\r\n                            <img src=\"/images/x-gray.svg\" onClick={this.closeCheck} alt=\"close icon\" />\r\n                        </div>\r\n                    </div >}\r\n            </div>\r\n        );\r\n    }\r\n};","import React, { Component } from \"react\";\r\n\r\nexport class SupportNoticeBanner extends Component {\r\n\r\n\r\n    render() {\r\n        const supportNoticeBannerMessage = this.props.supportNoticeBannerMessage;\r\n        return (\r\n            <div>\r\n                <div className=\"support-notice\">\r\n                    <div className=\"support-notice-inner\">{ supportNoticeBannerMessage }</div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}","import React, { Component } from \"react\";\r\nimport { NavMenu } from \"./NavMenu\";\r\nimport { BannerHeader } from \"./BannerHeader\";\r\nimport { NavMenuAuthenticated } from \"./secure/NavMenuAuthenticated\";\r\nimport { BannerHeaderSecure } from \"./secure/BannerHeaderSecure\";\r\nimport { SiteMaintenanceBanner } from \"./common/siteMaintenanceBanner\";\r\nimport { BrowserCheckBanner } from \"./common/browserCheckBanner\";\r\nimport { SupportNoticeBanner } from \"./common/supportNoticeBanner\";\r\n\r\nimport auth from \"../services/authService\";\r\nimport applicationService from \"../services/applicationService\";\r\n\r\nconst isIE = (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf(\"Trident/\") > -1);\r\n\r\nexport class Layout extends Component {\r\n    static displayName = Layout.name;\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.status = {};\r\n        this.state = {\r\n            siteMaintenance: {},\r\n            supportBanner: {}\r\n        };\r\n    }\r\n\r\n    async componentDidMount() {\r\n        const { data: siteMaintenance } = await applicationService.getSiteMaintenanceSetting();\r\n        const { data: supportBanner } = await applicationService.getSupportBannerSetting();\r\n        this.setState({ siteMaintenance });\r\n        this.setState({ supportBanner });\r\n    }\r\n\r\n    selectChangedH2 = (selectedIcRole) => {\r\n        this.props.icRoleSelector(selectedIcRole);\r\n    };\r\n\r\n    renderSiteMaintenanceBanner() {\r\n        const isActive = this.state.siteMaintenance.isActive;\r\n        const maintenanceMessage = this.state.siteMaintenance.siteMaintenanceMessage;\r\n        return isActive ? <SiteMaintenanceBanner maintenanceMessage={maintenanceMessage} /> : <React.Fragment />;\r\n    }\r\n    renderSupportBanner() {\r\n        const isActive = this.state.supportBanner.isActive;\r\n        const supportBannerMessage = this.state.supportBanner.supportBannerMessage;\r\n        return isActive ? <SupportNoticeBanner supportNoticeBannerMessage={supportBannerMessage} /> : <React.Fragment />;\r\n    }\r\n\r\n    renderBannerHeader(user) {\r\n        return user ? <BannerHeaderSecure icTrigger={this.selectChangedH2} defaultIcRole={this.props.defaultIcRole} /> : <BannerHeader />;\r\n    }\r\n\r\n    renderNavMenu(user) {\r\n        return user ? <NavMenuAuthenticated username={this.props.user ? this.props.user.FirstName + \" \" + this.props.user.LastName + \"[\" + this.props.user.Email + \"]\" : \"\"} /> : <NavMenu />;\r\n    }\r\n\r\n    render() {\r\n        const user = auth.getCurrentUser();\r\n        return <div role=\"main\">\r\n            {this.renderSupportBanner()}\r\n            {isIE && <BrowserCheckBanner /> }\r\n            {this.renderSiteMaintenanceBanner()}\r\n            <div className=\"jumbotron jumbotron-header jumbotron-lg\" style={{ marginBottom: \"0\", padding: \"6px 0 0 0\" }}>\r\n                {this.renderBannerHeader(user) }\r\n                {this.renderNavMenu(user) }\r\n                <div style={{ marginLeft: \"0\", marginRight: \"0\" }} >{this.props.children}</div>\r\n            </div>\r\n        </div>;\r\n    }\r\n}","import React, { Component } from \"react\";\r\nimport { NavMenuAuthenticated } from \"./NavMenuAuthenticated\";\r\nimport { BannerHeaderSecure } from \"./BannerHeaderSecure\";\r\nimport { SiteMaintenanceBanner } from \"../common/siteMaintenanceBanner\";\r\nimport { BrowserCheckBanner } from \"../common/browserCheckBanner\";\r\nimport SessionExpireModal from \"./SessionExpireModal\";\r\n\r\nconst isIE = (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf(\"Trident/\") > -1);\r\n\r\nexport class LayoutSecure extends Component {\r\n    static displayName = LayoutSecure.name;\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.status = {\r\n        }\r\n    }\r\n\r\n    selectChangedH2 = (selectedIcRole) => {\r\n        this.setState({ selectedRole: selectedIcRole });\r\n        this.props.icRoleSelector(selectedIcRole);\r\n    };\r\n\r\n    render() {\r\n        return (\r\n            <div role=\"main\">\r\n                {isIE && <BrowserCheckBanner />}\r\n                <SiteMaintenanceBanner />\r\n                <div className=\"jumbotron jumbotron-header jumbotron-lg\" style={{ marginBottom: \"0\", padding: \"6px 0 0 0\" }}>\r\n                    <BannerHeaderSecure icTrigger={this.selectChangedH2} />\r\n                    <NavMenuAuthenticated username={this.props.user ? this.props.user.FirstName + \" \" + this.props.user.LastName + \"[\"\r\n                        + this.props.user.Email + \"]\" : \"\"} />\r\n                </div>\r\n                \r\n                <div style={{ marginLeft: \"0\", marginRight: \"0\" }} >\r\n                    {this.props.children}\r\n                </div>\r\n\r\n            </div>\r\n            );\r\n    }\r\n}\r\n","import React, { Component } from \"react\";\r\n//import auth from \"../services/authService\";\r\n\r\nclass LoginSection extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {}\r\n    }\r\n\r\n    redirectToOTP() {\r\n        window.location = '/otp/renderOtp';\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <div className=\"jumbotron-lg-content\">\r\n                <div className=\"jumbotron-text\">\r\n                    <div className=\"primary-jumbo-text\">Welcome to the electronic Contract Proposal Submission (eCPS)</div>\r\n                    <div className=\"secondary-jumbo-text\">The electronic Contract Proposal Submission (eCPS) is a component of an integrated, secure system for the electronic submission, capture, tracking and review of contract proposals.</div>\r\n                </div>\r\n                <div className=\"jumbotron-action\">\r\n                    <div className=\"guide-text\">Ready to submit a proposal?</div>\r\n                    <button className=\"MuiButtonBase-root MuiButton-root btn-guide\" tabIndex=\"0\" type=\"button\" onClick={this.redirectToOTP}>\r\n                        <span className=\"MuiButton-label\">\r\n                            eCPS Login\r\n                        </span>\r\n                        <span className=\"MuiTouchRipple-root\"></span>\r\n                        <div className=\"chevron-right\"><img src=\"images/banner-arrow.svg\" alt=\"site-login\"/></div>\r\n                    </button>\r\n                    <a href=\"#\" onClick={this.redirectToOTP} className=\"register-account\">\r\n                        Register new account\r\n                        <img src=\"images/icon-arrow-right-blue-light.svg\" alt=\"arrow create account\" />\r\n                    </a>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default LoginSection;\r\n","const SolicitationType = {\r\n    Base: 1,\r\n    RTOP: 2,\r\n    Other: 3,\r\n    ARPA:5\r\n}\r\n\r\nexport default SolicitationType;","import React, { Component } from 'react';\r\nimport { Link } from \"react-router-dom\";\r\nimport SolicitationType from \"../enums/SolicitationType\";\r\n\r\n\r\nexport const sectionNonSpecialInvite = (obj, sol) => \r\n(\r\n    <div>    \r\n         <div className=\"project-banner-header\">\r\n             <div className=\"project-type\">{sol.noticeTypeName}</div>\r\n             <div className=\"solicitation-banner-right\">\r\n                 {/* {obj.props.isUserLoggedIn && false && <button className=\"project-invited\"><span>Invited</span></button>} */}\r\n                 {(sol.solicitationTypeId === SolicitationType.Base) ? obj.renderSamUrl(sol) : obj.renderInvitedAttachmentsButtons(sol)}\r\n             </div>\r\n         </div>\r\n         <div className=\"project-banner-title\">{sol.solicitationTitle}</div>\r\n         <div className=\"project-banner-footer\">\r\n             <div className=\"banner-details\">\r\n                 {obj.props.isUserLoggedIn ?\r\n                     (<div className=\"solicitation-action-btns external\">\r\n                         <Link to={`/submitProposal/${sol.solicitationID}`} >\r\n                             <button className=\"btn\">\r\n                                 <span>Submit Proposal</span>\r\n                             </button>\r\n                         </Link>\r\n\r\n                         {(sol.solicitationTypeId === SolicitationType.RTOP || sol.solicitationTypeId === SolicitationType.Other)\r\n                             && <button className=\"btn delegate-staff\" onClick={() => obj.handleOpenStaff(sol.solicitationID, sol.taskAreaContractID, false)}>\r\n                                 <span>Manage Delegate Staff</span>\r\n                             </button>}\r\n\r\n                         {false && <div className=\"proposal-submitted\">\r\n                             <span>2</span>\r\n                             <span>Submitted</span>\r\n                         </div>}\r\n                     </div>) :\r\n                     (<div className=\"button-container\">\r\n                         <button className=\"MuiButtonBase-root MuiButton-root btn-white\" tabIndex=\"0\" type=\"button\"\r\n                             onClick={() => { window.location = '/otp/renderOtp'; }}>\r\n                             <span className=\"MuiButton-label\">\r\n                                 Login to submit proposals</span>\r\n                             <span className=\"MuiTouchRipple-root\"></span>\r\n                         </button>\r\n                     </div>)\r\n                 }\r\n                 <div className=\"MuiTableContainer-root\">\r\n                     <table>\r\n                         <thead>\r\n                             <tr>\r\n                                 <th scope=\"col\" className=\"sr-only\">Action Buttons</th>\r\n                                 <th scope=\"col\">Contract Specialist</th>\r\n                                 <th scope=\"col\">Agency</th>\r\n                                 <th scope=\"col\">Closing Date</th>\r\n                             </tr>\r\n                         </thead>\r\n                         <tbody>\r\n                             <tr>\r\n                                 <td>\r\n\r\n                                 </td>\r\n                                 <td data-label=\"Contract Specialist\">{sol.primaryPoc}</td>\r\n                                 <td data-label=\"Agency\">{sol.solicitationTargetIcAgency}/{sol.solicitationTargetIC}</td>\r\n                                 <td data-label=\"Closing Date\">{sol.responseDeadlineDateString} <small>{sol.responseDeadlineTimeString}</small></td>\r\n                             </tr>\r\n                         </tbody>\r\n                     </table>\r\n                 </div>\r\n             </div>\r\n         </div>\r\n     </div>\r\n)\r\n \r\n                        \r\nexport const sectionSpecialInvite = (obj, sol) => \r\n(\r\n    <div> \r\n         <div className=\"project-banner-header\">\r\n            <div className=\"project-type\">{sol.noticeTypeName}</div>\r\n            <div className=\"solicitation-banner-right\">\r\n                <div className=\"row\">\r\n                    <div>{obj.renderSpecialInvitedAttachmentsButtons(sol)}</div>\r\n                    <div style={{ paddingRight: \"15px\" }}>{obj.renderSamUrl(sol)}</div>\r\n                </div>\r\n                \r\n            </div>\r\n        </div>\r\n        <div className=\"project-banner-title\">{sol.solicitationTitle}</div>\r\n        {sol.specialInvites[0].baseProposalId != null &&\r\n            <div className=\"project-banner-title\" style={{ fontSize: \"10pt\" }}>\r\n                <span style={{ opacity: \"0.5\" }}>Abstract</span>\r\n                <span style={{ paddingLeft: \"10px\", opacity: \"0.7\" }}>\r\n                    {sol.specialInvites[0].baseProposal.proposalName}\r\n                </span>\r\n            </div>\r\n        }\r\n        <div className=\"project-banner-footer\">\r\n            <div className=\"banner-details\">\r\n                {obj.props.isUserLoggedIn ?\r\n                    (<div className=\"solicitation-action-btns external\">\r\n                        <Link to={`/submitSpecialProposal/${sol.solicitationID}/${sol.specialInvites[0].id}`} >\r\n                            <button className=\"btn\">\r\n                                <span>Submit Proposal</span>\r\n                            </button>\r\n                        </Link>\r\n\r\n                        {(sol.solicitationTypeId === SolicitationType.RTOP || sol.solicitationTypeId === SolicitationType.Other)\r\n                            && <button className=\"btn delegate-staff\" onClick={() => obj.handleOpenStaff(sol.solicitationID, sol.taskAreaContractID, false)}>\r\n                                <span>Manage Delegate Staff</span>\r\n                            </button>}\r\n\r\n                        {false && <div className=\"proposal-submitted\">\r\n                            <span>2</span>\r\n                            <span>Submitted</span>\r\n                        </div>}\r\n                    </div>) :\r\n                    (<div className=\"button-container\">\r\n                        <button className=\"MuiButtonBase-root MuiButton-root btn-white\" tabIndex=\"0\" type=\"button\"\r\n                            onClick={() => { window.location = '/otp/renderOtp'; }}>\r\n                            <span className=\"MuiButton-label\">\r\n                                Login to submit proposals</span>\r\n                            <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>\r\n                    </div>)\r\n                }\r\n                <div className=\"MuiTableContainer-root\">\r\n                    <table>\r\n                        <thead>\r\n                            <tr>\r\n                                <th scope=\"col\" className=\"sr-only\">Action Buttons</th>\r\n                                <th scope=\"col\">Contract Specialist</th>\r\n                                <th scope=\"col\">Agency</th>\r\n                                <th scope=\"col\">Closing Date</th>\r\n                            </tr>\r\n                        </thead>\r\n                        <tbody>\r\n                            <tr>\r\n                                <td>\r\n\r\n                                </td>\r\n                                <td data-label=\"Contract Specialist\">{sol.primaryPoc}</td>\r\n                                <td data-label=\"Agency\">{sol.solicitationTargetIcAgency}/{sol.solicitationTargetIC}</td>\r\n                                <td data-label=\"Closing Date\">{sol.specialInvites[0].responseDeadlineDateString} <small>{sol.specialInvites[0].responseDeadlineTimeString}</small></td>\r\n                                \r\n                            </tr>\r\n                        </tbody>\r\n                    </table>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n)\r\n  \r\n                \r\n\r\nexport default {\r\n    sectionNonSpecialInvite,\r\n    sectionSpecialInvite\r\n}","import React from \"react\";\r\n\r\nconst Input = ({ name, label, error, type, required, isDisabled, placeholder, value, inputSize, onChange, onInput }) => {\r\n    //  <div className={inputSize}>\r\n    //  <label htmlFor={name}>{label}</label>\r\n    //      <input className=\"MuiInput-input\"\r\n    //    name={name}\r\n    //    id={name}\r\n    //    type={type}\r\n    //    defaultValue={value}\r\n    //    onChange={onChange}\r\n    //    className=\"form-control\"\r\n    //  />\r\n    //  {error && <small className=\"text-danger\">{error}</small>}\r\n    //</div>\r\n \r\n    //<div className={inputSize}>\r\n    //    <div className=\"MuiFormControl-root MuiTextField-root\">\r\n    //        <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" htmlFor={name} id={`${name}-label`}>\r\n    //          {label}\r\n    //          {!required && <small>Optional</small>}\r\n    //        </label>\r\n    //        <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n    //              <input id={name} type={type} name={name} className=\"MuiInputBase-input MuiInput-input\" defaultValue={value} onChange={onChange} />\r\n    //          </div>\r\n    //        {error && <small className=\"text-danger\">{error}</small>}\r\n    //    </div>\r\n    //</div>\r\n\r\n    return <div className=\"MuiFormControl-root MuiTextField-root\">\r\n        {!required && <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" htmlFor={name} id={`${name}-label`}>\r\n            {label}\r\n        </label>}\r\n        {required && <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" htmlFor={name} id={`${name}-label`}>\r\n            {label} <span className=\"document-requirement\"> Required</span>\r\n        </label>}\r\n        {isDisabled && <label>{value}</label>}\r\n        {!isDisabled &&\r\n            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                <input\r\n                    aria-invalid=\"false\"\r\n                    id={name}\r\n                    name={name}\r\n                    type={type}\r\n                    className=\"MuiInputBase-input MuiInput-input\"\r\n                    defaultValue={value}\r\n                    //value={value}\r\n                    placeholder={placeholder}\r\n                    onChange={onChange}\r\n                    onInput={onInput} />\r\n            </div>}\r\n        {error && <small className=\"text-danger\">{error}</small>}\r\n    </div>;\r\n};\r\n\r\nexport default Input;","const RecordStatus = {\r\n    NEW: \"New\",\r\n    EDITABLE: \"Editable\",\r\n    DELETED: \"Deleted\",\r\n    READ_ONLY: \"ReadOnly\"\r\n}\r\n\r\nexport default RecordStatus","import moment from 'moment-timezone';\r\n\r\nexport function getDate(dt) {\r\n    var d = new Date(dt).toLocaleDateString();\r\n    return d;\r\n}\r\nexport function getDateEt(dt) {    // to show date when time must be in ET, in case of midnight\r\n    var d = moment(dt).tz(\"America/New_York\").format('l');\r\n    return d;\r\n}\r\nexport function getTimeHhMm(dt) {\r\n    var t = new Date(dt).toLocaleTimeString();\r\n    var hm = t.slice(0, t.lastIndexOf(':')) + ' ' + t.split(' ')[1];\r\n    return hm;\r\n}\r\nexport function getTimeHhMmSs(dt) {\r\n    var hms = new Date(dt).toLocaleTimeString();\r\n    return hms;\r\n}\r\nexport function getTimeHhMmWithTimeZone(dt) {\r\n    var t = new Date(dt).toLocaleTimeString();\r\n    var hm = t.slice(0, t.lastIndexOf(':')) + ' ' + t.split(' ')[1] + ' [ET]';\r\n    return hm;\r\n}\r\nexport function getTimeHhMmWithTimeZoneEt(dt) {  // when time must be shown in ET\r\n    var t = moment(dt).tz(\"America/New_York\").format('LT');\r\n    var hm = t + ' [ET]';\r\n    return hm;\r\n}\r\nexport function getTimeHhMmWithTimeZoneString(dt) {\r\n    var hm = dt.slice(0, dt.lastIndexOf('E')) + ' [ET]';\r\n\r\n    return hm;\r\n}\r\nexport function getDateTimeWithTimeZone(dt) {\r\n    var date = new Date(dt);\r\n    var d = date.toLocaleDateString();\r\n    var t = date.toLocaleTimeString();\r\n    var t_part = t.slice(0, t.lastIndexOf(':')) + ' ' + t.split(' ')[1]\r\n    var allStr = d + ' ' + t_part + ' [ET]';\r\n    \r\n    return allStr;\r\n}\r\nexport function getDateIso(dateTimeStr) {\r\n    var dt = new Date(dateTimeStr);\r\n    if (dt instanceof Date && !isNaN(dt)) {\r\n        var dateStr = dt.getFullYear() + \"-\" + (dt.getMonth() + 1) + \"-\" + dt.getDate() + \"T00:00:00.000Z\";\r\n        return dateStr;\r\n    }\r\n\tthrow new Error(\"Invalid date in search field(s).\");\r\n}\r\n\r\nexport default {\r\n    getDate,\r\n    getDateEt,\r\n    getTimeHhMm,\r\n    getTimeHhMmSs,\r\n    getTimeHhMmWithTimeZone,\r\n    getTimeHhMmWithTimeZoneEt,\r\n    getTimeHhMmWithTimeZoneString,\r\n    getDateTimeWithTimeZone,\r\n    getDateIso\r\n};\r\n","import https from \"./httpService\";\r\nimport auth from \"../services/authService\";\r\nimport DateTime from \"../components/common//DateTimeConversionMethods\";\r\n\r\nexport async function getSolicitations(search, sortBy) {\r\n\r\n    const user = await auth.getCurrentUser();\r\n\r\n    //const closingDateStartUtc = new Date(search.closingDateStart).toJSON();\r\n    //const closingDateEndUtc = new Date(search.closingDateEnd).toJSON();\r\n\r\n    var dateStart = new Date();\r\n    dateStart.setFullYear(dateStart.getFullYear() - 1);\r\n    var closingDateStartStr = DateTime.getDateIso(dateStart); // default start value -1 year\r\n    //console.log(\"default start year -1\");\r\n\r\n    if (search.closingDateStart) { // only if search start date found\r\n        //console.log(\"found start search year\");\r\n        var parsed = DateTime.getDateIso(search.closingDateStart); // start year from search\r\n\r\n        if (search.originalclosingDateStart && parsed == DateTime.getDateIso(search.originalclosingDateStart)) {\r\n            closingDateStartStr = DateTime.getDateIso(dateStart); // start year -1 year\r\n            //console.log(\"use start year -1\");\r\n        }\r\n        else {\r\n            closingDateStartStr = parsed; // user search year \r\n           // console.log(\"use start year from search\");\r\n        }\r\n    }\r\n\r\n\r\n    var dateEnd = new Date();\r\n    dateEnd.setFullYear(dateEnd.getFullYear() + 1);\r\n    var closingDateEndStr = DateTime.getDateIso(dateEnd); // default start value +1 year\r\n    //console.log(\"default end year +1\");\r\n\r\n    if (search.closingDateEnd) { // only if search end date found\r\n        //console.log(\"found end search year\");\r\n        var parsed = DateTime.getDateIso(search.closingDateEnd); // end year from search\r\n        closingDateEndStr = parsed; // user search year \r\n        //console.log(\"use end year from search\");\r\n    }\r\n\r\n       \r\n\r\n    var searchQuery = \"\";\r\n    //if (search) {\r\n    //    searchQuery = \"closingDateStart=\" + search.closingDateStart + \"&closingDateEnd=\" + search.closingDateEnd\r\n    //        + \"&institute=\" + search.institute + \"&agency=\" + search.agency + \"&searchKeyword=\" + search.keyword;\r\n    //}\r\n\r\n    if (search) {\r\n        searchQuery = \"closingDateStart=\" + closingDateStartStr + \"&closingDateEnd=\" + closingDateEndStr\r\n            + \"&institute=\" + search.institute + \"&agency=\" + search.agency + \"&searchKeyword=\" + search.keyword;\r\n    }\r\n\r\n    //var filterQuery = \"&filter=\" + filter;\r\n    var sortByQuery = \"&sortBy=\" + sortBy;\r\n\r\n    if (!user) {\r\n        return https.get(\r\n            \"api/solicitations/getSolicitations?\"/* + icIdQuery*/ + searchQuery/* + filterQuery*/ + sortByQuery\r\n        );\r\n    } else {\r\n        return https.get(\r\n            \"api/solicitations/getSolicitationsSecure?\"/* + icIdQuery*/ + searchQuery/* + filterQuery*/ + sortByQuery\r\n        );\r\n    }    \r\n}\r\n\r\nexport async function getSolicitation(solId) {\r\n\r\n    if (!solId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/Solicitation/\" + solId\r\n    );\r\n}\r\n\r\nexport async function getDropDownListForSolicitation(icId) {\r\n    //console.log(\" Getting drop down data for icid:\", icId);\r\n    if (!icId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/GetSolicitationCreationDropdownList?icId=\" + icId\r\n    );\r\n}\r\n\r\nexport async function getInstituteList() {\r\n    return https.get(\r\n        \"api/solicitations/InstituteDdList\"\r\n    );\r\n}\r\n\r\nexport async function saveSolicitation(icid,solicitation) {\r\n    const body = { ...solicitation }\r\n    body.ActiveIc = icid;\r\n\r\n    //console.log(\"Solicitation data to Save: \", body);\r\n    \r\n    return https.post(\"api/solicitations/create\", body);\r\n}\r\n\r\nexport async function getProposalById(proposalId) {\r\n    if (!proposalId)\r\n        return null;\r\n\r\n   return https.get(\r\n        \"api/proposals/GetProposalById/\" + proposalId\r\n    );\r\n}\r\n\r\nexport async function editSolicitation(icid, solicitation) {\r\n    const body = { ...solicitation }\r\n    body.ActiveIc = icid;\r\n\r\n    //console.log(\"Solicitation data to Save: \", body);\r\n\r\n    return https.post(\"api/solicitations/edit\", body);\r\n}\r\n\r\nexport async function getSolicitationAttachments(solicitationId) {\r\n    if (!solicitationId)\r\n        return null;\r\n\r\n    return https.get(`api/solicitations/GetSolicitationAttachments/${solicitationId}`);\r\n}\r\n\r\nexport async function getSolicitationDelegateStaff(solicitationId, taskAreaContractID) {\r\n    if (!solicitationId)\r\n        return null;\r\n\r\n    return https.get(`api/solicitations/GetSolicitationDelegateStaff/${solicitationId}/taskAreaContractId/${taskAreaContractID}`);\r\n}\r\n\r\nexport async function saveSolicitationDelegateStaff(dto) {\r\n    if (!dto)\r\n        return null;\r\n\r\n    return https.post(`api/solicitations/SaveSolicitationDelegateStaff`, dto);\r\n}\r\n\r\nexport default {\r\n    getSolicitations: getSolicitations,\r\n    getDropDownListForSolicitation: getDropDownListForSolicitation,\r\n    saveSolicitation: saveSolicitation,\r\n    getSolicitation: getSolicitation,\r\n    getProposalById: getProposalById,\r\n    editSolicitation: editSolicitation,\r\n    getInstituteList: getInstituteList,\r\n    getSolicitationAttachments: getSolicitationAttachments,\r\n    getSolicitationDelegateStaff: getSolicitationDelegateStaff,\r\n    saveSolicitationDelegateStaff: saveSolicitationDelegateStaff\r\n};","const HTTPStatusCodes = {\r\n    SUCCESS: 200\r\n}\r\n\r\nexport default HTTPStatusCodes","import React, { Component } from \"react\";\r\n\r\nimport { Button, Image } from 'react-bootstrap';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport { toast } from \"react-toastify\";\r\n\r\nimport Joi from 'joi-browser';\r\n\r\nimport Input from \"../common/input\";\r\n\r\nimport RecordStatus from \"../../enums/RecordStatus\";\r\nimport solicitationService from \"../../services/solicitationService\";\r\nimport HTTPStatusCodes from \"../../enums/HTTPStatusCodes\";\r\n\r\nexport class DelegateStaffModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        //this.state = this.createInitialState();\r\n        this.state = {\r\n            vendorOrgName: \"\",\r\n            delegateStaff: [],\r\n            errors: [],\r\n            loading: false\r\n        }\r\n        this.save = this.save.bind(this);\r\n        this.close = this.close.bind(this);\r\n        this.addNewDelegateStaff = this.addNewDelegateStaff.bind(this);\r\n    }\r\n\r\n    createInitialState() {\r\n        //console.log(\"initial state data from props\", props);\r\n        return {\r\n            vendorOrgName: \"\",\r\n            delegateStaff: [],\r\n            errors: []\r\n        };\r\n    }\r\n\r\n    //componentWillReceiveProps(nextProps) {\r\n    //    const parentState = nextProps.formData.state;\r\n    //    const delegateStaffData = parentState.delegateStaffData;\r\n    //    this.setVendorOrgName(delegateStaffData);\r\n    //    this.setDelegateStaff(delegateStaffData);\r\n    //    this.clearValidationErrors();\r\n    //}\r\n\r\n    static getDerivedStateFromProps(props, state) {\r\n        if (\r\n            (props.formData.state.delegateStaff && props.formData.state.delegateStaff !== state.delegateStaff)\r\n            || (props.formData.state.vendorOrgName !== state.vendorOrgName)\r\n            || (props.formData.state.delegateStaffLoading !== state.loading)\r\n            || (props.formData.state.delegateStaffErrors !== state.errors)\r\n        ) {\r\n            return {\r\n                delegateStaff: props.formData.state.delegateStaff,\r\n                vendorOrgName: props.formData.state.vendorOrgName,\r\n                loading: props.formData.state.delegateStaffLoading,\r\n                errors: props.formData.state.delegateStaffErrors\r\n            };\r\n        }\r\n        return null;\r\n    }\r\n\r\n    //setVendorOrgName(delegateStaffData) {\r\n    //    if (delegateStaffData == null)\r\n    //        return;\r\n    //    const vendorOrgName = delegateStaffData.vendorOrgName;\r\n    //    this.setState({ vendorOrgName: vendorOrgName });\r\n    //}\r\n\r\n    //setDelegateStaff(delegateStaffData) {\r\n    //    if (delegateStaffData == null)\r\n    //        return;\r\n    //    const delegateStaff = delegateStaffData.delegateStaff;\r\n    //    const delegateStaffWithStatus = delegateStaff.map((d, index) => {\r\n    //        return d.roleName === \"Other\" ? { ...d, index, status: RecordStatus.EDITABLE } : { ...d, index, status: RecordStatus.READ_ONLY };\r\n    //    });\r\n    //    this.setState({ delegateStaff: delegateStaffWithStatus });\r\n    //}\r\n\r\n    //clearValidationErrors() {\r\n    //    this.setState({ errors: [] });\r\n    //}\r\n\r\n    addNewDelegateStaff() {\r\n        const index = this.getLastUserIndex(this.state.delegateStaff);\r\n        //console.log(\"addNewDelegateStaff- new index\", index);\r\n        const newUser = this.createNewUser(index);\r\n        const newDelegateStaff = [...this.state.delegateStaff, newUser];\r\n        //this.setState({ delegateStaff: newDelegateStaff });\r\n        this.props.formData.handleDelegateStaffChange(newDelegateStaff);\r\n    }\r\n\r\n    createNewUser(index) {\r\n        return {\r\n            \"index\": index,\r\n            \"userAccessId\": 0,\r\n            \"firstName\": \"\",\r\n            \"lastName\": \"\",\r\n            \"roleName\": \"Other\",\r\n            \"email\": \"\",\r\n            status: RecordStatus.NEW\r\n        };\r\n    }\r\n\r\n    getLastUserIndex(users) {\r\n\r\n        if (users == null || users.length === 0)\r\n            return 1;\r\n        const lastAddedUser = users[users.length - 1];\r\n        return lastAddedUser.index + 1;\r\n    }\r\n\r\n    deleteDelegateStaffUser(delegateStaffUser) {\r\n        const updatedDelegateStaffUsers = this.getUpdatedDelegateStaff(delegateStaffUser);\r\n        const errors = this.getUpdatedErrors(delegateStaffUser);\r\n        //this.setState({ delegateStaff: updatedDelegateStaffUsers, errors });\r\n        this.props.formData.handleDelegateStaffChange(updatedDelegateStaffUsers);\r\n        this.props.formData.handleDelegateStaffErrorsChange(errors);\r\n    }\r\n\r\n    getUpdatedDelegateStaff(delegateStaffUser) {\r\n        const deletedUserIndex = delegateStaffUser.index;\r\n        if (delegateStaffUser.status === RecordStatus.EDITABLE) {\r\n            const delegateStaff = this.state.delegateStaff;\r\n            const delegateStaffToDelete = delegateStaff.find(user => user.index === deletedUserIndex && user.status === RecordStatus.EDITABLE);\r\n            delegateStaffToDelete.status = RecordStatus.DELETED;\r\n            return delegateStaff;\r\n        }\r\n        else if (delegateStaffUser.status === RecordStatus.NEW) {\r\n            const updatedDelegateStaff = this.state.delegateStaff.filter(user => !(user.index === deletedUserIndex && user.status === RecordStatus.NEW));\r\n            this.updateIndexes(updatedDelegateStaff, deletedUserIndex);\r\n            return updatedDelegateStaff;\r\n        }\r\n        else {\r\n            toast.error(\"Error deleting user.\");\r\n            return [];\r\n        }\r\n    }\r\n\r\n    getUpdatedErrors(delegateStaffUser) {\r\n        const errors = this.state.errors;\r\n        if (delegateStaffUser.status === RecordStatus.DELETED)\r\n            return errors;\r\n        const deletedUserIndex = delegateStaffUser.index;\r\n        const updatedErrors = errors.filter(error => error.index !== deletedUserIndex);\r\n        this.updateIndexes(updatedErrors, deletedUserIndex);\r\n        return updatedErrors;\r\n    }\r\n\r\n    updateIndexes(items, deletedIndex) {\r\n        items.forEach(item => {\r\n            if (item.index > deletedIndex)\r\n                item.index--;\r\n        });\r\n    }\r\n\r\n    inputHandler = (e, user) => {\r\n        const name = e.target.name;\r\n        const delegateStaff = this.state.delegateStaff;\r\n        const delegateStaffUser = delegateStaff.find(u => u.index === user.index && u.status === user.status);\r\n        const value = e.target.value;\r\n\r\n        if (name.includes(\"delegate-user-first-name\"))\r\n            delegateStaffUser.firstName = value;\r\n        else if (name.includes(\"delegate-user-last-name\"))\r\n            delegateStaffUser.lastName = value;\r\n        else if (name.includes(\"delegate-user-email\"))\r\n            delegateStaffUser.email = value;\r\n\r\n        //this.setState({ delegateStaff: delegateStaff });\r\n        this.props.formData.handleDelegateStaffChange(delegateStaff);\r\n    }\r\n\r\n    close() {\r\n        //const initialState = this.createInitialState();\r\n        //this.setState(initialState);\r\n        this.props.formData.handleCloseStaff();\r\n    }\r\n\r\n    async save() {\r\n        //this.setState({ loading: true });\r\n        this.props.formData.handleDelegateStaffLoadingChange(true);\r\n        const errors = this.validateDelegateStaff();\r\n        //this.setState({ errors: errors });\r\n        this.props.formData.handleDelegateStaffErrorsChange(errors);\r\n        if (errors.length > 0) {\r\n            this.props.formData.handleDelegateStaffLoadingChange(false);\r\n            return;\r\n        }\r\n\r\n        const dto = this.getDelegateStaffDto();\r\n        await solicitationService\r\n            .saveSolicitationDelegateStaff(dto)\r\n            .then(result => {\r\n                if (result.status === HTTPStatusCodes.SUCCESS) {\r\n                    toast.success(\"Delegate Staff Updated Successfully\");\r\n                    this.props.formData.handleOpenStaff(dto.solicitationId, dto.taskAreaContractId, true);\r\n                    this.props.formData.handleOpenStaff(dto.solicitationId, dto.taskAreaContractId, false);\r\n                    //this.setState({ loading: false });\r\n                    this.props.formData.handleDelegateStaffLoadingChange(false);\r\n                }\r\n\r\n            })\r\n            .catch(ex => {\r\n                //console.log(ex);\r\n                //this.setState({ loading: false });\r\n                \r\n\r\n                if (ex.response.status === 400) {\r\n                    toast.error(ex.response.data);\r\n                } else {\r\n                    toast.error(\"Error updating Delegate Staff.\");\r\n                }\r\n                this.props.formData.handleDelegateStaffLoadingChange(false);\r\n                this.props.formData.handleOpenStaff(dto.solicitationId, dto.taskAreaContractId, false);\r\n            });\r\n    }\r\n\r\n    validateDelegateStaff() {\r\n        const delegateStaff = this.state.delegateStaff;\r\n        const schema = Joi\r\n            .array()\r\n            .items(Joi\r\n                .object()\r\n                .keys({\r\n                    firstName: Joi.string().required().error(() => { return { message: \"First name is required.\" }; }),\r\n                    lastName: Joi.string().required().error(() => { return { message: \"Last name is required.\" }; }),\r\n                    email: Joi.string().email().required().error(() => { return { message: \"Valid email is required.\" }; })\r\n                }));\r\n\r\n        const toValidate = [];\r\n        delegateStaff.forEach(user => toValidate.push({\r\n            firstName: user.firstName,\r\n            lastName: user.lastName,\r\n            email: user.email\r\n        }));\r\n\r\n        const errors = [];\r\n        const { error } = Joi.validate(toValidate, schema, { abortEarly: false });\r\n        if (error) {\r\n            for (let detail of error.details) {\r\n                const errObj = new Object();\r\n                [errObj.index, errObj.fieldName] = detail.path;\r\n                errObj.message = detail.message;\r\n                errors.push(errObj);\r\n            }\r\n        }\r\n        this.checkDuplicateEmails(toValidate, errors);\r\n        return errors;\r\n    }\r\n\r\n    checkDuplicateEmails(toValidate, errors) {\r\n        toValidate.forEach((user, index) => {\r\n            const email = user.email.toLowerCase();\r\n            const duplicateEmailUsers = toValidate.filter(u => u.email.toLowerCase() === email);\r\n            if (duplicateEmailUsers && duplicateEmailUsers.length > 1) {\r\n                const errObj = new Object();\r\n                errObj.index = index;\r\n                errObj.fieldName = \"email\";\r\n                errObj.message = \"Duplicate emails are not allowed.\";\r\n                errors.push(errObj);\r\n            }\r\n        });\r\n    }\r\n\r\n    getDelegateStaffDto() {\r\n        const delegateStaff = this.state.delegateStaff;\r\n        const formData = this.props.formData;\r\n        const parentState = formData.state;\r\n        const selectedSolicitationId = parentState.selectedSolicitationId;\r\n        const selectedTaskAreaContractId = parentState.selectedTaskAreaContractID;\r\n        const delegateStaffToSave = delegateStaff.filter(ds => ds.status !== RecordStatus.READ_ONLY);\r\n        return {\r\n            solicitationId: selectedSolicitationId,\r\n            taskAreaContractId: selectedTaskAreaContractId,\r\n            delegateStaff: delegateStaffToSave\r\n        };\r\n    }\r\n\r\n    getErrorMessage(errors, index, propertyName) {\r\n        if (!errors || errors.length === 0)\r\n            return null;\r\n\r\n        const error = errors.find(e => e.index === index && e.fieldName === propertyName);\r\n        if (!error)\r\n            return null;\r\n\r\n        return error.message;\r\n    }\r\n\r\n    renderDelegateStaffUserRow(delegateStaffUser) {\r\n        if (delegateStaffUser.status === RecordStatus.DELETED)\r\n            return <React.Fragment key={delegateStaffUser.index} />;\r\n\r\n        const isDisabled = delegateStaffUser.status === RecordStatus.READ_ONLY;\r\n        //const isDisabled = delegateStaffUser.status !== RecordStatus.NEW;\r\n        const isEmailDisabled = delegateStaffUser.status !== RecordStatus.NEW;\r\n        const index = delegateStaffUser.index;\r\n        return <tr style={{ height: 60 }} key={index}>\r\n            {this.renderDelegateStaffUserCell(index, \"first-name\", isDisabled, \"First Name\", \"firstName\", delegateStaffUser)}\r\n            {this.renderDelegateStaffUserCell(index, \"last-name\", isDisabled, \"Last Name\", \"lastName\", delegateStaffUser)}\r\n            {this.renderDelegateStaffUserCell(index, \"role-name\", true, \"Role Name\", \"roleName\", delegateStaffUser)}\r\n            {this.renderDelegateStaffUserCell(index, \"email\", isEmailDisabled, \"E-Mail\", \"email\", delegateStaffUser)}\r\n            {this.renderDeleteStaffUserCell(delegateStaffUser)}\r\n        </tr>;\r\n    }\r\n\r\n    renderDelegateStaffUserCell(index, labelPrefix, isDisabled, placeholderText, propertyName, delegateStaffUser) {\r\n        const value = delegateStaffUser[propertyName];\r\n        const error = this.getErrorMessage(this.state.errors, index, propertyName);\r\n        return <td>\r\n            <Input\r\n                name={`delegate-user-${labelPrefix}-${index}`}\r\n                type=\"text\"\r\n                value={value}\r\n                isDisabled={isDisabled}\r\n                placeholder={placeholderText}\r\n                error={error}\r\n                onChange={(e) => this.inputHandler(e, delegateStaffUser)} />\r\n        </td>;\r\n    }\r\n\r\n    renderDeleteStaffUserCell(delegateStaffUser) {\r\n        const status = delegateStaffUser.status;\r\n        if (status === RecordStatus.READ_ONLY || status === RecordStatus.DELETED)\r\n            return <td></td>;\r\n\r\n        return <td>\r\n            <button\r\n                value=\"Delete\"\r\n                type=\"button\"\r\n                onClick={() => this.deleteDelegateStaffUser(delegateStaffUser)}\r\n                className=\"right-align-btn btn-white MuiButton-root MuiButtonBase-root btn btn-outline-primary\">\r\n                Delete\r\n            </button>\r\n        </td>;\r\n    }\r\n\r\n    renderDelegateStaffHeaderCell(header) {\r\n        return <th className={`MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight`} scope=\"col\">{header}</th>;\r\n    }\r\n\r\n    render() {\r\n        const formData = this.props.formData;\r\n        const parentState = formData.state;\r\n        const delegateStaffUsers = this.state.delegateStaff;\r\n\r\n        const loader = (<div className=\"loader\">Loading...</div>);\r\n\r\n        return <Dialog\r\n            disableBackdropClick\r\n            disableEscapeKeyDown\r\n            aria-labelledby=\"delegate-staff\"\r\n            aria-describedby=\"delegate-new-staff\"\r\n            open={parentState.delegateStaffModal.open === 'delegateStaff'}\r\n            onClose={this.close}\r\n            fullWidth={true}\r\n            maxWidth=\"lg\">\r\n            <DialogTitle className={`vendor-modal-title`}>\r\n                <span className=\"modal-title\" id=\"add-user-modal-label\">Delegate Staff for {this.state.vendorOrgName}</span>\r\n                <button type=\"button\" className=\"close\" onClick={this.close} aria-label=\"Close\">\r\n                    <span aria-hidden=\"true\">&times;</span>\r\n                </button>\r\n            </DialogTitle>\r\n            <DialogContent className=\"dialog-no-padding-top\">\r\n\r\n                {(parentState.loading || this.state.loading) && loader}\r\n\r\n                <div className={`modal-body`} id=\"delegate-staff\">\r\n                    <form id=\"delegate-staff-form\" className={`vendor-modal-table existing-user white-bordered-rows`}>\r\n                        <table className={`MuiTable-root user-contact`}>\r\n                            <thead className={`MuiTableHead-root headless-table123`}>\r\n                                <tr className={`MuiTableRow-root MuiTableRow-head`}>\r\n                                    {this.renderDelegateStaffHeaderCell(\"Name\")}\r\n                                    {this.renderDelegateStaffHeaderCell(\"\")}\r\n                                    {this.renderDelegateStaffHeaderCell(\"Role\")}\r\n                                    {this.renderDelegateStaffHeaderCell(\"Email\")}\r\n                                    {this.renderDelegateStaffHeaderCell(\"Actions\")}\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody className={`MuiTableBody-root`}>\r\n                                {this.state.delegateStaff && this.state.delegateStaff.map(delegateStaffUser => this.renderDelegateStaffUserRow(delegateStaffUser))}\r\n                                <tr>\r\n                                    <td colSpan=\"5\">\r\n                                        <div className=\"vendor-table-actions\">\r\n                                            <button\r\n                                                onClick={this.addNewDelegateStaff}\r\n                                                value=\"AddNew\"\r\n                                                type=\"button\"\r\n                                                className=\"new-vendor-btn MuiButton-root MuiButtonBase-root btn btn-contained\">\r\n                                                Add New Delegate Staff\r\n                                            </button>\r\n                                        </div>\r\n                                    </td>\r\n                                </tr>\r\n                            </tbody>\r\n                        </table>\r\n                    </form>\r\n                </div>\r\n            </DialogContent>\r\n            <DialogActions>\r\n                <div className=\"dialog-footer\">\r\n                    <Button type=\"button\" className=\"MuiButtonBase-root MuiButton-root btn btn-secondary\" onClick={this.close}>\r\n                        Close\r\n                    </Button>\r\n                    <Button\r\n                        type=\"button\"\r\n                        onClick={this.save}\r\n                        className=\"MuiButtonBase-root MuiButton-root btn btn-primary\">\r\n                        Save\r\n                    </Button>\r\n                </div>\r\n            </DialogActions>\r\n        </Dialog>;\r\n    }\r\n}\r\n\r\nexport default DelegateStaffModal;","function getUrl(area, action, id) {\r\n    return `/api/${area}/${action}/${id}`;\r\n}\r\n\r\nexport default {\r\n    getUrl: getUrl\r\n};","import axios from 'axios'\r\nimport { toast } from \"react-toastify\";\r\n//import fileDownload from 'js-file-download';\r\n\r\nasync function handleDownload(url, filename) {\r\n    return axios.get(url, { responseType: 'blob' });\r\n}\r\n\r\nfunction getDownloadUrl(id) {\r\n    return '/api/file/download/' + id;\r\n}\r\n\r\nexport default {\r\n    handleDownload: handleDownload,\r\n    getDownloadUrl: getDownloadUrl\r\n};","import React, { Component } from \"react\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport UrlUtility from \"../../utilities/UrlUtility\";\r\nimport fileDownload from 'js-file-download';\r\nimport fileService from \"../../services/fileService\";\r\n\r\nexport class RtopAttachmentsModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = { showDownloadProgress: false, showDownloadAllProgress: false, downloadAttachmentId: -1};\r\n    }\r\n\r\n    downloadFile(fileDbId, fileName) {\r\n        const url = UrlUtility.getUrl(\"solicitations\", \"Download\", fileDbId);\r\n        this.setState({ showDownloadProgress: true, downloadAttachmentId: fileDbId });\r\n        fileService.handleDownload(url, fileName)\r\n            .then(response => {\r\n                fileDownload(response.data, fileName);\r\n                this.setState({ showDownloadProgress: false, downloadAttachmentId: -1 });\r\n            })\r\n            .catch(err => { this.setState({ showDownloadProgress: false, downloadAttachmentId: -1 }); });\r\n    }\r\n\r\n    downloadAllAttachments(solicitationId) {\r\n        const url = UrlUtility.getUrl(\"solicitations\", \"DownloadAllRtopAttachments\", solicitationId);\r\n        const fileName = `solicitation-${solicitationId}-rtop-attachments.zip`;\r\n        this.setState({ showDownloadAllProgress: true});\r\n        fileService.handleDownload(url, fileName)\r\n            .then(response => {\r\n                fileDownload(response.data, fileName);\r\n                this.setState({ showDownloadAllProgress: false });\r\n            })\r\n            .catch(err => { this.setState({ showDownloadAllProgress: false}); });\r\n    }\r\n\r\n    renderAttachment(attachment) {\r\n        return <tr className=\"MuiTableRow-root\" key={attachment.id}>\r\n                   <td className=\"MuiTableData-root\" data-label=\"Initial Attachment\">\r\n                       <a href=\"#\" onClick={() => this.downloadFile(attachment.id, attachment.fileName)}>{attachment.fileName}</a>\r\n                       {this.state.showDownloadProgress && this.state.downloadAttachmentId === attachment.id &&\r\n                    <span style={{ marginLeft: '30px' }}><span>Downloading...</span><span className=\"loader small-loader\" style={\r\n{ position: 'absolute' }}></span></span>\r\n                }\r\n                   </td>\r\n                   <td className=\"MuiTableData-root\" data-label=\"File Size\">{attachment.fileSize}</td>\r\n                   <td className=\"MuiTableData-root\" data-label=\"Date Added\">{attachment.dateAdded}</td>\r\n               </tr>;\r\n    }\r\n    \r\n    renderAttachmentGroup(attachmentGroup) {\r\n        const isInitial = attachmentGroup.id === 1;\r\n        const subHeading = isInitial ? \"Initial Attachments\" : `Additional Attachments ${attachmentGroup.time}`;\r\n\r\n        return <React.Fragment key={attachmentGroup.id}>\r\n            <table className=\"MuiTable-root\">\r\n                <thead className=\"MuiTableHead-root\">\r\n                    <tr className=\"MuiTableRow-root MuiTableRow-head headless-table\">\r\n                        <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">{subHeading}</th>\r\n                        <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">File Size</th>\r\n                        <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">Date Added</th>\r\n                    </tr>\r\n                </thead>\r\n            </table>\r\n            <div className=\"table-scroller\">\r\n                <table className=\"MuiTable-root headless-table\">\r\n                    <thead className=\"MuiTableHead-root\">\r\n                        <tr className=\"MuiTableRow-root MuiTableRow-head\">\r\n                            <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">Initial Attachments</th>\r\n                            <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">File Size</th>\r\n                            <th className=\"MuiTableCell-root MuiTableCell-head MuiTableCell-alignRight\" scope=\"col\">Date Added</th>\r\n                        </tr>\r\n                    </thead>\r\n                    <tbody className=\"MuiTableBody-root\">\r\n                        {attachmentGroup.rtopAttachments && attachmentGroup.rtopAttachments.map(attachment => this.renderAttachment(attachment))}\r\n                    </tbody>\r\n                </table>\r\n            </div>\r\n        </React.Fragment>;\r\n    }\r\n\r\n    render() {\r\n        const formData = this.props.formData;\r\n        const parentState = this.props.formData.state;\r\n        const loader = (<div className=\"loader\">Loading...</div>);\r\n        const rtopAttachmentGroups = parentState.rtopAttachmentGroups;\r\n        const hasAttachmentGroups = rtopAttachmentGroups && rtopAttachmentGroups.length > 0;\r\n\r\n        return <Dialog\r\n            disableBackdropClick\r\n            disableEscapeKeyDown\r\n            aria-labelledby=\"rtop-downloads\"\r\n            aria-describedby=\"rtop-attachment-downloads\"\r\n            open={parentState.rtopAttachmentsModal.open === 'rtopAttachments'}\r\n            onClose={formData.handleCloseRtop}\r\n            fullWidth={true}\r\n            maxWidth=\"lg\"\r\n            className=\"attachments-download-modal\">\r\n            <DialogTitle className=\"vendor-modal-title\">\r\n                <span className=\"modal-title\" id=\"add-user-modal-label\">Attachments for {parentState.selectedSolicitationTitle}</span>\r\n                <button type=\"button\" className=\"close\" onClick={formData.handleCloseRtop.bind(this)} aria-label=\"Close\">\r\n                    <span aria-hidden=\"true\">&times;</span>\r\n                </button>\r\n           </DialogTitle>\r\n           <DialogContent className=\"dialog-no-padding-top\">\r\n               {parentState.loading && loader}\r\n               <div className=\"modal-body\" id=\"rtop-downloads\">\r\n                    <div className=\"modal-download-container\">\r\n                        {this.state.showDownloadAllProgress ?\r\n                            <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained white-btn revise-download\" tabIndex=\"0\" type=\"button\"><span>Downloading ...</span><span className=\"loader small-loader all-attach\"></span></button> : \r\n                        <button\r\n                            tabIndex=\"0\"\r\n                            type=\"button\"\r\n                            onClick={() => this.downloadAllAttachments(parentState.selectedSolicitationId)}\r\n                            disabled={!hasAttachmentGroups}\r\n                            className=\"MuiButtonBase-root MuiButton-root MuiButton-contained white-btn\">\r\n                           <span className=\"MuiButton-label\">\r\n                                <img src=\"images/download-blue.svg\" alt=\"download-all-attachments\"/>Download All Attachments\r\n                           </span>\r\n                           <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>}\r\n                   </div>\r\n                   <div className=\"gray-table-container\">\r\n                        {hasAttachmentGroups && rtopAttachmentGroups.map(attachmentGroup => this.renderAttachmentGroup(attachmentGroup))}\r\n                   </div>\r\n               </div>\r\n               <div className=\"dialog-footer float-right success-footer\">\r\n                    <button type=\"button\" className=\"MuiButtonBase-root MuiButton-root btn btn-secondary\" onClick={formData.handleCloseRtop}>Close</button>\r\n               </div>\r\n           </DialogContent>\r\n        </Dialog>;\r\n    }\r\n}\r\n\r\nexport default RtopAttachmentsModal;","import React, { Component } from 'react';\r\nimport { toast } from \"react-toastify\";\r\n//import _ from 'lodash';\r\nimport { sectionNonSpecialInvite, sectionSpecialInvite } from './SolicitationListSections';\r\n//import SolicitationFilter from './secure/SolicitationFilter';\r\n//import Sidebar from './common/sidebar';\r\nimport Pagination from '@material-ui/lab/Pagination';\r\nimport DelegateStaffModal from \"./secure/SolicitationDelegateStaffModal\";\r\nimport RtopAttachmentsModal from \"./secure/SolicitationTaskOrderDownloadsModal\";\r\nimport solicitationService from \"../services/solicitationService\";\r\nimport HTTPStatusCodes from \"../enums/HTTPStatusCodes\";\r\nimport RecordStatus from \"../enums/RecordStatus\";\r\nimport SolicitationType from \"../enums/SolicitationType\";\r\n\r\nexport class SolicitationList extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            currentPage: 1,\r\n            resultsPerPage: 20,\r\n            frontEndPagination: true,\r\n            delegateStaffModal: {\r\n                mode: 'view'\r\n            },\r\n            rtopAttachmentsModal: {\r\n                mode: 'view'\r\n            },\r\n            delegateStaffData: null,\r\n            rtopAttachmentGroups: [],\r\n            selectedSolicitationId: null,\r\n            selectedTaskAreaContractID: null,\r\n            selectedSolicitationTitle: null,\r\n            loading: false,\r\n            delegateStaff: null,\r\n            vendorOrgName: null,\r\n            delegateStaffLoading: false,\r\n            delegateStaffErrors: []\r\n        }\r\n    }\r\n\r\n    handleDelegateStaffErrorsChange = async (delegateStaffErrors) => {\r\n        this.setState({ delegateStaffErrors });\r\n    }\r\n\r\n    handleDelegateStaffLoadingChange = async (delegateStaffLoading) => {\r\n        this.setState({ delegateStaffLoading });\r\n    }\r\n\r\n    handleDelegateStaffChange = async (delegateStaff) => {\r\n        this.setState({ delegateStaff });\r\n    }\r\n    handleOpenStaff = async (solicitationId, taskAreaContractID, isSaving) => {\r\n        const add = Object.assign({}, this.state.delegateStaffModal);\r\n        add.open = 'delegateStaff';\r\n        this.setState({ delegateStaffModal: add, delegateStaffLoading: true });\r\n        \r\n        await solicitationService\r\n            .getSolicitationDelegateStaff(solicitationId, taskAreaContractID)\r\n            .then(result => {\r\n                if (result.status === HTTPStatusCodes.SUCCESS) {\r\n                    //console.log(\"delegate staff data\", result.data);\r\n                    let { vendorOrgName, delegateStaff } = result.data;\r\n                    //console.log(\"vendorOrgName\", vendorOrgName);\r\n                    //console.log(\"delegateStaff\", delegateStaff);\r\n                    //delegateStaff = _.orderBy(delegateStaff, [\"roleName\", \"email\"], [\"asc\", \"asc\"]);\r\n                    //console.log(\"delegateStaff-ordered\", delegateStaff);\r\n                    let delegateStaffWithStatus = {};\r\n                    if (isSaving) {\r\n                        delegateStaffWithStatus = delegateStaff.map((d, index) => {\r\n                            return d.roleName === { ...d, index, status: RecordStatus.READ_ONLY };\r\n                        });\r\n\r\n                        //console.log(\" saving\", delegateStaffWithStatus);\r\n                    } else {\r\n                        delegateStaffWithStatus = delegateStaff.map((d, index) => {\r\n                            return d.roleName === \"Other\" ? { ...d, index, status: RecordStatus.EDITABLE } : { ...d, index, status: RecordStatus.READ_ONLY };\r\n                        });\r\n\r\n                        //console.log(\" not saving\", delegateStaffWithStatus);\r\n                    }\r\n\r\n                    this.setState({\r\n                        delegateStaffData: result.data,\r\n                        selectedSolicitationId: solicitationId,\r\n                        selectedTaskAreaContractID: taskAreaContractID,\r\n                        delegateStaff: delegateStaffWithStatus,\r\n                        vendorOrgName,\r\n                        delegateStaffLoading: false\r\n                    });\r\n                }\r\n\r\n            })\r\n            .catch(ex => {\r\n                //console.log(ex);\r\n                this.setState({ delegateStaffLoading: false });\r\n                toast.error(\"Error while fetching Delegate Staff for Solicitation.\");\r\n            });\r\n    }\r\n\r\n    handleCloseStaff = () => {\r\n        var add = Object.assign({}, this.state.delegateStaffModal);\r\n        add.open = '';\r\n        add.openRolePanel = false;\r\n        add.openUserList = false;\r\n        add.ldapUserList = [];\r\n        this.setState({\r\n            delegateStaffModal: add,\r\n            selectedSolicitationId: null,\r\n            selectedTaskAreaContractID: null,\r\n            delegateStaff: null,\r\n            vendorOrgName: null,\r\n            delegateStaffLoading: false,\r\n            delegateStaffErrors: []\r\n        });\r\n    }\r\n\r\n    handleOpenRtop = async (solicitationId, solicitationTitle) => {\r\n        const add = Object.assign({}, this.state.rtopAttachmentsModal);\r\n        add.open = 'rtopAttachments';\r\n        this.setState({\r\n            rtopAttachmentsModal: add,\r\n            selectedSolicitationId: solicitationId,\r\n            selectedSolicitationTitle: solicitationTitle\r\n        });\r\n\r\n        await solicitationService\r\n            .getSolicitationAttachments(solicitationId)\r\n            .then(result => {\r\n                if (result.status === HTTPStatusCodes.SUCCESS)\r\n                    this.setState({ rtopAttachmentGroups: result.data });\r\n            })\r\n            .catch(ex => {\r\n                //console.log(ex);\r\n                toast.error(\"Error while fetching attachments.\");\r\n            });\r\n    }\r\n\r\n    handleCloseRtop = () => {\r\n        var add = Object.assign({}, this.state.rtopAttachmentsModal);\r\n        add.open = '';\r\n        add.openRolePanel = false;\r\n        add.openUserList = false;\r\n        add.ldapUserList = [];\r\n        this.setState({ rtopAttachmentsModal: add, selectedSolicitationId: null });\r\n    }\r\n\r\n    solicitationTypeClass = (noticeTypeName) => {\r\n        switch (noticeTypeName) {\r\n            case 'Solicitation':\r\n                return 'solicitation';\r\n            case 'Combined Synopsis/Solicitation':\r\n                return 'combined';\r\n            case 'Sources Sought':\r\n                return 'sources';\r\n            case 'Presolicitation':\r\n                return 'pre-notice';\r\n            case 'Special Notice':\r\n                return 'pre-notice';\r\n            case 'Award':\r\n                return 'award';\r\n            default:\r\n                return 'other';\r\n        }\r\n    };\r\n    setPageNumber = (value) => {\r\n        this.setState({ currentPage: value });\r\n    }\r\n    //getTimeHhMmWithTimeZoneString(dt) {\r\n    //    var hm = dt.slice(0, dt.lastIndexOf('E')) + ' [ET]';\r\n\r\n    //    return hm;\r\n    //}\r\n\r\n    renderInvitedAttachmentsButtons(solicitation) {\r\n        return <div className=\"solicitation-toggleable-container\">\r\n            <span className=\"yellow-pill invite-pill\"><img src=\"images/star-yellow.svg\" alt=\"Invited Icon\" />Invited</span>\r\n            <button className=\"link-btn\" onClick={() => this.handleOpenRtop(solicitation.solicitationID, solicitation.solicitationTitle)}>\r\n                Attachments<img src=\"images/download-blue.svg\" alt=\"download-attachments\" />\r\n            </button>\r\n            {(solicitation.solicitationTypeId === SolicitationType.Other) ? (<span className=\"project-banner-sol-number\">{solicitation.solicitationNumber}</span>) : ''}\r\n        </div>;\r\n    }\r\n\r\n    renderSpecialInvitedAttachmentsButtons(solicitation) {\r\n        return <div className=\"solicitation-toggleable-container\" style={{paddingRight: \"65px\"} }>\r\n            <span className=\"yellow-pill invite-pill\"><img src=\"images/star-yellow.svg\" alt=\"Invited Icon\" />Invited</span>\r\n            {/*<button className=\"link-btn\" onClick={() => this.handleOpenRtop(solicitation.solicitationID, solicitation.solicitationTitle)}>*/}\r\n            {/*    Attachments<img src=\"images/download-blue.svg\" alt=\"download-attachments\" />*/}\r\n            {/*</button>*/}\r\n            {/*{(solicitation.solicitationTypeId === SolicitationType.ARPA) ? (<span className=\"project-banner-sol-number\">{solicitation.solicitationNumber}</span>) : ''}*/}\r\n        </div>;\r\n    }\r\n\r\n    renderSamUrl(solicitation) {\r\n        if (solicitation.samUrl == \"\" || solicitation.solicitationNumber == \"\")\r\n            return \"\";\r\n        return <a href={solicitation.samUrl} target=\"_blank\" className=\"project-link\">{solicitation.solicitationNumber}</a>;\r\n    }\r\n\r\n    render() {\r\n        let totalPages = Math.ceil(this.props.solList.length / this.state.resultsPerPage);\r\n        let startIndex = (this.state.currentPage - 1) * this.state.resultsPerPage;\r\n        let endIndex = startIndex + this.state.resultsPerPage;\r\n        let solsCurrentPage = this.state.frontEndPagination ? this.props.solList.slice(startIndex, endIndex) : this.props.solList;\r\n        \r\n        let updatePage = (event, newPageNumber) => {\r\n \r\n            this.setPageNumber(newPageNumber);\r\n\r\n            document.body.scrollTop = 0; // For Safari\r\n            document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\r\n        };\r\n        return (\r\n\r\n            <div className=\"container-fluid solicitation-landing external\">\r\n \r\n                {this.state.frontEndPagination && (<div className=\"pagination\"><Pagination count={totalPages} page={this.state.currentPage} onChange={updatePage} aria-label=\"top pagination naviation\" /></div>)}\r\n\r\n\r\n\r\n                {solsCurrentPage.map((sol, index) => {\r\n                    return (<div className={`project-banner-preview combined project-banner-preview ${this.solicitationTypeClass(sol.noticeTypeName)}`} key={index}>\r\n                        {sol.specialInvites.length === 0 && sectionNonSpecialInvite(this, sol)}\r\n                        {sol.specialInvites.length > 0 && sectionSpecialInvite(this, sol) }\r\n                    </div>)})               \r\n                }\r\n\r\n                {this.state.frontEndPagination && (<div className=\"pagination\"><Pagination count={totalPages} page={this.state.currentPage} onChange={updatePage} aria-label=\"bottom pagination navigation\" /></div>)}\r\n\r\n                <DelegateStaffModal formData={this} />\r\n                <RtopAttachmentsModal formData={this} />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SolicitationList;","export const ShowSidebar = true;\r\nexport const ShowEditSolicitationSidebar = true;\r\nexport const MaxContentSizeAllowed = 406000000; //todo: actual value - 406000000 , testing value -406000\r\nexport const Error = \"Error\";\r\nexport const NotAllowed = \"NotAllowed\";\r\nexport const MaxContentSizeLimitExceeded = \"MaxContentSizeLimitExceeded\";\r\nexport const TechPdf = 1;\r\nexport const HumanPdf = 2;\r\nexport const BusinessPdf = 3;\r\nexport const BusinessExcel = 4;\r\nexport const NonRDBusinessDocs = 5;\r\n","import React, { Component, Fragment } from \"react\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\r\nimport { ShowSidebar } from \"./constants\";\r\nimport solicitationService from \"../../services/solicitationService\";\r\n// import '../siteStyles.css';\r\n\r\nfunction addYears(dt, n) {\r\n    return new Date(dt.setFullYear(dt.getFullYear() + n));\r\n}\r\nfunction addMonths(dt, n) {\r\n    return new Date(dt.setMonth(dt.getMonth() + n));\r\n}\r\nexport class sidebar extends Component {\r\n\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        var defaultFields = this.getDefaultSearchFields();\r\n        this.state = {\r\n            keyword: defaultFields.keyword,\r\n            closingDateStart: defaultFields.closingDateStart,\r\n            originalclosingDateStart: defaultFields.closingDateStart,\r\n            closingDateEnd: defaultFields.closingDateEnd,\r\n            institute: defaultFields.institute,\r\n            agency: defaultFields.agency,\r\n            sortBy: defaultFields.sortBy,\r\n            institutes: {\r\n                allIcsDdList: {}\r\n            }\r\n        };\r\n    }\r\n\r\n    getMinDate() {\r\n        return this.getEstDate(new Date());\r\n    }\r\n\r\n    getDefaultSearchFields() {\r\n        var initStartDate = this.getEstDate(new Date());\r\n\r\n        const defaultSearchFieldValues = {\r\n            keyword: \"\",\r\n            closingDateStart: initStartDate,      // new Date().toLocaleString(),\r\n            originalclosingDateStart: initStartDate,\r\n            closingDateEnd: addYears(new Date(initStartDate), 1),\r\n            institute: \"All\",\r\n            agency: \"All\",\r\n            sortBy: \"ClosingDate\"\r\n        };\r\n        return defaultSearchFieldValues;\r\n    }\r\n\r\n    async componentDidMount() {\r\n        const isSidebarShown = !!localStorage.getItem(ShowSidebar);\r\n        this.setState({ ShowSidebar: isSidebarShown !== ShowSidebar });\r\n        this.props.setDefaultSearchInfo(this.getDefaultSearchFields());\r\n        this.fetchInstituteList();\r\n    }\r\n\r\n    searchInfo = (e) => {\r\n        var searchInfo = {\r\n            keyword: this.state.keyword,\r\n            closingDateStart: this.state.closingDateStart,\r\n            originalclosingDateStart: this.state.originalclosingDateStart,\r\n            closingDateEnd: this.state.closingDateEnd,\r\n            institute: this.state.institute,\r\n            agency: this.state.agency\r\n        };\r\n        return searchInfo;\r\n    }\r\n    resetSearchFields(e) {\r\n        var defaultFields = this.getDefaultSearchFields();\r\n        this.setState({\r\n            keyword: defaultFields.keyword,\r\n            closingDateStart: defaultFields.closingDateStart,\r\n            originalclosingDateStart: defaultFields.closingDateStart,\r\n            closingDateEnd: defaultFields.closingDateEnd,\r\n            institute: defaultFields.institute,\r\n            agency: defaultFields.agency,\r\n            sortBy: defaultFields.sortBy\r\n        });\r\n        this.props.onSortBy(defaultFields.sortBy, this.stateChangeComplete);\r\n    }\r\n    getInstitutesCorrespondingToAgency() {\r\n        switch (this.state.agency.toLowerCase()) {\r\n            case 'all':\r\n                return this.state.institutes.allIcsDdList;\r\n            case 'nih/arpa-h/cdc/samhsa':\r\n                return this.state.institutes.nihIcsDdList;\r\n            case 'sbir/sttr':\r\n                return this.state.institutes.sbirIcsDdList;\r\n            default:\r\n                return this.state.institutes.allIcsDdList;\r\n\r\n        }\r\n    }\r\n    stateChangeComplete = () => {\r\n        var defaultFields = this.getDefaultSearchFields();\r\n        this.props.search(defaultFields);\r\n    }\r\n    async fetchInstituteList() {\r\n        const { data } = await solicitationService.getInstituteList();\r\n        this.setState({ institutes: data });\r\n    }\r\n\r\n    getEDTBeginDate(dt) {\r\n        var dayLightBegin = null;\r\n        var days = new Date(dt.getFullYear(), 2, 0).getDate();\r\n        for (var i = 1; i <= days; i++) {\r\n            var testDt = new Date(dt.getFullYear(), 2, i, 2);\r\n            var month = testDt.getMonth() + 1;\r\n            var day = testDt.getDay();\r\n            var year = testDt.getFullYear();\r\n            var dates = testDt.getDate();\r\n            if (month === 3 && day === 0 && dates >= 8 && dates <= 15) {\r\n                dayLightBegin = testDt;\r\n                return dayLightBegin;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    getEDTEndDate(dt) {\r\n        var dayLightBegin = null;\r\n        var days = new Date(dt.getFullYear(), 10, 0).getDate();\r\n        for (var i = 1; i <= days; i++) {\r\n            var testDt = new Date(dt.getFullYear(), 10, i, 2);\r\n            var month = testDt.getMonth() + 1;\r\n            var day = testDt.getDay();\r\n            var year = testDt.getFullYear();\r\n            var dates = testDt.getDate();\r\n            if (month === 11 && day === 0 && dates >= 1 && dates <= 7) {\r\n                dayLightBegin = testDt;\r\n                return dayLightBegin;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    getEstDate = (date) => {\r\n        var dt = date && date.getUTCHours() !== 0\r\n            ? ((theDate) =>\r\n                new Date(theDate.getTime() + theDate.getTimezoneOffset() * 60 * 1000 - 300 * 60 * 1000))(date)\r\n            : date;\r\n\r\n        if (dt <= this.getEDTEndDate(dt) && dt >= this.getEDTBeginDate(dt)) {\r\n            dt = new Date(dt.getTime() + 60 * 60 * 1000);\r\n        }\r\n        \r\n        return dt.toDateString();\r\n    }\r\n\r\n    render() {\r\n        const toggleSidebar = () => {\r\n            this.setState({ ShowSidebar: this.state.ShowSidebar !== ShowSidebar });\r\n            localStorage.setItem(ShowSidebar, this.state.ShowSidebar);\r\n\r\n        };\r\n\r\n        const cToAgent = this.getInstitutesCorrespondingToAgency();\r\n        return (\r\n            <div className={`sidebar float-sidebar ${this.state.ShowSidebar !== ShowSidebar ? 'closed' : ''}`}>\r\n                <button className=\"btn sidebar-trigger float-trigger\" onClick={() => { toggleSidebar() }}>\r\n                    Filters\r\n                    <img src=\"./images/icon-arrow-down-light.svg\" alt=\"toggle arrow\" style={{ position: \"relative\", zIndex: \"-100\" }} />\r\n                </button>\r\n                <div className=\"sidebar-content\">\r\n                    <form>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root container-sortby\">\r\n                            <label\r\n                                className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled\"\r\n                                data-shrink=\"true\"\r\n                                htmlFor=\"sortby\"\r\n                                id=\"sortby-label\">\r\n                                Sort By\r\n                            </label>\r\n                            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                                <select\r\n                                    className=\"MuiSelect-root MuiSelect-select MuiInputBase-input MuiInput-input\"\r\n                                    value={this.state.sortBy}\r\n                                    id=\"sortby\" onChange={(e) => { this.props.onSortBy(e.target.value); this.setState({ sortBy: e.target.value }) }}>\r\n                                    <option value=\"ClosingDate\">Closing Date</option>\r\n                                    <option value=\"Agency\">Agency</option>\r\n                                    <option value=\"Title\">Title</option>\r\n                                </select>\r\n                                <img src=\"images/select-arrows.svg\" alt=\"arrow dropdown\" />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                            <label\r\n                                className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\"\r\n                                data-shrink=\"true\"\r\n                                htmlFor=\"keyword\"\r\n                                id=\"keyword-label\">\r\n                                Keyword\r\n                            </label>\r\n                            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                                <input\r\n                                    aria-invalid=\"false\"\r\n                                    id=\"keyword\"\r\n                                    maxLength=\"50\"\r\n                                    type=\"text\"\r\n                                    className=\"MuiInputBase-input MuiInput-input\"\r\n                                    value={this.state.keyword}\r\n                                    onChange={val => this.setState({ keyword: val.target.value })} />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root calendar-parent\">\r\n                            <Fragment>\r\n                                <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n                                    <Fragment>\r\n                                        <label>Closing Date Range Start</label>\r\n                                        <KeyboardDatePicker\r\n                                            id=\"closing date range start\"\r\n                                            KeyboardButtonProps={{\r\n                                                'aria-label': 'change closing date range start',\r\n                                            }}\r\n                                            value={this.state.closingDateStart}\r\n                                            placeholder=\"MM/DD/YYYY\"\r\n                                            InputProps={{\r\n                                                disableUnderline: true\r\n                                            }}\r\n                                            onChange={(date) => {this.setState({ closingDateStart: date });\r\n                                            }}\r\n                                            minDate={this.getMinDate()}\r\n                                            format=\"MM/dd/yyyy\"\r\n                                            showTodayButton\r\n                                        />\r\n                                    </Fragment>\r\n                                </MuiPickersUtilsProvider>\r\n                            </Fragment>\r\n                            <Fragment>\r\n                                <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n                                    <Fragment>\r\n                                        <label>Closing Date Range End</label>\r\n                                        <KeyboardDatePicker\r\n                                            id=\"closing date range end\"\r\n                                            KeyboardButtonProps={{\r\n                                                'aria-label': 'change closing date range end',\r\n                                            }}\r\n                                            clearable\r\n                                            value={this.state.closingDateEnd}\r\n                                            placeholder=\"MM/DD/YYYY\"\r\n                                            InputProps={{ disableUnderline: true, }}\r\n                                            onChange={date => this.setState({ closingDateEnd: date })}\r\n                                            minDate={this.state.closingDateStart}\r\n                                            format=\"MM/dd/yyyy\" />\r\n                                    </Fragment>\r\n                                </MuiPickersUtilsProvider>\r\n                            </Fragment>\r\n                        </div>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                            <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled\" data-shrink=\"true\" htmlFor=\"agency\" id=\"agency-label\">\r\n                                Agency/Project\r\n                            </label>\r\n                            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                                <select className=\"MuiSelect-root MuiSelect-select MuiInputBase-input MuiInput-input\" id=\"agency\" value={this.state.agency} onChange={val => this.setState({ agency: val.target.value, institute: this.getDefaultSearchFields().institute })}>\r\n                                    <option value=\"All\" >All</option>\r\n                                    <option value=\"NIH/ARPA-H/CDC/SAMHSA\" >NIH/ARPA-H/CDC/SAMHSA</option>\r\n                                    <option value=\"SBIR/STTR\" >SBIR/STTR</option>\r\n                                </select>\r\n                                <img src=\"images/select-arrows.svg\" alt=\"arrow dropdown\" />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                            <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled\" data-shrink=\"true\" htmlFor=\"institute\" id=\"institute-label\">\r\n                                Institute\r\n                        </label>\r\n                            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                                <select className=\"MuiSelect-root MuiSelect-select MuiInputBase-input MuiInput-input\" id=\"institute\" value={this.state.institute} onChange={val => this.setState({ institute: val.target.value })}>\r\n                                    <option value=\"All\" >All</option>\r\n                                    {\r\n                                        \r\n                                        Object.keys(cToAgent)?.map((key, index) => (\r\n\r\n                                        <option key={key + index} value={cToAgent[key]}>{key}</option>\r\n                                        ))\r\n\r\n                                        //Object.keys(this.getInstitutesCorrespondingToAgency())?.map((key, index) => (\r\n                                            \r\n                                        //    <option key={key + index} value={this.state.institutes.allIcsDdList[key]}>{key}</option>\r\n                                        //))\r\n                                    }\r\n                                </select>\r\n                                <img src=\"images/select-arrows.svg\" alt=\"arrow dropdown\" />\r\n                            </div>\r\n                        </div>\r\n                    </form>\r\n                    <div className=\"sidebar-actions\">\r\n                        <button\r\n                            className=\"MuiButtonBase-root MuiButton-root MuiButton-contained btn-secondary\"\r\n                            tabIndex=\"0\"\r\n                            type=\"button\"\r\n                            onClick={() => this.resetSearchFields()}>\r\n                            <span className=\"MuiButton-label\">Reset</span>\r\n                            <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>\r\n                        <button\r\n                            className=\"MuiButtonBase-root MuiButton-root MuiButton-contained btn-primary\"\r\n                            tabIndex=\"0\"\r\n                            type=\"button\"\r\n                            onClick={() => this.props.search(this.searchInfo())}>\r\n                            <span className=\"MuiButton-label\">Search</span>\r\n                            <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default sidebar;\r\n","import React, { Component } from \"react\";\r\n\r\nimport SolicitationType from \"../../enums/SolicitationType\";\r\n\r\nexport class SolicitationFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = { isToggleOn: null };\r\n\r\n        // this.handleClickInvited = this.handleClick.bind(this);\r\n    }\r\n\r\n    handleClickInvited(isBaseSolicitation) {\r\n        let isToggleOnResult = this.state.isToggleOn === isBaseSolicitation ? null : isBaseSolicitation;\r\n        this.setState({ isToggleOn: isToggleOnResult });\r\n        this.props.filterClick(isBaseSolicitation);\r\n    }\r\n\r\n\r\n\r\n  render() {\r\n\r\n    const isToggleOn = this.state.isToggleOn;\r\n    var content = (\r\n        <div className=\"solicitation-actions\">\r\n            {this.props.solList.filter(key => key.solicitationTypeId === SolicitationType.RTOP || key.solicitationTypeId === SolicitationType.Other || key.solicitationTypeId === SolicitationType.ARPA).length > 0 && <div className=\"solicitation-filter-btns\">\r\n                <button\r\n                    onClick={() => this.handleClickInvited(false)}\r\n                    className={`btn ${isToggleOn === false ? 'active' : ''}`}>\r\n                    <span>{this.props.solList.filter(key => key.solicitationTypeId === SolicitationType.RTOP || key.solicitationTypeId === SolicitationType.Other || key.solicitationTypeId === SolicitationType.ARPA).length}</span>\r\n                    <span>Invited Solicitations</span>\r\n                </button>\r\n                <button\r\n                    onClick={() => this.handleClickInvited(true)}\r\n                    className={`btn ${isToggleOn === true ? 'active' : ''}`}>\r\n                    <span>{this.props.solList.filter(key => key.solicitationTypeId === SolicitationType.Base).length}</span>\r\n                    <span>Open Solicitations</span>\r\n                </button>\r\n            </div>}\r\n            {this.props.solList.filter(key => key.solicitationTypeId === SolicitationType.RTOP).length > 0 && \r\n            <span>Select to filter solicitations below</span>}\r\n        </div>\r\n    );\r\n\r\n    return (\r\n      /*this.props.solPageModel ?*/ content /*: ''*/\r\n    );\r\n  }\r\n}\r\n\r\nexport default SolicitationFilter;","import React, { Component } from 'react';\r\nimport { toast } from \"react-toastify\";\r\nimport Footer from \"./Footer\";\r\nimport LoginSection from './LoginSection';\r\nimport SolicitationList from './SolicitationList';\r\nimport Sidebar from './common/sidebar';\r\nimport SolicitationFilter from './secure/SolicitationFilter';\r\nimport _ from 'lodash';\r\n\r\nimport auth from \"../services/authService\";\r\nimport solicitationService from \"../services/solicitationService\";\r\nimport Error from \"../components/Errors/Error\";\r\nimport SolicitationType from \"../enums/SolicitationType\";\r\n\r\n//import '../scss/main.scss';\r\n\r\nexport class Home extends Component {\r\n    static displayName = Home.name;\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            sols: [],\r\n            searchInfo: null,\r\n            defaultSearchInfo: null,\r\n            loading: true,\r\n            redirect: false,\r\n            err: \"Internal server error. Please contact support.\",\r\n            sortBy: \"ClosingDate\",\r\n            currentCount: 0,\r\n            currentPage: 1,\r\n            resultsPerPage: 10,\r\n            frontEndPagination: false,\r\n            isUserLoggedIn: false,\r\n            filterBaseSolicitation: null\r\n        };\r\n        this.filterSolicitations = this.filterSolicitations.bind(this);\r\n        this.filterClick = this.filterClick.bind(this);\r\n    }\r\n\r\n    async componentDidMount() {\r\n        this._mounted = true;\r\n        const user = auth.getCurrentUser();\r\n\r\n        if (user) {\r\n            this.setState({ isUserLoggedIn: true, err: '' });\r\n        } else {\r\n            this.setState({ isUserLoggedIn: false, err: '' });\r\n        }   \r\n    }\r\n    setDefaultSearchInfo = (searchInfo) => {\r\n        this.setState({ searchInfo: searchInfo, defaultSearchInfo: searchInfo }, () => {\r\n            this.populateSolicitations(searchInfo);\r\n        });\r\n    }\r\n    handleSortBy = async (sortBy, stateChangeComplete) => {\r\n        this.setState({ sortBy: sortBy }, stateChangeComplete);\r\n        this.sortSolicitationList(sortBy);\r\n        return true;\r\n    }\r\n    search = async (search) => {\r\n        this.setState({ searchInfo: search, loading: true, redirect: false, source: \"search\" }, () => {\r\n            this.populateSolicitations(search);\r\n        });\r\n\r\n    }\r\n    async populateSolicitations(search) {\r\n        try {\r\n\r\n            const sortBy = this.state.sortBy;\r\n\r\n            const { data } = await solicitationService.getSolicitations(search, sortBy);\r\n            //console.log('data', data);\r\n            \r\n            this.setState({ sols: data.solicitations, loading: false, redirect: false, err: \"\"});\r\n            this.sortSolicitationList(sortBy);\r\n\r\n        } catch (ex) {\r\n            console.log('populateSolicitations error', ex.stack);\r\n            this.setState({ loading: false });\r\n            toast.error(ex.message);\r\n        }\r\n    }\r\n    async sortSolicitationList(sortBy) {\r\n        var sortedSols = [];\r\n        switch (sortBy) {\r\n            case \"ClosingDate\":\r\n                sortedSols = _.orderBy(this.state.sols, [\"solicitationResponseDeadline\", \"solicitationSortOrder\"], [\"asc\", \"asc\"]);\r\n                this.setState({ sols: sortedSols, sortBy });\r\n                break;\r\n            case \"Agency\":\r\n                sortedSols = _.orderBy(this.state.sols, [\"icid\",\"solicitationResponseDeadline\", \"solicitationSortOrder\"],[\"asc\",\"asc\",\"asc\"]);\r\n                this.setState({ sols: sortedSols, sortBy });\r\n                break;\r\n            case \"Title\":\r\n                sortedSols = _.orderBy(this.state.sols, [\"solicitationTitle\", \"solicitationResponseDeadline\", \"solicitationSortOrder\"], [\"asc\", \"asc\", \"asc\"]);\r\n                this.setState({ sols: sortedSols, sortBy });\r\n                break;\r\n            default:\r\n            // default code block\r\n        }\r\n    }\r\n\r\n    filterClick(filterBaseSolicitation) {\r\n        let filterResult = this.state.filterBaseSolicitation === filterBaseSolicitation ? null : filterBaseSolicitation;\r\n        this.setState({ filterBaseSolicitation: filterResult });\r\n    }\r\n\r\n    filterSolicitations(filterBaseSolicitation) {\r\n        const solicitations = this.state.sols;\r\n        return filterBaseSolicitation ? solicitations.filter(solicitation => solicitation.solicitationTypeId === SolicitationType.Base) : solicitations.filter(solicitation => solicitation.solicitationTypeId === SolicitationType.RTOP || solicitation.solicitationTypeId === SolicitationType.Other || solicitation.solicitationTypeId === SolicitationType.ARPA);  \r\n    }\r\n\r\n    static noSolicitationFoundLanguage() {\r\n        return (<React.Fragment><div className=\"no-sol-lang\">No Solicitation Found</div></React.Fragment>);\r\n    }\r\n    render() {\r\n        const noSolFoundLanguage = this.state.loading ? '' : (<div className=\"no-sol-lang\">No Solicitation Found</div>);\r\n        var loader = (<div className=\"loader\" style={{ position: \"fixed\", top: \"40%\", left: \"45%\" }}>Loading...</div>);\r\n\r\n        const filterBaseSolicitation = this.state.filterBaseSolicitation;\r\n        const solicitations = this.state.filterBaseSolicitation == null ? this.state.sols : this.filterSolicitations(filterBaseSolicitation);\r\n\r\n        if (this.state.err.length > 0) {\r\n            return (<Error />);\r\n        } else {\r\n            return (\r\n                <React.Fragment>\r\n                    {!this.state.isUserLoggedIn && <LoginSection />}\r\n                    <div className=\"content not-logged-in\">\r\n                        <Sidebar search={this.search} setDefaultSearchInfo={this.setDefaultSearchInfo} onSortBy={this.handleSortBy}/>\r\n                        <div className=\"main-content\">\r\n                            {\r\n                                this.state.isUserLoggedIn ?\r\n                                    (<div className=\"container-fluid solicitation-landing external\">\r\n                                        <div className=\"solicitation-landing section-heading headline\">NIH/ARPA-H/CDC/SAMHSA Contract Solicitations Available for Electronic Submission</div>\r\n                                        <div className=\"solicitation-header-container\">\r\n                                            <div className=\"solicitation-message\">\r\n                                                The following table represents NIH/ARPA-H/CDC/SAMHSA contract solicitations that are available for electronic proposal submission through eCPS. Please Note: Proposals will not be accepted through eCPS after the closing date and time. Potential offerors are instructed to go to <a href=\"https://sam.gov/\" className=\"link-textonly\" target=\"_blank\">SAM.gov</a> for the full listing of active contract opportunities.\r\n                                            </div>\r\n                                            <SolicitationFilter solList={this.state.sols} filterClick={this.filterClick} />\r\n                                        </div>\r\n                                    </div>) :\r\n                                    (<div className=\"container-fluid\">\r\n                                        <p className=\"site-warning\">WARNING NOTICE: This is a U.S. Government computer system, which may be accessed and used only for authorized Government business by authorized personnel. Unauthorized access or use of this computer system may subject violators to criminal, civil and/or administrative action. All information on this computer system may be intercepted, recorded, read, copied and disclosed by and to authorized personnel for official purposes, including criminal investigations. Such information includes sensitive data encrypted to comply with confidentiality and privacy requirements. Access or use of this computer system by any person, whether authorized or unauthorized, constitutes consent to these terms. There is no right to privacy in this system.</p>\r\n                                        <div className=\"solicitation-landing section-heading headline\">NIH/ARPA-H/CDC/SAMHSA Contract Solicitations Available for Electronic Submission</div>\r\n                                         <div className=\"solicitation-header-container\">\r\n                                            <div className=\"solicitation-message\">\r\n                                                The following table represents NIH/ARPA-H/CDC/SAMHSA contract solicitations that are available for electronic proposal submission through eCPS. Please Note: Proposals will not be accepted through eCPS after the closing date and time. Potential offerors are instructed to go to <a href=\"https://sam.gov/\" className=\"link-textonly\" target=\"_blank\">SAM.gov</a> for the full listing of active contract opportunities.\r\n                                             </div>\r\n                                         </div>\r\n                                    </div>)\r\n\r\n                            }\r\n                            {this.state.loading ? loader : ''}\r\n                            {solicitations.length > 0 ? <SolicitationList isUserLoggedIn={this.state.isUserLoggedIn} solList={solicitations} /> : noSolFoundLanguage}\r\n                        </div>\r\n                    </div>\r\n                    <Footer/>\r\n                </React.Fragment>\r\n\r\n            );\r\n        }\r\n    }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class FetchData extends Component {\r\n  static displayName = FetchData.name;\r\n\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = { forecasts: [], loading: true };\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.populateWeatherData();\r\n  }\r\n\r\n  static renderForecastsTable(forecasts) {\r\n    return (\r\n      <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n        <thead>\r\n          <tr>\r\n            <th>Date</th>\r\n            <th>Temp. (C)</th>\r\n            <th>Temp. (F)</th>\r\n            <th>Summary</th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          {forecasts.map(forecast =>\r\n            <tr key={forecast.date}>\r\n              <td>{forecast.date}</td>\r\n              <td>{forecast.temperatureC}</td>\r\n              <td>{forecast.temperatureF}</td>\r\n              <td>{forecast.summary}</td>\r\n            </tr>\r\n          )}\r\n        </tbody>\r\n      </table>\r\n    );\r\n  }\r\n\r\n  render() {\r\n    let contents = this.state.loading\r\n      ? <p><em>Loading...</em></p>\r\n      : FetchData.renderForecastsTable(this.state.forecasts);\r\n\r\n    return (\r\n      <div>\r\n        <h1 id=\"tabelLabel\" >Weather forecast</h1>\r\n        <p>This component demonstrates fetching data from the server.</p>\r\n        {contents}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  async populateWeatherData() {\r\n    const response = await fetch('weatherforecast');\r\n    const data = await response.json();\r\n    this.setState({ forecasts: data, loading: false });\r\n  }\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport axios from 'axios';\r\nimport { size } from 'lodash';\r\n\r\nimport * as constants from \"./constants\";\r\n\r\nexport class FileUpload extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            selectedFile: {\r\n                name: props.defaultFile\r\n            },\r\n            isFileUploaded: props.defaultFile ? true : false,\r\n            IsFileAlreadySubmitted: props.defaultFile ? true : false,\r\n            isFileUploading:false,\r\n            fileSizeError: false,\r\n            uploadedFileGuid: \"\",\r\n            uploadedFileDbId: props.fileDbId ||0,\r\n            //maxAllowableContentLength:406000000,\r\n            //maxAllowableContentLengthKB: 406000,\r\n            isReviseUrl: /reviseproposal/g.test(window.location.href.toLowerCase()),\r\n            showDownloadProgress: false\r\n        };\r\n\r\n        // this.handleChange = this.handleChange.bind(this);\r\n    }\r\n\r\n    static propTypes = {\r\n        label: PropTypes.string.isRequired,\r\n        accept: PropTypes.string.isRequired,\r\n        errorMessage: PropTypes.string.isRequired,\r\n        dynamicClass: PropTypes.string.isRequired\r\n    }\r\n\r\n    componentDidUpdate(prevProps) {\r\n        if (this.props.defaultFile !== prevProps.defaultFile) {\r\n            this.setState({ selectedFile: { name: this.props.defaultFile }});\r\n        }\r\n    }\r\n    onFileChange = async event => {\r\n\r\n        const selectedFile = event.target.files[0];\r\n        this.setState({ isFileUploading: true });\r\n        const totalUploadedFileSize = this.props.totalUploadedFileSize;\r\n\r\n        if (this.state.isFileUploaded ) {\r\n            //if (this.state.uploadedFileDbId === 0) {\r\n            //    await this.props.fileDelete(this.state.uploadedFileGuid, this.props.id, true);\r\n            //} else {\r\n            //    await this.props.fileDelete(this.state.uploadedFileDbId, this.props.id, true);\r\n            //}\r\n            const deleteResult = await this.props.fileDelete(this.state.uploadedFileDbId === 0 ? this.state.uploadedFileGuid : this.state.uploadedFileDbId, this.props.id, true);\r\n            //const deleteResultReviseProposal = await this.props.fileDelete(this.state.uploadedFileDbId, this.props.id, true);\r\n        } \r\n    \r\n        \r\n        const uploadResult = await this.props.fileUpload(selectedFile, this.props.id, this.state.uploadedFileDbId);\r\n        \r\n\r\n        if (uploadResult !== constants.Error && uploadResult !== constants.NotAllowed && uploadResult !== constants.MaxContentSizeLimitExceeded) {\r\n            this.setState({ selectedFile, isFileUploaded: true, fileSizeError: false, IsFileAlreadySubmitted: false, isFileUploading:false, uploadedFileGuid: uploadResult});\r\n        }\r\n\r\n        if (uploadResult === constants.Error || uploadResult === constants.NotAllowed) {\r\n            this.setState({ selectedFile: { name: '' }, isFileUploaded: false, isFileUploading: false, uploadedFileGuid: \"\"});\r\n        }\r\n\r\n        if (uploadResult === constants.MaxContentSizeLimitExceeded) {\r\n            this.setState({ selectedFile: { name: '' }, isFileUploaded: false, isFileUploading: false, fileSizeError: true, uploadedFileGuid: \"\" });\r\n        }\r\n\r\n    };\r\n\r\n    onFileDelete =async () => {\r\n\r\n        const deleteResult = await this.props.fileDelete(this.state.uploadedFileDbId === 0 ? this.state.uploadedFileGuid : this.state.uploadedFileDbId, this.props.id, false);\r\n        if (deleteResult) {\r\n            this.setState({ selectedFile: { name: this.props.defaultFile }, isFileUploaded: this.props.defaultFile ? true : false, IsFileAlreadySubmitted: this.props.defaultFile ? true : false, uploadedFileGuid:\"\"});\r\n        }\r\n        \r\n    };\r\n\r\n    onFileDownload = async () => {\r\n        //console.log(this.state.uploadedFileDbId);\r\n        //console.log(this.props.defaultFile)\r\n        this.setState({ showDownloadProgress: true });\r\n        await this.props.fileDownload(this.state.uploadedFileDbId, this.props.defaultFile);\r\n        this.setState({ showDownloadProgress: false });\r\n    };\r\n\r\n    className = (e) => {\r\n        return `${e} actual-btn`;\r\n    }\r\n\r\n    isDownloadAllowed() {\r\n        const props = this.props;\r\n        return (props.isDownloadAllowed == undefined || props.isDownloadAllowed == null) ? true : props.isDownloadAllowed;\r\n    }\r\n\r\n    renderDownloadButton() {\r\n        const state = this.state;\r\n        const isDownloadAllowed = this.isDownloadAllowed();\r\n        const displayDownloadButton = state.isReviseUrl && state.isFileUploaded && state.IsFileAlreadySubmitted && isDownloadAllowed;\r\n\r\n        if (displayDownloadButton)\r\n            return <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained light-btn-primary\" tabIndex=\"0\" type=\"button\" onClick={\r\nthis.onFileDownload}>\r\n                       <span className=\"MuiButton-label\">\r\n                           <img src=\"images/download-blue.svg\" alt=\"download-file\"/>Download\r\n                       </span>\r\n                       <span className=\"MuiTouchRipple-root\"></span>\r\n                   </button>;\r\n        else\r\n        return <React.Fragment/>;\r\n    }\r\n\r\n    render() {\r\n        var deleteButton = (\r\n            <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained warning-btn\" tabIndex=\"0\" type=\"button\" onClick={this.onFileDelete}>\r\n                <span className=\"MuiButton-label\">\r\n                    <img src=\"images/trash-brown.svg\" alt=\"cancel-upload\" />Cancel\r\n                </span>\r\n                <span className=\"MuiTouchRipple-root\"></span>\r\n            </button>);\r\n\r\n        return (\r\n            <div className=\"outer-link\">\r\n                <div className=\"document-details\">\r\n                    <div className=\"document-container\">\r\n                        <div className=\"document-name\">\r\n                          <span className=\"name-req\">\r\n                            {this.props.label}\r\n                            {!(this.props.errorMessage.length > 0) && this.props.required && <span className=\"document-requirement\"> Required document</span>}\r\n                          </span>\r\n                          <span className=\"warning-pill-container\">\r\n                            {this.state.uploadedFileGuid.length > 0 && this.state.isReviseUrl  && <small className=\"text-warning pending-submission\">Updated - Pending Submission</small>}\r\n                            {this.props.errorMessage.length > 0 && this.props.required && <small className=\"text-danger\">{this.props.errorMessage}</small>}\r\n                            {this.props.errorMessage.length > 0 && !this.props.required && <small className=\"text-warning\">{this.props.errorMessage}</small>}\r\n                          </span>\r\n                        </div>\r\n                        {!this.state.fileSizeError && (<div className=\"document-file\">{this.state.isFileUploading ? \"Uploading...\" :this.state.selectedFile.name}</div>)}\r\n                        {this.state.fileSizeError && this.props.required && (<div className=\"document-file text-danger\">Total uploaded file size exceeded allowable limit of {Math.round((Math.round(constants.MaxContentSizeAllowed / 1024) / 1024) * 100) / 100} MB</div>)}\r\n                        {this.state.fileSizeError && !this.props.required && (<div className=\"document-file text-warning\">Total uploaded file size exceeded allowable limit of {Math.round((Math.round(constants.MaxContentSizeAllowed / 1024) / 1024) * 100) / 100} MB</div>)}\r\n                    </div>\r\n\r\n                </div>\r\n                <div className=\"material-actions\">\r\n                    {this.state.showDownloadProgress && <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained light-btn-primary revise-download\" tabindex=\"0\" type=\"button\"><span>Downloading ...</span><span className=\"loader small-loader\"></span></button>}\r\n                    {!this.state.showDownloadProgress ? this.renderDownloadButton() : ''}\r\n                    {this.state.isFileUploaded && !this.state.IsFileAlreadySubmitted ? deleteButton : ''}\r\n                    {/* <button className={\"MuiButtonBase-root MuiButton-root MuiButton-contained \" + (this.state.isFileUploaded ? \"light-btn-primary\" : \"btn-primary\")} tabIndex=\"0\" type=\"file\">\r\n                        <span className=\"MuiButton-label\">\r\n                            <input\r\n                                type=\"file\"\r\n                                id={this.props.id}\r\n                                name={this.props.id}\r\n                                accept={this.props.accept}\r\n                                hidden\r\n                                onChange={this.onFileChange}\r\n                                onClick={(event) => {event.target.value=null}}/>\r\n                            <span className=\"MuiButton-label\">\r\n                                <label htmlFor={this.props.id} className=\"submit-proposal-button-label\">\r\n                                  <img src={this.state.isFileUploaded ? \"images/upload-blue.svg\" : \"images/upload-white.svg\"}/>{this.state.isFileUploaded ? \"Replace\" : \"Upload\"}\r\n                              </label>\r\n                            </span>\r\n                        </span>\r\n                        <span className=\"MuiTouchRipple-root\"></span>\r\n                    </button> */}\r\n\r\n                    <input\r\n                      type=\"file\"\r\n                      id={this.props.id}\r\n                      name={this.props.id}\r\n                      accept={this.props.accept}\r\n                      hidden\r\n                      onChange={this.onFileChange}\r\n                      onClick={(event) => {event.target.value=null}}/>\r\n                    <label htmlFor={this.props.id} className={\"MuiButtonBase-root MuiButton-root MuiButton-contained \" + (this.state.isFileUploaded ? \"light-btn-primary\" : \"btn-primary\")} tabIndex=\"0\" type=\"file\">\r\n                <img src={this.state.isFileUploaded ? \"images/upload-blue.svg\" : \"images/upload-white.svg\"} alt={this.state.isFileUploaded ? \"file-uploaded\" : \"upload-file\"}/>{this.state.isFileUploaded ? \"Replace\" : \"Upload\"}\r\n                    </label>\r\n                </div>\r\n                <div className=\"chevron-right\">\r\n                    <img src=\"images/banner-arrow.svg\" alt=\"icon-banner\"/>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default FileUpload;","import React from 'react';\r\n\r\nconst Select = ({ name, label, options, error, value, isRequired, onChange }) => {\r\n  return (   \r\n        <div className=\"col-lg-3 col-md-6\">\r\n            <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled\" data-shrink=\"true\" htmlFor={name} id={`${name}-label`}>\r\n                    {label}\r\n                </label>\r\n                <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                    <select name={name} id={name} value={value} onChange={onChange} className=\"MuiSelect-root MuiSelect-select MuiInputBase-input MuiInput-input\">\r\n                      {isRequired && <option value='' />}\r\n                      {options.map((option) => (\r\n                                    <option key={option.id} value={option.id}>\r\n                                        {option.name}\r\n                                     </option>\r\n                    ))}\r\n                    </select>\r\n                    <img src=\"images/icon-arrow-down-light.svg\" className=\"select-down-arrow\" alt=\"select arrow\" />\r\n                </div>\r\n          </div>\r\n          {isRequired && error && <small className=\"text-danger\">{error}</small>}\r\n        </div>\r\n  );\r\n};\r\n\r\nexport default Select;","import React from 'react';\r\n\r\nconst TextArea = ({ name, label,  error, value, onChange }) => {\r\n    return (\r\n        \r\n        <div className = \"col-lg-9\" >\r\n            <div className=\"MuiFormControl-root MuiTextField-root\">\r\n\r\n                <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" htmlFor={name} id={`${name}-label`}>\r\n                    {label}\r\n                </label>\r\n                <div className=\"MuiInputBase-root MuiInput-root MuiInputBaseControl MuiInputControl MuiInputBase-multiline MuiInput-multiline\">\r\n                    <textarea aria-invalid=\"false\" name={name} id={name} defaultValue={value} onChange={onChange}  rows=\"1\" className=\"MuiInputBase-input MuiInput-input MuiInputBase-inputMultiline MuiInput-inputMultiline\" />\r\n                </div>\r\n                {error && <small className=\"text-danger\">{error}</small>}\r\n            </div>\r\n         </div >\r\n    );\r\n};\r\n\r\nexport default TextArea;","import React, {Fragment }  from \"react\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\r\n\r\nconst DateInput = ({ name, label, error,  value, onChange }) => {\r\n    const inputLabelId = name + \"-label\";\r\n    return (\r\n              \r\n        <div className=\"col-lg-3 col-md-6\">\r\n            <div className=\"MuiFormControl-root MuiTextField-root calendar-parent\">\r\n                <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" >\r\n                    {label}</label>\r\n\r\n                <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n                    <Fragment>\r\n                        <KeyboardDatePicker\r\n                            id={name}\r\n                            name={name}\r\n                            value={value}\r\n                            placeholder=\"MM/DD/YYYY\"\r\n                            InputProps={{\r\n                                disableUnderline: true,\r\n                            }}\r\n                            KeyboardButtonProps={{\r\n                                'aria-label': \"calendar picker open\",\r\n                            }}\r\n                            onChange={(date)=>onChange(name,date)}\r\n                            minDate={new Date(\"01/01/2012\")}\r\n                            format=\"MM/dd/yyyy\"\r\n                            showTodayButton\r\n                        />\r\n                    </Fragment>\r\n                </MuiPickersUtilsProvider>\r\n\r\n            </div>\r\n            {error && <small className=\"text-danger\">{error}</small>}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default DateInput;","import React, { Component } from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Input from \"./input\";\r\nimport Select from \"./select\";\r\nimport TextArea from \"./textArea\";\r\nimport DateInput from \"./dateInput\";\r\n\r\nclass Form extends Component {\r\n  state = {\r\n    data: {},\r\n    errors: {},\r\n  };\r\n\r\n    validateProperty = ({ name, value }) => {\r\n        const obj = { [name]: value };\r\n        const schema = { [name]: this.schema[name] };\r\n\r\n        const { error } = Joi.validate(obj, schema);\r\n        return error ? error.details[0].message : null;\r\n    };\r\n\r\n  validate = () => {\r\n    const options = { abortEarly: false };\r\n      const { error } = Joi.validate(this.state.data, this.schema, options);\r\n    if (!error) return null;\r\n\r\n    const errors = {};\r\n    for (let item of error.details) errors[item.path[0]] = item.message;\r\n\r\n    return errors;\r\n  };\r\n\r\n  handleSubmit = (e) => {\r\n    e.preventDefault();\r\n    //console.log(\"handle submit from \");\r\n    const errors = this.validate();\r\n    this.setState({ errors: errors || {} });\r\n    //console.log(\"errors: \", errors);\r\n    if (errors) return;\r\n\r\n    this.doSubmit();\r\n  };\r\n\r\n  handleChange = ({ currentTarget: input }) => {\r\n      //console.log(\"Handle Change - level 2\",input);\r\n      const errors = Object.assign({}, this.state.errors);\r\n      const errorMessage = this.validateProperty(input);\r\n      if (errorMessage) errors[input.name] = errorMessage;\r\n      else delete errors[input.name];\r\n\r\n\r\n      const data = Object.assign({}, this.state.data);\r\n      data[input.name] = input.value;\r\n      this.setState({ data, errors });\r\n    };\r\n\r\n    handleDateChange = (name,value) => {\r\n        const input = { currentTarget:{ name, value }}\r\n        //console.log(\"Input Formed:\", input);\r\n        this.handleChange(input);\r\n    }\r\n\r\n  renderButton(label) {\r\n    return (\r\n      <button disabled={this.validate()} className=\"btn btn-primary\">\r\n        {label}\r\n      </button>\r\n    );\r\n  }\r\n\r\n  renderSelect(name, label, options, isRequired=false) {\r\n    const { data, errors } = this.state;\r\n    return (\r\n      <Select\r\n            name={name}\r\n            value={data[name]}\r\n            label={label}\r\n            options={options}\r\n            onChange={this.handleChange}\r\n            error={errors[name]}\r\n            isRequired={isRequired}\r\n      />\r\n    );\r\n  }\r\n\r\n  renderInput(name, label,inputSize , type = \"text\", required=true) {\r\n    const { data, errors } = this.state;\r\n    return (\r\n     <Input \r\n        inputSize={inputSize}\r\n        type={type}\r\n        name={name}\r\n        value={data[name]}\r\n        label={label}\r\n        required={required}\r\n        error={errors[name]}\r\n        onChange={this.handleChange}\r\n        onInput={this.handleChange}\r\n        />\r\n    );\r\n    }\r\n\r\n  renderTextArea(name, label) {\r\n      const { data, errors } = this.state;\r\n      return (\r\n          <TextArea\r\n              name={name}\r\n              value={data[name]}\r\n              label={label}\r\n              error={errors[name]}\r\n              onChange={this.handleChange}\r\n              \r\n          />\r\n      );\r\n    }\r\n\r\n  renderDateInput(name, label, value) {\r\n      const { data, errors } = this.state;\r\n      return (\r\n          <DateInput\r\n                name={name}\r\n                value={value}\r\n                label={label}\r\n                error={errors[name]}\r\n                onChange={this.handleDateChange}\r\n            />\r\n      );\r\n  }\r\n}\r\n\r\nexport default Form;\r\n","import React, { Component } from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip'\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n    tooltip: {\r\n        backgroundColor: '#2d5670',\r\n        color: '#fff',\r\n        maxWidth: 300,\r\n        fontSize: '16px',\r\n        border: '1px solid #2d5670',\r\n        padding: 10,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n    },\r\n    arrow: {\r\n        color: '#2d5670',\r\n    }\r\n}))(Tooltip);\r\n\r\nexport class DataColumn extends Component {\r\n    valueChecker = (data) => {\r\n        return <div className=\"column-data\"><span className=\"filler-text\">No data found</span></div>;\r\n    }\r\n\r\n    dataDecider = (e) => {\r\n        switch (e.type) {\r\n            case 'dateTime':\r\n                if (!e.date) {\r\n                    return this.valueChecker(this.props)\r\n                } else {\r\n                    return <div className=\"column-data\">{e.date} <small>{e.time}</small></div>;\r\n                }\r\n                break;\r\n            case 'plainText':\r\n                if (!e.text) {\r\n                    return this.valueChecker(this.props)\r\n                } else {\r\n                    return <div className=\"column-data\">{e.text}</div>\r\n                }\r\n                break;\r\n            case 'reviewBoolean':\r\n                if (!e.reviewStatus) {\r\n                    return <div className=\"column-data\"><img src=\"images/close-cross-in-circular-outlined-interface-button.svg\" alt=\"review-complete-icon\" />NO</div>\r\n                } else {\r\n                    return <HtmlTooltip\r\n                        title={\r\n                            <React.Fragment>\r\n                                <span>{e.reviewName}</span>\r\n                                <span className=\"tooltipDate\">{e.date} {e.time}</span>\r\n                            </React.Fragment>\r\n                        }\r\n                        arrow\r\n                    >\r\n                        <div className=\"column-data\">\r\n                            <img src=\"images/accept-circular-button-outline.svg\" alt=\"review-complete-icon\" />YES\r\n          </div>\r\n                    </HtmlTooltip>\r\n                }\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <div className=\"column-block\">\r\n                <div className=\"column-label\">{this.props.label}</div>\r\n                {this.dataDecider(this.props)}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default DataColumn;","import React, { Component } from \"react\";\r\nimport { Redirect, Link } from \"react-router-dom\";\r\nimport DataColumn from \"../common/dataColumn\";\r\nimport DateTime from \"../common/DateTimeConversionMethods\";\r\n\r\nimport SolicitationType from \"../../enums/SolicitationType\";\r\n\r\nexport class SolicitationHeader extends Component {\r\n\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    \r\n    componentWillReceiveProps(newProps) {\r\n\r\n    }\r\n    render() {\r\n        let headerInfo = this.props.headerInfo;\r\n        const isBaseSol = (headerInfo?.solicitationTypeId === SolicitationType.Base);\r\n        return (\r\n\r\n            <div className=\"multi-level-header float-header\">\r\n                <div className=\"header-primary\">\r\n                    <div className=\"solicit-primary\">\r\n                        <div className=\"solicit-information\">\r\n                            <p>Solicitation Information</p>\r\n                            {isBaseSol && headerInfo?.samUrl?.endsWith(\"view\")\r\n                                ? (<a href={`${headerInfo.samUrl}`} target=\"_blank\">\r\n                                    {headerInfo.solicitationNumber}<img src=\"images/exitlink.svg\" alt=\"external-link\" />\r\n                                </a>)\r\n                                : (<label>{headerInfo.solicitationNumber}</label>)\r\n                            }\r\n                            \r\n                        </div>\r\n                    </div>\r\n                    <div className=\"solicit-title\">{headerInfo.solicitationTitle}</div>\r\n                </div>\r\n                <div className=\"header-secondary\">\r\n                    <div className=\"detail-row\">\r\n                    <Link to={`/home`}>\r\n                            <span><img src=\"./images/icon-arrow-left-blue.svg\" alt=\"back-to-solicitations\" />Back to Solicitations</span>\r\n                        </Link>\r\n                        <div className=\"secondary-head-table\">\r\n                            <DataColumn\r\n                                label=\"Closing Date\"\r\n                                date={headerInfo?.responseDeadlineDateStr}\r\n                                time={headerInfo?.responseDeadlineTimeStr}\r\n                                type=\"dateTime\"\r\n                            />\r\n                            <DataColumn\r\n                                label=\"Notice Type\"\r\n                                text={headerInfo?.noticeType}\r\n                                type=\"plainText\"\r\n                            />\r\n                            <DataColumn\r\n                                label=\"Contract Specialist\"\r\n                                text={headerInfo?.primaryCs}\r\n                                type=\"plainText\"\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n}","import https from \"./httpService\";\r\nvar globalCancellation = null;\r\n\r\nexport async function postSubmitGateway(user, solicitationId, buttonType, cancelSubmission) {\r\n    globalCancellation = https.cancelToken.source();\r\n\r\n    return https.post(\"api/proxy/submitGateway/\", { user: user, solicitationId, buttonType: buttonType }, {\r\n        cancelToken: globalCancellation.token\r\n    });\r\n}\r\n\r\nexport async function getSolProposalSubmissionData(solId) {\r\n\r\n    if (!solId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/SolProposalSubmission/\" + solId\r\n    );\r\n}\r\n\r\nexport async function getSpecialSolProposalSubmissionData(solId, specialInviteId) {\r\n    if (!solId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/SpecialSolProposalSubmission/\" + solId + \"/\" + specialInviteId\r\n    );\r\n}\r\n\r\nexport async function getSolProposalSubmissionDataByProposalID(solId) {\r\n\r\n    if (!solId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/SolProposalSubmissionDataByProposalId/\" + solId\r\n    );\r\n}\r\nexport async function postSubmitProposalFileUpload(pageGuid, data) {\r\n  //console.log('please please');\r\n   const result = https.post(\"api/file/\" + pageGuid + \"/upload\",\r\n        data,\r\n        {\r\n          onUploadProgress: progressEvent => console.log('hello there please work', progressEvent.loaded)\r\n            // receive two    parameter endpoint url ,form data\r\n        \r\n        });\r\n    return result;\r\n}\r\n\r\nexport async function postSubmitProposalFileDelete(pageGuid, fileGuid) {\r\n    //console.log(\"PageGuid\", pageGuid);\r\n    //console.log(\"FileGuid\", fileGuid);\r\n    return https.post(\"api/file/\" + pageGuid + \"/delete?fileGuid=\" + fileGuid);\r\n    \r\n}\r\nexport async function getPageHeaderInfo(solId) {\r\n\r\n    if (!solId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/ProposalRelatedPageHeaderInfo/\" + solId\r\n    );\r\n}\r\n\r\nexport async function getSpecialPageHeaderInfo(solId, specialInviteId) {\r\n\r\n    if (!solId || specialInviteId <= 0) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/ProposalSpecialPageHeaderInfo/\" + solId + \"/\" + specialInviteId\r\n    );\r\n}\r\n\r\nexport async function vendorContactInfo(proposalId) {\r\n\r\n    if (!proposalId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/VendorContactInfo/\" + proposalId\r\n    );\r\n}\r\nexport async function postSubmitProposal(submissionType, solicitationId, proposal, surroundingState, endPoint, actionType, cancelSubmission) {\r\n\r\n  // IF YOU'RE TRYING TO OBSERVE PROGRESS BAR WHEN YOU ONLY SEE 90%\r\n    // throttle speed with network dev tool - set to Slow 3G\r\n    // get file size that you're uploading\r\n    // divide loaded amount and total file size\r\n    // add element on the page just to display how much has loaded - figure out how to output that amount as well as the request\r\n    // add variable as object with progress\r\n    // TIP: after you finish looking at it, change network speed back to Online, otherwise you'll have slow loading for the rest of the site\r\n\r\n    if (cancelSubmission) {\r\n        globalCancellation.cancel(\"CANCEL_UPLOAD\");\r\n        return false;\r\n    }\r\n    \r\n    let filesToUpload = [];\r\n        //newFile;\r\n    const formData = new FormData();\r\n\r\n    if (submissionType === 'newProposal') {\r\n        proposal.uploadedFiles.forEach((item) => {\r\n            //var newFile = new File([item.file], item.fileType + \"_\" + item.file.name);\r\n            var newFile = { file: item.file, name: item.fileType + \"_\" + item.file.name };\r\n            filesToUpload.push(newFile);\r\n      });\r\n    } else if (submissionType === 'editProposal') {\r\n        proposal.uploadedFileChanges.forEach((item) => {    \r\n            //File object is not working on Edge browser\r\n            //var newFile = new File([item.file], item.fileType + \"_\" + item.fileDbId + \"_\" + item.file.name);\r\n            var newFile = { file: item.file, name: item.fileType + \"_\" + item.fileDbId + \"_\" + item.file.name };\r\n            filesToUpload.push(newFile);\r\n            \r\n            //formData.append('proposalId', proposal.proposalId);\r\n      });\r\n    }\r\n    \r\n    formData.append('proposalId', proposal.proposalId);\r\n    formData.append('proposalName', proposal.proposalName);  \r\n    formData.append('specialInviteId', proposal.specialInviteId);\r\n    formData.append('selectedFastTrackValue', proposal.selectedFastTrackValue);\r\n    formData.append('selectedPhase2Value', proposal.selectedPhase2Value);\r\n\r\n    //formData.append('proposalName2', \"TESTValue2\");\r\n    \r\n    // let header = {\r\n    //   onUploadProgress: function(progressEvent) {\r\n    //       let percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\r\n    //     if (percentCompleted <= 90) {\r\n    //       surroundingState.setState({loadedAmount: percentCompleted});\r\n    //     } else {\r\n    //       surroundingState.setState({backEndStatus: 'loading server'});\r\n    //       surroundingState.setState({loadedAmount: 90});\r\n    //     }\r\n    //     return percentCompleted;\r\n    //   }\r\n    // };\r\n\r\n    // const cancelTokenSource = cancelToken.source();\r\n    globalCancellation = https.cancelToken.source();\r\n\r\n    Array.from(filesToUpload).map((file, index) => {\r\n        return formData.append('file' + index, file.file, file.name);\r\n        //return formData.append('file' + index, file, file.name);\r\n    });\r\n\r\n    //console.log('inside post submit');\r\n\r\n    let startCountDown = false;\r\n\r\n    function setLoadedAmount () {\r\n        if (!startCountDown) {\r\n            startCountDown = true;\r\n            let count = 1;\r\n            let countdownInterval = null;\r\n\r\n            surroundingState.setState({backEndStatus: 'loading server'});\r\n            surroundingState.setState({loadedAmount: 90 + count});\r\n\r\n            countdownInterval = setInterval(() => {\r\n                count++;\r\n\r\n                if (count == 9) {\r\n                    clearInterval(countdownInterval);\r\n                }\r\n\r\n                surroundingState.setState({backEndStatus: 'loading server'});\r\n                surroundingState.setState({loadedAmount: 90 + count});\r\n            }, 1000);\r\n        }\r\n    }\r\n\r\n    let request = await https.post(endPoint + solicitationId + actionType, formData, {\r\n        onUploadProgress: function (progressEvent) {\r\n            let percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\r\n\r\n          if (percentCompleted <= 90) {\r\n            surroundingState.setState({loadedAmount: percentCompleted});\r\n          } else {\r\n            setLoadedAmount();\r\n          }\r\n\r\n          return percentCompleted;\r\n        },\r\n        cancelToken: globalCancellation.token\r\n    });\r\n\r\n    // if (cancelSubmission) {\r\n    //   cancelTokenSource.cancel();\r\n    // }\r\n\r\n    return request;\r\n\r\n}\r\n\r\nexport async function postUpdateProposal(solicitationId,proposal) {\r\n  // THIS FUNCTION IS NO LONGER IN USE. USE POST SUBMIT PROPOSAL IF YOU'RE SUBMITTING TO DATABASE\r\n  //console.log('inside update function - NO LONGER IN USE');\r\n  //  console.log(\"Update proposal solicitation id\", solicitationId);\r\n  //  console.log(\"Proposal\", proposal);\r\n\r\n    let filesToUpload = [];\r\n    const formData = new FormData();\r\n    \r\n\r\n    proposal.uploadedFileChanges.forEach((item) => {\r\n        var newFile = new File([item.file], item.fileType + \"_\" +item.fileDbId + \"_\" + item.file.name);\r\n        filesToUpload.push(newFile);\r\n    });\r\n    //console.log(\"filesToUpload\", filesToUpload);\r\n\r\n    formData.append('proposalName', proposal.proposalName);\r\n    formData.append('proposalId', proposal.proposalId);\r\n\r\n    Array.from(filesToUpload).map((file, index) => {\r\n        return formData.append('file' + index, file, file.name);\r\n    });\r\n\r\n    //console.log(\"endpoint\", \"api/solicitations/\" + solicitationId + \"/updateProposal/\");\r\n    //console.log(\"submission formData\", formData);\r\n    return https.post(\"api/solicitations/\" + solicitationId + \"/updateProposal/\", formData);\r\n\r\n}\r\nexport async function GetReviseProposalData(proposalId) {\r\n\r\n    if (!proposalId) {\r\n        return null;\r\n    }\r\n\r\n    return https.get(\r\n        \"api/solicitations/ReviseProposal/\" + proposalId\r\n    );\r\n}\r\n\r\nexport async function guid() {\r\n    const { data } = await https.get(\"api/file/genGui\");\r\n    return data;\r\n}\r\n\r\nfunction isGUID(uuid) {\r\n    let s = \"\" + uuid;\r\n\r\n    s = s.match('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$');\r\n    if (s === null) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nexport default {\r\n    postSubmitGateway: postSubmitGateway,\r\n    getSolProposalSubmissionData: getSolProposalSubmissionData,\r\n    getSpecialSolProposalSubmissionData: getSpecialSolProposalSubmissionData,\r\n    getSolProposalSubmissionDataByProposalID: getSolProposalSubmissionDataByProposalID,\r\n    postSubmitProposalFileUpload: postSubmitProposalFileUpload,\r\n    getPageHeaderInfo: getPageHeaderInfo,\r\n    getSpecialPageHeaderInfo: getSpecialPageHeaderInfo,\r\n    vendorContactInfo: vendorContactInfo,\r\n    postSubmitProposalFileDelete: postSubmitProposalFileDelete,\r\n    postSubmitProposal: postSubmitProposal,\r\n    postUpdateProposal: postUpdateProposal,\r\n    GetReviseProposalData: GetReviseProposalData,\r\n    guid: guid,\r\n    isGUID: isGUID,\r\n    globalCancellation: globalCancellation\r\n}; ","// component-based dialog to be called\r\n// same progress bar\r\n// make sure user can't cancel by clicking anywhere else on the screen\r\n\r\n// submission in progress\r\n// standard dialog look with progress bar underneath the dialog header\r\n\r\n// header: Submission in progress\r\n// text: Your files are being uploaded. Please do not close this window or navigate away from this page.\r\n\r\n// use variables for whether it's an upload, download etc\r\n\r\n//   upload: {\r\n//     header: 'Submission in progress',\r\n//     mainText: 'Your files are being uploaded. Please do not close this window or navigate away from this page.\r\n//   },\r\n//   download: {\r\n//     header: 'Download in progress',\r\n//     mainText: 'Your files are being downloaded. Please do not close this window or navigate away from this page.\r\n//   }\r\n\r\n// */\r\n\r\n/* LATER TODAY\r\n\r\n  build form components\r\n  insert form components into pages with forms\r\n  work on table components with different classes to define the page\r\n\r\n*/\r\n\r\nimport React from 'react';\r\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\r\nimport PropTypes from 'prop-types';\r\n\r\nfunction ProgressModal(props) {\r\n  // const { title, children, openPopup, setOpenPopup } = props;\r\n  let dialogText;\r\n\r\n  const { onClose, open, selectedValue } = props;\r\n\r\n  const handleClose = () => {\r\n    onClose(selectedValue);\r\n  }\r\n\r\n  const progressBar = (\r\n    <div className={`upload-bar-vertical-center upload-progress-modal`}>   \r\n      <div className=\"upload-bar-container\">\r\n        <div className=\"upload-text\">Uploading files</div>\r\n        <div className=\"upload-bar\">\r\n          <div className=\"upload-progress\" style={{width: `${props.loadedAmount}%`}}></div>\r\n        </div>\r\n        <div className=\"upload-percent\">{props.loadedAmount}%</div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  return (\r\n    <Dialog\r\n      open={open}\r\n      onClose={handleClose}\r\n      maxWidth='md'\r\n      fullWidth={true}\r\n      disableBackdropClick\r\n      disableEscapeKeyDown\r\n      >\r\n        <DialogTitle>{props.title}</DialogTitle>\r\n        <DialogContent>\r\n          <p>Your files are being uploaded. Please do not close this window or navigate away from this page.</p>\r\n          {progressBar}\r\n          <div className=\"dialog-footer float-right success-footer\">\r\n            {/*  /////  DO NOT DELETE! /////\r\n             * {props.loadedAmount < 90 &&\r\n             <button type=\"button\" className=\"MuiButtonBase-root MuiButton-root btn btn-secondary\" onClick={handleClose}>Cancel</button>\r\n            }*/}\r\n          </div>\r\n        </DialogContent>\r\n      </Dialog>\r\n  )\r\n}\r\n\r\nProgressModal.propTypes = {\r\n  onClose: PropTypes.func.isRequired,\r\n  open: PropTypes.bool.isRequired,\r\n  selectedValue: PropTypes.string.isRequired\r\n}\r\n\r\nexport default ProgressModal;","import React, { Component } from 'react';\r\nimport Joi from 'joi-browser';\r\nimport auth from \"../../services/authService\";\r\nimport { toast } from \"react-toastify\";\r\nimport FileUpload from \"../common/fileUpload\";\r\nimport Form from \"../common/form\";\r\nimport HTTPStatusCodes from \"../../enums/HTTPStatusCodes\";\r\nimport { SolicitationHeader } from \"./SolicitationHeader\";\r\nimport submitProposalService from \"../../services/submitProposalService\";\r\nimport * as constants from \"../common/constants\";\r\n\r\nimport ProgressModal from './progressModal';\r\nimport Footer from \"../Footer\";\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n    tooltip: {\r\n        backgroundColor: '#000',\r\n        color: '#fff',\r\n        maxWidth: 300,\r\n        fontSize: '14px',\r\n        padding: 8,\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n    },\r\n    arrow: {\r\n        color: '#000',\r\n    }\r\n}))(Tooltip);\r\n\r\nexport class SubmitProposal extends Form {\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            data: {\r\n                proposalName: \"\"\r\n            },\r\n            businessExcelFiles: [\r\n                { id: \"businessExcel1\", label: \"Business Excel\", errorMessage: \"\" }\r\n            ],\r\n            businessDocFiles: [\r\n                { id: \"businessPDF1\", label: \"Business Document\", isLoaded: false, errorMessage: \"\" }\r\n            ],\r\n            businessExcelFileCount: 1,\r\n            businessDocFileCount: 1,\r\n            solicitation: {},\r\n            errors: {},\r\n            pageError: false,\r\n            previousBusinessDocFileLoaded: false,\r\n            previousBusinessExcelFileLoaded: false,\r\n            uploadedFiles: [],\r\n            uploadedFileTotalSize: 0,\r\n            headerInfo: {},\r\n            isTechPdfLoaded: false,\r\n            isBusinessPdfLoaded: false,\r\n            isRequiredDocumentsUploaded: false,\r\n            techPdfRequired: \"\",\r\n            businessPdfRequired: \"\",\r\n            techPdfValidationError: \"\",\r\n            businessPdfValidationError: \"\",\r\n            humanPdfValidationError: \"\",\r\n            loading: false,\r\n            loadedAmount: 0,\r\n            cancelSubmission: false,\r\n            openProgressModal: false,\r\n            setopenProgressModal: false,\r\n            showRadioButtons: false,\r\n            newItemInput: \"\",\r\n            selectedFastTrackValue: \"\",\r\n            selectedPhase2Value: \"\",\r\n            buyItems: [\"Development\", \"Testing\"],\r\n        };\r\n\r\n        this.schema = {\r\n            proposalName: Joi.string().trim().required().error(() => { return { message: \"Proposal Name required.\" }; }),\r\n        };\r\n\r\n        this.onFileDelete = this.onFileDelete.bind(this);\r\n        this.onFileUpload = this.onFileUpload.bind(this);\r\n        this.addBusinessDoc = this.addBusinessDoc.bind(this);\r\n        this.addBusinessExcelDoc = this.addBusinessExcelDoc.bind(this);\r\n        this.onBusinessExcelFileUpload = this.onBusinessExcelFileUpload.bind(this);\r\n        this.onBusinessExcelFileDelete = this.onBusinessExcelFileDelete.bind(this);\r\n        this.onBusinessDocFileUpload = this.onBusinessDocFileUpload.bind(this);\r\n        this.onBusinessDocFileDelete = this.onBusinessDocFileDelete.bind(this);\r\n        this.deleteFileFromTemp = this.deleteFileFromTemp.bind(this);\r\n        this.verifyAllBusinessDocUpload = this.verifyAllBusinessDocUpload.bind(this);\r\n    }\r\n\r\n    async verifyAllBusinessDocUpload() {\r\n        let isAllBusDocUploaded = true;\r\n        let businessDocFiles = this.state.businessDocFiles;\r\n        businessDocFiles.forEach(element => {\r\n            if (!element.isLoaded) {\r\n                //element.errorMessage = \"Business PDF Required\";\r\n                isAllBusDocUploaded = false;\r\n            }\r\n        });\r\n\r\n        return isAllBusDocUploaded;\r\n    }\r\n    async addBusinessDoc() {\r\n        if (!this.state.previousBusinessDocFileLoaded) {\r\n            return;\r\n        }\r\n\r\n        let businessDocFileCount = this.state.businessDocFileCount;\r\n        businessDocFileCount++;\r\n\r\n        let item = { id: \"businessPDF\" + businessDocFileCount, label: \"Business Document\", isLoaded: false, errorMessage: \"\" };\r\n\r\n        let businessDocFiles = [...this.state.businessDocFiles, item];\r\n        this.setState({ businessDocFileCount, businessDocFiles, previousBusinessDocFileLoaded: false, isRequiredDocumentsUploaded: false });\r\n\r\n\r\n    }\r\n    async addBusinessExcelDoc() {\r\n        if (!this.state.previousBusinessExcelFileLoaded) {\r\n            return;\r\n        }\r\n\r\n        let businessExcelFileCount = this.state.businessExcelFileCount;\r\n        businessExcelFileCount++;\r\n\r\n        let item = { id: \"businessExcel\" + businessExcelFileCount, label: \"Business Excel\", errorMessage: \"\" };\r\n        let businessExcelFiles = [...this.state.businessExcelFiles, item];\r\n        this.setState({ businessExcelFileCount, businessExcelFiles, previousBusinessExcelFileLoaded: false });\r\n\r\n    }\r\n    async onFileDelete(fileGuid, id) {\r\n        //console.log(\"Submit Proposal File delete file id\", fileGuid);\r\n        const techPdf = \"techPDF\";\r\n        const humanPdf = \"humanPDF\";\r\n        const businessPdf = \"businessPDF\";\r\n        try {\r\n            this.deleteFileFromTemp(fileGuid);\r\n            if (id === techPdf) {\r\n                this.setState({ isTechPdfLoaded: false, isRequiredDocumentsUploaded: false });\r\n            }\r\n            if (id === businessPdf) {\r\n                this.setState({ isBusinessPdfLoaded: false, isRequiredDocumentsUploaded: false });\r\n            }\r\n            return true;\r\n        } catch (e) {\r\n            //console.log(\"File Delete Error\", e);\r\n            return false;\r\n        }\r\n\r\n    }\r\n    async deleteFileFromTemp(fileGuid) {\r\n        const fileObjToDelete = this.state.uploadedFiles.find(o => o.fileGuid === fileGuid);\r\n\r\n        if (fileObjToDelete !== undefined) {\r\n            try {\r\n                //const { data } = await submitProposalService.postSubmitProposalFileDelete(this.state.solicitation.pageGuid, fileGuid);\r\n                const uploadedFilesFiltered = this.state.uploadedFiles.filter(obj => obj.fileGuid !== fileGuid);\r\n                let uploadedFileTotalSize = this.state.uploadedFileTotalSize - fileObjToDelete.file.size;\r\n                uploadedFileTotalSize = uploadedFileTotalSize || 0;\r\n                await this.setState({ uploadedFiles: uploadedFilesFiltered, uploadedFileTotalSize });\r\n            } catch (ex) {\r\n                //console.log(\"Error in deleteFileFromTemp\", ex);\r\n                toast.error(\"Error Deleting File\");\r\n            }\r\n        }\r\n    }\r\n\r\n    async onBusinessExcelFileDelete(fileGuid, id, isReplace) {\r\n\r\n        try {\r\n            if (!isReplace) {\r\n                if (id !== \"businessExcel1\") {\r\n                    let businessExcelFiles = this.state.businessExcelFiles;\r\n                    const businessExcelFilesFiltered = businessExcelFiles.filter(obj => obj.id !== id);\r\n                    //this.setState({\r\n                    //    businessExcelFiles: businessExcelFilesFiltered,\r\n                    //    previousBusinessExcelFileLoaded: true\r\n                    //});\r\n\r\n                    setTimeout(() => {\r\n                        this.setState({\r\n                            businessExcelFiles: businessExcelFilesFiltered,\r\n                            previousBusinessExcelFileLoaded: true\r\n                        });\r\n                    },\r\n                        1);\r\n\r\n                } else {\r\n                    this.setState({ previousBusinessExcelFileLoaded: false });\r\n                }\r\n            }\r\n            this.deleteFileFromTemp(fileGuid);\r\n            return true;\r\n\r\n        } catch (e) {\r\n            //console.log(\"Error in Business excel file delete\", e);\r\n            return false;\r\n        }\r\n\r\n\r\n    }\r\n    async onBusinessDocFileDelete(fileGuid, id, isReplace) {\r\n\r\n        try {\r\n\r\n            if (!isReplace) {\r\n                if (id !== \"businessPDF1\") {\r\n\r\n                    let businessDocFiles = this.state.businessDocFiles;\r\n                    const businessDocFilesFiltered = businessDocFiles.filter(obj => obj.id !== id);\r\n                    //this.setState({ businessDocFiles: businessDocFilesFiltered, previousBusinessDocFileLoaded: true });\r\n\r\n                    setTimeout(() => {\r\n                        this.setState({\r\n                            businessDocFiles: businessDocFilesFiltered,\r\n                            previousBusinessDocFileLoaded: true\r\n                        });\r\n                    },\r\n                        1);\r\n\r\n                } else {\r\n                    let businessDocFiles = this.state.businessDocFiles;\r\n                    const objIndex = businessDocFiles.findIndex(obj => obj.id === id);\r\n                    businessDocFiles[objIndex].isLoaded = false;\r\n                    businessDocFiles[objIndex].errorMessage = \"\";\r\n                    this.setState({ businessDocFiles });\r\n                    this.setState({ previousBusinessDocFileLoaded: false, isRequiredDocumentsUploaded: false });\r\n                }\r\n\r\n            }\r\n\r\n            this.deleteFileFromTemp(fileGuid);\r\n            return true;\r\n\r\n        } catch (e) {\r\n            //console.log(\"Error in Business doc file delete\", e);\r\n            return false;\r\n        }\r\n\r\n    }\r\n\r\n    async onBusinessExcelFileUpload(file, id) {\r\n        try {\r\n            const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n\r\n            if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n                return constants.MaxContentSizeLimitExceeded;\r\n\r\n            let businessExcelFiles = this.state.businessExcelFiles;\r\n            const objIndex = businessExcelFiles.findIndex(obj => obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n\r\n                businessExcelFiles[objIndex].errorMessage = \"Only Excel files are allowed\";\r\n                this.setState({ businessExcelFiles });\r\n                return \"NotAllowed\";\r\n            }\r\n\r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name, file, fileType: constants.BusinessExcel }\r\n\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            businessExcelFiles[objIndex].errorMessage = \"\";\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, businessExcelFiles, uploadedFileTotalSize, previousBusinessExcelFileLoaded: true });\r\n\r\n            return fileGuid;\r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        }\r\n    }\r\n\r\n    async onBusinessDocFileUpload(file, id) {\r\n        //console.log('on business upload');\r\n        try {\r\n            const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n            if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n                return constants.MaxContentSizeLimitExceeded;\r\n\r\n            let businessDocFiles = this.state.businessDocFiles;\r\n\r\n            const objIndex = businessDocFiles.findIndex(obj => obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\", \".pdf\", \".doc\", \".docx\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n                businessDocFiles[objIndex].errorMessage = \"Only Excel, Word or PDF files are allowed\";\r\n                businessDocFiles[objIndex].isLoaded = false;\r\n                this.setState({ businessDocFiles });\r\n                return \"NotAllowed\";\r\n            }\r\n\r\n\r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name, file, fileType: constants.NonRDBusinessDocs }\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, uploadedFileTotalSize });\r\n\r\n            businessDocFiles[objIndex].isLoaded = true;\r\n            businessDocFiles[objIndex].errorMessage = \"\";\r\n            this.setState({ businessDocFiles });\r\n\r\n            let isAllBusDocUploaded = await this.verifyAllBusinessDocUpload();\r\n            this.setState({ previousBusinessDocFileLoaded: true, isRequiredDocumentsUploaded: isAllBusDocUploaded });\r\n            return fileGuid;\r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        }\r\n    }\r\n    async onFileUpload(file, id) {\r\n        const techPdf = \"techPDF\";\r\n        const humanPdf = \"humanPDF\";\r\n        const businessPdf = \"businessPDF\";\r\n        const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n        if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n            return constants.MaxContentSizeLimitExceeded;\r\n        //console.log('onFileUpload');\r\n        try {\r\n\r\n            var validExts = new Array(\".pdf\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n\r\n                if (id === techPdf) {\r\n                    this.setState({ techPdfValidationError: \" Only PDF file allowed\", isTechPdfLoaded: false, techPdfRequired: \"\" });\r\n                }\r\n\r\n                if (id === humanPdf) {\r\n                    this.setState({ humanPdfValidationError: \" Only PDF file allowed\" });\r\n                }\r\n\r\n                if (id === businessPdf) {\r\n                    this.setState({ businessPdfValidationError: \" Only PDF file allowed\", isBusinessPdfLoaded: false, businessPdfRequired: \"\" });\r\n                }\r\n                return constants.NotAllowed;\r\n            }\r\n\r\n            //const { data } = await this.uploadFile(file);\r\n            let fileType = -1;\r\n            let isRequiredDocumentsUploaded = false;\r\n            //TechPdf = 1, HumanPdf = 2, BusinessPdf = 3, BusinessExcel = 4\r\n            if (id === techPdf) {\r\n                fileType = constants.TechPdf;\r\n                if (this.state.isBusinessPdfLoaded)\r\n                    isRequiredDocumentsUploaded = true;\r\n                this.setState({ isTechPdfLoaded: true, isRequiredDocumentsUploaded, techPdfRequired: \"\", techPdfValidationError: \"\" });\r\n\r\n            }\r\n\r\n            if (id === humanPdf) {\r\n                fileType = constants.HumanPdf;\r\n                this.setState({ humanPdfValidationError: \"\" });\r\n            }\r\n\r\n            if (id === businessPdf) {\r\n                fileType = constants.BusinessPdf;\r\n                if (this.state.isTechPdfLoaded)\r\n                    isRequiredDocumentsUploaded = true;\r\n                this.setState({ isBusinessPdfLoaded: true, isRequiredDocumentsUploaded, businessPdfRequired: \"\", businessPdfValidationError: \"\" });\r\n            }\r\n            const fileGuid = await submitProposalService.guid();\r\n            //const item = { fileGuid: data.fileGuid, fileName: data.fileName, fileType: fileType }\r\n            const item = { fileGuid, fileName: file.name, file, fileType: fileType }\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, uploadedFileTotalSize });\r\n\r\n            //return data.fileGuid;   \r\n            return fileGuid;\r\n        } catch (e) {\r\n\r\n            //console.log(e);\r\n            return constants.Error;\r\n\r\n        }\r\n    }\r\n    ////file upload logic changed - for external all files will be sent to server together\r\n    //async uploadFile(file) {\r\n    //    try {\r\n    //        const data = new FormData();\r\n    //        data.append('file', file);\r\n    //        const result = await submitProposalService.postSubmitProposalFileUpload(this.state.solicitation.pageGuid, data);\r\n    //        return result; \r\n    //    }\r\n    //    catch (ex) {\r\n\r\n    //        console.log(ex.response);\r\n    //        toast.error(ex.response.data);\r\n    //    } \r\n    //}\r\n\r\n    async componentWillMount() {\r\n\r\n        try {\r\n            this.setState({ loading: true });\r\n            const solicitationId = this.props.match.params.id;\r\n            this.getPageHeaderInfo(solicitationId);\r\n            const { data: solicitation } = await submitProposalService.getSolProposalSubmissionData(solicitationId);\r\n\r\n            if (solicitation?.icId?.toUpperCase() === \"SBIRSTTR\" ||\r\n                solicitation?.solicitationTargetIC?.toUpperCase() === \"SBIRSTTR\") {\r\n                this.setState({ solicitation, showRadioButtons: true });\r\n            } else {\r\n                this.setState({ solicitation, showRadioButtons: false });\r\n            }\r\n\r\n            this.setState({ solicitation });\r\n        }\r\n        catch (ex) {\r\n            this.setState({ pageError: true });\r\n            setTimeout(() => window.location = \"/\", 3000);\r\n        }\r\n        finally {\r\n            this.setState({ loading: false });\r\n        }\r\n    }\r\n\r\n    async getPageHeaderInfo(solicitationId) {\r\n        try {\r\n            const { data: headerInfo } = await submitProposalService.getPageHeaderInfo(solicitationId);\r\n            //console.log('fetched sol header info', headerInfo);\r\n            this.setState({ headerInfo });\r\n\r\n        } catch (ex) {\r\n            console.log(ex);\r\n        }\r\n    }\r\n    doSubmit = async () => {\r\n        if (this.state.solicitation.solicitationIsRD) {\r\n            if (!this.state.isTechPdfLoaded && !this.state.isBusinessPdfLoaded) {\r\n                this.setState({ techPdfRequired: \"Technical PDF Required\", businessPdfRequired: \"Business PDF Required\" });\r\n                return;\r\n            }\r\n            if (!this.state.isTechPdfLoaded) {\r\n                this.setState({ techPdfRequired: \"Technical PDF Required\" });\r\n                return;\r\n            }\r\n\r\n            if (!this.state.isBusinessPdfLoaded) {\r\n                this.setState({ businessPdfRequired: \"Business PDF Required\" });\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.state.solicitation.solicitationIsRD) {\r\n            let isError = false;\r\n\r\n            let businessDocFiles = this.state.businessDocFiles;\r\n            businessDocFiles.forEach(element => {\r\n                if (!element.isLoaded) {\r\n                    element.errorMessage = \"Business PDF Required\";\r\n                    isError = true;\r\n                }\r\n            });\r\n\r\n\r\n            this.setState({ businessDocFiles });\r\n            if (isError) { return; }\r\n        }\r\n\r\n        const pageGuid = this.state.solicitation.pageGuid;\r\n        const solicitationId = this.state.solicitation.solicitationID;\r\n        const proposalName = this.state.data.proposalName;\r\n        const selectedFastTrackValue = this.state.selectedFastTrackValue;\r\n        const selectedPhase2Value = this.state.selectedPhase2Value;\r\n        const uploadedFiles = this.state.uploadedFiles;\r\n        const item = { proposalName, selectedFastTrackValue, selectedPhase2Value, specialInviteId: \"\", pageGuid, uploadedFiles }\r\n\r\n        try {\r\n            //console.log('inside try');\r\n            const user = auth.getCurrentUser();\r\n            let newThis = this;\r\n\r\n            const res = await submitProposalService.postSubmitGateway(user, solicitationId, 1);\r\n            if (res.status !== HTTPStatusCodes.SUCCESS) {\r\n                toast.error(\"Submission gateway error\");\r\n                return;\r\n            }\r\n\r\n            const { data, status } = await submitProposalService.postSubmitProposal('newProposal', solicitationId, item, newThis, \"api/solicitations/\", \"/submitProposal/\", this.state.cancelSubmission);\r\n            if (status === HTTPStatusCodes.SUCCESS) {\r\n                //console.log(\"Submit Proposal success\", data);\r\n                //setTimeout(() => window.location = \"/\", 2000);\r\n                setTimeout(() => {\r\n                    this.props.history.push({\r\n                        pathname: `/reviseProposal/${data.proposalId}`,\r\n                        state: { showProposalSubmissionSuccessModal: true },\r\n                        from: \"Submit Proposal Page\"\r\n                    });\r\n                    //window.location.reload();\r\n                },\r\n                    2000);\r\n            } else {\r\n                //console.log(\"Submit Proposal failure-data\", data);\r\n                //console.log(\"Submit Proposal failure-status\", status);\r\n            }\r\n        } catch (ex) {\r\n            if (ex.toString().indexOf(\"CANCEL_UPLOAD\") >= 0) {\r\n                toast.warning(\"Upload Canceled\");\r\n                //setTimeout(() => window.location = \"/\", 3000);\r\n            }\r\n\r\n            if (ex.response.status === 403) {\r\n                toast.error(ex.response.data);\r\n                setTimeout(() => window.location = \"/deadlineerror\", 3000);\r\n            }\r\n            else {\r\n                toast.error(\"Submission fail\");\r\n                setTimeout(() => window.location = \"/\", 3000);\r\n            }\r\n\r\n            this.setState({\r\n                setopenProgressModal: false,\r\n                openProgressModal: false,\r\n                loadedAmount: 0\r\n            });\r\n        }\r\n\r\n\r\n    };\r\n\r\n    // handleClose = () => {\r\n\r\n    //   this\r\n    // }\r\n\r\n    onCancelUploading = () => {\r\n        //console.log('onCancelUploading');\r\n        this.setState({\r\n            setopenProgressModal: false,\r\n            openProgressModal: false,\r\n            loadedAmount: 0\r\n        });\r\n\r\n        submitProposalService.postSubmitProposal('newProposal', null, null, null, \"api/solicitations/\", \"/submitProposal/\", true);\r\n        submitProposalService.postSubmitGateway(auth.getCurrentUser(), this.state.solicitation.solicitationID, 3)\r\n            .then(res => { /*console.log(\"User clicked Cancel button when proposal is uploading\")*/ })\r\n            .catch(err => { /*console.log(\"User click cancel button\")*/ });\r\n    }\r\n\r\n    setFastTrack = (checkedValue) => {\r\n        this.setState({\r\n            selectedFastTrackValue: checkedValue,\r\n        });\r\n    };\r\n\r\n    setPhase2 = (checkedValue) => {\r\n        this.setState({\r\n            selectedPhase2Value: checkedValue,\r\n        });\r\n    };\r\n\r\n    resetOptions(event) {\r\n        this.setState({\r\n            selectedFastTrackValue: '',\r\n            selectedPhase2Value: ''\r\n        });\r\n    }\r\n\r\n    render() {\r\n        if (this.state.pageError)\r\n            return null;\r\n\r\n        const submitDisabled = this.validate() || !this.state.isRequiredDocumentsUploaded;\r\n\r\n        const loader = (<div className=\"loader\" style={{ position: \"fixed\", top: \"40%\", left: \"45%\" }}>Loading...</div>);\r\n\r\n        return (\r\n            <div>\r\n                <div id=\"content\" className=\"content\">\r\n                    <SolicitationHeader headerInfo={this.state.headerInfo}/>\r\n                    {/* if you're uploading and updating at the same time, maybe have the loadedAmount equal to the updating loaded + submission uploaded / 2 to show the two types of calls being made at once */}\r\n\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"section-heading\">Submit Proposal <small style={{ fontSize: 14, marginLeft: 10 }}>Proposal name and documents are required to submit proposal</small></div>\r\n                            {this.state.loading && loader}\r\n                            {!this.state.loading && <div className=\"tile-section form-section submit-proposal\">\r\n                                <form onSubmit={e => { e.preventDefault(); }}>\r\n                                    {this.renderInput(\"proposalName\", \"Proposal Name\", \"col-lg-9\", \"text\", true)}\r\n\r\n                                    {this.state.showRadioButtons &&\r\n                                        <div className=\"proposal-options\">\r\n                                            <div className=\"options-container\">\r\n                                                <div className=\"form-group row\">\r\n                                                    <label className=\"control-label\">FAST TRACK?</label>\r\n                                                    <div className=\"\">\r\n                                                        <input\r\n                                                            type=\"radio\"\r\n                                                            name=\"fasttrack\"\r\n                                                            value=\"yes\"\r\n                                                            checked={this.state.selectedFastTrackValue === 'Yes'}\r\n                                                            onChange={this.setFastTrack.bind(this, 'Yes')}\r\n                                                            aria-label=\"fasttrack yes\"\r\n                                                        />Yes\r\n                                                    </div>\r\n                                                    <div className=\"\">\r\n                                                        <input\r\n                                                            type=\"radio\"\r\n                                                            name=\"fasttrack\"\r\n                                                            value=\"no\"\r\n                                                            checked={this.state.selectedFastTrackValue === 'No'}\r\n                                                            onChange={this.setFastTrack.bind(this, 'No')}\r\n                                                            aria-label=\"fasttrack no\"\r\n                                                        />No\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className=\"form-group row\">\r\n                                                    <label className=\"control-label\">Direct Phase II?</label>\r\n                                                    <div className=\"\">\r\n                                                        <input\r\n                                                            type=\"radio\"\r\n                                                            name=\"phase2\"\r\n                                                            value=\"yes\"\r\n                                                            checked={this.state.selectedPhase2Value === 'Yes'}\r\n                                                            onChange={this.setPhase2.bind(this, 'Yes')}\r\n                                                            aria-label=\"phase2 yes\"\r\n                                                        />Yes\r\n                                                    </div>\r\n                                                    <div className=\"\">\r\n                                                        <input\r\n                                                            type=\"radio\"\r\n                                                            name=\"phase2\"\r\n                                                            value=\"no\"\r\n                                                            checked={this.state.selectedPhase2Value === 'No'}\r\n                                                            onChange={this.setPhase2.bind(this, 'No')}\r\n                                                            aria-label=\"phase2 no\"\r\n                                                        />No\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className=\"reset-link\">\r\n                                                    <a className=\"link-textonly\" onClick={() => this.resetOptions()}>Clear Selections</a>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    }\r\n\r\n                                </form>\r\n                                <div className=\"additional-materials\">\r\n                                    <div className=\"material-head\">\r\n                                        <div className=\"material-info\">\r\n                                            <div className=\"material-title\">Proposal Documents</div>\r\n                                            <small>Max File Upload Size: 387.19 MB</small>\r\n                                        </div>\r\n                                        <div className=\"material-req\">\r\n                                            {!this.state.solicitation.solicitationIsRD && <p>Only excel, word or pdf formats can be submitted. Multiple individual files may be submitted.</p>}\r\n                                            {this.state.solicitation.solicitationIsRD && <p>Only a single Technical, Business, and PHS Human Subjects and Clinical Trials PDF file can be submitted. Multiple Business Excel files may be submitted.</p>\r\n                                            }\r\n\r\n                                        </div>\r\n                                    </div>\r\n                                    <ul className=\"chevron-list\">\r\n                                        {this.state.solicitation.solicitationIsRD && (<li key=\"techPDF\" className=\"technical-doc \">\r\n                                            <FileUpload\r\n                                                dynamicClass=\"technical-doc-upload\"\r\n                                                label=\"Technical PDF\"\r\n                                                id=\"techPDF\"\r\n                                                required={true}\r\n                                                accept=\"application/pdf\"\r\n                                                errorMessage={this.state.techPdfRequired.length > 0 ? this.state.techPdfRequired : this.state.techPdfValidationError}\r\n                                                totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                fileUpload={this.onFileUpload}\r\n                                                fileDelete={this.onFileDelete}\r\n                                            />\r\n\r\n                                        </li>)}\r\n                                        {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li key=\"humanPDF\" className=\"misc-doc \">\r\n                                            <FileUpload\r\n                                                dynamicClass=\"technical-doc-upload\"\r\n                                                label=\"PHS Human Subjects and Clinical Trials PDF\"\r\n                                                id=\"humanPDF\"\r\n                                                required={false}\r\n                                                accept=\"application/pdf\"\r\n                                                errorMessage={this.state.humanPdfValidationError}\r\n                                                totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                fileUpload={this.onFileUpload}\r\n                                                fileDelete={this.onFileDelete}\r\n                                            />\r\n                                        </li>)}\r\n                                        {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li className=\"misc-doc-info\" key=\"misc-doc-info\"><span>Upload the Human Subjects and Clinical Trials Information Form as required in this solicitation. Refer to your solicitation instructions in <a href=\"https://sam.gov/content/home\" className=\"link-textonly\" target=\"_blank\">sam.gov</a> for more information.<br />Please ensure that you are using correct version of the <a href=\"https://oamp.od.nih.gov/nih-document-generation-system/dgs-workform-information/attachment-files-section-j\" className=\"link-textonly\" target=\"_blank\">Human Subject and Clinical Trial form</a>.</span></li>)}\r\n                                        {this.state.solicitation.solicitationIsRD && (<li key=\"businessPDF\" className=\"business-doc\">\r\n                                            <FileUpload\r\n                                                dynamicClass=\"technical-doc-upload\"\r\n                                                label=\"Business PDF\"\r\n                                                id=\"businessPDF\"\r\n                                                required={true}\r\n                                                accept=\"application/pdf\"\r\n                                                errorMessage={this.state.businessPdfRequired.length > 0 ? this.state.businessPdfRequired : this.state.businessPdfValidationError}\r\n                                                totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                fileUpload={this.onFileUpload}\r\n                                                fileDelete={this.onFileDelete}\r\n                                            />\r\n                                        </li>)}\r\n                                        {!this.state.solicitation.solicitationIsRD && this.state.businessDocFiles.map((item) => {\r\n                                            return (<li key={item.id} className=\"business-doc \">\r\n                                                <FileUpload\r\n                                                    dynamicClass=\"business-doc-upload\"\r\n                                                    label={item.label}\r\n                                                    id={item.id}\r\n                                                    required={true}\r\n                                                    accept=\".xlsx,.xls, .doc, .docx,.pdf\"\r\n                                                    errorMessage={item.errorMessage}\r\n                                                    totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                    fileUpload={this.onBusinessDocFileUpload}\r\n                                                    fileDelete={this.onBusinessDocFileDelete}\r\n                                                />\r\n                                            </li>);\r\n                                        })}\r\n                                        {this.state.solicitation.solicitationIsRD && this.state.businessExcelFiles.map((item) => {\r\n                                            return (<li key={item.id} className=\"business-excel-doc \">\r\n                                                <FileUpload\r\n                                                    dynamicClass=\"technical-doc-upload\"\r\n                                                    label={item.label}\r\n                                                    id={item.id}\r\n                                                    required={false}\r\n                                                    accept=\"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,\"\r\n                                                    errorMessage={item.errorMessage}\r\n                                                    totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                    fileUpload={this.onBusinessExcelFileUpload}\r\n                                                    fileDelete={this.onBusinessExcelFileDelete}\r\n                                                />\r\n                                            </li>);\r\n                                        })}\r\n                                        {\r\n                                            this.state.solicitation.solicitationIsRD && <li className=\"business-excel-info\" key=\"business-excel-info\"><span>Upload excel if required by the solicitation instructions. You may upload multiple excel files.</span></li>\r\n                                        }\r\n\r\n\r\n                                    </ul>\r\n                                    {this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                        <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\"\r\n                                            onClick={this.addBusinessExcelDoc} disabled={!this.state.previousBusinessExcelFileLoaded}>\r\n                                            <span className=\"MuiButton-label\">\r\n                                                <img src=\"images/plus-white.svg\" alt=\"add-additional-document\" />Add Additional Business Excel Document\r\n                                            </span>\r\n                                            <span className=\"MuiTouchRipple-root\"></span>\r\n                                        </button>\r\n                                    </div>\r\n                                    )}\r\n\r\n                                    {!this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                        <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\"\r\n                                            onClick={this.addBusinessDoc} disabled={!this.state.previousBusinessDocFileLoaded}>\r\n                                            <span className=\"MuiButton-label\">\r\n                                                <img src=\"images/plus-white.svg\" alt=\"add-additional-document\" />Add Additional Business Document\r\n                                            </span>\r\n                                            <span className=\"MuiTouchRipple-root\"></span>\r\n                                        </button>\r\n                                    </div>\r\n                                    )}\r\n                                </div>\r\n                                <div className=\"tile-footer\" data-toggle=\"tooltip\" title={submitDisabled ? \"Required information is not provided.\" : \"\"}>\r\n                                    {submitDisabled && <span className=\"document-requirement\">Proposal Name and documents are required to submit proposal</span>}\r\n                                    <button\r\n                                        className={`MuiButtonBase-root MuiButton-root ${submitDisabled ? 'disabled-btn' : ''} MuiButton-contained submit-btn btn-primary`}\r\n                                        tabIndex=\"0\"\r\n                                        type=\"submit\"\r\n                                        disabled={submitDisabled}\r\n                                        onClick={(uploading) => { this.handleSubmit(uploading); this.setState({ setopenProgressModal: true, openProgressModal: true }); }}\r\n                                    >\r\n                                        <span className=\"MuiButton-label\">\r\n                                            Submit Proposal\r\n                                        </span>\r\n                                        <span className=\"MuiTouchRipple-root\"></span>\r\n                                    </button>\r\n                                </div>\r\n                            </div>}\r\n                        </div>\r\n                    </div>\r\n                    <ProgressModal\r\n                        openProgressModal={this.state.openProgressModal}\r\n                        setopenProgressModal={this.state.setopenProgressModal}\r\n                        open={this.state.openProgressModal}\r\n                        modalType='upload-progress'\r\n                        title='Submission in progress'\r\n                        loadedAmount={this.state.loadedAmount}\r\n                        selectedValue={'upload progress bar'}\r\n                        onClose={() => { this.onCancelUploading() }}\r\n                    >\r\n                    </ProgressModal>\r\n                </div>\r\n                <Footer/>\r\n            </div >\r\n\r\n        );\r\n    }\r\n}\r\n\r\nexport default SubmitProposal;\r\n","import React, { Component} from 'react';\r\nimport Joi from 'joi-browser';\r\nimport auth from \"../../services/authService\";\r\nimport { toast } from \"react-toastify\";\r\n// import '../siteStyles.css';\r\n\r\nimport FileUpload from \"../common/fileUpload\";\r\nimport Form from \"../common/form\";\r\nimport HTTPStatusCodes from \"../../enums/HTTPStatusCodes\";\r\nimport { SolicitationHeader } from \"./SolicitationHeader\";\r\nimport submitProposalService from \"../../services/submitProposalService\";\r\nimport * as constants from \"../common/constants\";\r\n\r\nimport ProgressModal from './progressModal';\r\nimport Footer from \"../Footer\";\r\n\r\nexport class SubmitSpecialProposal extends Form {\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            data: {\r\n                proposalName: \"\"\r\n            },\r\n            specialInviteId: null,\r\n            businessExcelFiles: [\r\n                { id: \"businessExcel1\", label: \"Business Excel\",errorMessage:\"\" }\r\n            ],\r\n            businessDocFiles: [\r\n                { id: \"businessPDF1\", label: \"Business Document\", isLoaded:false,  errorMessage:\"\" }\r\n            ],\r\n            businessExcelFileCount: 1,\r\n            businessDocFileCount: 1,\r\n            solicitation: {},\r\n            errors: {},\r\n            pageError: false,\r\n            previousBusinessDocFileLoaded: false,\r\n            previousBusinessExcelFileLoaded:false,\r\n            uploadedFiles: [],\r\n            uploadedFileTotalSize:0,\r\n            headerInfo: {},\r\n            isTechPdfLoaded: false,\r\n            isBusinessPdfLoaded: false,\r\n            isRequiredDocumentsUploaded:false,\r\n            techPdfRequired: \"\",\r\n            businessPdfRequired: \"\",\r\n            techPdfValidationError:\"\",\r\n            businessPdfValidationError:\"\",\r\n            humanPdfValidationError: \"\",\r\n            loading:false,\r\n            loadedAmount: 0,\r\n            cancelSubmission: false,\r\n            openProgressModal: false,\r\n            setopenProgressModal: false\r\n        };\r\n\r\n        this.schema = {\r\n            proposalName: Joi.string().trim().required().error(() => { return { message: \"Proposal Name required.\" }; }),\r\n        };\r\n        \r\n        \r\n        this.onFileDelete = this.onFileDelete.bind(this);\r\n        this.onFileUpload = this.onFileUpload.bind(this);\r\n        this.addBusinessDoc = this.addBusinessDoc.bind(this);\r\n        this.addBusinessExcelDoc = this.addBusinessExcelDoc.bind(this);\r\n        this.onBusinessExcelFileUpload = this.onBusinessExcelFileUpload.bind(this);\r\n        this.onBusinessExcelFileDelete = this.onBusinessExcelFileDelete.bind(this);\r\n        this.onBusinessDocFileUpload = this.onBusinessDocFileUpload.bind(this);\r\n        this.onBusinessDocFileDelete = this.onBusinessDocFileDelete.bind(this);\r\n        this.deleteFileFromTemp = this.deleteFileFromTemp.bind(this);\r\n        this.verifyAllBusinessDocUpload = this.verifyAllBusinessDocUpload.bind(this);\r\n    }\r\n\r\n    async verifyAllBusinessDocUpload() {\r\n        let isAllBusDocUploaded = true;\r\n        let businessDocFiles = this.state.businessDocFiles;\r\n        businessDocFiles.forEach(element => {\r\n            if (!element.isLoaded) {\r\n                //element.errorMessage = \"Business PDF Required\";\r\n                isAllBusDocUploaded = false;\r\n            }\r\n        });\r\n\r\n        return isAllBusDocUploaded;\r\n    }\r\n    async addBusinessDoc() {\r\n        if (!this.state.previousBusinessDocFileLoaded) {\r\n            return;\r\n        }\r\n\r\n        let businessDocFileCount = this.state.businessDocFileCount;\r\n        businessDocFileCount++;\r\n\r\n        let item = { id: \"businessPDF\" + businessDocFileCount, label: \"Business Document\",isLoaded:false,  errorMessage:\"\" };\r\n\r\n        let businessDocFiles = [...this.state.businessDocFiles, item];\r\n        this.setState({ businessDocFileCount, businessDocFiles, previousBusinessDocFileLoaded: false, isRequiredDocumentsUploaded: false });\r\n\r\n\r\n    }\r\n    async addBusinessExcelDoc() {\r\n        if (!this.state.previousBusinessExcelFileLoaded) {\r\n            return;\r\n        }\r\n       \r\n        let businessExcelFileCount = this.state.businessExcelFileCount;\r\n        businessExcelFileCount++;\r\n        \r\n        let item = { id: \"businessExcel\" + businessExcelFileCount, label: \"Business Excel\", errorMessage: \"\"};\r\n        let businessExcelFiles = [...this.state.businessExcelFiles, item];\r\n        this.setState({ businessExcelFileCount, businessExcelFiles, previousBusinessExcelFileLoaded: false});\r\n        \r\n    }\r\n    async onFileDelete(fileGuid, id) {\r\n        //console.log(\"Submit Proposal File delete file id\", fileGuid);\r\n        const techPdf = \"techPDF\";\r\n        const humanPdf = \"humanPDF\";\r\n        const businessPdf = \"businessPDF\";\r\n        try {\r\n            this.deleteFileFromTemp(fileGuid);\r\n            if (id === techPdf) {\r\n                this.setState({ isTechPdfLoaded: false, isRequiredDocumentsUploaded:false});\r\n            }\r\n            if (id === businessPdf) {\r\n                this.setState({ isBusinessPdfLoaded: false, isRequiredDocumentsUploaded: false });\r\n            }\r\n            return true; \r\n        } catch (e) {\r\n            //console.log(\"File Delete Error\", e);\r\n            return false;\r\n        } \r\n\r\n    }\r\n    async deleteFileFromTemp(fileGuid) {\r\n        const fileObjToDelete = this.state.uploadedFiles.find(o => o.fileGuid === fileGuid);\r\n\r\n        if (fileObjToDelete !== undefined) {\r\n            try {\r\n                //const { data } = await submitProposalService.postSubmitProposalFileDelete(this.state.solicitation.pageGuid, fileGuid);\r\n                const uploadedFilesFiltered = this.state.uploadedFiles.filter(obj => obj.fileGuid !== fileGuid);\r\n                let uploadedFileTotalSize = this.state.uploadedFileTotalSize - fileObjToDelete.file.size;\r\n                uploadedFileTotalSize = uploadedFileTotalSize || 0;\r\n                await this.setState({ uploadedFiles: uploadedFilesFiltered, uploadedFileTotalSize });\r\n            } catch (ex) {\r\n                //console.log(\"Error in deleteFileFromTemp\", ex);\r\n                toast.error(\"Error Deleting File\");\r\n            } \r\n        }\r\n    }\r\n\r\n    async onBusinessExcelFileDelete(fileGuid,id,isReplace) {\r\n\r\n        try {\r\n            if (!isReplace) {\r\n                if (id !== \"businessExcel1\") {\r\n                    let businessExcelFiles = this.state.businessExcelFiles;\r\n                    const businessExcelFilesFiltered = businessExcelFiles.filter(obj => obj.id !== id);\r\n                    //this.setState({\r\n                    //    businessExcelFiles: businessExcelFilesFiltered,\r\n                    //    previousBusinessExcelFileLoaded: true\r\n                    //});\r\n\r\n                    setTimeout(() => {\r\n                            this.setState({\r\n                                businessExcelFiles: businessExcelFilesFiltered,\r\n                                previousBusinessExcelFileLoaded: true\r\n                            });\r\n                        },\r\n                        1);\r\n\r\n                } else {\r\n                    this.setState({ previousBusinessExcelFileLoaded: false });\r\n                }\r\n            }\r\n            this.deleteFileFromTemp(fileGuid);\r\n            return true;\r\n\r\n        } catch (e) {\r\n            //console.log(\"Error in Business excel file delete\", e);\r\n            return false;\r\n        } \r\n        \r\n       \r\n    }\r\n    async onBusinessDocFileDelete(fileGuid, id,isReplace) {\r\n\r\n        try {\r\n\r\n            if (!isReplace) {\r\n                if (id !== \"businessPDF1\") {\r\n\r\n                    let businessDocFiles = this.state.businessDocFiles;\r\n                    const businessDocFilesFiltered = businessDocFiles.filter(obj => obj.id !== id);\r\n                    //this.setState({ businessDocFiles: businessDocFilesFiltered, previousBusinessDocFileLoaded: true });\r\n\r\n                    setTimeout(() => {\r\n                            this.setState({\r\n                                businessDocFiles: businessDocFilesFiltered,\r\n                                previousBusinessDocFileLoaded: true\r\n                            });\r\n                        },\r\n                        1);\r\n\r\n                } else {\r\n                    let businessDocFiles = this.state.businessDocFiles;\r\n                    const objIndex = businessDocFiles.findIndex(obj => obj.id === id);\r\n                    businessDocFiles[objIndex].isLoaded = false;\r\n                    businessDocFiles[objIndex].errorMessage = \"\";\r\n                    this.setState({ businessDocFiles });\r\n                    this.setState({ previousBusinessDocFileLoaded: false, isRequiredDocumentsUploaded: false });\r\n                }\r\n                \r\n            }\r\n\r\n            this.deleteFileFromTemp(fileGuid);\r\n            return true;\r\n            \r\n        } catch (e) {\r\n            //console.log(\"Error in Business doc file delete\", e);\r\n            return false;\r\n        } \r\n\r\n    }\r\n    \r\n    async onBusinessExcelFileUpload(file,id) {\r\n        try {\r\n            const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n\r\n            if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n                return constants.MaxContentSizeLimitExceeded;\r\n\r\n            let businessExcelFiles= this.state.businessExcelFiles;\r\n            const objIndex=businessExcelFiles.findIndex(obj=>obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n              \r\n                businessExcelFiles[objIndex].errorMessage=\"Only Excel files are allowed\";\r\n                this.setState({businessExcelFiles});\r\n                return \"NotAllowed\";\r\n            }\r\n            \r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name,file, fileType: constants.BusinessExcel }\r\n\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            businessExcelFiles[objIndex].errorMessage = \"\";\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, businessExcelFiles, uploadedFileTotalSize,previousBusinessExcelFileLoaded: true });\r\n\r\n            return fileGuid;\r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        } \r\n    }\r\n\r\n    async onBusinessDocFileUpload(file, id) {\r\n      //console.log('on business upload');\r\n        try {\r\n            const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n            if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n                return constants.MaxContentSizeLimitExceeded;\r\n\r\n            let businessDocFiles = this.state.businessDocFiles;\r\n\r\n            const objIndex=businessDocFiles.findIndex(obj=>obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\", \".pdf\", \".doc\",\".docx\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n                businessDocFiles[objIndex].errorMessage=\"Only Excel, Word or PDF files are allowed\";\r\n                businessDocFiles[objIndex].isLoaded = false;\r\n                this.setState({businessDocFiles});\r\n                return \"NotAllowed\";\r\n            }\r\n\r\n            \r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name,file, fileType: constants.NonRDBusinessDocs }\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, uploadedFileTotalSize });\r\n\r\n            businessDocFiles[objIndex].isLoaded=true;\r\n            businessDocFiles[objIndex].errorMessage=\"\";\r\n            this.setState({businessDocFiles});\r\n\r\n            let isAllBusDocUploaded = await this.verifyAllBusinessDocUpload();\r\n            this.setState({ previousBusinessDocFileLoaded: true, isRequiredDocumentsUploaded: isAllBusDocUploaded });\r\n            return fileGuid; \r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        }\r\n    }\r\n    async onFileUpload(file, id) {\r\n        const techPdf = \"techPDF\";\r\n        const humanPdf = \"humanPDF\";\r\n        const businessPdf = \"businessPDF\";\r\n        const totalSizeAfterUpload = this.state.uploadedFileTotalSize + file.size;\r\n        if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed )\r\n            return constants.MaxContentSizeLimitExceeded;\r\n        //console.log('onFileUpload');\r\n        try {\r\n\r\n            var validExts = new Array(\".pdf\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n\r\n                if (id === techPdf) {\r\n                    this.setState({ techPdfValidationError: \" Only PDF file allowed\", isTechPdfLoaded: false, techPdfRequired: \"\" });\r\n                }\r\n    \r\n                if (id === humanPdf) {\r\n                    this.setState({ humanPdfValidationError:\" Only PDF file allowed\" });\r\n                }\r\n    \r\n                if (id === businessPdf) {\r\n                    this.setState({ businessPdfValidationError: \" Only PDF file allowed\", isBusinessPdfLoaded: false, businessPdfRequired: \"\"});\r\n                }\r\n                return constants.NotAllowed;\r\n            }\r\n\r\n            //const { data } = await this.uploadFile(file);\r\n            let fileType = -1;\r\n            let isRequiredDocumentsUploaded = false;\r\n            //TechPdf = 1, HumanPdf = 2, BusinessPdf = 3, BusinessExcel = 4\r\n            if (id === techPdf) {\r\n                fileType = constants.TechPdf;\r\n                if (this.state.isBusinessPdfLoaded)\r\n                    isRequiredDocumentsUploaded = true;\r\n                this.setState({ isTechPdfLoaded: true, isRequiredDocumentsUploaded, techPdfRequired: \"\", techPdfValidationError: \"\" });\r\n                \r\n            }\r\n\r\n            if (id === humanPdf) {\r\n                fileType = constants.HumanPdf;\r\n                this.setState({ humanPdfValidationError:\"\" });\r\n            }\r\n\r\n            if (id === businessPdf) {\r\n                fileType = constants.BusinessPdf;\r\n                if (this.state.isTechPdfLoaded)\r\n                    isRequiredDocumentsUploaded = true;\r\n                this.setState({ isBusinessPdfLoaded: true, isRequiredDocumentsUploaded, businessPdfRequired:\"\",businessPdfValidationError:\"\" });\r\n            }\r\n            const fileGuid = await submitProposalService.guid();\r\n            //const item = { fileGuid: data.fileGuid, fileName: data.fileName, fileType: fileType }\r\n            const item = { fileGuid, fileName:file.name,file, fileType: fileType }\r\n            let uploadedFiles = [...this.state.uploadedFiles, item];\r\n            let uploadedFileTotalSize = this.state.uploadedFileTotalSize + file.size;\r\n            await this.setState({ uploadedFiles, uploadedFileTotalSize});\r\n\r\n            //return data.fileGuid;   \r\n            return fileGuid;   \r\n        } catch (e) {\r\n\r\n            //console.log(e);\r\n            return constants.Error;\r\n\r\n        } \r\n    }\r\n    ////file upload logic changed - for external all files will be sent to server together\r\n    //async uploadFile(file) {\r\n    //    try {\r\n    //        const data = new FormData();\r\n    //        data.append('file', file);\r\n    //        const result = await submitProposalService.postSubmitProposalFileUpload(this.state.solicitation.pageGuid, data);\r\n    //        return result; \r\n    //    }\r\n    //    catch (ex) {\r\n\r\n    //        console.log(ex.response);\r\n    //        toast.error(ex.response.data);\r\n    //    } \r\n    //}\r\n\r\n    async componentWillMount() {\r\n        \r\n        try {\r\n            this.setState({ loading: true });\r\n            const solicitationId = this.props.match.params.id;\r\n            const specialInviteId = this.props.match.params.specialInviteId\r\n            this.getPageHeaderInfo(solicitationId, specialInviteId);\r\n            const { data: solicitation } = await submitProposalService.getSpecialSolProposalSubmissionData(solicitationId, specialInviteId);\r\n            this.setState({ solicitation, specialInviteId }); \r\n        }\r\n        catch (ex) {\r\n            this.setState({ pageError: true });\r\n            //toast.error(ex.response.data);\r\n            setTimeout(() => window.location = \"/\", 3000);\r\n        }\r\n        finally {\r\n            this.setState({ loading: false });\r\n        }\r\n    }\r\n\r\n    async getPageHeaderInfo(solicitationId, specialInviteId) {\r\n        try {\r\n            const { data: headerInfo } = await submitProposalService.getSpecialPageHeaderInfo(solicitationId, specialInviteId);\r\n            //console.log('fetched sol header info', headerInfo);\r\n            this.setState({ headerInfo });\r\n\r\n        } catch (ex) {\r\n            console.log(ex);\r\n        }\r\n    }\r\n    doSubmit = async () => {\r\n      if (this.state.solicitation.solicitationIsRD) {\r\n            if (!this.state.isTechPdfLoaded && !this.state.isBusinessPdfLoaded) {\r\n                this.setState({ techPdfRequired: \"Technical PDF Required\", businessPdfRequired: \"Business PDF Required\" });\r\n                return;\r\n            }\r\n            if (!this.state.isTechPdfLoaded) {\r\n                this.setState({ techPdfRequired: \"Technical PDF Required\" });\r\n                return;\r\n            }\r\n\r\n\r\n            if (!this.state.isBusinessPdfLoaded) {\r\n                this.setState({ businessPdfRequired: \"Business PDF Required\" });\r\n                return;\r\n            }\r\n        }\r\n        \r\n        if (!this.state.solicitation.solicitationIsRD) {\r\n            let isError=false;\r\n\r\n            let businessDocFiles= this.state.businessDocFiles;\r\n            businessDocFiles.forEach(element => {\r\n                if (!element.isLoaded) {\r\n                    element.errorMessage = \"Business PDF Required\";\r\n                    isError = true;\r\n                }\r\n            });\r\n\r\n\r\n            this.setState({ businessDocFiles });\r\n            if (isError) { return;}\r\n        }\r\n\r\n        const pageGuid = this.state.solicitation.pageGuid;\r\n        const solicitationId = this.state.solicitation.solicitationID;\r\n        const proposalName = this.state.data.proposalName;\r\n        const specialInviteId = this.state.specialInviteId;\r\n        const uploadedFiles = this.state.uploadedFiles;\r\n        const item = { proposalName, specialInviteId, pageGuid, uploadedFiles}\r\n       \r\n        try {\r\n            //console.log('inside try');\r\n            const user = auth.getCurrentUser();\r\n            let newThis = this;\r\n\r\n            const res = await submitProposalService.postSubmitGateway(user, solicitationId, 1);\r\n            if (res.status !== HTTPStatusCodes.SUCCESS) {\r\n                toast.error(\"Submission gateway error\");\r\n                return;\r\n            }\r\n\r\n            const { data, status } = await submitProposalService.postSubmitProposal('newProposal', solicitationId, item, newThis, \"api/solicitations/\", \"/submitProposal/\", this.state.cancelSubmission);\r\n            if (status === HTTPStatusCodes.SUCCESS) {\r\n                //console.log(\"Submit Proposal success\", data);\r\n                //setTimeout(() => window.location = \"/\", 2000);\r\n                setTimeout(() => {\r\n                        this.props.history.push({\r\n                            pathname: `/reviseProposal/${data.proposalId}`,\r\n                            state: { showProposalSubmissionSuccessModal: true },\r\n                            from: \"Submit Proposal Page\"\r\n                        });\r\n                        //window.location.reload();\r\n                    },\r\n                    2000);\r\n            } else {\r\n                //console.log(\"Submit Proposal failure-data\", data);\r\n                //console.log(\"Submit Proposal failure-status\", status);\r\n            }\r\n        } catch (ex) {\r\n            //console.log(\"ex\",ex);\r\n            if (ex.toString().indexOf(\"CANCEL_UPLOAD\") >= 0) {\r\n                toast.warning(\"Upload Canceled\");\r\n                //setTimeout(() => window.location = \"/\", 3000);\r\n            }\r\n\r\n            if (ex.response.status === 403) {\r\n                toast.error(ex.response.data);\r\n                setTimeout(() => window.location = \"/deadlineerror\", 3000);\r\n            }\r\n            else {\r\n                toast.error(\"Submission fail\");\r\n                setTimeout(() => window.location = \"/\", 3000);\r\n            }\r\n\r\n            this.setState({\r\n                setopenProgressModal: false,\r\n                openProgressModal: false,\r\n                loadedAmount: 0\r\n            });\r\n        } \r\n\r\n\r\n    };\r\n\r\n    // handleClose = () => {\r\n\r\n    //   this\r\n    // }\r\n\r\n    onCancelUploading = () => {\r\n        //console.log('onCancelUploading');\r\n        this.setState({\r\n            setopenProgressModal: false, \r\n            openProgressModal: false,\r\n            loadedAmount: 0\r\n        });\r\n\r\n        submitProposalService.postSubmitProposal('newProposal', null, null, null, \"api/solicitations/\", \"/submitProposal/\", true);\r\n        submitProposalService.postSubmitGateway(auth.getCurrentUser(), this.state.solicitation.solicitationID, 3)\r\n            .then(res => { /*console.log(\"User clicked Cancel button when proposal is uploading\")*/ })\r\n            .catch(err => { /*console.log(\"User click cancel button\")*/ });\r\n    }\r\n\r\n    render() {\r\n        if (this.state.pageError)\r\n            return null;\r\n\r\n        const submitDisabled = this.validate() || !this.state.isRequiredDocumentsUploaded;\r\n\r\n        const loader = (<div className=\"loader\" style={{ position: \"fixed\", top: \"40%\", left: \"45%\" }}>Loading...</div>);\r\n\r\n        return (\r\n            <div>\r\n                <div id=\"content\" className=\"content\">\r\n                <SolicitationHeader headerInfo={this.state.headerInfo}/>\r\n                {/* if you're uploading and updating at the same time, maybe have the loadedAmount equal to the updating loaded + submission uploaded / 2 to show the two types of calls being made at once */}\r\n\r\n                <div className=\"main-content centered-content\">\r\n                    <div className=\"container-fluid\">\r\n                            <div className=\"section-heading\">Submit Proposal <small style={{ fontSize: 14, marginLeft: 10 }}>Proposal name and documents are required to submit proposal</small></div>\r\n                        {this.state.loading && loader}\r\n                        {!this.state.loading && <div className=\"tile-section form-section submit-proposal\">\r\n                            {this.state.solicitation.specialInvites[0].baseProposal != null && \r\n\r\n                                <div className=\"abstract\">\r\n                                    <label id=\"abstractName-label\">Abstract Title</label>\r\n                                    <div id=\"abstractName-title\">\r\n                                        {this.state.solicitation.specialInvites[0].baseProposal.proposalName}\r\n                                    </div>\r\n                                </div>\r\n                            }\r\n                            \r\n                            <form onSubmit={e => {e.preventDefault(); }}>\r\n                                {this.renderInput(\"proposalName\", \"Proposal Name\", \"col-lg-9\", \"text\", true)}\r\n                            </form>\r\n                            <div className=\"additional-materials\">\r\n                                <div className=\"material-head\">\r\n                                    <div className=\"material-info\">\r\n                                        <div className=\"material-title\">Proposal Documents</div>\r\n                                        <small>Max File Upload Size: 387.19 MB</small>\r\n                                    </div>\r\n                                    <div className=\"material-req\">\r\n                                        {!this.state.solicitation.solicitationIsRD && <p>Only excel, word or pdf formats can be submitted. Multiple individual files may be submitted.</p>}\r\n                                        {this.state.solicitation.solicitationIsRD && <p>Only a single Technical, Business, and PHS Human Subjects and Clinical Trials PDF file can be submitted. Multiple Business Excel files may be submitted</p>}\r\n                                        \r\n                                    </div>\r\n                                </div>\r\n                                <ul className=\"chevron-list\">\r\n                                    {this.state.solicitation.solicitationIsRD && (<li key=\"techPDF\" className=\"technical-doc \">\r\n                                    <FileUpload\r\n                                        dynamicClass=\"technical-doc-upload\"\r\n                                        label=\"Technical PDF\"\r\n                                        id=\"techPDF\"\r\n                                        required={true}\r\n                                        accept=\"application/pdf\"\r\n                                        errorMessage={this.state.techPdfRequired.length>0 ? this.state.techPdfRequired: this.state.techPdfValidationError}\r\n                                        totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                        fileUpload={this.onFileUpload}\r\n                                        fileDelete={this.onFileDelete}\r\n                                        />\r\n                                        \r\n                                    </li>)}\r\n                                    {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li key=\"humanPDF\" className=\"misc-doc \">\r\n                                        <FileUpload\r\n                                            dynamicClass=\"technical-doc-upload\"\r\n                                            label=\"PHS Human Subjects and Clinical Trials PDF\"\r\n                                            id=\"humanPDF\"\r\n                                            required={false}\r\n                                            accept=\"application/pdf\"\r\n                                            errorMessage={this.state.humanPdfValidationError}\r\n                                            totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                            fileUpload={this.onFileUpload}\r\n                                            fileDelete={this.onFileDelete}\r\n                                        />\r\n                                    </li>)}\r\n                                        {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li className=\"misc-doc-info\" key=\"misc-doc-info\"><span>Upload the Human Subjects and Clinical Trials Information Form as required in this solicitation. Refer to your solicitation instructions in <a href=\"https://sam.gov/content/home\" className=\"link-textonly\" target=\"_blank\">sam.gov</a> for more information.<br />Please ensure that you are using correct version of the <a href=\"https://oamp.od.nih.gov/nih-document-generation-system/dgs-workform-information/attachment-files-section-j\" className=\"link-textonly\" target=\"_blank\">Human Subject and Clinical Trial form</a>.</span></li>)}\r\n                                    {this.state.solicitation.solicitationIsRD && (<li key=\"businessPDF\" className=\"business-doc\">\r\n                                        <FileUpload\r\n                                            dynamicClass=\"technical-doc-upload\"\r\n                                            label=\"Business PDF\"\r\n                                            id=\"businessPDF\"\r\n                                            required={true}\r\n                                            accept=\"application/pdf\"\r\n                                            errorMessage={this.state.businessPdfRequired.length >0 ?this.state.businessPdfRequired: this.state.businessPdfValidationError }\r\n                                            totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                            fileUpload={this.onFileUpload}\r\n                                            fileDelete={this.onFileDelete}\r\n                                        />\r\n                                    </li>)}\r\n                                    {!this.state.solicitation.solicitationIsRD && this.state.businessDocFiles.map((item) => {\r\n                                        return (<li key={item.id} className=\"business-doc \">\r\n                                            <FileUpload\r\n                                                dynamicClass=\"business-doc-upload\"\r\n                                                label={item.label}\r\n                                                id={item.id}\r\n                                                required={true}\r\n                                                accept=\".xlsx,.xls, .doc, .docx,.pdf\"\r\n                                                errorMessage={item.errorMessage}\r\n                                                totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                                fileUpload={this.onBusinessDocFileUpload}\r\n                                                fileDelete={this.onBusinessDocFileDelete}\r\n                                            />\r\n                                        </li>);\r\n                                    })}\r\n                                    {this.state.solicitation.solicitationIsRD && this.state.businessExcelFiles.map((item) => {\r\n                                        return (<li key={item.id} className=\"business-excel-doc \">\r\n                                        <FileUpload\r\n                                            dynamicClass=\"technical-doc-upload\"\r\n                                            label={item.label}\r\n                                            id={item.id}\r\n                                            required={false}\r\n                                            accept=\"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,\"\r\n                                            errorMessage={item.errorMessage}\r\n                                            totalUploadedFileSize={this.state.uploadedFileTotalSize}\r\n                                            fileUpload={this.onBusinessExcelFileUpload}\r\n                                            fileDelete={this.onBusinessExcelFileDelete}\r\n                                        />\r\n                                        </li>);\r\n                                    })}\r\n                                    {\r\n                                        this.state.solicitation.solicitationIsRD && <li className=\"business-excel-info\" key=\"business-excel-info\"><span>Upload excel if required by the solicitation instructions. You may upload multiple excel files.</span></li>\r\n                                    }\r\n\r\n                                    \r\n                                </ul>\r\n                                {this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                    <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\" \r\n                                    onClick={this.addBusinessExcelDoc} disabled={!this.state.previousBusinessExcelFileLoaded}>\r\n                                        <span className=\"MuiButton-label\">\r\n                          <img src=\"images/plus-white.svg\" alt=\"add-additional-document\"/>Add Additional Business Excel Document\r\n                                        </span>\r\n                                        <span className=\"MuiTouchRipple-root\"></span>\r\n                                    </button>\r\n                                </div>\r\n                                )}\r\n\r\n                                {!this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                    <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\"\r\n                                        onClick={this.addBusinessDoc} disabled={!this.state.previousBusinessDocFileLoaded}>\r\n                                        <span className=\"MuiButton-label\">\r\n                          <img src=\"images/plus-white.svg\" alt=\"add-additional-document\" />Add Additional Business Document\r\n                                        </span>\r\n                                        <span className=\"MuiTouchRipple-root\"></span>\r\n                                    </button>\r\n                                </div>\r\n                                )}\r\n                            </div>\r\n                                <div className=\"tile-footer\" data-toggle=\"tooltip\" title={submitDisabled ? \"Required information is not provided.\" : \"\"}>\r\n                                    {submitDisabled && <span className=\"document-requirement\">Proposal Name and documents are required to submit proposal</span>}\r\n                              <button \r\n                                className={`MuiButtonBase-root MuiButton-root ${submitDisabled ? 'disabled-btn' : ''} MuiButton-contained submit-btn btn-primary`}\r\n                                tabIndex=\"0\"\r\n                                type=\"submit\"\r\n                                disabled={submitDisabled}\r\n                                onClick={(uploading) => {this.handleSubmit(uploading); this.setState({setopenProgressModal: true, openProgressModal: true}); }} \r\n                              >\r\n                                  <span className=\"MuiButton-label\">\r\n                                      Submit Proposal\r\n                                  </span>\r\n                                  <span className=\"MuiTouchRipple-root\"></span>\r\n                              </button>\r\n                          </div>\r\n                        </div>}\r\n                    </div>\r\n                </div>\r\n                <ProgressModal\r\n                  openProgressModal={this.state.openProgressModal}\r\n                  setopenProgressModal={this.state.setopenProgressModal}\r\n                  open={this.state.openProgressModal}\r\n                  modalType='upload-progress'\r\n                  title='Submission in progress'\r\n                  loadedAmount={this.state.loadedAmount}\r\n                  selectedValue={'upload progress bar'}\r\n                  onClose={() => { this.onCancelUploading() }}\r\n                  >\r\n                </ProgressModal>\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n\r\n        );\r\n    }\r\n}\r\n\r\nexport default SubmitSpecialProposal;\r\n","import React, { Component } from \"react\";\r\nimport Modal from '@material-ui/core/Modal';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport DateTime from \"../common/DateTimeConversionMethods\";\r\n\r\nconst ProposalSubmissionSuccessModal = (obj) => {\r\n    //const solicitationResponseDeadline = obj.state.solicitation.solicitationResponseDeadline;\r\n    const responseDeadlineDateStr = obj.state.solicitation.responseDeadlineDateLongStr;\r\n    const responseDeadlineTimeStr = obj.state.solicitation.responseDeadlineTimeStr;\r\n    return (\r\n        <Dialog\r\n            open={obj.state.confirmationModal.open === 'open'}\r\n            onClose={obj.handleClose}\r\n            fullWidth={true}\r\n            maxWidth={'md'}\r\n            className={'submitSuccess'}\r\n            aria-labelledby=\"success-container\"\r\n        >\r\n            <DialogTitle className=\"success-header-container\" id=\"success-container\">\r\n                <div className=\"success-header-subcontainer\">\r\n                    <img alt=\"submission-success-icon\" src=\"images/status-complete-circle.svg\"/>\r\n                    <div>\r\n                        <h1 className=\"modal-title text-success\" id=\"add-user-modal-label\">&#8287;Success</h1>\r\n                        <small>Submission received on</small>\r\n                        <span className=\"success-datetime\">{obj.state.proposal.proposalModifiedDateStr} at {obj.state.proposal.proposalModifiedTimeStr}</span>\r\n                    </div>\r\n                </div>\r\n                <button type=\"button\" className=\"close\" onClick={obj.handleClose.bind(this)} aria-label=\"Close\">\r\n                    <span aria-hidden=\"true\">&times;</span>\r\n                </button>\r\n            </DialogTitle>\r\n            <DialogContent>\r\n                <div role=\"main\">\r\n                    <div>\r\n                        <span>\r\n                            Your upload was successful on {obj.state.proposal.proposalModifiedDateLongStr} at {obj.state.proposal.proposalModifiedTimeStr}. Your submission will appear in the <strong>Submission History </strong>section in this page and on the Submission <strong>Submission History</strong>.\r\n                            </span>\r\n                    </div>\r\n                    <br/>\r\n                    <div>\r\n                        <span>\r\n                            Feel free to revise your submission any time before the deadline {responseDeadlineDateStr} at {responseDeadlineTimeStr}.  You may replace any of your previously uploaded documents on this screen below.  If you don't wish to make changes now, you may find your submission to view or revise, at any time, under Submission History.\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n                <br/>\r\n                <div className=\"dialog-footer float-right success-footer\">\r\n                    <button type=\"button\" className=\"MuiButtonBase-root MuiButton-root btn btn-primary\" onClick={obj.handleClose} >Close</button>\r\n                </div>\r\n            </DialogContent>\r\n        </Dialog>\r\n\r\n    );\r\n}\r\n\r\nexport default ProposalSubmissionSuccessModal;\r\n","import React, { Component } from 'react';\r\nimport HTTPStatusCodes from \"../../enums/HTTPStatusCodes\";\r\nimport Joi from 'joi-browser';\r\nimport axios from 'axios';\r\nimport { toast } from \"react-toastify\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\n// import '../siteStyles.css';\r\nimport ProgressModal from './progressModal';\r\n\r\nimport * as constants from \"../common/constants\";\r\nimport FileUpload from \"../common/fileUpload\";\r\nimport fileDownload from 'js-file-download';\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport fileService from \"../../services/fileService\";\r\nimport { SolicitationHeader } from \"./SolicitationHeader\";\r\nimport submitProposalService from \"../../services/submitProposalService\";\r\nimport ProposalSubmissionSuccessModal from \"./ProposalSubmissionSuccessModal\";\r\nimport { createBrowserHistory } from 'history'\r\nimport DateTimeConvert from '../common/DateTimeConversionMethods';\r\nimport Footer from \"../Footer\";\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n    tooltip: {\r\n        backgroundColor: '#000',\r\n        color: '#fff',\r\n        maxWidth: 300,\r\n        fontSize: '14px',\r\n        padding: 8,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n    },\r\n    arrow: {\r\n        color: '#000',\r\n    }\r\n}))(Tooltip);\r\nexport class ReviseProposal extends Form {\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            data: {\r\n                proposalName: ''\r\n            },\r\n            businessExcelFiles: [\r\n                \r\n            ],\r\n            businessDocFiles: [\r\n                \r\n            ],\r\n            businessExcelFileIndex: 0,\r\n            businessDocFileIndex: 0,\r\n            solicitation: {},\r\n            errors: {},\r\n            pageError: false,\r\n            previousBusinessDocFileLoaded: true,\r\n            previousBusinessExcelFileLoaded: true,\r\n            originalProposalName:\"\",\r\n            uploadedFiles: [],\r\n            uploadedFileChanges: [],\r\n            changedDocumentIds:[],\r\n            totalUploadedFileChangesSize:0,\r\n            headerInfo: {}, \r\n            vendorContactInfo: {},\r\n            isTechPdfLoaded: false,\r\n            isBusinessPdfLoaded: false,\r\n            techPdfRequired: \"\",\r\n            businessPdfRequired: \"\",\r\n            techPdfValidationError: \"\",\r\n            businessPdfValidationError: \"\",\r\n            humanPdfValidationError: \"\",\r\n            proposal: {},\r\n            confirmationModal: {},\r\n            loading: false,\r\n            loadedAmount: 0,\r\n            openProgressModal: false,\r\n            setopenProgressModal: false,\r\n            showDownloadButton: false,\r\n            showRadioButtons: false,\r\n            newItemInput: \"\",\r\n            originalSelectedFastTrackValue: \"\",\r\n            originalSelectedPhase2Value: \"\",\r\n            selectedFastTrackValue: \"\",\r\n            selectedPhase2Value: \"\"\r\n        };\r\n\r\n        this.schema = {\r\n            proposalName: Joi.string().trim().required().error(() => { return { message: \"Proposal Name required.\" }; }),\r\n        };\r\n\r\n\r\n        this.onFileDelete = this.onFileDelete.bind(this);\r\n        this.onFileReplace = this.onFileReplace.bind(this);\r\n        this.addBusinessDoc = this.addBusinessDoc.bind(this);\r\n        this.addBusinessExcelDoc = this.addBusinessExcelDoc.bind(this);\r\n        this.onBusinessExcelFileUpload = this.onBusinessExcelFileUpload.bind(this);\r\n        this.onBusinessExcelFileDelete = this.onBusinessExcelFileDelete.bind(this);\r\n        this.onBusinessDocFileUpload = this.onBusinessDocFileUpload.bind(this);\r\n        this.onBusinessDocFileDelete = this.onBusinessDocFileDelete.bind(this);\r\n       }\r\n    async addBusinessDoc() {\r\n        \r\n        if (!this.state.previousBusinessDocFileLoaded) {\r\n            return;\r\n        }\r\n        //console.log(\"Add additional business  document\");\r\n\r\n        let businessDocFileIndex = this.state.businessDocFileIndex;\r\n        businessDocFileIndex++;\r\n\r\n        let item = { id: \"businessPDF\" + businessDocFileIndex, label: \"Business PDF\", isLoaded: false, errorMessage: \"\" };\r\n\r\n        let businessDocFiles = [...this.state.businessDocFiles, item];\r\n        this.setState({ businessDocFileIndex, businessDocFiles, previousBusinessDocFileLoaded: false });\r\n\r\n        //console.log(\"Business Doc Files\", businessDocFiles);\r\n\r\n    }\r\n    async addBusinessExcelDoc() {\r\n        if (!this.state.previousBusinessExcelFileLoaded) {\r\n            return;\r\n        }\r\n       \r\n        let businessExcelFileIndex = this.state.businessExcelFileIndex;\r\n        businessExcelFileIndex++;\r\n        \r\n        let item = { id: \"businessExcel\" + businessExcelFileIndex, label: \"Business Excel\", errorMessage: \"\", defaultFileName: \"\", fileDbId:0 };\r\n        \r\n        let businessExcelFiles = [...this.state.businessExcelFiles, item];\r\n        this.setState({ businessExcelFileIndex, businessExcelFiles, previousBusinessExcelFileLoaded: false });\r\n\r\n    }\r\n    async onFileDelete(fileDbId,docId, isReplace) {\r\n        //console.log(\"Revise Proposal File delete file id\", fileDbId);\r\n        //console.log(\"Revise Proposal File delete file is replace\", isReplace);\r\n        var objToRemove;\r\n        if (submitProposalService.isGUID(fileDbId)) {\r\n            objToRemove = this.state.uploadedFileChanges.find(obj => obj.fileGuid === fileDbId);\r\n        }\r\n        else {\r\n            objToRemove = this.state.uploadedFileChanges.find(obj => obj.fileDbId === fileDbId);\r\n        }\r\n        //console.log(\"Revise proposal object to remove\", objToRemove);\r\n        if (objToRemove !== undefined) {\r\n            try {\r\n                this.updateStateForFileChanges(objToRemove); \r\n                return true;\r\n            } catch (e) {\r\n                //console.log(\"Revise Proposal File Delete Error\", e);\r\n                return false;\r\n            }\r\n        }\r\n        return false;\r\n\r\n    }\r\n\r\n    async onFileDownload(fileDbId, fileName) {\r\n        const url = fileService.getDownloadUrl(fileDbId);\r\n        try {            \r\n            const response = await fileService.handleDownload(url, fileName);\r\n            await fileDownload(response.data, fileName);\r\n        }\r\n        catch (ex) {\r\n            toast.error(\"Download file error\");\r\n        }\r\n        \r\n    }\r\n    updateStateForFileChanges(objToRemove) {\r\n        //console.log(\"updateStateForFileChanges\", objToRemove);\r\n        const uploadedFileChanges = this.state.uploadedFileChanges.filter(obj => obj.fileGuid !== objToRemove.fileGuid);\r\n       \r\n        let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize - objToRemove.file.size;\r\n        totalUploadedFileChangesSize = totalUploadedFileChangesSize || 0;\r\n        this.setState({ uploadedFileChanges, totalUploadedFileChangesSize });\r\n    }\r\n\r\n    \r\n    async onBusinessExcelFileDelete(fileDbId, id, isReplace) {\r\n\r\n        try {\r\n            //console.log(\"Business Excel File Delete Id:\", id);\r\n            //console.log(\"Business Excel File Delete fileDbId:\", fileDbId);\r\n            //console.log(\"Business Excel File Delete isReplace:\", isReplace);\r\n\r\n            const isFileDbIdGuid = submitProposalService.isGUID(fileDbId);\r\n            if (isFileDbIdGuid) {\r\n                //console.log(\"its a guid\");\r\n                if (!isReplace){\r\n                    this.removeBusinessExcelDoc(id);                \r\n                }\r\n                \r\n                const objToRemove = this.state.uploadedFileChanges.find(obj => obj.fileGuid === fileDbId);\r\n                const uploadedFileChanges = this.state.uploadedFileChanges.filter(obj => obj.fileGuid !== fileDbId);\r\n                \r\n                let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize - objToRemove.file.size;\r\n                totalUploadedFileChangesSize = totalUploadedFileChangesSize || 0;\r\n                this.setState({ uploadedFileChanges, totalUploadedFileChangesSize});\r\n                return true;\r\n            }\r\n\r\n            if (!isReplace) {\r\n                const objToRemove = this.state.businessExcelFiles.find(obj => obj.id === id);\r\n                if (objToRemove.fileDbId === 0) {\r\n                    //console.log(\"Revise proposal Business excel -Remove the Component as well\");\r\n\r\n                    this.removeBusinessExcelDoc(id);\r\n\r\n                } else {\r\n                    this.setState({ previousBusinessExcelFileLoaded: false });\r\n                }\r\n            }\r\n            \r\n            const objToRemove = this.state.uploadedFileChanges.find(obj => obj.fileDbId === fileDbId);\r\n           \r\n            //console.log(\"Revise proposal business excel file delete object to remove\", objToRemove);\r\n            if (objToRemove !== undefined) {\r\n                try {\r\n                    this.updateStateForFileChanges(objToRemove); \r\n                    return true;\r\n                } catch (e) {\r\n                    //console.log(\"Revise Proposal File Delete Error\", e);\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n\r\n        } catch (e) {\r\n            //console.log(\"Error in Business excel file delete\", e);\r\n            return false;\r\n        }\r\n\r\n\r\n    }\r\n    removeBusinessExcelDoc(id) {\r\n        //console.log(\"Revise proposal- Removing Business excel doc\");\r\n        let businessExcelFiles = this.state.businessExcelFiles;\r\n        const businessExcelFilesFiltered = businessExcelFiles.filter(obj => obj.id !== id);\r\n        setTimeout(() => {\r\n                this.setState({\r\n                    businessExcelFiles: businessExcelFilesFiltered,\r\n                    previousBusinessExcelFileLoaded: true\r\n                });\r\n            },\r\n            1);\r\n\r\n    }\r\n\r\n    async onBusinessDocFileDelete(fileDbId, id, isReplace) {\r\n\r\n        try {\r\n            //console.log(\"Business Doc File Delete Id:\", id);\r\n            //console.log(\"Business Doc File Delete fileDbId:\", fileDbId);\r\n            const isFileDbIdGuid = submitProposalService.isGUID(fileDbId);\r\n            if (isFileDbIdGuid) {\r\n                //console.log(\"its a guid\");\r\n                if (!isReplace) {\r\n                    this.removeBusinessDocFile(id);\r\n                }\r\n                \r\n                const objToRemove = this.state.uploadedFileChanges.find(obj => obj.fileGuid === fileDbId);\r\n                const uploadedFileChanges = this.state.uploadedFileChanges.filter(obj => obj.fileGuid !== fileDbId);\r\n               \r\n                let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize - objToRemove.file.size;\r\n                totalUploadedFileChangesSize = totalUploadedFileChangesSize || 0;\r\n                this.setState({ uploadedFileChanges, totalUploadedFileChangesSize });\r\n                return true;\r\n            }\r\n            if (!isReplace) {\r\n                const objToRemove = this.state.businessDocFiles.find(obj => obj.id === id);\r\n                if (objToRemove.fileDbId === 0) {\r\n                    //console.log(\"Remove the Component as well\");\r\n                    this.removeBusinessDocFile(id);\r\n                    \r\n                } else {\r\n                    let businessDocFiles = this.state.businessDocFiles;\r\n                    const objIndex = businessDocFiles.findIndex(obj => obj.id === id);\r\n                    businessDocFiles[objIndex].isLoaded = false;\r\n                    businessDocFiles[objIndex].errorMessage = \"\";\r\n                    this.setState({ businessDocFiles });\r\n                    this.setState({ previousBusinessDocFileLoaded: false });\r\n                }\r\n\r\n            }\r\n           \r\n            \r\n            const businessDocToRemove = this.state.uploadedFileChanges.find(obj => obj.fileDbId === fileDbId);\r\n            //console.log(\"Revise proposal business doc file delete object to remove\", businessDocToRemove);\r\n            if (businessDocToRemove !== undefined) {\r\n                try {\r\n                    this.updateStateForFileChanges(businessDocToRemove);\r\n                    return true;\r\n                } catch (e) {\r\n                    //console.log(\"Revise Proposal File Delete Error- Business doc\", e);\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n\r\n        } catch (e) {\r\n            //console.log(\"Error in Business doc file delete\", e);\r\n            return false;\r\n        }\r\n\r\n    }\r\n\r\n    removeBusinessDocFile(id) {\r\n        let businessDocFiles = this.state.businessDocFiles;\r\n        const businessDocFilesFiltered = businessDocFiles.filter(obj => obj.id !== id);\r\n        \r\n\r\n        setTimeout(() => {\r\n            this.setState({\r\n                businessDocFiles: businessDocFilesFiltered,\r\n                previousBusinessDocFileLoaded: true\r\n            });\r\n        },1);\r\n    }\r\n\r\n    async onBusinessExcelFileUpload(file, id, fileDbId) {\r\n        const totalSizeAfterUpload = this.state.totalUploadedFileChangesSize + file.size;\r\n        if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n            return constants.MaxContentSizeLimitExceeded;\r\n\r\n        try {\r\n            //console.log(\"Business excel File upload id\", id);\r\n            //console.log(\"file\", file);\r\n            let businessExcelFiles = this.state.businessExcelFiles;\r\n            const objIndex = businessExcelFiles.findIndex(obj => obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n                businessExcelFiles[objIndex].errorMessage = \"Only Excel files are allowed\";\r\n                this.setState({ businessExcelFiles });\r\n                return \"NotAllowed\";\r\n            }\r\n           \r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name, fileType: constants.BusinessExcel, fileDbId, file}\r\n            \r\n            let uploadedFileChanges = [...this.state.uploadedFileChanges, item];\r\n           \r\n            businessExcelFiles[objIndex].errorMessage = \"\";\r\n            let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize + file.size;\r\n            \r\n            await this.setState({ uploadedFileChanges, businessExcelFiles, previousBusinessExcelFileLoaded: true, totalUploadedFileChangesSize });\r\n\r\n            //console.log(\"Uploaded Files\", this.state.uploadedFiles);\r\n            return fileGuid;\r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        }\r\n    }\r\n\r\n    async onBusinessDocFileUpload(file, id, fileDbId) {\r\n        const totalSizeAfterUpload = this.state.totalUploadedFileChangesSize + file.size;\r\n        if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n            return constants.MaxContentSizeLimitExceeded;\r\n\r\n        try {\r\n            //console.log(\"Business doc File upload id\", id);\r\n            //console.log(\"file\", file);\r\n\r\n            let businessDocFiles = this.state.businessDocFiles;\r\n            const objIndex = businessDocFiles.findIndex(obj => obj.id == id);\r\n\r\n            var validExts = new Array(\".xlsx\", \".xls\", \".pdf\", \".doc\", \".docx\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n  \r\n                businessDocFiles[objIndex].errorMessage = \"Only Excel, Word or PDF files are allowed\";\r\n                businessDocFiles[objIndex].isLoaded = false;\r\n                this.setState({ businessDocFiles });\r\n                return \"NotAllowed\";\r\n            }\r\n\r\n\r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name, fileType: constants.BusinessExcel, fileDbId, file }\r\n            let uploadedFileChanges = [...this.state.uploadedFileChanges, item];\r\n            let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize + file.size;\r\n            await this.setState({ uploadedFileChanges, totalUploadedFileChangesSize });\r\n\r\n            businessDocFiles[objIndex].isLoaded = true;\r\n            businessDocFiles[objIndex].errorMessage = \"\";\r\n            this.setState({ businessDocFiles });\r\n\r\n            this.setState({ previousBusinessDocFileLoaded: true });\r\n            return fileGuid;\r\n        } catch (e) {\r\n            //console.log(e);\r\n            return \"Error\";\r\n        }\r\n    }\r\n    async onFileReplace(file, id, fileDbId) {\r\n        const techPdf = \"techPDF\";\r\n        const humanPdf = \"humanPDF\";\r\n        const businessPdf = \"businessPDF\";\r\n        //console.log(\"Revise proposal file replace file\", file);\r\n        //console.log(\"Revise proposal file replace file id\", id);\r\n        //console.log(\"Revise proposal file replace db file id\", fileDbId);\r\n\r\n        const totalSizeAfterUpload = this.state.totalUploadedFileChangesSize + file.size;\r\n        if (file.size > constants.MaxContentSizeAllowed || totalSizeAfterUpload > constants.MaxContentSizeAllowed)\r\n            return constants.MaxContentSizeLimitExceeded;\r\n\r\n        try {\r\n\r\n            var validExts = new Array(\".pdf\");\r\n            var fileExt = file.name;\r\n            fileExt = fileExt.substring(fileExt.lastIndexOf('.'));\r\n            if (validExts.indexOf(fileExt) < 0) {\r\n\r\n                if (id === techPdf) {\r\n                    this.setState({ techPdfValidationError: \" Only PDF file allowed\" });\r\n                }\r\n\r\n                if (id === humanPdf) {\r\n                    this.setState({ humanPdfValidationError: \" Only PDF file allowed\" });\r\n                }\r\n\r\n                if (id === businessPdf) {\r\n                    this.setState({ businessPdfValidationError: \" Only PDF file allowed\" });\r\n                }\r\n                return \"NotAllowed\";\r\n            }\r\n\r\n            let fileType = -1;\r\n            if (id === techPdf) {\r\n                fileType = constants.TechPdf;\r\n                this.setState({ isTechPdfLoaded: true, techPdfRequired: \"\", techPdfValidationError: \"\" });\r\n            }\r\n\r\n            if (id === humanPdf) {\r\n                fileType = constants.HumanPdf;\r\n                this.setState({ humanPdfValidationError: \"\" });\r\n            }\r\n\r\n            if (id === businessPdf) {\r\n                fileType = constants.BusinessPdf;\r\n                this.setState({ isBusinessPdfLoaded: true, businessPdfRequired: \"\", businessPdfValidationError: \"\" });\r\n            }\r\n\r\n            const fileGuid = await submitProposalService.guid();\r\n            const item = { fileGuid, fileName: file.name, fileType, fileDbId, file }\r\n            let uploadedFileChanges = [...this.state.uploadedFileChanges, item];\r\n            let totalUploadedFileChangesSize = this.state.totalUploadedFileChangesSize + file.size;\r\n            await this.setState({ uploadedFileChanges, totalUploadedFileChangesSize});\r\n\r\n            return fileGuid;\r\n        } catch (e) {\r\n\r\n            //console.log(e);\r\n            return \"Error\";\r\n\r\n        }\r\n    }\r\n\r\n    //Change to avoid change state after un-mount caused by self.refreshPage()\r\n    async componentWillMount() {\r\n        try {\r\n            await this.loadPage();\r\n        } catch (ex) {\r\n            toast.error(\"Error loading proposal, please try again\");\r\n            setTimeout(() => window.location = \"/\", 3000);\r\n        }\r\n        \r\n    }\r\n \r\n    loadPage = async () => {\r\n        const proposalId = this.props.match.params.id;\r\n        try {\r\n            this.getPageHeaderWithVendorContactInfo(proposalId);\r\n            const { data: solicitation } = await submitProposalService.getSolProposalSubmissionDataByProposalID(proposalId);\r\n            const { data: proposal } = await submitProposalService.GetReviseProposalData(proposalId);\r\n            \r\n            let showRadioButtons = false;\r\n            if (solicitation?.icId?.toUpperCase() === \"SBIRSTTR\" ||\r\n                solicitation?.solicitationTargetIC?.toUpperCase() === \"SBIRSTTR\") {\r\n                showRadioButtons = true;\r\n            } else {\r\n                showRadioButtons = false;\r\n            }\r\n\r\n            let uploadedFiles = proposal.files;\r\n\r\n            //let totalUploadedFileSize = 0;\r\n            //uploadedFiles.forEach((item) => {\r\n            //    totalUploadedFileSize += item.size || 0;\r\n            //});\r\n            const fetchedBusinessExcelFiles = proposal.files.filter(f => f.type === constants.BusinessExcel);\r\n            let businessExcelFiles = [];\r\n            if (fetchedBusinessExcelFiles.length > 0)\r\n                businessExcelFiles = fetchedBusinessExcelFiles.map((f, index) => ({\r\n                    id: 'businessExcel' + index,\r\n                    label: 'Business Excel',\r\n                    errorMessage: '',\r\n                    defaultFileName: f.fileName,\r\n                    fileDbId: f.id\r\n                }));\r\n            const businessExcelFileIndex = fetchedBusinessExcelFiles.length - 1;\r\n            let businessDocFiles = proposal.files.filter(f => f.type === constants.NonRDBusinessDocs);\r\n            if (proposal.files.length > 0)\r\n                businessDocFiles = proposal.files.map((f, index) => {\r\n                    return {\r\n                        id: 'businessPDF' + index,\r\n                        label: 'Business Document',\r\n                        isLoaded: false,\r\n                        errorMessage: '',\r\n                        defaultFileName: f.fileName,\r\n                        fileDbId: f.id\r\n                    }\r\n                });\r\n            let businessDocFileIndex = businessDocFiles.length - 1;\r\n            \r\n\r\n            setTimeout(() => {\r\n                    this.setState({\r\n                        solicitation,\r\n                        showRadioButtons,\r\n                        originalSelectedFastTrackValue: proposal.selectedFastTrackValue,\r\n                        originalSelectedPhase2Value: proposal.selectedPhase2Value,\r\n                        selectedFastTrackValue: proposal.selectedFastTrackValue,\r\n                        selectedPhase2Value: proposal.selectedPhase2Value,\r\n                        proposal,\r\n                        uploadedFiles,\r\n                        //totalUploadedFileSize,\r\n                        data: { proposalName: proposal.proposalName },\r\n                        originalProposalName: proposal.proposalName,\r\n                        businessExcelFiles: businessExcelFiles,\r\n                        businessExcelFileIndex,\r\n                        businessDocFiles: businessDocFiles,\r\n                        businessDocFileIndex,\r\n                        //previousBusinessExcelFileLoaded: fetchedBusinessExcelFiles.length > 0,\r\n                        //previousBusinessDocFileLoaded: proposal.files.length > 0,\r\n                        submitHistory: proposal.historyLogs\r\n                    });\r\n                },\r\n                5);\r\n            const history = createBrowserHistory();\r\n            if (this.props.location.state && this.props.location.state.showProposalSubmissionSuccessModal) {\r\n                this.handleOpen('open');\r\n                this.setState({ changedDocumentIds: this.props.location.state.changedDocumentIds });\r\n                let state = { ...history.location.state };\r\n                delete state.showProposalSubmissionSuccessModal;\r\n                delete state.changedDocumentIds;\r\n                history.replace({ ...history.location, state });\r\n            }\r\n            \r\n            //if (this.props.location.state && this.props.location.state.changedDocumentIds) {\r\n            //    console.log(\"changed dcoument ids\", this.props.location.state.changedDocumentIds);\r\n            //    setTimeout(() => {\r\n            //            this.setState({ changedDocumentIds: this.props.location.state.changedDocumentIds });\r\n            //        },\r\n            //        5);\r\n\r\n            //}\r\n        } catch (ex) {\r\n            //console.log(ex);\r\n            this.setState({ pageError: true });\r\n            toast.error(ex.response.data);\r\n            setTimeout(() => window.location = \"/\", 3000);\r\n        }\r\n        finally {\r\n            this.setState({ loading: false });\r\n        }\r\n    }\r\n\r\n    handleOpen = () => {\r\n        const add = Object.assign({}, this.state.confirmationModal);\r\n        add.open = 'open';\r\n        this.setState({ confirmationModal: add, showDownloadButton: true });\r\n    }\r\n    handleClose = () => {\r\n        var add = Object.assign({}, this.state.confirmationModal);\r\n        add.open = '';\r\n        this.setState({ confirmationModal: add });\r\n    }\r\n    async getPageHeaderWithVendorContactInfo(proposalId) {\r\n        try {\r\n            let { data } = await submitProposalService.vendorContactInfo(proposalId);\r\n            this.setState({ headerInfo: data.headerInfo, vendorContactInfo: data.vendorContactInfo});\r\n\r\n        } catch (ex) {\r\n            //console.log(ex);\r\n        }\r\n    }\r\n    refreshPage(changedDocumentIds) {\r\n        const proposalId = this.state.proposal.proposalId;\r\n      this.props.history.push({\r\n          pathname: '/reviseProposal', state: { showProposalSubmissionSuccessModal: false, changedDocumentIds:[] }\r\n      });\r\n      setTimeout(() => {\r\n              this.props.history.push({\r\n                  pathname: `/reviseProposal/${proposalId}`, state: { showProposalSubmissionSuccessModal: true, changedDocumentIds }\r\n              });\r\n          },\r\n          5);\r\n    }\r\n    doSubmit = async () => {\r\n        const pageGuid = this.state.solicitation.pageGuid;\r\n        const solicitationId = this.state.solicitation.solicitationID;\r\n        const proposalId = this.state.proposal.proposalId;\r\n        const proposalName = this.state.data.proposalName;\r\n        const selectedFastTrackValue = this.state.selectedFastTrackValue;\r\n        const selectedPhase2Value = this.state.selectedPhase2Value;\r\n        const uploadedFileChanges = this.state.uploadedFileChanges;\r\n        const proposalData = { proposalId, selectedFastTrackValue, selectedPhase2Value, specialInviteId: \"\", proposalName, pageGuid, uploadedFileChanges }\r\n        const self = this;\r\n\r\n        //do not submit if nothing changed\r\n        if (this.state.originalProposalName === proposalName\r\n            && this.state.originalSelectedFastTrackValue === this.state.selectedFastTrackValue\r\n            && this.state.originalSelectedPhase2Value === this.state.selectedPhase2Value\r\n            && uploadedFileChanges.length === 0)\r\n            return false;\r\n\r\n        try {\r\n            const user = auth.getCurrentUser();\r\n            let newSelf = this;\r\n            const res = await submitProposalService.postSubmitGateway(user, solicitationId, 2);\r\n            if (res.status !== HTTPStatusCodes.SUCCESS) {\r\n                toast.error(\"Submission gateway error\");\r\n                return false;\r\n            }\r\n            \r\n            const { data, status } = await submitProposalService.postSubmitProposal('editProposal',\r\n                solicitationId,\r\n                proposalData,\r\n                newSelf,\r\n                \"api/solicitations/\",\r\n                \"/updateProposal\");\r\n            if (status === HTTPStatusCodes.SUCCESS) {\r\n                console.log(\"Update Proposal success\", data);\r\n\r\n                this.handleOpen('open');\r\n                let changedDocumentIds = data.changedDocumentIds;\r\n                setTimeout(() => {\r\n                        this.setState({ originalProposalName: this.state.data.proposalName, uploadedFileChanges: [] });\r\n                        this.setState({\r\n                            setopenProgressModal: false,\r\n                            openProgressModal: false,\r\n                            loadedAmount: 0\r\n                            //loading: false\r\n                        });\r\n                    },\r\n                    5);\r\n                \r\n                //await this.loadPage();\r\n                //Need to handle unmounted issue\r\n                this.refreshPage(changedDocumentIds);\r\n            } else {\r\n                \r\n                toast.warning(\"Upload not quite right\");\r\n            }\r\n        } catch (ex) {\r\n            if (ex.toString().indexOf(\"CANCEL_UPLOAD\") >= 0) {\r\n                toast.warning(\"Upload canceled\");\r\n            } \r\n\r\n            if (ex.response.status === 403) {\r\n                toast.error(ex.response.data);\r\n                setTimeout(() => window.location = \"/deadlineerror\", 3000);\r\n            } else {\r\n                toast.error(\"Submission fail\");\r\n                setTimeout(() => window.location = \"/\", 3000);\r\n            }\r\n            this.setState({ uploadedFileChanges: [] });\r\n\r\n            this.setState({\r\n                setopenProgressModal: false,\r\n                openProgressModal: false,\r\n                loadedAmount: 0\r\n            });\r\n        } finally {\r\n            this.setState({ loading: false });\r\n        }\r\n    };\r\n\r\n    isPdf = (fileName) =>{\r\n        const extension = fileName.split('.').pop().toLowerCase();\r\n        return extension === 'pdf';\r\n    }\r\n\r\n    historyText = (ph) => {\r\n        var test = ph.proposalLogComment.match(/(\"|')([^\"'\\\\]+)(\"|')(\\s+)replaced(\\s+)(\"|')([^\"'\\\\]+)(\"|')/g);\r\n        if (test) {\r\n            var filesFromComment = ph.proposalLogComment.match(/([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g)\r\n            if (filesFromComment && filesFromComment.length > 1) {\r\n                var newFile = filesFromComment[0].replace(/[\\\"\\']/g, \"\");\r\n                var oldFile = filesFromComment[1].replace(/[\\\"\\']/g, \"\");\r\n                return (<div><strong>{ph.newValue}</strong> replaced <strong>{oldFile}</strong></div>);               \r\n            }\r\n        }\r\n\r\n        test = ph.proposalLogComment.match(/([\"'])(?:(?=(\\\\?))\\2.)*?\\1/g);\r\n        if (test) {\r\n            var newFile = ph.proposalLogComment.replace(/[\\\"\\']/g, \"\");\r\n            return (<div><strong>{newFile}</strong></div>);\r\n        }\r\n\r\n        if (ph.newValue) {\r\n            return (<div><strong>{ph.newValue}</strong>: {ph.proposalLogComment.replace(/[\\\"\\']/g, \"\")}</div>);\r\n        } else {\r\n            return (<div><strong>{ph.proposalLogComment.replace(/[\\\"\\']/g, \"\")}</strong></div>);\r\n        }        \r\n    }\r\n\r\n    isRedirectedFromSubmitProposal() {\r\n        const location = this.props.location;\r\n        if (location === undefined || location === null)\r\n            return false;\r\n\r\n        const from = location.from;\r\n        if (from === undefined || from === null)\r\n            return false;\r\n\r\n        return from === \"Submit Proposal Page\" ;\r\n    }\r\n\r\n    checkSubmitDisabled() {\r\n        const errors = this.validate();\r\n        const state = this.state;\r\n        const uploadedFileChanges = state.uploadedFileChanges;\r\n        \r\n        return ((errors != null)\r\n            || (state.originalProposalName === state.data.proposalName\r\n                && state.originalSelectedFastTrackValue === state.selectedFastTrackValue\r\n                && state.originalSelectedPhase2Value === state.selectedPhase2Value\r\n                && uploadedFileChanges.length === 0));\r\n    }\r\n\r\n    onCancelUploading = () => {\r\n        //console.log('onCancelUploading');\r\n        this.setState({\r\n            setopenProgressModal: false, \r\n            openProgressModal: false,\r\n            loadedAmount: 0,\r\n            //cancelSubmission: true\r\n        });\r\n\r\n        submitProposalService.postSubmitProposal('editProposal', null, null, null, 'api/solicitations/', '/updateProposal', true);\r\n\r\n        //this.setState({\r\n        //    setopenProgressModal: false,\r\n        //    openProgressModal: false,\r\n        //    loadedAmount: 0,\r\n        //    //cancelSubmission: true\r\n        //});\r\n    }\r\n\r\n    setFastTrack = (checkedValue) => {\r\n        this.setState({\r\n            selectedFastTrackValue: checkedValue,\r\n        });\r\n    };\r\n\r\n    setPhase2 = (checkedValue) => {\r\n        this.setState({\r\n            selectedPhase2Value: checkedValue,\r\n        });\r\n    };\r\n\r\n    resetOptions(event) {\r\n        this.setState({\r\n            selectedFastTrackValue: '',\r\n            selectedPhase2Value: ''\r\n        });\r\n    }\r\n\r\n    render() {\r\n        if (this.state.pageError)\r\n            return null;\r\n\r\n        const loader = (<div className=\"loader\" style={{ position: \"fixed\", top: \"50%\", left: \"45%\" }}>Loading...</div>);\r\n        const isSubmitDisabled = this.checkSubmitDisabled();\r\n\r\n        return (\r\n            <div>\r\n                <div id=\"content\" className=\"content\">\r\n                    <SolicitationHeader headerInfo={this.state.headerInfo}/>\r\n                    <div className=\"main-content centered-content\">\r\n                        <div className=\"container-fluid\">\r\n                            {this.state.loading && loader}\r\n                            {!this.state.loading && <div className=\"row tile-height-row\">\r\n                                <div className=\"col-xl-8\">\r\n                                    <div className=\"section-heading\">Edit Proposal</div>\r\n                                    <div className=\"tile-section form-section submit-proposal\">\r\n                                        {this.state.proposal.specialInvite && this.state.proposal.specialInvite.baseProposal &&\r\n                                            <div className=\"abstract\">\r\n                                                <label id=\"abstractName-label\">Abstract Title</label>\r\n                                                <div id=\"abstractName-title\">\r\n                                                    {this.state.proposal.specialInvite.baseProposal.proposalName}\r\n                                                </div>\r\n                                            </div>\r\n                                        }\r\n                                        <form onSubmit={e => {e.preventDefault(); }}>\r\n                                            {this.renderInput(\"proposalName\", \"Proposal Name\", \"col-lg-9\", \"text\", true)}\r\n                                        </form>\r\n                                        {/*Optional Radio Buttons*/}\r\n                                        {this.state.showRadioButtons &&\r\n                                            <div className=\"proposal-options\">\r\n                                                <div className=\"options-container\">\r\n                                                    <div className=\"form-group row\">\r\n                                                        <label className=\"control-label\">FAST TRACK?</label>\r\n                                                        <div className=\"\">\r\n                                                            <input\r\n                                                                type=\"radio\"\r\n                                                                name=\"fasttrack\"\r\n                                                                value=\"yes\"\r\n                                                                checked={this.state.selectedFastTrackValue === 'Yes'}\r\n                                                                onChange={this.setFastTrack.bind(this, 'Yes')}\r\n                                                                aria-label=\"fasttrack yes\"\r\n                                                            />Yes\r\n                                                        </div>\r\n                                                        <div className=\"\">\r\n                                                            <input\r\n                                                                type=\"radio\"\r\n                                                                name=\"fasttrack\"\r\n                                                                value=\"no\"\r\n                                                                checked={this.state.selectedFastTrackValue === 'No'}\r\n                                                                onChange={this.setFastTrack.bind(this, 'No')}\r\n                                                                aria-label=\"fasttrack no\"\r\n                                                            />No\r\n                                                        </div>\r\n                                                    </div>\r\n                                                    <div className=\"form-group row\">\r\n                                                        <label className=\"control-label\">Direct Phase II?</label>\r\n                                                        <div className=\"\">\r\n                                                            <input\r\n                                                                type=\"radio\"\r\n                                                                name=\"phase2\"\r\n                                                                value=\"yes\"\r\n                                                                checked={this.state.selectedPhase2Value === 'Yes'}\r\n                                                                onChange={this.setPhase2.bind(this, 'Yes')}\r\n                                                                aria-label=\"phase2 yes\"\r\n                                                            />Yes\r\n                                                        </div>\r\n                                                        <div className=\"\">\r\n                                                            <input\r\n                                                                type=\"radio\"\r\n                                                                name=\"phase2\"\r\n                                                                value=\"no\"\r\n                                                                checked={this.state.selectedPhase2Value === 'No'}\r\n                                                                onChange={this.setPhase2.bind(this, 'No')}\r\n                                                                aria-label=\"phase2 no\"\r\n                                                            />No\r\n                                                        </div>\r\n                                                    </div>\r\n                                                    <div className=\"reset-link\">\r\n                                                        <a className=\"link-textonly\" onClick={() => this.resetOptions()}>Clear Selections</a>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                        } \r\n                                        {/*File Section*/}\r\n                                        <div className=\"additional-materials\">\r\n                                            <div className=\"material-head\">\r\n                                                <div className=\"material-info\">\r\n                                                    <div className=\"material-title\">Proposal Documents</div>\r\n                                                    <small>Max File Upload Size: 387.19 MB</small>\r\n                                                </div>\r\n                                                <div className=\"material-req\">\r\n                                                    {!this.state.solicitation.solicitationIsRD && <p>Only excel, word or pdf formats can be submitted. Multiple individual files may be submitted.</p>}\r\n                                                    {this.state.solicitation.solicitationIsRD && <p>Only a single Technical, Business, and PHS Human Subjects and Clinical Trials PDF file can be submitted. Multiple Business Excel files may be submitted</p>}\r\n\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className=\"proposal-upload-alert\">\r\n                                                <span><strong>Note:</strong> If you replace or add a new file, you must click on Submit Proposal button for eCPS to receive the updated file.</span>\r\n                                            </div>\r\n                                            <ul className=\"chevron-list\">\r\n                                                {this.state.solicitation.solicitationIsRD && (<li key=\"techPDF\" className=\"technical-doc\">\r\n                                                    <FileUpload\r\n                                                        dynamicClass=\"technical-doc-upload\"\r\n                                                        label=\"Technical PDF\"\r\n                                                        id=\"techPDF\"\r\n                                                        required={true}\r\n                                                        accept=\"application/pdf\"\r\n                                                        errorMessage={this.state.techPdfRequired.length > 0 ? this.state.techPdfRequired : this.state.techPdfValidationError}\r\n                                                        fileUpload={this.onFileReplace}\r\n                                                        fileDownload={this.onFileDownload}\r\n                                                        fileDelete={this.onFileDelete}\r\n                                                        defaultFile={this.state.uploadedFiles.filter(f => f.type === constants.TechPdf)[0]?.fileName}\r\n                                                        fileDbId={this.state.uploadedFiles.filter(f => f.type === constants.TechPdf)[0]?.id}\r\n                                                        isDownloadAllowed={(this.state.showDownloadButton && this.state.changedDocumentIds && this.state.changedDocumentIds.includes(this.state.uploadedFiles.filter(f => f.type === constants.TechPdf)[0]?.id))||this.isRedirectedFromSubmitProposal()}\r\n                                                    />\r\n                                                </li>)}\r\n                                                {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li key=\"humanPDF\" className=\"misc-doc\">\r\n                                                    <FileUpload\r\n                                                        dynamicClass=\"technical-doc-upload\"\r\n                                                        label=\"PHS Human Subjects and Clinical Trials PDF\"\r\n                                                        id=\"humanPDF\"\r\n                                                        required={false}\r\n                                                        accept=\"application/pdf\"\r\n                                                        errorMessage={this.state.humanPdfValidationError}\r\n                                                        fileUpload={this.onFileReplace}\r\n                                                        fileDownload={this.onFileDownload}\r\n                                                        fileDelete={this.onFileDelete}\r\n                                                        //defaultFile={this.state.proposal.files.filter(f => f.type === 3)[0]?.fileName}\r\n                                                        defaultFile={this.state.uploadedFiles.filter(f => f.type === constants.HumanPdf)[0]?.fileName}\r\n                                                        fileDbId={this.state.uploadedFiles.filter(f => f.type === constants.HumanPdf)[0]?.id}\r\n                                                        isDownloadAllowed={(this.state.showDownloadButton && this.state.changedDocumentIds && this.state.changedDocumentIds.includes(this.state.uploadedFiles.filter(f => f.type === constants.HumanPdf)[0]?.id))||this.isRedirectedFromSubmitProposal()}\r\n                                                    />\r\n                                                                                                                                                 </li>)}\r\n                                                {this.state.solicitation.solicitationIsRD && this.state.solicitation.solicitationEnableOther && (<li className=\"misc-doc-info\" key=\"misc-doc-info\"><span>Upload the Human Subjects and Clinical Trials Information Form as required in this solicitation. Refer to your solicitation instructions in <a href=\"https://sam.gov/content/home\" className=\"link-textonly\" target=\"_blank\">sam.gov</a> for more information.<br />Please ensure that you are using correct version of the <a href=\"https://oamp.od.nih.gov/nih-document-generation-system/dgs-workform-information/attachment-files-section-j\" className=\"link-textonly\" target=\"_blank\">Human Subject and Clinical Trial form</a>.</span></li>)}\r\n                                                {this.state.solicitation.solicitationIsRD && (<li key=\"businessPDF\" className=\"business-doc\">\r\n                                                    <FileUpload\r\n                                                        dynamicClass=\"technical-doc-upload\"\r\n                                                        label=\"Business PDF\"\r\n                                                        id=\"businessPDF\"\r\n                                                        required={true}\r\n                                                        accept=\"application/pdf\"\r\n                                                        errorMessage={this.state.businessPdfRequired.length > 0 ? this.state.businessPdfRequired : this.state.businessPdfValidationError}\r\n                                                        fileUpload={this.onFileReplace}\r\n                                                        fileDownload={this.onFileDownload}\r\n                                                        fileDelete={this.onFileDelete}\r\n                                                        defaultFile={this.state.uploadedFiles.filter(f => f.type === constants.BusinessPdf)[0]?.fileName}\r\n                                                        fileDbId={this.state.uploadedFiles.filter(f => f.type === constants.BusinessPdf)[0]?.id}\r\n                                                        isDownloadAllowed={(this.state.showDownloadButton && this.state.changedDocumentIds && this.state.changedDocumentIds.includes(this.state.uploadedFiles.filter(f => f.type === constants.BusinessPdf)[0]?.id))||this.isRedirectedFromSubmitProposal()}\r\n                                                    />\r\n                                                </li>)}\r\n                                                {!this.state.solicitation.solicitationIsRD && this.state.businessDocFiles.map((item) => {\r\n                                                    return (<li key={item.id} className=\"business-doc\">\r\n                                                        <FileUpload\r\n                                                            dynamicClass=\"business-doc-upload\"\r\n                                                            label={item.label}\r\n                                                            id={item.id}\r\n                                                            required={true}\r\n                                                            accept=\".xlsx,.xls, .doc, .docx,.pdf\"\r\n                                                            errorMessage={item.errorMessage}\r\n                                                            fileUpload={this.onBusinessDocFileUpload}\r\n                                                            fileDownload={this.onFileDownload}\r\n                                                            fileDelete={this.onBusinessDocFileDelete}\r\n                                                            defaultFile={item.defaultFileName}\r\n                                                            fileDbId={item.fileDbId}\r\n                                                            isDownloadAllowed={(this.state.showDownloadButton && this.state.changedDocumentIds && this.state.changedDocumentIds.includes(item.fileDbId) )||this.isRedirectedFromSubmitProposal()}\r\n                                                        />\r\n                                                    </li>);\r\n                                                })}\r\n                                                {this.state.solicitation.solicitationIsRD && this.state.businessExcelFiles.map((item) => {\r\n                                                    return (<li key={item.id} className=\"business-excel-doc\">\r\n                                                        <FileUpload\r\n                                                            dynamicClass=\"technical-doc-upload\"\r\n                                                            label={item.label}\r\n                                                            id={item.id}\r\n                                                            required={false}\r\n                                                            accept=\"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,\"\r\n                                                            errorMessage={item.errorMessage}\r\n                                                            fileUpload={this.onBusinessExcelFileUpload}\r\n                                                            fileDownload={this.onFileDownload}\r\n                                                            fileDelete={this.onBusinessExcelFileDelete}\r\n                                                            defaultFile={item.defaultFileName}\r\n                                                            fileDbId={item.fileDbId}\r\n                                                            isDownloadAllowed={(this.state.showDownloadButton && this.state.changedDocumentIds && this.state.changedDocumentIds.includes(item.fileDbId) )||this.isRedirectedFromSubmitProposal()}\r\n                                                        />\r\n                                                    </li>);\r\n                                                })}\r\n                                                {\r\n                                                    this.state.solicitation.solicitationIsRD && <li className=\"business-excel-info\" key=\"business-excel-info\"><span>Upload excel if required by the solicitation instructions. You may upload multiple excel files.</span></li>\r\n                                                }\r\n\r\n\r\n                                            </ul>\r\n                                            {this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                                <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\"\r\n                                                    onClick={this.addBusinessExcelDoc} disabled={!this.state.previousBusinessExcelFileLoaded}>\r\n                                                    <span className=\"MuiButton-label\">\r\n                                                        <img src=\"images/plus-white.svg\" alt=\"add-additional-document\" />Add Additional Business Excel Document\r\n                                            </span>\r\n                                                    <span className=\"MuiTouchRipple-root\"></span>\r\n                                                </button>\r\n                                            </div>\r\n                                            )}\r\n\r\n                                            {!this.state.solicitation.solicitationIsRD && (<div className=\"add-doc\">\r\n                                                <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained success-long-btn\" tabIndex=\"0\" type=\"button\"\r\n                                                    onClick={this.addBusinessDoc} disabled={!this.state.previousBusinessDocFileLoaded}>\r\n                                                    <span className=\"MuiButton-label\">\r\n                                  <img src=\"images/plus-white.svg\" alt=\"add-additional-document\" />Add Additional Business Document\r\n                                            </span>\r\n                                                    <span className=\"MuiTouchRipple-root\"></span>\r\n                                                </button>\r\n                                            </div>\r\n                                            )}\r\n                                        </div>\r\n\r\n                                        <div className=\"tile-footer submit-container\"\r\n                                            title={isSubmitDisabled ? this.state.data.proposalName === \"\" ? \"Proposal Name Required\" : \"Button will be enabled if there are changes to the proposal\" : \"\"}>\r\n                                            {isSubmitDisabled && <span className=\"document-requirement\">Proposal Name and documents are required to submit proposal</span>}\r\n                                            <button \r\n                                              className={`MuiButtonBase-root MuiButton-root ${isSubmitDisabled ? 'disabled-btn' : ''} MuiButton-contained submit-btn btn-primary`} \r\n                                              tabIndex=\"0\"\r\n                                              type=\"submit\"\r\n                                              disabled={isSubmitDisabled}\r\n                                              onClick={(uploading) => {this.handleSubmit(uploading); this.setState({setopenProgressModal: true, openProgressModal: true}); }}\r\n                                            >\r\n                                              <span className=\"MuiButton-label\">\r\n                                                  Submit Proposal\r\n                                              </span>\r\n                                              <span className=\"MuiTouchRipple-root\"></span>\r\n                                          </button>\r\n                                      </div>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-xl-4\">\r\n                                    <div>\r\n                                        <br/>\r\n                                        <br />\r\n                                        {this.state.proposal.specialInviteId == null &&\r\n                                            <Link\r\n                                                to={`/submitProposal/${this.state.solicitation.solicitationID}`}\r\n                                                className=\"MuiButtonBase-root MuiButton-root disabled-btn MuiButton-contained new-alt-prop\"\r\n                                                tabIndex=\"0\"\r\n                                                type=\"button\">\r\n                                                <span className=\"MuiButton-label\">\r\n                                                    Submit New/Alternate Proposal\r\n                                                </span>\r\n                                                <span className=\"MuiTouchRipple-root\"></span>\r\n                                            </Link>\r\n                                        }\r\n                                        {this.state.proposal.specialInviteId > 0 &&\r\n                                            <Link\r\n                                                to={`/submitSpecialProposal/${this.state.solicitation.solicitationID}/${this.state.proposal.specialInviteId}`}\r\n                                                className=\"MuiButtonBase-root MuiButton-root disabled-btn MuiButton-contained new-alt-prop\"\r\n                                                tabIndex=\"0\"\r\n                                                type=\"button\">\r\n                                                <span className=\"MuiButton-label\">\r\n                                                    Submit New/Alternate Proposal\r\n                                                </span>\r\n                                                <span className=\"MuiTouchRipple-root\"></span>\r\n                                            </Link>\r\n                                        }\r\n                                        <br/>\r\n                                        <br/>\r\n                                    </div>\r\n                                    <div className=\"section-heading\">Your Contact Information</div>\r\n                                    <div className=\"tile-section activity-history tile-height tile-footer-scroll\">\r\n                                        <div >\r\n                                            <table>\r\n                                                <tbody>\r\n                                                <tr>\r\n                                                    <td><strong>Vendor</strong></td>\r\n                                                    <td>{this.state.vendorContactInfo.vendor}</td>\r\n                                                </tr>\r\n                                                <tr>\r\n                                                    <td><strong>Name</strong></td>\r\n                                                    <td>{this.state.vendorContactInfo.name}</td>\r\n                                                </tr>\r\n                                                <tr>\r\n                                                    <td><strong>Email</strong></td>\r\n                                                    <td>{this.state.vendorContactInfo.email}</td>\r\n                                                </tr>\r\n                                                <tr>\r\n                                                    <td><strong>Phone</strong></td>\r\n                                                    <td>{this.state.vendorContactInfo.phone}</td>\r\n                                                </tr>\r\n                                                </tbody>\r\n                                            </table>\r\n                                        </div>\r\n                                    </div>\r\n\r\n                                    <div className=\"section-heading\">Submission History</div>\r\n                                    <div className=\"tile-section activity-history tile-height tile-footer-scroll\">\r\n                                        <div className=\"tile-title comment-title\">File/Date</div>\r\n                                        <ul className=\"circle-line-list scroll-list\" style={{maxHeight: \"250px\"}} tabindex=\"0\">\r\n                                            {this.state.submitHistory && this.state.submitHistory.map((ph, index) => {\r\n                                                \r\n                                                return (\r\n\r\n                                                    <li key={index}>\r\n                                                        <div className=\"circle-icon\"></div>\r\n                                                        <div className=\"comment-user-time\">{this.historyText(ph)}</div>\r\n                                                        <div className=\"comment-user-time\">\r\n                                                            <div className=\"comment-time\">{ph.proposalLogDateStr} {ph.proposalLogTimeStr}</div>\r\n                                                        </div>\r\n                                                    </li>\r\n                                                );\r\n                                            })}\r\n                                        </ul>\r\n                                    </div>\r\n                                </div>\r\n                            </div>}\r\n                        </div>\r\n                    </div>\r\n                    {ProposalSubmissionSuccessModal(this)}\r\n                    <ProgressModal\r\n                        openProgressModal={this.state.openProgressModal}\r\n                        setopenProgressModal={this.state.setopenProgressModal}\r\n                        open={this.state.openProgressModal}\r\n                        modalType='upload-progress'\r\n                        title='Submission in progress'\r\n                        loadedAmount={this.state.loadedAmount}\r\n                        selectedValue={'upload progress bar'}\r\n                        onClose={() => this.onCancelUploading()}\r\n                    >\r\n                    </ProgressModal>\r\n                </div>\r\n                <Footer/>\r\n            </div>\r\n);\r\n}\r\n}\r\n\r\nexport default ReviseProposal;\r\n","import React, { Component } from 'react';\r\n\r\nexport class Counter extends Component {\r\n  static displayName = Counter.name;\r\n\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = { currentCount: 0 };\r\n    this.incrementCounter = this.incrementCounter.bind(this);\r\n  }\r\n\r\n  incrementCounter() {\r\n    this.setState({\r\n      currentCount: this.state.currentCount + 1\r\n    });\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      <div>\r\n        <h1>Counter</h1>\r\n\r\n        <p>This is a simple example of a React component.</p>\r\n\r\n        <p aria-live=\"polite\">Current count: <strong>{this.state.currentCount}</strong></p>\r\n\r\n        <button className=\"btn btn-primary\" onClick={this.incrementCounter}>Increment</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport \"./LoginForm.css\";\r\n\r\nclass LoginForm extends Component {\r\n  \r\n  render() {\r\n    //const { data, errors } = this.state;\r\n    //if (auth.getCurrentUser()) return <Redirect to=\"/\" />;\r\n    return (\r\n        <div className=\"jumbotron-lg-content\">\r\n            <div className=\"jumbotron-text\">\r\n                <div className=\"primary-jumbo-text\">Welcome to the electronic Contract Proposal Submission (eCPS)</div>\r\n                <div className=\"secondary-jumbo-text\">The electronic Contract Proposal Submission (eCPS) is a component of an integrated, secure system for the electronic submission, capture, tracking and review of contract proposals.</div>\r\n            </div>\r\n            <div className=\"jumbotron-action\">\r\n                <div className=\"guide-text\">Ready to submit a proposal?</div>\r\n                <button className=\"MuiButtonBase-root MuiButton-root btn-guide\" tabIndex=\"0\" type=\"button\" onClick={() => { window.location = '/siteminder/renderSiteMinder'; }}>\r\n                    <span className=\"MuiButton-label\">\r\n                        eCPS Login\r\n                    </span>\r\n                    <span className=\"MuiTouchRipple-root\"></span>\r\n                    <div className=\"chevron-right\"><img src=\"images/banner-arrow.svg\" alt=\"site-login\" /></div>\r\n                </button>\r\n                <a href=\"#\" className=\"register-account\">Register new account<img src=\"images/icon-arrow-right-blue-light.svg\" alt=\"register-new-account\"/></a>\r\n            </div>\r\n        </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default LoginForm;\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../services/authService\";\r\nimport MainContainer from \"./common/mainContainer\";\r\nimport { datadogRum } from '@datadog/browser-rum';\r\n\r\nclass Logout extends Component {\r\n    componentDidMount() {\r\n    var logoutUrl = '';\r\n    auth.logout()\r\n        .then((response) => {\r\n            datadogRum.removeUser();\r\n            logoutUrl = response.data;\r\n            //console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!')\r\n            //console.log(logoutUrl);\r\n            var url = window.location.href.match(/^.*\\//);\r\n          \r\n            setTimeout(function () { window.location = logoutUrl; }, 1000);\r\n        })\r\n        .catch(() => {\r\n            \r\n            setTimeout(function () { window.location = \"/\"; }, 1000);\r\n        });\r\n    }\r\n\r\n    render() {\r\n        //return (<MainContainer><span>Logging out ... ...</span></MainContainer>);\r\n        return (\r\n            <React.Fragment>\r\n                <div className=\"content\" style={{ padding: \"10px\", backgroundColor: \"#fff\", width: \"100%\" }}> Logging out ... </div>\r\n            </React.Fragment>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Logout;\r\n","import React from \"react\";\r\nimport { Route, Redirect } from \"react-router\";\r\n\r\nimport auth from \"../../services/authService\";\r\nconst ProtectedRoute = ({ path, component: Component, render }) => {\r\n\r\n  return (\r\n    <Route\r\n        path={path}\r\n        render={(props) => {\r\n            if (!auth.getCurrentUser()) {\r\n                auth.logout()\r\n                    .then(res => {\r\n                        return (\r\n                            <Redirect\r\n                                to={{\r\n                                    pathname: \"/\",\r\n                                    state: { from: props.location },\r\n                                }}\r\n                            />\r\n                        );\r\n                    })\r\n                    .catch(err => {\r\n                        window.location = \"/logout\";\r\n                    })\r\n                \r\n            }\r\n          \r\n            return Component ? <Component {...props} /> : render(props);\r\n          \r\n            //return render(props);\r\n        }}\r\n    />\r\n  );\r\n};\r\n\r\nexport default ProtectedRoute;\r\n","import React, { Component } from \"react\";\r\nimport { ShowEditSolicitationSidebar } from \"../common/constants\";\r\n\r\nexport class EditSolicitationSideBar extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            proposals: [],\r\n            searchText: '',\r\n            reviewedFilter: false,\r\n            pendingFilter: false,\r\n            reviewingProposalId: 0\r\n        };\r\n    }\r\n    componentWillReceiveProps(newProps) {\r\n        if (newProps.reviewingProposalId === 0) {\r\n            this.setState({ reviewingProposalId: newProps.reviewingProposalId });\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        const isSidebarShown = !!localStorage.getItem(ShowEditSolicitationSidebar);\r\n        this.setState({ ShowSidebar: isSidebarShown !== ShowEditSolicitationSidebar });\r\n    }\r\n    getDate(dt) {\r\n        var d = new Date(dt).toLocaleDateString();\r\n        return d;\r\n    }\r\n    onPropSearchTextChange(text) {\r\n        this.setState({ searchText: text});\r\n    }\r\n    search(proposal) {\r\n        var result = false;\r\n        if (proposal) {\r\n            var titleResult = proposal.proposalName?.toLowerCase().includes(this.state.searchText.toLowerCase());\r\n            var instituteResult = proposal.institution?.toLowerCase().includes(this.state.searchText.toLowerCase());\r\n   \r\n            result = (titleResult || instituteResult);\r\n        }\r\n        return result;\r\n    }\r\n    filter(proposal) {\r\n        var result = false;\r\n        if (proposal) {\r\n            if (this.state.pendingFilter) {\r\n                result = (proposal?.status === 0);\r\n            }\r\n            if (this.state.reviewedFilter) {\r\n                result = (proposal?.status === 2);\r\n            }\r\n            if (!this.state.pendingFilter && !this.state.reviewedFilter) {\r\n                result = true;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n    renderProposalStatusSwitch(param) {\r\n        switch (param) {\r\n        case 0:\r\n                return 'Pending';\r\n        case 1:\r\n                return 'Not Forwarded';\r\n        case 2:\r\n            return 'Forwarded';\r\n        default:\r\n            return '';\r\n        }\r\n    }\r\n    renderProposalStatusImageSwitch(param) {\r\n        switch (param) {\r\n        case 0:\r\n                return 'images/status-pending-circle.svg';\r\n        case 1:\r\n                return 'images/status-denied-circle.svg';\r\n        case 2:\r\n                return 'images/status-complete-circle.svg';\r\n        default:\r\n            return '';\r\n        }\r\n    }\r\n    render() {\r\n        const toggleSidebar = () => {\r\n            this.setState({ ShowSidebar: this.state.ShowSidebar !== ShowEditSolicitationSidebar });\r\n            localStorage.setItem(ShowEditSolicitationSidebar, this.state.ShowSidebar);\r\n\r\n        };\r\n        return (\r\n            <div className={`sidebar float-sidebar ${this.state.ShowSidebar !== ShowEditSolicitationSidebar ? 'closed' : ''}`}>\r\n                <button className=\"btn sidebar-trigger trigger-md\" onClick={() => { toggleSidebar() }}>Proposals<img src=\"./images/icon-arrow-down-light.svg\" alt=\"icon proposals\" /></button>\r\n                <div className=\"sidebar-header\">\r\n                    <div className=\"counters\">\r\n                        <div className={`counter pending ${this.state.pendingFilter == true ? 'active' : ''}`} onClick={() => { this.setState({ pendingFilter: !this.state.pendingFilter, reviewedFilter: false})}}>\r\n                            <div className=\"counted\">{this.props.panelInfo?.proposals?.filter((x) => x?.status == 0).length}</div>\r\n                            Pending\r\n                    </div>\r\n                        <div className={`counter reviewed ${this.state.reviewedFilter == true ? 'active' : ''}`} onClick={() => { this.setState({ reviewedFilter: !this.state.reviewedFilter, pendingFilter: false }) }}>\r\n                            <div className=\"counted\">{this.props.panelInfo?.proposals?.filter((x) => x?.status == 2).length}</div>\r\n                            Reviewed\r\n                    </div>\r\n                    </div>\r\n                    <form>\r\n                        <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                            <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\">\r\n                                Search Proposals\r\n                        </label>\r\n                            <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl\">\r\n                                <input aria-invalid=\"false\" id=\"poc-email\" required=\"\" onChange={(e) => this.onPropSearchTextChange(e.target.value)} type=\"text\" className=\"MuiInputBase-input MuiInput-input\" defaultValue=\"\" />\r\n                            </div>\r\n                            <i className=\"search-icon\"></i>\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div className=\"sidebar-list\">\r\n                    {\r\n                        this.props.panelInfo?.proposals?.filter(Boolean).filter(x => this.search(x)).filter(x => this.filter(x)).map((x) => (\r\n                            <div key={x.proposalID} className={`sidebar-listing ${this.state.reviewingProposalId == x.proposalID ? 'active-listing' : ''}`} onClick={() => {\r\n                                this.setState({ reviewingProposalId: x.proposalID });\r\n                                this.props.showProposal(x.proposalID);\r\n                            }}>\r\n                                <div className=\"list-head\">\r\n                                    {x.proposalName}\r\n                                </div>\r\n                                <div className=\"list-body\">\r\n                                    <p>{x.institution}</p>\r\n                                    <strong>{x.proposerName}</strong>\r\n                                </div>\r\n                                <div className=\"list-footer\">\r\n                                    <div className=\"approval\">\r\n                                        <i className=\"pending\"></i>\r\n                                        <div className=\"approval-status\">\r\n                                            <img src={this.renderProposalStatusImageSwitch(x.status)} alt=\"status-icon\" />\r\n                                            <small>{this.renderProposalStatusSwitch(x.status)}</small>\r\n                                            <p >{this.state.reviewingProposalId == x.proposalID ?'Reviewing Now': ''}</p>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div className=\"date\">\r\n                                        <small>Submitted</small>\r\n                                        <p>{this.getDate(x.proposalCreateDate)}</p>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            \r\n                            ))}\r\n                 \r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FormLabel, FormControl, FormControlLabel, RadioGroup, Radio } from '@material-ui/core';\r\n\r\nexport class toggleButton extends Component {\r\n    constructor (props) {\r\n        super(props);\r\n         this.state = {\r\n            value: props.value\r\n        }; \r\n\r\n        this.handleChange = this.handleChange.bind(this);\r\n    }\r\n\r\n    static propTypes = {\r\n        name: PropTypes.string.isRequired,\r\n        label: PropTypes.string.isRequired,\r\n        options: PropTypes.array.isRequired,\r\n        widthClass: PropTypes.string.isRequired\r\n    }\r\n\r\n    handleChange = (e) => {\r\n        this.setState({\r\n            value: e.target.value\r\n        }, () => {\r\n            this.props.handleChange(this.props.name, this.state.value);\r\n        });\r\n    }\r\n\r\n    render() {\r\n      const ToggleClass = `toggle-switch ${this.props.widthClass}`;\r\n\r\n        return (\r\n            <FormControl component=\"fieldset\" className={ToggleClass}>\r\n                <FormLabel component=\"legend\">{this.props.label}</FormLabel>\r\n                <RadioGroup aria-label=\"gender\" name=\"gender1\" value={this.props.value} onChange={this.handleChange} className={`active-index-${this.props.options.findIndex((f) => f === this.props.value)}`}>\r\n                    { this.props.options.map((option, index) => (\r\n                        <FormControlLabel\r\n                            key={this.props.name + index}\r\n                            value={option}\r\n                            control={<Radio />}\r\n                            label={option}\r\n                        />\r\n                    ))}\r\n                </RadioGroup>\r\n            </FormControl>\r\n        )\r\n    }\r\n}\r\n\r\nexport default toggleButton;\r\n","import React, { Component } from 'react';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport class CheckInput extends Component  {\r\n  constructor (props) {\r\n    super(props);\r\n     this.state = {\r\n        isChecked: props.isChecked\r\n    }; \r\n\r\n    this.handleChange = this.handleChange.bind(this);\r\n  }\r\n\r\n  static propTypes = {\r\n      name: PropTypes.string.isRequired,\r\n      label: PropTypes.string.isRequired,\r\n      isChecked: PropTypes.bool\r\n  }\r\n\r\n  handleChange = (e) => {\r\n      this.setState({\r\n        isChecked: e.target.checked\r\n      }, () => {\r\n          this.props.handleChange(this.props.name, this.state.isChecked);\r\n      });\r\n  }\r\n\r\n  render () {\r\n    return (\r\n      <FormControlLabel\r\n        className={this.props.className}\r\n        key={this.props.name}\r\n        control={<Checkbox checked={this.props.isChecked} onChange={this.handleChange} name={this.props.name} />}\r\n        label={this.props.label}\r\n      />\r\n    );\r\n  }\r\n}\r\n\r\nexport default CheckInput;","import React, { Component } from \"react\";\r\nimport solicitationService from \"../../services/solicitationService\";\r\n\r\nimport DateTime from \"../common/DateTimeConversionMethods\";\r\n\r\nexport class Proposal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            proposal: {},\r\n            activities: [],\r\n            files: [],\r\n            vendor: {}\r\n        };\r\n    }\r\n    componentWillReceiveProps(newProps) {\r\n        //console.log('newprops in proposal', newProps);\r\n        if (newProps.proposalId) {\r\n            this.fetchProposalData(newProps.proposalId);\r\n        }\r\n    }\r\n    async componentDidMount() {\r\n        this.fetchProposalData(this.props.proposalId);\r\n    }\r\n    async fetchProposalData(proposalId) {\r\n        var proposal = await solicitationService.getProposalById(proposalId).then((response) => {\r\n            this.setState({ proposal: response.data.proposal, activities: response.data.activities, files: response.data.files, vendor: response.data.vendor });\r\n            //console.log('proposal101', response);\r\n        })\r\n            .catch((error) => {\r\n                //console.error(error);\r\n            });;\r\n\r\n    }\r\n    //getDate(dt) {\r\n    //    var d = new Date(dt).toLocaleDateString();\r\n    //    return d;\r\n    //}\r\n    //getTime(dt) {\r\n    //    var t = new Date(dt).toLocaleTimeString();\r\n    //    var hm = t.slice(0, t.lastIndexOf(':')) + ' ' + t.split(' ')[1] + ' ET';\r\n    //    return hm;\r\n    //}\r\n    getClassBasedOnDocType(docType, fileName) {\r\n        var fileExtension = this.getFileExtension(fileName);\r\n        switch (docType) {\r\n            case 1:\r\n                return 'technical-doc';\r\n            case 2:\r\n                if (fileExtension.toLowerCase() === 'pdf')\r\n                    return 'business-doc';\r\n                else\r\n                    return 'business-excel-doc';\r\n            case 3:\r\n                return 'misc-doc';\r\n            default:\r\n        }\r\n    }\r\n    getDocTypeText(docType, fileName) {\r\n        var fileExtension = this.getFileExtension(fileName);\r\n        switch (docType) {\r\n        case 1:\r\n                return 'Technical ' + fileExtension.toUpperCase();\r\n        case 2:\r\n                if (fileExtension.toLowerCase() === 'pdf')\r\n                    return 'Business PDF';\r\n            else\r\n                    return 'Business Excel';\r\n        case 3:\r\n                return 'PHS Human Subject and Clinical Trials' + fileExtension.toUpperCase();\r\n        default:\r\n        }\r\n    }\r\n    getFileExtension(fileName) {\r\n        if (!fileName)\r\n            return null;\r\n        var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\r\n        //console.log('extension', extension);\r\n        return extension;\r\n    }\r\n    getActivityActionById(actionId) {\r\n        switch (actionId) {\r\n            case 0:\r\n                return 'Error occurred'; \r\n            case 1:\r\n                return 'Forwarded for review'; \r\n\r\n            case 2:\r\n                return 'Not Forwarded for review'; \r\n\r\n            case 3:\r\n                return 'Added redacted file'; \r\n\r\n            default:\r\n                return '';\r\n        }\r\n    }\r\n    render() {\r\n        var proposal = this.state.proposal;\r\n        var vendor = this.state.vendor;\r\n        return (\r\n            <div className=\"main-content\">\r\n                {proposal &&\r\n                    <div className=\"container-fluid centered-content\">\r\n                        <div className=\"row tile-height-row\">\r\n                            <div className=\"col-xl-7\">\r\n                                <div className=\"section-heading proposal-information\">Proposal Information</div>\r\n                                <div className=\"tile-section review-proposal tile-height tile-height-setter\">\r\n                                    <div className=\"proposal-card\">\r\n                                    <div className=\"proposal-title\">{proposal.proposalName}</div>\r\n\r\n                                        <div className=\"row\">\r\n                                            <div className=\"col-lg-7\">\r\n                                                <label className=\"text-label\">Vendor</label>\r\n                                            <p>{vendor?.organization}</p>\r\n                                            </div>\r\n                                            <div className=\"col-lg-5\">\r\n                                                <label className=\"text-label\">Submitted</label>\r\n                                            <p>{this.getDate(proposal.proposalCreateDate)}\r\n                                                <small>{this.getTime(proposal.proposalCreateDate)}</small>\r\n                                                </p>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className=\"proposal-card-footer\">\r\n                                            <div className=\"contact\">Contact Information</div>\r\n                                            <div className=\"row\">\r\n                                                <div className=\"col-lg-4\">\r\n                                                    <label className=\"text-label\">Name</label>\r\n                                                <p>{vendor?.name}</p>\r\n                                                </div>\r\n                                                <div className=\"col-lg-4\">\r\n                                                    <label className=\"text-label\">Email</label>\r\n                                                <p>{vendor?.email}</p>\r\n                                                </div>\r\n                                                <div className=\"col-lg-4\">\r\n                                                    <label className=\"text-label\">Phone</label>\r\n                                                <p>{vendor?.phone}</p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"col-xl-5\">\r\n                                <div className=\"section-heading\">Documents\r\n                                <div className=\"header-actions\">\r\n                                        <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained white-btn\" tabindex=\"0\" type=\"button\">\r\n                                            <span className=\"MuiButton-label\">\r\n                                                Download All<img src=\"images/download-blue.svg\" alt=\"download-file\" />\r\n                                            </span>\r\n                                            <span className=\"MuiTouchRipple-root\"></span>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"documents-tile tile-height\">\r\n                                    <ul className=\"chevron-list\">\r\n                                        {\r\n                                            this.state.files?.map((x) => (\r\n                                                <li key={x.id} className={`${this.getClassBasedOnDocType(x.type, x.fileName)} outer-link`}>\r\n                                                    <div className=\"document-details\">\r\n                                                        <div className=\"document-name\">{this.getDocTypeText(x.type, x.fileName)}</div>\r\n                                                        <div className=\"document-file\">{x.fileName}</div>\r\n                                                    </div>\r\n                                                    <div className=\"chevron-right\">\r\n                                                        <img src=\"images/banner-arrow.svg\" alt=\"banner-icon\"/>\r\n                                                    </div>\r\n                                                    {x.type === 1 &&\r\n                                                        <a href=\"#\"><small>Upload Redacted Version</small></a>\r\n                                                    }\r\n                                                </li>\r\n                                            ))\r\n                                        }\r\n                                    </ul>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"row tile-height-row\">\r\n                            <div className=\"col-xl-8\">\r\n                                <div className=\"section-heading\">My Review</div>\r\n                                <div className=\"form-section my-review tile-height tile-height-setter\">\r\n                                    <form>\r\n                                        <div className=\"row\">\r\n                                            <div className=\"col-xl-4\">\r\n                                                <fieldset className=\"MuiFormControl-root toggle-switch toggle-med\">\r\n                                                    <legend className=\"MuiFormLabel-root\">\r\n                                                        Forward for Technical Review\r\n                                            </legend>\r\n                                                    <div className=\"MuiFormGroup-root\" role=\"radiogroup\" aria-label=\"investigation\">\r\n                                                        <label className=\"MuiFormControlLabel-root\">\r\n                                                            <span className=\"MuiButtonBase-root MuiIconButton-root jss134 MuiRadio-root MuiRadio-colorSecondary jss135 Mui-checked MuiIconButton-colorSecondary\" aria-disabled=\"false\">\r\n                                                                <span className=\"MuiIconButton-label\">\r\n                                                                    <input className=\"jss137\" name=\"investigation1\" type=\"radio\" value=\"Yes\" checked=\"\" />\r\n                                                                </span>\r\n                                                                <span className=\"MuiTouchRipple-root\"></span>\r\n                                                            </span>\r\n                                                            <span className=\"MuiTypography-root MuiFormControlLabel-label MuiTypography-body1\">Send</span>\r\n                                                        </label>\r\n                                                        <label className=\"MuiFormControlLabel-root\">\r\n                                                            <span className=\"MuiButtonBase-root MuiIconButton-root jss134 MuiRadio-root MuiRadio-colorSecondary MuiIconButton-colorSecondary\" aria-disabled=\"false\">\r\n                                                                <span className=\"MuiIconButton-label\">\r\n                                                                    <input className=\"jss137\" name=\"investigation1\" type=\"radio\" value=\"No\" />\r\n                                                                </span>\r\n                                                                <span className=\"MuiTouchRipple-root\"></span>\r\n                                                            </span>\r\n                                                            <span className=\"MuiTypography-root MuiFormControlLabel-label MuiTypography-body1\">Do Not Send</span>\r\n                                                        </label>\r\n                                                    </div>\r\n                                                </fieldset>\r\n                                            </div>\r\n                                            <div className=\"col-xl-8\">\r\n                                                <div className=\"MuiFormControl-root jss239 MuiFormControl-fullWidth money-parent\">\r\n                                                    <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink\" data-shrink=\"true\" htmlFor=\"standard-adornment-amount\">\r\n                                                        Total Direct Cost\r\n                                            </label>\r\n                                                    <div className=\"MuiInputBase-root MuiInput-root MuiInputBase-formControl MuiInput-formControl MuiInputBase-adornedStart\">\r\n                                                        <div className=\"MuiInputAdornment-root MuiInputAdornment-positionStart\">\r\n                                                            <p className=\"MuiTypography-root MuiTypography-body1 MuiTypography-colorTextSecondary\">$</p>\r\n                                                        </div>\r\n                                                        <input type=\"text\" aria-invalid=\"false\" id=\"standard-adornment-amount\" value=\"\" className=\"MuiInputBase-input MuiInput-input MuiInputBase-inputAdornedStart\" />\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"row\">\r\n                                            <div className=\"col-xl-12\">\r\n                                                <div className=\"MuiFormControl-root MuiTextField-root\">\r\n                                                    <div className=\"MuiInputBase-root MuiInput-root MuiInputBaseControl MuiInputControl MuiInputBase-multiline MuiInput-multiline\">\r\n                                                        <label className=\"MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required\" data-shrink=\"true\" htmlFor=\"poc-name\" id=\"poc-name-label\">\r\n                                                            Comments<small>Optional</small>\r\n                                                        </label>\r\n                                                        <textarea aria-invalid=\"false\" id=\"poc-name\" rows=\"6\" className=\"MuiInputBase-input MuiInput-input MuiInputBase-inputMultiline MuiInput-inputMultiline\"></textarea>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </form>\r\n                                    <div className=\"form-footer\">\r\n                                        <button className=\"MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary\" tabindex=\"0\" type=\"button\"><span className=\"MuiButton-label\">Save</span>\r\n                                            <span className=\"MuiTouchRipple-root\"></span>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"col-xl-4\">\r\n                                <div className=\"section-heading\">Activity History</div>\r\n                                <div className=\"tile-section activity-history tile-height tile-footer-scroll\">\r\n                                    <div className=\"tile-title comment-title\">Comment / User</div>\r\n                                    <ul className=\"circle-line-list scroll-list\" tabindex=\"0\">\r\n                                        {this.state.activities.length > 0 ?\r\n\r\n                                            this.state.activities.filter(Boolean).map((x) => (\r\n                                                <li key={x.id}>\r\n                                                    <div className=\"circle-icon\"></div>\r\n                                                    <div className=\"comment\">{this.getActivityActionById(x.action)}</div>\r\n                                                    <div className=\"comment-user-time\">\r\n                                                        <div className=\"comment-user\"><strong>{x.userName}</strong></div>\r\n                                                        <div className=\"comment-time\">{DateTime.getDateEt(x.activityTime)} {DateTime.getTimeHhMmWithTimeZoneEt(x.activityTime)}</div>\r\n                                                    </div>\r\n                                                </li>\r\n                                            )) : (<div>No activity found</div>)\r\n                                        }\r\n                                    </ul>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                }\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Proposal;\r\n\r\n","import React, { Component } from \"react\";\r\n//import { EditSolicitationHeader } from './EditSolicitationHeader';\r\nimport { EditSolicitationSideBar } from './EditSolicitationSideBar';\r\nimport { SolicitationForm } from './SolicitationForm';\r\nimport Footer from \"../Footer\";\r\nimport solicitationService from \"../../services/solicitationService\";\r\nimport Proposal from './Proposal';\r\n\r\nexport class Solicitation extends Component {\r\n\r\n    constructor() {\r\n        super();\r\n        this.state = {\r\n            headerInfo: {},\r\n            solDetails: {},\r\n            isEdit: false,\r\n            showProposal: false,\r\n            solicitationData: {},\r\n            reviewingProposalId: 0\r\n        };\r\n\r\n        this.onDataLoaded = this.onDataLoaded.bind(this);\r\n    }\r\n\r\n    async componentDidMount() {\r\n        //await this.fetchSolicitationData();\r\n\r\n    }\r\n\r\n    \r\n    async fetchSolicitationData() {\r\n        const solId = this.props.match.params.id;\r\n        if (solId && solId.toLowerCase() != 'new') {\r\n            solicitationService.getSolicitation(solId)\r\n                .then((response) => {\r\n                    this.setState({\r\n                        solDetails: response.data,\r\n                        headerInfo: response.data.solSolicitationPageHeader,\r\n                        sidebarInfo: response.data.sideProposalPagePanel,\r\n                        isEdit: true,\r\n                        showProposal: false\r\n                    });\r\n                    //console.log('response', response);\r\n                })\r\n                .catch((error) => {\r\n                    //console.error(error);\r\n                    this.setState({ redirect: true });\r\n                });\r\n        }\r\n\r\n    }\r\n    showProposalPage = (proposalId)=> {\r\n        this.setState({ showProposal: true, reviewingProposalId: proposalId });\r\n    }\r\n    onEditSolInfoClick = () => {\r\n        this.setStateOnHeaderBtnClick('solicitationDetails');\r\n    }\r\n    onManageStaffUsersAccessClick =() => {\r\n        this.setStateOnHeaderBtnClick('manageStaff');\r\n    }\r\n    setStateOnHeaderBtnClick(defaultTab) {\r\n        this.setState({ showProposal: false, reviewingProposalId: 0, defaultTabOnSolForm: defaultTab });\r\n    }\r\n    onDataLoaded(solicitation) {\r\n        //console.log(\"Solicitation Data From Child Component:\", solicitation);\r\n        this.setState({\r\n            solDetails: solicitation,\r\n            headerInfo: solicitation.solSolicitationPageHeader,\r\n            sidebarInfo: solicitation.sideProposalPagePanel,\r\n            isEdit: true,\r\n            showProposal: false\r\n        })\r\n    }\r\n    render() {\r\n        return (\r\n            <div>\r\n                <div className=\"overshadow\"></div>\r\n                {\r\n                    //this.state.isEdit ? <EditSolicitationHeader headerInfo={this.state.headerInfo} solDetails={this.state.solDetails} onEditSolInfoClick={this.onEditSolInfoClick} onManageStaffUsersAccessClick={this.onManageStaffUsersAccessClick}/> : \"\"\r\n\r\n                }\r\n                <div id=\"content\" className=\"content\">\r\n                    {this.state.isEdit ? <EditSolicitationSideBar panelInfo={this.state.sidebarInfo} showProposal={this.showProposalPage} reviewingProposalId={this.state.reviewingProposalId}/> : \"\"}\r\n                    {(!this.state.showProposal) ? <SolicitationForm onDataLoaded={this.onDataLoaded} {...this.props} defaultTabOnSolForm={this.state.defaultTabOnSolForm} /> : \"\"}\r\n                    {this.state.isEdit && this.state.showProposal ? <Proposal proposalId={this.state.reviewingProposalId}/> : \"\"}\r\n                </div>\r\n                <Footer />\r\n            </div>\r\n\r\n        );\r\n    }\r\n\r\n}","import React, { Component } from \"react\";\r\nimport Modal from 'react-modal';\r\nimport { LayoutSecure } from \"./LayoutSecure\";\r\n\r\nconst customStyles = {\r\n    position: 'relative',\r\n    top: '10px',\r\n    left: '200px',\r\n    content: {\r\n        top: '50%',\r\n        left: '50%',\r\n        right: 'auto',\r\n        bottom: 'auto',\r\n        marginRight: '-50%',\r\n        transform: 'translate(-50%, -50%)'\r\n    }\r\n};\r\n\r\nModal.setAppElement('#root');\r\n\r\nexport class StaffManagement extends Component {\r\n    static displayName = LayoutSecure.name;\r\n\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = { showModal: false };\r\n    }\r\n\r\n    subtitle;\r\n\r\n    openModal = () => this.setState({showModal: true});\r\n\r\n    afterOpenModal = () => { this.subtitle.style.color = '#f00' };\r\n\r\n    closeModal = () => this.setState({ showModal: false });\r\n\r\n    render() {\r\n        //const [modalIsOpen, setIsOpen] = React.useState(false);\r\n        return (\r\n            <div id=\"test\" style={customStyles} >\r\n                <button onClick={this.openModal}>Add User</button> \r\n                <Modal\r\n                    isOpen={this.state.showModal}\r\n                    onAfterOpen={this.afterOpenModal}\r\n                    onRequestClose={this.closeModal}\r\n                    style={customStyles}\r\n                    contentLabel=\"Example Modal\"\r\n                >\r\n                    <h2 ref={_subtitle => (this.subtitle = _subtitle)}>Hello</h2>\r\n                    <button onClick={this.closeModal}>close</button>\r\n                    <div>I am a modal</div>\r\n                    <form>\r\n                        <input />\r\n                        <button>tab navigation</button>\r\n                        <button>stays</button>\r\n                        <button>inside</button>\r\n                        <button>the modal</button>\r\n                    </form>\r\n                </Modal>\r\n            </div>\r\n        );\r\n    }\r\n}","//function init() {}\r\n\r\n//function log(error) {\r\n//  console.log(error);\r\n//}\r\n\r\n//export default {\r\n//  init,\r\n//  log,\r\n//};\r\n\r\n//import { useLocation } from 'react-router-dom';\r\n\r\n\r\n//export default (thisProps) => {\r\n//    const location = thisProps.location; //useLocation();\r\n//    const path = location != null ? location.pathname : \"\";\r\n//    const store = window.localStorage;\r\n//    let url = '/';\r\n//    let prevUrl = '/';\r\n\r\n//    url = store.getItem('url');\r\n//    store.setItem('prevUrl', url);\r\n//    store.setItem('url', path);\r\n\r\n//    url = store.getItem('url');\r\n//    prevUrl = store.getItem('prevUrl');\r\n\r\n//    return { url, prevUrl };\r\n\r\n//}\r\n\r\nconst sendLoginRequest = (otpSettings, localTestSettings) => {\r\n    \r\n    //console.log(localTestSettings.IsLocalTest)\r\n\r\n    if (localTestSettings.IsLocalTest === 'true') {\r\n        window.location = '/otpLogin';\r\n    }\r\n    else {\r\n        var otpSite = otpSettings.OtpSiteUrl;\r\n        var endPoint = \"/connect/authorize\";\r\n        var clientId = otpSettings.OtpClientId;\r\n        var responseType = encodeURIComponent(\"id_token token\");\r\n        var scope = encodeURIComponent(\"openid otp.user.profile\");\r\n        var returnBaseUrl = encodeURIComponent(otpSettings.ApplicationSiteUrl);\r\n        var redirectUrl = encodeURIComponent(\"/otpLogin\");\r\n        var state = 1;\r\n        var nonce = 1;\r\n        var responseMode = \"fragment\";\r\n\r\n        var resultUrl = otpSite + endPoint + \"?client_id=\" + clientId + \"&response_type=\" + responseType\r\n            + \"&scope=\" + scope + \"&redirect_uri=\" + returnBaseUrl + redirectUrl + \"&state=\" + state\r\n            + \"&nonce=\" + nonce + \"&response_mode=\" + responseMode;\r\n\r\n        window.location.href = resultUrl;\r\n    }  \r\n};\r\n\r\nconst getHashFromUrl = str => {\r\n    const query = str.substr(1);\r\n    const result = {};\r\n\r\n    query.split('&').forEach(function (part) {\r\n        const item = part.split('=');\r\n        result[item[0]] = decodeURIComponent(item[1]);\r\n    });\r\n\r\n    return result;\r\n};\r\n\r\nexport default {\r\n    sendLoginRequest: sendLoginRequest,\r\n    getHashFromUrl: getHashFromUrl\r\n}","import React, { Component } from \"react\";\r\nimport auth from \"../services/authService\";\r\nimport ErrorRedirect from \"./common/ErrorRedirect\";\r\nimport UrlService from \"../services/urlService\"\r\nimport ecpsExtTokenCreation_Key from \"../config.json\";\r\n\r\nclass OtpLogin extends Component {\r\n    state = {\r\n           authenticated: 0,\r\n           errors: {}\r\n    };\r\n\r\n    componentDidMount() {\r\n        const hash = UrlService.getHashFromUrl(this.props.location.hash);\r\n        //console.log(hash);\r\n        const body = { accTk: hash.access_token, idToken: hash.id_token, reserved: this.props.match.params.str };\r\n\r\n        auth.login(body)\r\n            .then((response) => {\r\n                //console.log(response);\r\n                let newDate = new Date();\r\n                let date = newDate.getTime();\r\n                //console.log(\"creation date \" + date);\r\n                localStorage.setItem(ecpsExtTokenCreation_Key, JSON.stringify(date));\r\n                this.setState({ authenticated: 1 });\r\n            })\r\n            .catch((ex) => {\r\n                if (ex.response && ex.response.status) {\r\n                    this.setState({ status: ex.response.status });\r\n                }\r\n                this.setState({ authenticated: -1 });\r\n            })\r\n    }\r\n\r\n \r\n    render() {\r\n\r\n        if (this.state.authenticated === 1) {\r\n            setTimeout(() => window.location = \"/\", 1000);\r\n            return (<></>);\r\n        }            \r\n        else if (this.state.authenticated === 0)\r\n            return (\r\n                <React.Fragment>\r\n                    <div className=\"content\" style={{ padding: \"10px\", backgroundColor: \"#fff\", width: \"100%\" }}> Authenticating ... </div>\r\n                </React.Fragment>\r\n            )\r\n        else //-1\r\n            ErrorRedirect(this.state.status);\r\n    }\r\n}\r\n\r\nexport default OtpLogin;\r\n","import React from \"react\";\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function ErrorRedirect(statusCode) {\r\n    if (statusCode === 401)\r\n        window.location = \"/AuthenticationFail\";\r\n    else if (statusCode === 403)\r\n        window.location = \"/appAccessDenied\";\r\n    else if (statusCode === 423)\r\n        window.location = \"/accountLocked\";\r\n    else //To be continue\r\n        window.location = \"/error500\";\r\n};\r\n\r\n\r\n\r\n\r\n","import https from \"./httpService\";\r\n\r\nexport async function getSubmissionHistoryData() {\r\n    return https.get(\r\n        \"api/submission/MySubmissions/\"\r\n    );\r\n}\r\n\r\n\r\nexport default {\r\n    getSubmissionHistoryData: getSubmissionHistoryData\r\n    \r\n}; ","import React, { Component } from \"react\";\r\n\r\n\r\nexport class SubmissionHistoryFilter extends Component {\r\n  constructor(props) {\r\n      return super();\r\n  }\r\n\r\n  render() {\r\n    let setFilter = (filterName) => {\r\n        if (this.props.activeFilter === filterName) {\r\n          if (filterName !== 'All') {\r\n            this.props.filter('All', true);\r\n            this.props.setActiveFilter('All');\r\n          }\r\n        } else {\r\n            this.props.filter(filterName, true);\r\n            this.props.setActiveFilter(filterName);\r\n        }\r\n    };\r\n\r\n    var content = (\r\n        <div className=\"solicitation-actions\">\r\n            <div className=\"solicitation-filter-btns\">\r\n                <button className=\"btn\" onClick={() => { setFilter('All') }}>\r\n                    <span>{this.props.solicitationsSubmittedTo.solicitationsSubmitted}</span>\r\n                    <span>Solicitations Submitted To</span>\r\n                </button>\r\n                {/*<button className={`btn ${this.props.activeFilter === 'All' ? 'active' : ''}`} onClick={() => { setFilter('All') }}>\r\n                    <span>{this.props.solicitationsSubmittedTo.solicitationsSubmitted}</span>\r\n                    <span>Solicitations Submitted To</span>\r\n                </button>*/}\r\n                <button className={`btn ${this.props.activeFilter === 'OpenSolicitations' ? 'active' : ''}`} onClick={() => { setFilter('OpenSolicitations') }}>\r\n                    <span>{this.props.solicitationsSubmittedTo.openSolicitationCount}</span>\r\n                    <span>Open Solicitations</span>\r\n                </button>\r\n                <button className={`btn ${this.props.activeFilter === 'Proposals' ? 'active' : ''}`} onClick={() => { setFilter('Proposals') }}>\r\n                    <span>{this.props.solicitationsSubmittedTo.submittedProposals}</span>\r\n                    <span>Submitted Proposals</span>\r\n                </button>\r\n            </div>\r\n            <span>Select to filter solicitations below</span>\r\n        </div>\r\n    );\r\n\r\n    return (\r\n      /*this.props.solPageModel ?*/ content /*: ''*/\r\n    );\r\n  }\r\n}\r\n\r\nexport default SubmissionHistoryFilter;\r\n","import React, { Component } from \"react\";\r\n\r\n\r\nimport * as constants from \"../common/constants\";\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Link } from \"react-router-dom\";\r\n\r\n\r\nexport class ProposalSubmissionHistory extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            expanded: false\r\n        };\r\n\r\n        this.handleChange = this.handleChange.bind(this);\r\n        this.handleRevise = this.handleRevise.bind(this);\r\n    }\r\n\r\n    handleChange = () => {\r\n        this.setState({ expanded: !this.state.expanded });\r\n    }\r\n\r\n    handleRevise = () => {\r\n        //console.log(\"handle revise\");\r\n    }\r\n\r\n\r\n    render() { \r\n        \r\n        const proposal = this.props.proposal;\r\n\r\n        var content = (\r\n            <div className=\"secondary-accordion\">\r\n                <Accordion expanded={this.state.expanded} onChange={this.handleChange}>\r\n                    <AccordionSummary\r\n                        // expandIcon={<ExpandMoreIcon />}\r\r\n\r\n\r\n                        aria-controls={`panel-${proposal.proposalId}-content`}\r\n                        id={`panel-${proposal.proposalId}-header`}\r\n                    >\r\n                        <div className=\"accordion-inner-header\">\r\n                            <div className=\"inner-title\">{this.props.proposal.proposalName}</div>\r\n                            <div className=\"inner-secondary\">\r\n                                <div className=\"submit-date past-date\">\r\n                                    <div className=\"submit-text\">Submitted on <span className=\"submit-time\">{this.props.proposal.proposalCreateDateString}<small>{this.props.proposal.proposalCreateTimeString}</small></span></div>\r\n                                </div>\r\n                                {this.props.isActive &&\r\n                                <div className=\"control-posit\">\r\n                                    <div className=\"button-container\">\r\n                                        {/*<Link to={`/reviseProposal/${proposal.proposalId}`}>*/}\r\n                                        {/*    <button className=\"MuiButtonBase-root MuiButton-root med-btn-primary\" aria-label={`button-to-${proposal.proposalId}`} tabIndex=\"0\" onClick={this.handleRevise} type=\"button\" style={{visibility:\"hidden\"}}>*/}\r\n                                        {/*        <span className=\"MuiButton-label\">*/}\r\n                                        {/*            Revise*/}\r\n                                        {/*        </span>*/}\r\n                                        {/*        <span className=\"MuiTouchRipple-root\"></span>*/}\r\n                                        {/*    </button>*/}\r\n                                        {/*</Link>*/}\r\n                                    </div>\r\n                                </div>\r\n                                }\r\n                                <div className=\"inner-accordion-arrow accordion-trigger\" type=\"button\" data-toggle=\"collapse\" data-target={`question-secondary-${proposal.proposalId}-accordion`}><img src=\"./images/icon-arrow-right-mdgray.svg\" alt=\"arrow-down\"/></div>\r\n                            </div>\r\n                        </div>\r\n\r\n\r\n                    </AccordionSummary>\r\n                    <AccordionDetails>\r\n                        <div className=\"collapse show expanded-inner\">\r\n                            {!this.props.isRd &&\r\n                              <div className=\"row\">\r\n                                <div className=\"col-lg-4\">\r\n                                    <ul className=\"chevron-list\">\r\n                                        {\r\n                                            this.props.proposal.files.filter((file, i) => i % 3 === 0).map((file) => (\r\n                                                <li key={file.id } className=\"business-doc\">\r\n                                                    <div className=\"outer-link\">\r\n                                                        <div className=\"document-details\">\r\n                                                            <div className=\"document-name\">Business Document</div>\r\n                                                            <div className=\"document-file\">{ file.fileName }</div>\r\n                                                        </div>\r\n                                                        <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                    </div>\r\n                                                </li>\r\n                                            ))  \r\n                                         }\r\n                                    </ul>\r\n                                </div>\r\n\r\n                                <div className=\"col-lg-4\">\r\n                                    <ul className=\"chevron-list\">\r\n                                        {\r\n                                            this.props.proposal.files.filter((file, i) => i % 3 === 1).map((file) => (\r\n                                                <li key={file.id} className=\"business-doc\">\r\n                                                    <div className=\"outer-link\">\r\n                                                        <div className=\"document-details\">\r\n                                                            <div className=\"document-name\">Business Document</div>\r\n                                                            <div className=\"document-file\">{file.fileName}</div>\r\n                                                        </div>\r\n                                                        <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                    </div>\r\n                                                </li>\r\n                                            ))\r\n                                        }\r\n                                    </ul>\r\n                                </div>\r\n\r\n                                <div className=\"col-lg-4\">\r\n                                    <ul className=\"chevron-list\">\r\n                                        {\r\n                                            this.props.proposal.files.filter((file, i) => i % 3 === 2).map((file) => (\r\n                                                <li key={file.id} className=\"business-doc\">\r\n                                                    <div className=\"outer-link\">\r\n                                                        <div className=\"document-details\">\r\n                                                            <div className=\"document-name\">Business Document</div>\r\n                                                            <div className=\"document-file\">{file.fileName}</div>\r\n                                                        </div>\r\n                                                        <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                    </div>\r\n                                                </li>\r\n                                            ))\r\n                                        }\r\n                                    </ul>\r\n                                </div>\r\n                                    \r\n                              </div>\r\n                            }\r\n                            {this.props.isRd && (\r\n                                <div className=\"row\">\r\n                                    <div className=\"col-lg-4\">\r\n                                        <ul className=\"chevron-list\">\r\n                                            {\r\n                                                this.props.proposal.files.filter((file, i) => file.type === constants.TechPdf).map((file) => (\r\n                                                    <li key={file.id} className=\"technical-doc\">\r\n                                                        <div className=\"outer-link\">\r\n                                                            <div className=\"document-details\">\r\n                                                                <div className=\"document-name\">Technical PDF</div>\r\n                                                                <div className=\"document-file\">{file.fileName}</div>\r\n                                                            </div>\r\n                                                            <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                        </div>\r\n                                                    </li>\r\n                                                ))\r\n                                            }\r\n                                            \r\n                                        </ul>\r\n                                    </div>\r\n                                    <div className=\"col-lg-4\">\r\n                                        <ul className=\"chevron-list\">\r\n                                            {\r\n                                                this.props.proposal.files.filter((file, i) => file.type === constants.BusinessPdf || file.type === constants.BusinessExcel ).map((file) => (\r\n                                                    <li key={file.id} className=\"business-excel-doc\">\r\n                                                        <div className=\"outer-link\">\r\n                                                            <div className=\"document-details\">\r\n                                                                <div className=\"document-name\">{file.type === constants.BusinessPdf ? \"Business PDF\" : \"Business Excel\" }</div>\r\n                                                                <div className=\"document-file\">{file.fileName}</div>\r\n                                                            </div>\r\n                                                            <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                        </div>\r\n                                                    </li>\r\n                                                ))\r\n                                            }\r\n                                        </ul>\r\n                                    </div>\r\n                                    <div className=\"col-lg-4\">\r\n                                        <ul className=\"chevron-list\">\r\n                                            {\r\n                                                this.props.proposal.files.filter((file, i) => file.type === constants.HumanPdf).map((file) => (\r\n                                                    <li key={file.id} className=\"misc-doc\">\r\n                                                        <div className=\"outer-link\">\r\n                                                            <div className=\"document-details\">\r\n                                                                <div className=\"document-name\">PHS Human Subjects and Clinical Trials PDF</div>\r\n                                                                <div className=\"document-file\">{file.fileName}</div>\r\n                                                            </div>\r\n                                                            <div className=\"chevron-right\"><div className=\"arrow-right\"></div></div>\r\n                                                        </div>\r\n                                                    </li>\r\n                                                ))\r\n                                            }\r\n                                        </ul>\r\n                                    </div>\r\n                                </div>\r\n                            )}\r\n\r\n                        </div>\r\n                    </AccordionDetails>\r\n                </Accordion>\r\n                <div className=\"control-posit visible\">\r\n                    <div className=\"button-container\">\r\n                        {this.props.isActive &&  \r\n                            <Link to={`/reviseProposal/${proposal.proposalId}`}>\r\n                                <button className=\"MuiButtonBase-root MuiButton-root med-btn-primary\" aria-label={`button-to-${proposal.proposalId}`} tabIndex=\"0\" onClick={this.handleRevise} type=\"button\">\r\n                                    <span className=\"MuiButton-label\">\r\n                                        Revise\r\n                                    </span>\r\n                                    <span className=\"MuiTouchRipple-root\"></span>\r\n                                </button>\r\n                            </Link>\r\n                        }\r\n                     </div>\r\n\r\n                </div>\r\n            </div>\r\n        );\r\n\r\n        return (content);\r\n    }\r\n}\r\n\r\nexport default ProposalSubmissionHistory;","import React, { Component } from \"react\";\r\n\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport moment from 'moment-timezone';\r\nimport { Link } from \"react-router-dom\";\r\n\r\n\r\nimport ProposalSubmissionHistory from './ProposalSubmissionHistory';\r\nimport SolicitationType from \"../../enums/SolicitationType\";\r\n\r\nexport class SolicitationSubmissionHistory extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            expanded: false,\r\n            isActive:false\r\n        };\r\n\r\n        this.handleChange = this.handleChange.bind(this);\r\n    }\r\n\r\n    handleChange = () => {\r\n        this.setState({ expanded: !this.state.expanded });\r\n    }\r\n\r\n    async componentWillMount() {\r\n        const currentTime = moment().tz(\"America/New_York\").format();\r\n        //console.log(\"current time\", currentTime);\r\n\r\n        if (this.props.solicitation.solicitationTypeId === SolicitationType.ARPA) {\r\n            if (currentTime < this.props.solicitation.solicitationProposals[0]?.proposal?.specialInvite?.responseDeadline) {\r\n                this.setState({ isActive: true });\r\n            }\r\n        }\r\n        else {\r\n            if (currentTime < this.props.solicitation.solicitationResponseDeadline) {\r\n                this.setState({ isActive: true });\r\n            }\r\n        }\r\n        \r\n\r\n        //console.log(\"solicitation- data\", this.props.solicitation);\r\n    }\r\n\r\n    render() {\r\n        const sol = this.props.solicitation;\r\n\r\n        const specialInviteId = sol?.solicitationProposals[0]?.proposal?.specialInviteId;\r\n\r\n        //const isBaseSol = (sol?.isBaseSolicitation == null || sol?.isBaseSolicitation === true);\r\n        const isBaseSol = (sol?.solicitationTypeId === SolicitationType.Base);\r\n        //const isTaskOrderSol = !isBaseSol;\r\n        var content = (\r\n            <div className=\"accordion top-level-accordion\">\r\n                <Accordion expanded={this.state.expanded} onChange={this.handleChange}>\r\n                    <AccordionSummary\r\n                        // expandIcon={<ExpandMoreIcon />}\r\n\r\n\r\n\r\n                        aria-controls={`panel-${sol.solicitationID}-content`}\r\n                        id={sol.solicitationID}\r\n                    >\r\n                        {/* <Typography className=\"accordion top-level-accordion\"></Typography> */}\r\n                            <div className=\"card\">\r\n                                <div className=\"card-header\">\r\n                                    <div className=\"card-header-top\">\r\n                                        <div className=\"card-header-title\">{sol.solicitationTitle}</div>\r\n                                    \r\n                                    {/*new/alternate proposal*/}\r\n                                    </div>\r\n\r\n                                {sol.solicitationProposals[0].proposal.specialInvite?.baseProposal != null &&\r\n                                    <div style={{ position: \"absolute\", top: \"48px\", opacity: \"0.8\" }}>\r\n                                        <span style={{fontWeight: \"bold\", paddingRight: \"15px\"}}>Abtract Title</span>\r\n                                        {sol.solicitationProposals[0].proposal.specialInvite?.baseProposal?.proposalName}\r\n                                    </div>\r\n                                }\r\n                                \r\n\r\n                                    <div className=\"white-accordion-table\">\r\n                                    <div className=\"column-block\">\r\n                                        {/*link to prop*/}\r\n                                            \r\n                                        </div>\r\n                                        <div className=\"column-block\">\r\n                                            <div className=\"column-label\">Closing Date</div>\r\n\r\n                                        {sol.solicitationTypeId !== SolicitationType.ARPA &&\r\n                                            <div className=\"column-data\">{sol.responseDeadlineDateString}<small>{sol.responseDeadlineTimeString}</small></div>\r\n                                        }\r\n\r\n                                        {sol.solicitationTypeId === SolicitationType.ARPA && sol.solicitationProposals[0]?.proposal?.specialInvite?.responseDeadlineDateString != null &&\r\n                                            <div className=\"column-data\">{sol.solicitationProposals[0].proposal.specialInvite.responseDeadlineDateString}\r\n                                                <small>{sol.solicitationProposals[0].proposal.specialInvite.responseDeadlineTimeString}</small></div>\r\n                                        }\r\n                                            \r\n                                        </div>\r\n                                        <div className=\"column-block\">\r\n                                            <div className=\"column-label\">Notice Type</div>\r\n                                        <div className=\"column-data\">{sol.noticeType}</div>\r\n                                        </div>\r\n                                        <div className=\"column-block\">\r\n                                            <div className=\"column-label\">Agency</div>\r\n                                        <div className=\"column-data\">{sol.solicitationTargetIC}</div>\r\n                                        </div>\r\n                                        <div className=\"column-block\">\r\n                                            <div className=\"column-label\">Contract Specialist</div>\r\n                                        <div className=\"column-data\">{sol.primaryCs}</div>\r\n                                        </div>\r\n                                    <div className=\"column-block\">\r\n                                        {this.state.expanded &&\r\n                                            <div className=\"column-link accordion-arrow accordion-trigger open\" type=\"button\" data-toggle=\"collapse\" data-target={`#question-${sol.solicitationID}`} aria-controls={`question-${sol.solicitationID}`}>\r\n                                                                        Hide Proposal Details<img src=\"./images/icon-arrow-right-blue.svg\" alt=\"hide-proposal-details\" />\r\n                                                                </div>\r\n                                        }\r\n                                        {!this.state.expanded &&\r\n                                            <div className=\"column-link accordion-arrow accordion-trigger closed\" type=\"button\" data-toggle=\"collapse\" data-target={`#question-${sol.solicitationID}`} aria-controls={`question-${sol.solicitationID}`}>\r\n                                                View Proposal Details<img src=\"./images/icon-arrow-up-blue.svg\" alt=\"view-proposal-details\" />\r\n                                            </div>\r\n                                        }\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        \r\n                        \r\n                    </AccordionSummary>\r\n                    <AccordionDetails>\r\n                        <div className=\"collapse show inner-accordion\" id={`question-${sol.solicitationID}`} data-parent={`#question-${sol.solicitationID}-accordion`}>\r\n                            {\r\n                                sol.solicitationProposals.map((item) => (\r\n                                    <ProposalSubmissionHistory key={item.id} proposal={item.proposal} isRd={sol.solicitationIsRD} isActive={this.state.isActive} />\r\n                                ))\r\n                            }\r\n                        </div>\r\n                    </AccordionDetails>\r\n                </Accordion>\r\n\r\n                {this.state.isActive && specialInviteId == null &&\r\n                    <Link to={`/submitProposal/${sol.solicitationID}`}>\r\n                        <button className=\"MuiButtonBase-root MuiButton-root new-alternate-btn submission-history-button\" tabIndex=\"0\" title={`new/alternate proposal for ${sol.solicitationID}`} >\r\n                            <span className=\"MuiButton-label\">\r\n                                New/Alternate Proposal\r\n                                                 </span>\r\n                            <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>\r\n                    </Link>\r\n                }\r\n\r\n                {this.state.isActive && specialInviteId > 0 &&\r\n                    <Link to={`/submitSpecialProposal/${sol.solicitationID}/${specialInviteId}`}>\r\n                        <button className=\"MuiButtonBase-root MuiButton-root new-alternate-btn submission-history-button\" tabIndex=\"0\" title={`new/alternate proposal for ${sol.solicitationID}`} >\r\n                            <span className=\"MuiButton-label\">\r\n                                New/Alternate Proposal\r\n                                                 </span>\r\n                            <span className=\"MuiTouchRipple-root\"></span>\r\n                        </button>\r\n                    </Link>\r\n                }\r\n\r\n                { isBaseSol && this.props.solicitation.samUrl.endsWith(\"view\")\r\n                    ? (<div className=\"submission-history-link\">\r\n                        <div className=\"column-link\">\r\n                        <a href={this.props.solicitation.samUrl} target=\"_blank\">{sol.solicitationNumber}<img src=\"./images/exitlink.svg\" alt=\"exit-link\" /></a>\r\n                        </div>\r\n                    </div>) : (<div className=\"submission-history-link\">\r\n                        <div className=\"column-data\">{sol.solicitationNumber}</div>\r\n                    </div>)\r\n                }\r\n\r\n            </div>\r\n        );\r\n\r\n        return (content);\r\n    }\r\n}\r\n\r\nexport default SolicitationSubmissionHistory;","import React, { Component } from 'react';\r\nimport { toast } from \"react-toastify\";\r\nimport Footer from \"../Footer\";\r\n// import '../siteStyles.css';\r\n\r\nimport moment from 'moment-timezone';\r\nimport submissionHistoryService from \"../../services/submissionHistoryService\";\r\nimport SubmissionHistoryFilter from './SubmissionHistoryFilter';\r\nimport SolicitationSubmissionHistory from './SolicitationSubmissionHistory';\r\n\r\nclass SubmissionHistory extends Component {\r\n    \r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            solSubmissions: {},\r\n            activeFilter: \"All\",\r\n            currentFilterModel: null,\r\n            loading: true,\r\n            pageError: false,\r\n            solicitationsFiltered: {}\r\n        };\r\n\r\n       \r\n        this.setActiveFilter = this.setActiveFilter.bind(this);\r\n        this.filter = this.filter.bind(this);\r\n        this.filterSolicitationSubmissions = this.filterSolicitationSubmissions.bind(this);\r\n        \r\n    }\r\n    filter = async (filter, isFilter) => {\r\n        this.setState({ loading: true, filter: filter });\r\n        this.filterSolicitationSubmissions(filter);\r\n    }\r\n    setActiveFilter = async (value) => {\r\n        let filterModel = null;\r\n        \r\n        switch (value) {\r\n            case 'OpenSolicitations':\r\n                filterModel = {\r\n                    'label': 'Open Solicitations',\r\n                    'key': 'openSolicitationCount'\r\n                };\r\n                break;\r\n            case 'Proposals':\r\n                filterModel = {\r\n                    'label': 'Proposals Received',\r\n                    'key': 'proposalCount'\r\n                };\r\n                break;\r\n            case 'All':\r\n                filterModel = {\r\n                    'label': 'Solicitations Submitted To',\r\n                    'key': 'all'\r\n                };\r\n                break;\r\n            default:\r\n                break;      \r\n        }\r\n        this.setState({ activeFilter: value, currentFilterModel: filterModel });\r\n    }\r\n\r\n    async filterSolicitationSubmissions(filter) {\r\n\r\n        //console.log(\"Populate Solicitations filter\", filter);\r\n        let solSubmissions = null;\r\n        let filteredSolicitations = null;\r\n         const currentTime = moment().tz(\"America/New_York\").format();\r\n        //const currentTime = 'date';\r\n        switch (filter) {\r\n        case 'OpenSolicitations':\r\n                solSubmissions = { ...this.state.solSubmissions };\r\n                filteredSolicitations = solSubmissions.solicitations.filter(sol => sol.solicitationResponseDeadline > currentTime );\r\n                solSubmissions.solicitations = filteredSolicitations;\r\n                this.setState({ solicitationsFiltered: solSubmissions.solicitations });\r\n                break;\r\n        case 'Proposals':\r\n                this.setState({ solicitationsFiltered: this.state.solSubmissions.solicitations  });\r\n                break;\r\n        case 'All':\r\n                this.setState({ solicitationsFiltered: this.state.solSubmissions.solicitations });\r\n                break;\r\n        default:\r\n                break;\r\n        }\r\n\r\n        this.setState({ loading: false});\r\n    }\r\n\r\n    async componentWillMount() {\r\n\r\n        try {\r\n            \r\n            const { data: solSubmissions } = await submissionHistoryService.getSubmissionHistoryData();\r\n            //console.log(\"received data\", solSubmissions);\r\n\r\n\r\n            setTimeout(() => {\r\n                    this.setState({\r\n                        solSubmissions,\r\n                        solicitationsFiltered: solSubmissions.solicitations,\r\n                        loading: false\r\n                    });\r\n                },\r\n                1);\r\n\r\n        } catch (ex) {\r\n            //console.log(ex.response);\r\n            this.setState({ pageError: true });\r\n            toast.error(\"Error fetching submission data\");\r\n            //setTimeout(() => window.location = \"/\", 3000);\r\n        }\r\n    }\r\n\r\n    render() { \r\n\r\n        if (this.state.pageError)\r\n            return null;\r\n\r\n        if (this.state.loading)\r\n            return <div className=\"loader\" style={{ position: \"fixed\", top: \"40%\", left: \"45%\" }}>Loading...</div>;\r\n\r\n        return ( \r\n            <React.Fragment>\r\n                <div className=\"content\">\r\n                    <div className=\"main-content\">\r\n                        <div className=\"solicitation-header-container solicitation-header-right\">\r\n                            <SubmissionHistoryFilter \r\n                                solicitationsSubmittedTo={this.state.solSubmissions}\r\n                                filter={this.filter}\r\n                                activeFilter={this.state.activeFilter} \r\n                                setActiveFilter={this.setActiveFilter}\r\n                            />\r\n                        </div>\r\n                        <div className=\"section-heading\">Submission History</div>\r\n\r\n                        \r\n                        <div className=\"white-accordions nested-accordions\">\r\n                        {this.state.solicitationsFiltered.map((sol) => (\r\n                                <SolicitationSubmissionHistory key={sol.solicitationID} solicitation={sol} />\r\n                                ))\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <Footer />\r\n        </React.Fragment> \r\n        );\r\n    }\r\n}\r\n \r\nexport default SubmissionHistory;","import React, { Component } from \"react\";\r\nimport { Route, Redirect, Switch } from \"react-router\";\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport AppAccessDenied from \"./components/Errors/AppAccessDenied\";\r\nimport AwafError from \"./components/Errors/AwafError\";\r\nimport Error from \"./components/Errors/Error\";\r\nimport DeadlineError from \"./components/Errors/DeadlineError\";\r\nimport Error404 from \"./components/Errors/Error404\";\r\nimport AuthenticationFail from \"./components/Errors/AuthenticationFail\";\r\nimport About from \"./components/About\";\r\nimport HowToSubmit from \"./components/HowToSubmit\";\r\nimport ContactUs from \"./components/ContactUs\";\r\nimport Faq from \"./components/Faq\";\r\nimport AccountLocked from \"./components/Errors/AccountLocked\";\r\nimport { Layout } from \"./components/Layout\";\r\nimport { LayoutSecure } from \"./components/secure/LayoutSecure\";\r\nimport { Home } from \"./components/Home\";\r\nimport { FetchData } from \"./components/FetchData\";\r\nimport { SubmitProposal } from \"./components/secure/SubmitProposal\";\r\nimport { SubmitSpecialProposal } from \"./components/secure/SubmitSpecialProposal\";\r\nimport { ReviseProposal } from \"./components/secure/ReviseProposal\";\r\nimport { Counter } from \"./components/Counter\";\r\nimport LoginForm from \"./components/LoginForm\";\r\nimport Logout from \"./components/Logout\";\r\nimport auth from \"./services/authService\";\r\n//import RefreshToken from \"./components/RefreshToken\";\r\nimport NotFound from \"./components/NotFound\";\r\nimport ProtectedRoute from \"./components/common/protectedRoute\";\r\nimport { MySolicitations } from \"./components/secure/MySolicitations\";\r\nimport { Solicitation } from \"./components/secure/Solicitation\";\r\nimport { StaffManagement } from \"./components/secure/StaffManagement\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport IcRoleService from \"./services/icRoleService\";\r\nimport \"./custom.css\";\r\n\r\nimport OtpLogin from \"./components/OtpLogin\"\r\nimport SubmissionHistory from \"./components/secure/SubmissionHistory\";\r\nimport { datadogRum } from '@datadog/browser-rum';\r\n\r\nimport analytics from \"./services/analytics\";\r\n\r\nvar domain = window.location.host.split(\".\")[0];\r\nvar env = 'local';\r\nvar rumStart = false;\r\nswitch (domain) {\r\n    case 'ecps-ext-dev':\r\n        env = 'dev';\r\n        break;\r\n    case 'ecps-ext-stg':\r\n        env = 'stage';\r\n        break;\r\n    case 'ecps-qa':\r\n        env = 'qa';\r\n        rumStart = true;\r\n        break;\r\n    case 'ecps':\r\n        env = 'production';\r\n        rumStart = true;\r\n        break;\r\n    default:\r\n        env = 'local';\r\n        break;\r\n}\r\n\r\nif (rumStart) {\r\n    datadogRum.startSessionReplayRecording();\r\n}\r\n\r\n\r\nexport default class App extends Component {\r\n    static displayName = App.name;\r\n    state = {};\r\n\r\n    async componentDidMount() {\r\n\r\n        if (rumStart) {\r\n            datadogRum.init({\r\n                    applicationId: '6e92494d-63d1-445f-aa17-8e962bfedcaa',\r\n                    clientToken: 'pub8434878429539a8172bc1559b2bd7e92',\r\n                    site: 'ddog-gov.com',\r\n                    service: 'eCPS.External.WebUI',\r\n                    project: 'eCPS',\r\n                    env: env,\r\n                    sampleRate: 100,\r\n                    premiumSampleRate: 100,\r\n                    trackInteractions: true,\r\n                    defaultPrivacyLevel: 'allow',\r\n\r\n                    beforeSend: (event, context) => {\r\n                        if (event.type === 'resource' && event.resource.type === 'xhr') {\r\n                            event.context = {\r\n                                ...event.context,\r\n                                responseHeaders: context.response?.headers ?? \"\",\r\n                                xhrresponse: context.xhr.response\r\n                            };\r\n                        }\r\n                    }\r\n                }\r\n            );\r\n\r\n            datadogRum.addRumGlobalContext(\r\n                \"domain\",\r\n                domain\r\n            );\r\n        }\r\n\r\n        const user = auth.getCurrentUser();\r\n        if (user) {\r\n            datadogRum.setUser({\r\n                id: user.appId,\r\n                name: user.firstName + \" \" + user.lastName,\r\n                email: user.email,\r\n                plan: 'premium'\r\n            });\r\n        }\r\n\r\n        analytics.initAnalytics();\r\n\r\n        this.setState({ user: user });\r\n    }\r\n\r\n\r\n    routes = function (user) {\r\n        return (\r\n            <React.Fragment>\r\n                <ToastContainer position=\"top-center\" autoClose={5000} />\r\n\r\n                <Layout /*user={user} icRoleSelector={this.icRoleSelector} defaultIcRole={this.state.selectedIcRole}*/ >\r\n                    <Switch>\r\n                        {/*<Route path=\"/counter\" component={Counter} />*/}\r\n                        {/*<ProtectedRoute path=\"/fetch-data\" component={FetchData} />*/}\r\n                        {/*<ProtectedRoute path=\"/solicitation/:id\" component={Solicitation} />*/}\r\n                        <ProtectedRoute path=\"/submitProposal/:id\" component={SubmitProposal} />\r\n                        <ProtectedRoute path=\"/submitSpecialProposal/:id/:specialInviteId\" component={SubmitSpecialProposal} />\r\n                        <ProtectedRoute path=\"/reviseProposal/:id\" component={ReviseProposal} />\r\n                        <ProtectedRoute path=\"/MySolicitations\" component={MySolicitations} />\r\n                        <ProtectedRoute path=\"/submissionHistory\" component={SubmissionHistory} />\r\n                        {/*<Route path=\"/refreshToken\" component={RefreshToken} /> */}\r\n                        <Route path=\"/home\" exact component={Home} />\r\n                        <Route path=\"/\" exact component={Home} />\r\n                        <Route path=\"/About\" component={About} />\r\n                        <Route path=\"/HowToSubmit\" component={HowToSubmit} />\r\n                        <Route path=\"/contactUs\" component={ContactUs} />\r\n                        <Route path=\"/Faq\" component={Faq} />\r\n                        \r\n                        {/*<Route path=\"/not-found\" component={NotFound}></Route>*/}\r\n                        <Route path=\"/otpLogin/:str\" component={OtpLogin}></Route>\r\n                        <Route path=\"/otpLogin\" component={OtpLogin}></Route>\r\n                        <Route path=\"/logout\" component={Logout} />\r\n                        <Route path=\"/accountLocked\" component={AccountLocked}></Route>\r\n                        <Route path=\"/appAccessDenied\" component={AppAccessDenied}></Route>\r\n                        <Route path=\"/error\" component={Error}></Route>\r\n                        <Route path=\"/deadlineerror\" component={DeadlineError}></Route>\r\n                        <Route path=\"/authenticationFail\" component={AuthenticationFail}></Route>\r\n                        <Route path=\"/AwafError/:id?\" component={AwafError}></Route>\r\n                        <Route component={Error404}></Route>\r\n                    </Switch>\r\n                </Layout>\r\n            </React.Fragment>\r\n        )\r\n    }\r\n\r\n   render() {\r\n      const { user } = this.state;\r\n      //console.log(user);\r\n      return (this.routes(user));\r\n   }\r\n}\r\n\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === 'localhost' ||\r\n  // [::1] is the IPv6 localhost address.\r\n  window.location.hostname === '[::1]' ||\r\n  // 127.0.0.1/8 is considered localhost for IPv4.\r\n  window.location.hostname.match(\r\n    /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n  )\r\n);\r\n\r\nexport default function register () {\r\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n      return;\r\n    }\r\n\r\n    window.addEventListener('load', () => {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n      if (isLocalhost) {\r\n        // This is running on localhost. Lets check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl);\r\n      } else {\r\n        // Is not local host. Just register service worker\r\n        registerValidSW(swUrl);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration => {\r\n      registration.onupdatefound = () => {\r\n        const installingWorker = registration.installing;\r\n        installingWorker.onstatechange = () => {\r\n          if (installingWorker.state === 'installed') {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the old content will have been purged and\r\n              // the fresh content will have been added to the cache.\r\n              // It's the perfect time to display a \"New content is\r\n              // available; please refresh.\" message in your web app.\r\n              console.log('New content is available; please refresh.');\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              console.log('Content is cached for offline use.');\r\n            }\r\n          }\r\n        };\r\n      };\r\n    })\r\n    .catch(error => {\r\n      //console.error('Error during service worker registration:', error);\r\n      console.error('Error during service worker registration.');\r\n    });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl)\r\n    .then(response => {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      if (\r\n        response.status === 404 ||\r\n        response.headers.get('content-type').indexOf('javascript') === -1\r\n      ) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration => {\r\n          registration.unregister().then(() => {\r\n            window.location.reload();\r\n          });\r\n        });\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl);\r\n      }\r\n    })\r\n    .catch(() => {\r\n      console.log('No internet connection found. App is running in offline mode.');\r\n    });\r\n}\r\n\r\nexport function unregister () {\r\n  if ('serviceWorker' in navigator) {\r\n    navigator.serviceWorker.ready.then(registration => {\r\n      registration.unregister();\r\n    });\r\n  }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport { unregister } from './registerServiceWorker';\r\n// import './scss/main.scss';\r\n\r\nexport * from \"./components/common/constants\";\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n  <BrowserRouter basename={baseUrl}>\r\n    <App />\r\n  </BrowserRouter>,\r\n  rootElement);\r\n\r\nunregister();\r\n"],"sourceRoot":""}