{"version":3,"sources":["Component/Images/DS2Logo.jpg","Component/Login/enabletotppopup.js","Component/Login/MfaSelectionPopup.js","Component/Login/login.js","Component/header.js","Component/emailpopup.js","Component/Browse/browseFolderImage.js","Expungement/AberdeenExpungement.js","Expungement/DemoExpungement.js","Expungement/EastamptonArrestExpungement.js","Component/expungementpopup.js","Component/Search/filePropertiesPopup.js","Component/Browse/appenPrependPdf.js","Component/Svg/allsvg.js","Component/Search/search.js","Component/Route/homePageRoute.js","Component/Route/authenticatedRoute.js","Component/Browse/gridViewFile.js","Component/Browse/addfolderpopup.js","Component/Browse/moveAndCopyFilesToFolderPopup.js","Component/Browse/moveCopyFileSvg.js","Component/Browse/uploadfilespopup.js","Component/Browse/browse.js","constants.js","Component/MyAccount/myaccount.js","Component/ManageUsers/createnewusersvg.js","Component/ManageUsers/createuserpopup.js","Component/ManageUsers/updateGroups.js","Component/ManageUsers/updateRepos.js","Component/enum.js","Component/ManageUsers/manageusers.js","Component/ManageRepository/managerepository.js","Component/ManageIndexTemplate/renderfieldpopup.js","Component/ManageIndexTemplate/manageindextemplate.js","Component/ResetPassword/resetpassword.js","Component/Ocr/ocrindextempates.js","Component/NoPermission.js","Component/Chat/chat.js","Component/Route/route.js","App.js","serviceWorker.js","index.js","libs/API.js","config.js","Component/Images/DocumentSync-Logo.png","Component/LoaderButton.js","Component/Images/FileProperties.svg","Component/Browse/upload.js"],"names":["module","exports","EnableTotpPopup","Component","constructor","props","super","enableTOTP","async","Auth","setupTOTP","this","state","user","then","code","QrCode","setState","showMfa","setupSMS","e","preventDefault","isLoading","phoneNumber","updateUserAttributes","phone_number","formatUSPhoneNumber","verifyCurrentUserAttribute","phoneNumberSubmitted","error","console","alert","message","verifySMSCode","verifyCurrentUserAttributeSubmit","verificationCode","updatedUser","currentAuthenticatedUser","bypassCache","log","attributes","phone_number_verified","setPreferredMFA","closePopup","handleHideEnableButton","popupOpen","unmountMe","handleMfaConfirmation","mfaType","verifyTotpToken","mfaToken","catch","showEnableTotpPopup","phone","formatted","trim","startsWith","slice","renderTOTPSetup","React","createElement","onSubmit","FormGroup","HelpBlock","QRCode","value","controlId","ControlLabel","FormControl","componentClass","onChange","target","type","autoComplete","required","Button","bsSize","bsClass","disabled","renderSMSSetup","placeholder","render","Fragment","Popup","contentStyle","width","borderRadius","padding","minWidth","open","modal","closeOnDocumentClick","onClose","className","onClick","MfaSelectionPopup","_ref","isOpen","onSelectMfaType","Login","username","password","ip","showNonMfa","showMfaSelection","selectedMfaType","MfaChallenge","_isMounted","handleChildUnmount","bind","login","authenticate","handleResponse","mfaConfirm","handleInputChange","handleMfaSelection","closeMfaSelection","GeolocationIp","getGeolocation","componentWillUnmount","safeSetState","newState","id","json","_userDetails$","signIn","challengeName","userDetails","getUserDetailsByEmail","clientId","fetchMfaRequirement","err","UserNotConfirmedException","PasswordResetRequiredException","NotAuthorizedException","UserNotFoundException","getRequireMfabyClientSql","setUserPermissions","auditDetails","emailAddress","ipAddress","eventLog","groups","includes","ipParams","userEmailAddress","ipAccess","checkIpAddress","status","signOut","saveAuditTrail","history","push","loggedUser","confirmSignIn","detailsError","CodeMismatchException","ExpiredCodeException","LimitExceededException","renderMFaCode","Link","to","src","DocumentSync","alt","LoaderButton","block","text","loadingText","renderEnableTotpPopup","renderMfaSelectionPopup","renderLoginWithOutMfa","Date","getFullYear","Header","clearTokens","hasAuthenticated","loggedInUser","hasManageMetadataTemplate","hasManageRepositories","hasEditIndex","hasManageRedaction","hasManageUsers","hasManageFiles","hasTextSearch","hasDelete","hasCliftonWorkflow","hasMedfordWorkflow","hasSendEmail","hasRestrictAccessByIP","hasFoveonicsAdmin","hasOcrRole","hasPIIRole","hasAberdeenWorkflow","hasGlenrockWorkflow","handleClick","userIpAddress","data","handleMenuClick","title","style","marginLeft","window","textAlign","float","marginTop","cursor","fontSize","color","EmailPopup","checkRedaction","redaction","fileIdArray","some","x","hasRedaction","handleEmailSubmit","emailParams","fileData","manageRedaction","selectedOption","isChecked","emailTo","emailInputField","ccs","cc","bccs","bcc","selectedDay","pageFrom","pageTo","selectedFilesSendEmail","handleRadioChange","showEmailPopup","rowStyle","marginBottom","Row","Col","sm","Radio","name","checked","key","BrowseFolderImage","xmlns","height","fillRule","viewBox","d","AberdeenExpungement","handleAberdeenArrestExpungementSubmit","jObject","Docket","Name","ExpDate","getFormattedDate","expDate","Case","caseNumber","CaseDate","caseDate","isArrestFiles","isArrestRecords","isNonArresetFiles","jArray","fileId","selectedRow","FileId","isAppendFile","isPrependExistingFile","fillAberdeenArrestExpungmentForm","closeParentPopup","cleanedTemplateName","templateName","replace","readOnly","Checkbox","DemoExpungement","handleDemoExpungementSubmit","jacketNumber","fillDemoExpungmentForm","EastamptonArrestExpungement","handleEastamptonArrestReportExpungementSubmit","fillEastamptonArrestReportExpungmentForm","ExpungementPopup","date","year","getUTCFullYear","month","getUTCMonth","toString","length","day","getUTCDate","handleExpungementSubmit","client","ID","Jacket","Comments","comments","fillCliftonExpungmentForm","fillMedfordExpungmentForm","handleExpungementJuvenileSubmit","fillCliftonJuvenileExpungmentForm","handleExpungementJuvenileFileReportsSubmit","Number","fillCliftonJuvenileFileReportsExpungmentForm","handleEnglewoodExpungementSubmit","fillEnglewoodExpungmentForm","handleComment","characterCount","handleGlenrockArrestExpungementSubmit","fillGlenrockArrestExpungmentForm","renderGlenrockArrestExpungement","selectedRows","showExpungementPopup","maxLength","FilePropertiesPopup","checkUserProfile","userProfile","userId","getUserProfile","fileSize","pageCount","fileDimensions","pageDimensions","textScore","templateColumns","templateColumnsToShow","handleRedactionChange","event","handlePageCountChange","handlefileSizeChange","handlefileDimensionsChange","handletextScoreChange","handleSaveUserProfile","checkboxDiv","document","getElementById","checkboxes","Array","from","querySelectorAll","TemplateColumnsToShow","forEach","checkbox","insertOrUpdateUserProfile","showFilePropertiesPopup","columns","map","item","index","InputName","defaultChecked","hasFileProperties","hasTextScore","AppendPrependPdf","handleChange","_showInsertForm","_pageCount","targetValue","showLoadingText","getPageCount","appendPrependValue","showInsertForm","ShowLoadingText","insertTextBox","showAppendPrependPopup","filePath","FileName","Upload","appendPrependFileId","insertPageAfter","totalPageCount","prependAppendCall","email","DownloadIndexSvg","DeleteFileSvg","EmailSvgImage","RenameFileSvg","RenameFileSaveSvg","RenameFileCancelSvg","ExpungementSvg","UploadSvgImage","DeleteFolderSvg","AddFolderSvg","SearchSvgImage","Search","gridSearchRef","onTemplateChange","options","tableName","selectedIndex","ReadOnly","loadSearchControls","setShowTextSearch","results","redactionColumn","searchTemplates","onLoadTemplates","templates","templateSelect","display","dispatchEvent","Event","bubbles","search","selectedTemplate","searchQueryString","Object","keys","join","searchTemplate","searchResults","searchResult","HasAnnotations","find","col","concat","DataType","DataTypeLength","filter","setGridFooterText","gridcolumns","mapColumnsToGrid","table","setColumns","showToolTip","boolFormatter","cell","getValue","renameFile","dateFormatter","dateString","getRow","getData","formatter","titleFormatter","titleFormatterParams","rowRange","download","headerSort","visible","cellClick","toggleSelect","field","editor","viewFile","c","i","tooltip","formatterParams","toLocaleString","handleSearchChange","_this$state$search","hideTooTip","hideParams","val","showParams","handleReset","allInputs","input","selectInput","handleBrowse","handleEmailPopup","rows","getSelectedData","fileIds","m","handleExpungementPopup","handleFilePropertiesPopup","handleRenameFile","setData","handleRenameFileCancel","cancelFile","getEditedCells","getOldValue","restoreOldValue","handleRenameFileSave","editedCells","mappedCells","currentValue","updateFileNameParams","newfileName","updateFileName","renameFilesParams","handleDownloadIndexCsv","downloadName","delimiter","handleUploadFiles","viewerOpen","showTextSearch","openViewer","closeViewer","loadTemplates","clientName","hasEnglewoodWorkflow","hasDemoExpungementWorkflow","hasEastamptonExpungementWorkflow","getSelectedTemplateId","filtered","template","templateId","selectedTemplateId","templateHasOcredFiles","getTemplates","displayName","getTemplate","pageNumber","rowCount","resultsCountSpan","resultsCount","innerText","pageSize","getPageSize","pageFirst","pageLast","Math","min","signInUserSession","refreshToken","token","fileName","targetOrigin","config","ImageViewer","getRefreshToken","editIndex","deletePages","textSearch","userEmailId","managePii","imageViewer","attachEvent","contentWindow","postMessage","JSON","stringify","onload","renderToolTipButton","maxHeight","FilePropertiesImage","hasDownloadIndex","renderSearchResults","ReactTabulator","ref","pagination","paginationSize","downloadReady","fileContents","blob","footerElement","pageLoaded","renderEmailPop","renderExpungementPopup","renderAppendPrependFilePopup","renderFilePropertiesPopup","FileProperties","column","ControlledList","sort","component","C","cProps","rest","Route","assign","AuthenticatedRoute","requiredPermission","Redirect","BrowseGridView","gridBrowseRef","handleFilePath","fileProperties","handleIndexTemplateColumns","onRef","AddFolderPopup","handleAddFolderSubmit","folderParams","nodeId","parentNodeId","folderName","addFolder","newLeaf","parentId","parseInt","label","items","showAddFolderPopup","MoveFilesToFolderPopup","getRoot","selectedNode","element","generatePath","nodeName","node","folderArray","onSelect","isdisable","mainFilePath","isCopy","isdisabled","GetInnerNodes","transformInnerChild","Promise","y","innerNodes","NodeId","FolderName","handleMoveOrCopyFiles","moveFileParameter","changeNodeIdTo","repoId","moveOrCopyFiles","newTabulatorRow","addNewTabulatorRow","handleRemoveFilesAfterMove","buttonText","parentNode","Data","rootNode","newData","showMoveFileToFolderPopup","getInnerNodes","DataTable","findIndex","jsonData","margin","Tree","nodes","size","theme","iconSet","BrowserImage","file","MoveCopyFileSvg","move","fill","UploadFilesPopup","handleUploadFilesSubmit","getTemplatesBasedOnRepositoryId","mainNode","indexTemplateData","showUploadFilesPopup","Browse","pushFiles","files","tabData","PageCount","FileSize","PageDimensions","FileExtension","eachObj","fileObject","checkUserProfileWithOutTemplate","getUserProfileWithOutTemplate","handleIndexTemplateChange","child","filePropertiesButton","getFileLIst","parse","newColumns","handleSearch","copyMoveSelectedNode","transformData","repos","repositoryId","handlePopup","addNewRow","fileList","unshift","getElementsByClassName","disableBrowseFolderClick","pointerEvents","enableBrowseFolderClick","deleteRow","addNewTreeFolder","treeData","getFileData","handleAddFolderPopup","handleMoveCopyFilePopup","currentTarget","handleDeleteFolderPopup","folderData","deleteFolder","filteredData","handleDeleteFile","Params","deleteFile","filteredList","deleteFilePopupOpen","openDeleteFolderPopup","openDeleteFilePopup","LoadRepository","getRepos","count","FilesTable","renderAddFolderPop","renderMoveFilesToFolderPopup","renderUploadFilesPop","renderDeleteFolderPopup","closeopup","renderDeleteFilePopup","disabledImage","Split","sizes","opacity","border","backgroundColor","flex","fontWeight","PASSWORD_MATCH_INVALID","MyAccount","handleSubmit","successMessage","newPassword","match","confirmPassword","handleSavePassword","errorMessage","constants","resetInput","changePassword","getAuthHeader","headers","Authorization","idToken","jwtToken","loadRepos","repoList","loadGroups","handleEnableTotpPopup","selectedType","handleDisableTotpPopup","requireMfa","showDisableButton","renderEnableDisableButton","marginRight","preferredMFA","formatGroupDisplay","group","repo","minLength","CreateNewUserSvg","CreateUserPopup","handleRepoSelection","repoNodeId","availableRepos","selectedRepos","selectedRepo","r","handleAddUser","userPassword","addingUser","userEmail","signUp","dataText","split","roles","handleNewRowInUserList","showCreateUserPopup","getReposByClientId","renderCreateUser","overflow","owner","UpdateGroupsPopup","roleId","getAttribute","groupObject","roleName","restrictIpTextBox","getElementsByName","prevState","handleUpdateGroups","updateUserRoles","role","selectedClientId","updateGroups","formatGroupName","groupname","showUpdateGroupsPopup","fullGroupList","getSavedRestrictedIps","getListRoles","getSavedRestrictedIp","data-key","inline","UpdateReposPopup","fullRepoList","addRepo","handleUpdateRepos","updateRepoAccess","showUpdateReposPopup","loadAvailableRepos","ManageUsers","userList","users","addRow","handleCreateUser","rowData","updateOrAddData","openDeleteUserPopup","deleteUserPopupOpen","handleDeleteUsers","deleteUser","replaceData","toggleMfaRequirement","selectedClientRequireMfa","isUpdatingMfa","newMfaStatus","updateClientMfaRequirement","clientData","updatedClientData","onClientChange","selectedClient","populateUsers","hasManageClientsUserRole","handleEditGroups","hideUpdateGroups","showUpdateGroups","hideUpdateRepos","showUpdateRepos","populateClient","currentClient","getClientDetails","componentDidUpdate","prevProps","getUsersByClientId","listGroupsForUser2","groupFormatter","groupArray","_cell","row","_row","listReposForUser","rowData1","renderDeleteUserPopup","headerFilter","updateRepos","paginationSizeSelector","ManageRepository","gridRepoRef","getAllRepositories","getRepositories","repoData","getAllClients","clients","toggleAddClientForm","showAddClientForm","handleNewClientNameChange","newClientName","saveNewClient","newClient","a","b","localeCompare","currentClientId","newRow","repositoryOwner","directoryPath","s3Path","addRepoData","showAlert","confirmAlert","buttons","deleteRepository","delete","updateData","updateRepoData","handleClientChange","repositories","getRepositoriesByClient","renderRepoTabulator","aria-label","hozAlign","RenderFieldPopup","gridListValueRef","getControlledList","getListValue","selectListValue","handleOnChange","selectedField","getListValuesForTemplateField","canBeLoaded","getListValueField","fieldName","listValues","updateDeleteFields","updateControlListData","controlledListId","autokey","deleteListField","addListField","addParams","valueEntry","inputFieldName","addFieldListData","newFeild","showFieldPopup","renderListContent","dataType","inputName","ManageIndexTemplate","gridTemplateRef","gridTempColumnsRef","getTemplates2","deleteTemplateData","deleteTemplate","getAllTemplatesColumns","selectedDisplayName","selectedRepositoryOnwer","getAllTemplateColumns","selectedTemplateData","addNewTemplate","addNewTemplateParams","addIndexTemplateData","newIndexTemplateRow","inputOldValue","getCells","hiddenFieldData","undefined","updateFieldData","deleteParams","deleteColTemplate","handleControlledList","addField","fieldType","fieldLength","addFieldData","result","newField","dataTypeLength","renderIndextemplateRepo","bsStyle","headerHozAlign","editorParams","String","List","editable","ResetPassword","validateConfirmationCode","handleCodeButtonClick","isSendingCode","forgotPassword","isCodeSent","validateConfirmationForm","confirmationCode","handleConfirmationFormButtonClick","isConfirming","forgotPasswordSubmit","isConfirmed","renderConfirmationCode","IsSendingCode","renderConfirmationForm","autoFocus","renderSuccessMessage","Glyphicon","glyph","OcrIndexTempates","gridOcrTemplateRef","loadTableData","tableData","getInitializedOcrStatus","loadOcrWithTemplateInfo","getOcrTemplatesInfo","indexTemplateOcrData","PerformOcr","getElement","querySelector","TemplateId","startOcr","handleOcrToggle","newValue","AutoOcr","UpdateAutoOcrItem","ocrToggleFormatter","toggle","onchange","update","RefreshButtonOcr","renderOcrStatusTable","indexTemplate","DisplayName","widthGrow","layout","NoPermission","Chat","messages","setMessages","useState","newMessage","setNewMessage","isGenieTyping","setIsGenieTyping","messagesEndRef","useRef","GENIE_ID","useEffect","sender","content","timestamp","toISOString","current","scrollIntoView","behavior","line","toLocaleTimeString","userMessage","prev","response","axios","post","setTimeout","genieMessage","RoutePage","HomePageRoute","path","exact","App","userHasAuthenticated","passedAuthenticated","isAuthenticating","childProps","BrowserRouter","Boolean","location","hostname","Amplify","configure","mandatorySignIn","region","cognito","REGION","userPoolId","USER_POOL_ID","identityPoolId","IDENTITY_POOL_ID","userPoolWebClientId","APP_CLIENT_ID","ReactDOM","navigator","serviceWorker","ready","registration","unregister","getToken","getPostInit","body","method","mode","cache","getDeleteInit","init","url","Config","FoveonicsAPI","fetch","get","params","deleteFileIdsParams","jArrayData","roleIds","autoOcr","put","uploadFile","addFileParams","deleteUserParams","uploadFileChunk","chunk","chunkFileName","uploadFileComplete","originalFileName","appendPrependOperation","Geolocation","uploadFileData","fileCount","fileSplit","uploadedFile","Buffer","getFileBytes","extension","nextMessage","selectedFiles","isDisabled","resolve","reject","reader","FileReader","onerror","readAsArrayBuffer","uploadFiles","processFile","uploadFileForAppendPrepend","onDrop","chunkSize","iterationCount","totalCount","floor","start","end","uuidv4","pop","originalName","uploadChunk","isSuccess","uploadParams","progressInfos","fileInfos","componentDidMount","Dropzone","getRootProps","getInputProps","isArray","href"],"mappings":"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","file":"static/js/main.76881953.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/DS2Logo.ca9f249b.jpg\";","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n ControlLabel,\n Button,\n FormControl,\n HelpBlock,\n} from \"react-bootstrap\";\nimport Popup from \"reactjs-popup\";\nimport { Auth } from \"aws-amplify\";\nimport QRCode from \"qrcode.react\";\n// import LoaderButton from \"../LoaderButton\";\n\nclass EnableTotpPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n isLoading: false,\n user: \"\",\n QrCode: \"\",\n showMfa: false,\n mfaToken: \"\",\n phoneNumber: \"\",\n mfaType: props.mfaType || \"TOTP\", // Default to TOTP if not specified\n verificationCode: \"\",\n phoneNumberSubmitted: false,\n };\n }\n\n async componentDidMount() {\n const user = await Auth.currentAuthenticatedUser({\n bypassCache: true,\n });\n this.setState(\n {\n popupOpen: this.props.props.showEnableTotpPopup,\n user: user,\n },\n async () => {\n if (this.state.mfaType === \"TOTP\") {\n await this.enableTOTP();\n } else {\n // For SMS type, we show the phone number input form\n this.setState({ showMfa: true });\n }\n }\n );\n }\n\n enableTOTP = async () => {\n await Auth.setupTOTP(this.state.user).then((code) => {\n // You can directly display the `code` to the user or convert it to a QR code to be scanned.\n // E.g., use following code sample to render a QR code with `qrcode.react` component:\n let QrCode =\n \"otpauth://totp/AWSCognito:\" +\n \"Documentsync-MFA\" +\n \"?secret=\" +\n code +\n \"&issuer=\" +\n \"www.DocumentSync.com\";\n this.setState({ QrCode: QrCode }, () => this.setState({ showMfa: true }));\n });\n };\n\n formatUSPhoneNumber(phone) {\n let formatted = phone.trim();\n\n // If it already starts with +1, return it as is\n if (formatted.startsWith(\"+1\")) {\n return formatted;\n }\n\n // If it starts with '+' but not '+1', remove the '+'\n if (formatted.startsWith(\"+\")) {\n formatted = formatted.slice(1);\n }\n\n // If it now starts with '1', remove that leading '1'\n if (formatted.startsWith(\"1\")) {\n formatted = formatted.slice(1);\n }\n\n // Prepend +1 to whatever is left\n return `+1${formatted}`;\n }\n\n // Trigger code send (update phone number and request code)\n setupSMS = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n\n try {\n if (this.state.phoneNumber) {\n await Auth.updateUserAttributes(this.state.user, {\n phone_number: this.formatUSPhoneNumber(this.state.phoneNumber),\n });\n // Trigger sending of the verification code via SMS\n await Auth.verifyCurrentUserAttribute(\"phone_number\");\n this.setState({\n phoneNumberSubmitted: true,\n isLoading: false,\n });\n }\n } catch (error) {\n console.error(\"Error setting up SMS MFA:\", error);\n alert(\"Failed to setup SMS MFA: \" + error.message);\n this.setState({ isLoading: false });\n }\n };\n\n // Verify code and then set SMS MFA\n verifySMSCode = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n\n try {\n await Auth.verifyCurrentUserAttributeSubmit(\n \"phone_number\",\n this.state.verificationCode\n );\n\n // Refresh user object to get updated verified attributes\n const updatedUser = await Auth.currentAuthenticatedUser({\n bypassCache: true,\n });\n console.log(\n \"Phone verified:\",\n updatedUser.attributes.phone_number_verified\n );\n\n // Now that the phone is verified, set SMS as the preferred MFA method\n await Auth.setPreferredMFA(updatedUser, \"SMS\");\n\n this.closePopup();\n this.props.handleHideEnableButton();\n } catch (error) {\n console.error(\"Error verifying SMS code:\", error);\n alert(\"Failed to verify code: \" + error.message);\n this.setState({ isLoading: false });\n }\n };\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n handleMfaConfirmation = async (e) => {\n e.preventDefault();\n\n if (this.state.mfaType === \"TOTP\") {\n Auth.verifyTotpToken(this.state.user, this.state.mfaToken)\n .then(async () => {\n // don't forget to set TOTP as the preferred MFA method\n Auth.setPreferredMFA(this.state.user, \"TOTP\");\n this.closePopup();\n this.props.handleHideEnableButton();\n })\n .catch((e) => {\n console.log(e);\n alert(\"Failed to verify TOTP token: \" + e.message);\n });\n }\n };\n\n renderTOTPSetup() {\n return (\n <div>\n <form onSubmit={this.handleMfaConfirmation}>\n <FormGroup>\n <HelpBlock>\n Scan the QR code with your preferred authenticator app (For\n example Google Authenticator)\n </HelpBlock>\n </FormGroup>\n <FormGroup>\n <QRCode value={this.state.QrCode} />\n </FormGroup>\n <FormGroup controlId=\"MFA\">\n <ControlLabel>\n Enter Code From Authenticator to setup MFA:\n </ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={(e) => this.setState({ mfaToken: e.target.value })}\n type=\"text\"\n autoComplete=\"off\"\n required\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n type=\"submit\"\n disabled={this.state.isLoading}\n >\n {this.state.isLoading ? \"Processing...\" : \"Enable MFA\"}\n </Button>\n </FormGroup>\n </form>\n </div>\n );\n }\n\n renderSMSSetup() {\n if (this.state.phoneNumberSubmitted) {\n return (\n <form onSubmit={this.verifySMSCode}>\n <FormGroup>\n <HelpBlock>\n A verification code has been sent to your phone number. Enter the\n code below to complete SMS MFA setup.\n </HelpBlock>\n </FormGroup>\n <FormGroup controlId=\"verificationCode\">\n <ControlLabel>Verification Code:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={(e) =>\n this.setState({ verificationCode: e.target.value })\n }\n type=\"text\"\n value={this.state.verificationCode}\n autoComplete=\"off\"\n required\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n type=\"submit\"\n disabled={this.state.isLoading}\n >\n {this.state.isLoading ? \"Verifying...\" : \"Verify Code\"}\n </Button>\n </FormGroup>\n </form>\n );\n }\n\n return (\n <form onSubmit={this.setupSMS}>\n <FormGroup>\n <HelpBlock>\n Enter your phone number to receive SMS verification codes. Please\n include country code (e.g., +1 for US).\n </HelpBlock>\n </FormGroup>\n <FormGroup controlId=\"phoneNumber\">\n <ControlLabel>Phone Number:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={(e) => this.setState({ phoneNumber: e.target.value })}\n type=\"tel\"\n placeholder=\"+12025551234\"\n value={this.state.phoneNumber}\n autoComplete=\"tel\"\n required\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n type=\"submit\"\n disabled={this.state.isLoading}\n >\n {this.state.isLoading ? \"Processing...\" : \"Send Verification Code\"}\n </Button>\n </FormGroup>\n </form>\n );\n }\n\n render() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"590px\",\n borderRadius: \"15px\",\n padding: \"15px\",\n minWidth: \"590px !important\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n {this.state.showMfa && (\n <div>\n <h4>\n {this.state.mfaType === \"TOTP\"\n ? \"Authenticator App Setup\"\n : \"SMS MFA Setup\"}\n </h4>\n {this.state.mfaType === \"TOTP\"\n ? this.renderTOTPSetup()\n : this.renderSMSSetup()}\n </div>\n )}\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default EnableTotpPopup;\n","import React, { Fragment } from \"react\";\nimport { FormGroup, Button, HelpBlock } from \"react-bootstrap\";\nimport Popup from \"reactjs-popup\";\n\nconst MfaSelectionPopup = ({ isOpen, onClose, onSelectMfaType }) => {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"590px\",\n borderRadius: \"15px\",\n padding: \"15px\",\n minWidth: \"590px !important\",\n }}\n open={isOpen}\n modal\n closeOnDocumentClick={false}\n onClose={onClose}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={onClose}>\n ×\n </a>\n <div>\n <FormGroup>\n <HelpBlock>\n Please select your preferred Multi-Factor Authentication method:\n </HelpBlock>\n </FormGroup>\n <FormGroup className=\"text-center\">\n <Button\n bsSize=\"large\"\n bsClass=\"btn btn-outline-primary m-2\"\n onClick={() => onSelectMfaType(\"TOTP\")}\n >\n Authenticator App (TOTP)\n </Button>\n <Button\n bsSize=\"large\"\n bsClass=\"btn btn-outline-primary m-2\"\n onClick={() => onSelectMfaType(\"SMS\")}\n >\n SMS Text Message\n </Button>\n </FormGroup>\n <FormGroup>\n <HelpBlock>\n <strong>Authenticator App:</strong> Uses an app like Google\n Authenticator or Authy to generate time-based codes.\n </HelpBlock>\n <HelpBlock>\n <strong>SMS Text Message:</strong> Sends verification codes to\n your registered mobile phone.\n </HelpBlock>\n </FormGroup>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n};\n\nexport default MfaSelectionPopup;\n","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n FormControl,\n ControlLabel,\n HelpBlock,\n} from \"react-bootstrap\";\nimport \"./login.css\";\nimport { Auth } from \"aws-amplify\";\nimport LoaderButton from \"../LoaderButton\";\nimport { Link } from \"react-router-dom\";\nimport DocumentSync from \"../../Component/Images/DocumentSync-Logo.png\";\nimport {\n checkIpAddress,\n saveAuditTrail,\n getUserDetailsByEmail,\n getRequireMfabyClientSql,\n} from \"../../libs/API\";\nimport GeolocationIp from \"../../../node_modules/ip-geolocation-api-javascript-sdk/IPGeolocationAPI\";\nimport EnableTotpPopup from \"./enabletotppopup\";\nimport MfaSelectionPopup from \"../Login/MfaSelectionPopup\";\n\nclass Login extends Component {\n constructor(props) {\n super(props);\n this.state = {\n username: \"\",\n password: \"\",\n mfaToken: \"\",\n isLoading: false,\n ip: \"\",\n showMfa: false,\n showNonMfa: true,\n showEnableTotpPopup: false,\n showMfaSelection: false,\n selectedMfaType: null,\n MfaChallenge: \"\",\n user: null,\n };\n\n // Create reference for component mounted state to prevent state updates after unmount\n this._isMounted = false;\n\n // Bind methods to prevent recreation on each render\n this.handleChildUnmount = this.handleChildUnmount.bind(this);\n this.login = this.login.bind(this);\n this.authenticate = this.authenticate.bind(this);\n this.handleResponse = this.handleResponse.bind(this);\n this.mfaConfirm = this.mfaConfirm.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleMfaSelection = this.handleMfaSelection.bind(this);\n this.closeMfaSelection = this.closeMfaSelection.bind(this);\n this.handleHideEnableButton = this.handleHideEnableButton.bind(this);\n }\n\n async componentDidMount() {\n this._isMounted = true;\n try {\n const ipGeo = new GeolocationIp(\n \"fbb2e1a5614b4c9ca16c8e3e46b1e785\",\n false\n );\n ipGeo.getGeolocation(this.handleResponse);\n } catch (error) {\n console.error(\"Error initializing geolocation:\", error);\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n // Safe setState that checks if component is still mounted\n safeSetState(newState) {\n if (this._isMounted) {\n this.setState(newState);\n }\n }\n\n handleChildUnmount() {\n this.safeSetState({\n showEnableTotpPopup: false,\n showMfaSelection: false,\n showNonMfa: true,\n showMfa: false,\n isLoading: false,\n });\n }\n\n handleHideEnableButton() {\n this.safeSetState({\n showEnableTotpPopup: false,\n showMfaSelection: false,\n isLoading: false,\n });\n }\n\n handleMfaSelection(type) {\n this.safeSetState({\n selectedMfaType: type,\n showMfaSelection: false,\n showEnableTotpPopup: true,\n });\n }\n\n closeMfaSelection() {\n this.safeSetState({\n showMfaSelection: false,\n showNonMfa: true,\n isLoading: false,\n });\n }\n\n handleInputChange(e) {\n this.setState({ [e.target.id]: e.target.value });\n }\n\n handleResponse(json) {\n this.safeSetState({ ip: json.ip });\n }\n\n async login(e) {\n e.preventDefault();\n\n // Early validation\n if (!this.state.username || !this.state.password) {\n alert(\"Please enter both username and password\");\n return;\n }\n\n this.safeSetState({ isLoading: true });\n\n try {\n const user = await Auth.signIn(this.state.username, this.state.password);\n\n const hasMfaChallenge =\n user.challengeName === \"SMS_MFA\" ||\n user.challengeName === \"SOFTWARE_TOKEN_MFA\";\n\n if (hasMfaChallenge) {\n // MFA challenge presented; don't call protected API yet\n this.safeSetState({\n user,\n showMfa: true,\n showNonMfa: false,\n showEnableTotpPopup: false,\n isLoading: false,\n MfaChallenge: user.challengeName,\n });\n return;\n }\n\n // User authenticated successfully without MFA\n // First get user details\n const userDetails = await getUserDetailsByEmail(this.state.username);\n const clientId = userDetails?.[0]?.clientId;\n\n // Then check MFA requirements\n const requireMfa = await this.fetchMfaRequirement(clientId);\n\n if (requireMfa) {\n this.safeSetState({\n user,\n showMfaSelection: true,\n showNonMfa: false,\n showMfa: false,\n isLoading: false,\n });\n return;\n }\n\n // If no MFA required, proceed with authentication\n await this.authenticate(user);\n } catch (err) {\n const message =\n {\n UserNotConfirmedException: \"Please confirm your account via email.\",\n PasswordResetRequiredException: \"Please reset your password.\",\n NotAuthorizedException: \"Incorrect username/password.\",\n UserNotFoundException: \"Account not found.\",\n }[err.code] || err.message;\n\n alert(message);\n this.safeSetState({ isLoading: false });\n }\n }\n\n async fetchMfaRequirement(clientId) {\n if (!clientId) return false;\n\n try {\n return await getRequireMfabyClientSql(clientId);\n } catch (error) {\n console.error(\"Failed to fetch MFA requirement:\", error);\n return false;\n }\n }\n\n async authenticate(user) {\n try {\n // Set user permissions\n await this.props.props.setUserPermissions(this.state.ip);\n\n const auditDetails = {\n emailAddress: this.state.username,\n ipAddress: this.state.ip,\n eventLog: \"LogIn\",\n };\n\n // Check IP restrictions if applicable\n if (this.props.props.groups.includes(\"DocumentSync_RestrictAccessByIP\")) {\n const ipParams = {\n userEmailAddress: this.state.username,\n ipAccess: this.state.ip,\n };\n\n const ipData = await checkIpAddress(ipParams);\n\n if (ipData.status !== 200) {\n alert(\"IP is restricted.\");\n await Auth.signOut();\n this.safeSetState({ isLoading: false });\n return;\n }\n }\n\n // Save audit details and navigate\n await saveAuditTrail(auditDetails);\n\n if (this._isMounted) {\n this.props.history.push(\"/browse\");\n }\n } catch (error) {\n console.error(\"Authentication error:\", error);\n alert(\"An error occurred during login. Please try again.\");\n await Auth.signOut();\n this.safeSetState({ isLoading: false });\n }\n }\n\n async mfaConfirm(e) {\n e.preventDefault();\n\n if (!this.state.mfaToken) {\n alert(\"Please enter the MFA code\");\n return;\n }\n\n this.safeSetState({ isLoading: true });\n\n try {\n let mfaType;\n if (this.state.selectedMfaType) {\n mfaType =\n this.state.selectedMfaType === \"SMS\"\n ? \"SMS_MFA\"\n : \"SOFTWARE_TOKEN_MFA\";\n } else {\n mfaType =\n this.state.MfaChallenge === \"SMS_MFA\"\n ? \"SMS_MFA\"\n : \"SOFTWARE_TOKEN_MFA\";\n }\n\n // Confirm sign-in with MFA code\n const loggedUser = await Auth.confirmSignIn(\n this.state.user,\n this.state.mfaToken,\n mfaType\n );\n\n try {\n await this.authenticate(loggedUser);\n } catch (detailsError) {\n console.error(\n \"Error fetching user details after MFA confirmation:\",\n detailsError\n );\n alert(\n \"Authentication successful but error occurred while loading user details. Please try again.\"\n );\n await Auth.signOut();\n this.safeSetState({ isLoading: false });\n }\n } catch (err) {\n const errorMessages = {\n CodeMismatchException: \"Invalid verification code. Please try again.\",\n ExpiredCodeException:\n \"Verification code has expired. Please enter a new code.\",\n LimitExceededException:\n \"Too many failed attempts. Please try again later.\",\n };\n\n alert(errorMessages[err.code] || err.message);\n this.safeSetState({ isLoading: false });\n }\n }\n\n renderMFaCode() {\n return (\n <form onSubmit={this.mfaConfirm} autoComplete=\"off\">\n <div id=\"logincontent\">\n <div id=\"logo\">\n <Link to=\"/\">\n <img src={DocumentSync} alt=\"DocumentSync\" />\n </Link>\n </div>\n <br />\n <br />\n <HelpBlock>\n Enter an Authentication code to complete sign-in.\n </HelpBlock>\n <FormGroup controlId=\"mfaToken\">\n <ControlLabel>Authentication Code:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={this.handleInputChange}\n value={this.state.mfaToken}\n type=\"text\"\n autoComplete=\"off\"\n required\n />\n </FormGroup>\n <FormGroup>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n bsSize=\"large\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Submit\"\n loadingText=\"Logging in...\"\n />\n </FormGroup>\n </div>\n </form>\n );\n }\n\n renderEnableTotpPopup() {\n return (\n <Fragment>\n {this.state.showEnableTotpPopup && (\n <EnableTotpPopup\n props={{\n showEnableTotpPopup: this.state.showEnableTotpPopup,\n }}\n unmountMe={this.handleChildUnmount}\n handleHideEnableButton={this.handleHideEnableButton}\n mfaType={this.state.selectedMfaType}\n />\n )}\n </Fragment>\n );\n }\n\n renderMfaSelectionPopup() {\n return (\n <Fragment>\n {this.state.showMfaSelection && (\n <MfaSelectionPopup\n isOpen={this.state.showMfaSelection}\n onClose={this.closeMfaSelection}\n onSelectMfaType={this.handleMfaSelection}\n />\n )}\n </Fragment>\n );\n }\n\n renderLoginWithOutMfa() {\n return (\n <form onSubmit={this.login} autoComplete=\"off\">\n <div id=\"logincontent\">\n <div id=\"logo\">\n <Link to=\"/\">\n <img src={DocumentSync} alt=\"DocumentSync\" />\n </Link>\n </div>\n <br />\n <br />\n <FormGroup controlId=\"username\">\n <ControlLabel>Username:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={this.handleInputChange}\n value={this.state.username}\n type=\"text\"\n autoComplete=\"off\"\n />\n </FormGroup>\n <FormGroup controlId=\"password\">\n <ControlLabel>Password:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={this.handleInputChange}\n value={this.state.password}\n type=\"password\"\n autoComplete=\"off\"\n />\n </FormGroup>\n <FormGroup>\n <Link to=\"/login/reset\">Forgot password?</Link>\n </FormGroup>\n\n <FormGroup>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n bsSize=\"large\"\n disabled={\n !this.state.username ||\n !this.state.password ||\n this.state.isLoading\n }\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Login\"\n loadingText=\"Logging in...\"\n />\n </FormGroup>\n </div>\n </form>\n );\n }\n\n render() {\n const { showNonMfa, showMfa, showEnableTotpPopup } = this.state;\n return (\n <Fragment>\n <div id=\"loginmain\">\n <div id=\"loginheader\"></div>\n {showNonMfa && this.renderLoginWithOutMfa()}\n {showMfa && !showEnableTotpPopup && this.renderMFaCode()}\n {this.renderEnableTotpPopup()}\n {this.renderMfaSelectionPopup()}\n <div id=\"footer\">\n <p>\n © {new Date().getFullYear()} Foveonics Document Solutions\n </p>\n </div>\n </div>\n </Fragment>\n );\n }\n}\n\nexport default Login;\n","import React, { Component } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { Auth } from \"aws-amplify\";\nimport DocumentSync from \"../../src/Component/Images/DS2Logo.jpg\";\nimport { saveAuditTrail } from \"../libs/API\";\nclass Header extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n // console.log(\"header props\", props);\n }\n\n clearTokens = () => {\n this.props.props.hasAuthenticated = false;\n this.props.props.loggedInUser = \"\";\n this.props.props.hasManageMetadataTemplate = false;\n this.props.props.hasManageRepositories = false;\n this.props.props.hasEditIndex = false;\n this.props.props.hasManageRedaction = false;\n this.props.props.hasManageUsers = false;\n this.props.props.hasManageFiles = false;\n this.props.props.hasTextSearch = false;\n this.props.props.hasDelete = false;\n this.props.props.hasCliftonWorkflow = false;\n this.props.props.hasMedfordWorkflow = false;\n this.props.props.hasSendEmail = false;\n this.props.props.hasRestrictAccessByIP = false;\n this.props.props.hasFoveonicsAdmin = false;\n this.props.props.hasOcrRole = false;\n this.props.props.hasPIIRole = false;\n this.props.props.hasAberdeenWorkflow = false;\n this.props.props.hasGlenrockWorkflow = false;\n };\n\n handleClick = async () => {\n //const res = await getGeoLoaction();\n let auditDetails = {\n emailAddress: this.props.props.loggedInUser,\n ipAddress: this.props.props.userIpAddress, //res.IPv4,\n eventLog: \"LogOut\",\n };\n\n //saving audit trail details into dynomo db\n saveAuditTrail(auditDetails).then((data) => {});\n this.clearTokens();\n this.props.history.push(\"/\");\n await Auth.signOut();\n };\n\n handleMenuClick = (e) => {\n const { id } = e.target;\n this.props.history.push(`/${id}`);\n };\n\n render() {\n return (\n <div>\n <div id=\"header\">\n {/* eslint-disable-next-line */}\n <a onClick={this.handleMenuClick}>\n <img\n id=\"browse\"\n src={DocumentSync}\n alt=\"Browse Repository\"\n title=\"Browse Repository\"\n />\n </a>\n <Button\n style={{ marginLeft: \"2%\" }}\n bsSize=\"small\"\n onClick={this.handleClick}\n >\n Logout\n </Button>\n <Button\n id=\"helpPage\"\n bsSize=\"small\"\n onClick={(e) => {\n e.preventDefault();\n window.open(\"https://help.documentsync.com\", \"_blank\");\n // window.location.href = \"https://help.documentsync.com\";\n }}\n >\n Help\n </Button>\n {this.props.props.hasManageMetadataTemplate && (\n <Button\n id=\"manageindextemplate\"\n bsSize=\"small\"\n onClick={this.handleMenuClick}\n >\n Manage Index Template\n </Button>\n )}\n {this.props.props.hasOcrRole && (\n <Button\n id=\"ocrindextempates\"\n bsSize=\"small\"\n onClick={this.handleMenuClick}\n >\n OCR\n </Button>\n )}\n {this.props.props.hasManageRepositories && (\n <Button\n id=\"managerepository\"\n bsSize=\"small\"\n onClick={this.handleMenuClick}\n >\n Manage Repository\n </Button>\n )}\n\n {this.props.props.hasManageUsers && (\n <Button\n id=\"manageusers\"\n bsSize=\"small\"\n onClick={this.handleMenuClick}\n >\n Manage Users\n </Button>\n )}\n <Button id=\"myaccount\" bsSize=\"small\" onClick={this.handleMenuClick}>\n My Account\n </Button>\n </div>\n <div\n style={{\n textAlign: \"right\",\n width: \"98%\",\n float: \"right\",\n marginTop: \"-0.1rem\",\n }}\n >\n <Button\n bsSize=\"small\"\n style={{\n cursor: \"default\",\n fontSize: \"small\",\n color: \"grey\",\n float: \"right\",\n }}\n >\n Logged in as: {this.props.props.loggedInUser}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default Header;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport {\n FormControl,\n ControlLabel,\n Row,\n Col,\n FormGroup,\n Radio,\n} from \"react-bootstrap\";\nimport LoaderButton from \"./LoaderButton\";\nimport { selectedFilesSendEmail } from \"../libs/API\";\n\nclass EmailPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n emailInputField: \"\",\n bcc: \"\",\n cc: \"\",\n selectedDay: \"\",\n isLoading: false,\n isChecked: \"original\",\n hasRedaction: false,\n pageFrom: -1,\n pageTo: -1,\n };\n // console.log(\"email popup props\", props);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showEmailPopup });\n await this.checkRedaction();\n }\n\n checkRedaction = async () => {\n let fileArray = this.props.props.fileIdArray;\n let redaction = fileArray.some((x) => x.redaction === true);\n this.setState({ hasRedaction: redaction });\n };\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n handleEmailSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n let emailParams = {\n fileData: this.props.props.fileIdArray,\n hasManageRedaction: this.props.props.manageRedaction,\n selectedOption: this.state.isChecked,\n emailTo: this.state.emailInputField,\n ccs: this.state.cc,\n bccs: this.state.bcc,\n selectedDay: this.state.selectedDay,\n pageFrom: this.state.pageFrom,\n pageTo: this.state.pageTo,\n };\n selectedFilesSendEmail(emailParams).then((data) => {\n this.setState({ isLoading: false });\n if (data.status === 200) {\n this.closePopup();\n }\n });\n };\n\n handleRadioChange = (e) => {\n const value = e.target.value;\n this.setState({ isChecked: value });\n };\n\n render() {\n const rowStyle = {\n marginBottom: \"0.4rem\",\n };\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h3>Send Email</h3>\n <form onSubmit={this.handleEmailSubmit}>\n <FormGroup>\n <Row style={rowStyle}>\n <Col sm={12}>\n <Radio\n value=\"original\"\n name=\"emailOriginal\"\n onChange={this.handleRadioChange}\n checked={this.state.isChecked === \"original\"}\n >\n {\"\"} Email Original Images\n </Radio>\n </Col>\n </Row>\n {/* <Row style={rowStyle}>\n <Col sm={12}>\n <Radio\n value=\"originalRange\"\n name=\"emailOriginalRange\"\n onChange={this.handleRadioChange}\n checked={this.state.isChecked === \"originalRange\"}\n >\n {\"\"} Email Range of Original Images\n </Radio>\n </Col>\n </Row> */}\n {/* {this.state.isChecked === \"originalRange\" && (\n <Row style={rowStyle}>\n <Col sm={3}>\n <FormControl\n componentClass=\"input\"\n onChange={(e) =>\n this.setState({ pageFrom: e.target.value })\n }\n type=\"number\"\n placeholder=\"page from\"\n autoComplete=\"off\"\n ></FormControl>\n </Col>\n <Col sm={3}>\n <FormControl\n componentClass=\"input\"\n onChange={(e) =>\n this.setState({ pageTo: e.target.value })\n }\n type=\"number\"\n placeholder=\"page to\"\n autoComplete=\"off\"\n ></FormControl>\n </Col>\n <Col sm={6}></Col>\n </Row>\n )} */}\n {this.props.props.manageRedaction && this.state.hasRedaction && (\n <div>\n <Row style={rowStyle}>\n <Col sm={12}>\n <Radio\n value=\"redacted\"\n name=\"emailRedacted\"\n onChange={this.handleRadioChange}\n checked={this.state.isChecked === \"redacted\"}\n >\n {\"\"} Email Redacted Document\n </Radio>\n </Col>\n </Row>\n {/* <Row style={rowStyle}>\n <Col sm={12}>\n <Radio\n value=\"redactedRange\"\n name=\"emailRedactedRange\"\n onChange={this.handleRadioChange}\n checked={this.state.isChecked === \"redactedRange\"}\n >\n {\"\"} Email Range of Redacted Document\n </Radio>\n </Col>\n </Row> */}\n </div>\n )}\n {/* {this.state.isChecked === \"redactedRange\" && (\n <Row style={rowStyle}>\n <Col sm={3}>\n <FormControl\n componentClass=\"input\"\n onChange={(e) =>\n this.setState({ pageFrom: e.target.value })\n }\n type=\"number\"\n placeholder=\"page from\"\n autoComplete=\"off\"\n ></FormControl>\n </Col>\n <Col sm={3}>\n <FormControl\n componentClass=\"input\"\n onChange={(e) =>\n this.setState({ pageTo: e.target.value })\n }\n type=\"number\"\n placeholder=\"page to\"\n autoComplete=\"off\"\n ></FormControl>\n </Col>\n <Col sm={6}></Col>\n </Row>\n )} */}\n <Row style={rowStyle}>\n <Col sm={4} componentClass={ControlLabel}>\n Email To:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n onChange={(e) =>\n this.setState({ emailInputField: e.target.value })\n }\n />\n </Col>\n </Row>\n <Row style={rowStyle}>\n <Col sm={4} componentClass={ControlLabel}>\n Cc:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ cc: e.target.value })}\n />\n </Col>\n </Row>\n <Row style={rowStyle}>\n <Col sm={4} componentClass={ControlLabel}>\n Bcc:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ bcc: e.target.value })}\n />\n </Col>\n </Row>\n <Row style={rowStyle}>\n <Col sm={6} componentClass={ControlLabel}>\n Day(s) for Link Expiration:\n </Col>\n <Col sm={6}>\n <FormControl\n componentClass=\"select\"\n onChange={(e) =>\n this.setState({ selectedDay: e.target.value })\n }\n required\n >\n <option key={-1} value=\"\">\n Select Day(s)\n </option>\n <option key={0} value=\"1\">\n 1\n </option>\n <option key={1} value=\"5\">\n 5\n </option>\n <option key={2} value=\"7\">\n 7\n </option>\n <option key={3} value=\"10\">\n 10\n </option>\n <option key={4} value=\"15\">\n 15\n </option>\n <option key={5} value=\"30\">\n 30\n </option>\n </FormControl>\n </Col>\n </Row>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Send Email\"\n loadingText=\"Sending Email......\"\n />\n </FormGroup>\n </form>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default EmailPopup;\n","import React, { Component } from \"react\";\n\nclass BrowseFolderImage extends Component {\n render() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-folder\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M9.828 4a3 3 0 0 1-2.12-.879l-.83-.828A1 1 0 0 0 6.173 2H2.5a1 1 0 0 0-1 .981L1.546 4h-1L.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3v1z\" />\n <path\n fillRule=\"evenodd\"\n d=\"M13.81 4H2.19a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4zM2.19 3A2 2 0 0 0 .198 5.181l.637 7A2 2 0 0 0 2.826 14h10.348a2 2 0 0 0 1.991-1.819l.637-7A2 2 0 0 0 13.81 3H2.19z\"\n />\n </svg>\n );\n }\n}\n\nexport default BrowseFolderImage;\n","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n ControlLabel,\n Row,\n Col,\n FormControl,\n Checkbox,\n} from \"react-bootstrap\";\nimport LoaderButton from \"../../src/Component/LoaderButton\";\nimport { fillAberdeenArrestExpungmentForm } from \"../libs/API\";\n\nclass AberdeenExpungement extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n caseNumber: \"\",\n caseDate: \"\",\n expDate: \"\",\n id: \"\",\n name: \"\",\n isAppendFile: \"\",\n isPrependExistingFile: \"\",\n isArrestFiles: false,\n isArrestRecords: false,\n isNonArresetFiles: false,\n };\n // console.log(\"AberdeenExpungement popup props\", props);\n }\n\n async componentDidMount() {\n const selectedRow = this.props.selectedRow;\n const templateName = this.props.templateName;\n const cleanedTemplateName = templateName.replace(/inx|_|\\d+/g, \"\");\n // console.log(cleanedTemplateName, \"cleaned\");\n let isArrestFiles = false;\n let isArrestRecords = false;\n let isNonArresetFiles = false;\n let caseNumber,\n caseDate = \"\";\n\n if (cleanedTemplateName === \"ArrestFiles\") {\n isArrestFiles = true;\n caseNumber = selectedRow[0][\"Identification Number\"] || \"\";\n caseDate = selectedRow[0][\"Date of arrest\"] || \"\";\n } else if (cleanedTemplateName === \"ArrestRecords\") {\n isArrestRecords = true;\n caseNumber = selectedRow[0][\"Incident Number\"] || \"\";\n caseDate = selectedRow[0][\"Date Of Arrest\"] || \"\";\n } else {\n caseNumber = selectedRow[0][\"Case Number\"] || \"\";\n caseDate = selectedRow[0].Date || \"\";\n isNonArresetFiles = true;\n }\n\n this.setState({\n caseNumber,\n caseDate,\n isArrestFiles,\n isArrestRecords,\n isNonArresetFiles,\n });\n }\n\n handleAberdeenArrestExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Docket: this.state.id,\n Name: this.state.name,\n ExpDate: this.props.getFormattedDate(new Date(this.state.expDate)),\n Case: this.state.caseNumber,\n CaseDate: this.props.getFormattedDate(new Date(this.state.caseDate)),\n isArrestFiles: this.state.isArrestFiles,\n isArrestRecords: this.state.isArrestRecords,\n isNonArresetFiles: this.state.isNonArresetFiles,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n // console.log(this.state.isPrependExistingFile, \"hello\");\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillAberdeenArrestExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.props.closeParentPopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n render() {\n return (\n <Fragment>\n <form onSubmit={this.handleAberdeenArrestExpungementSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) => this.setState({ expDate: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Docket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ name: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n </Fragment>\n );\n }\n}\n\nexport default AberdeenExpungement;\n","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n ControlLabel,\n Row,\n Col,\n FormControl,\n Checkbox,\n} from \"react-bootstrap\";\nimport LoaderButton from \"../../src/Component/LoaderButton\";\nimport { fillDemoExpungmentForm } from \"../libs/API\";\n\nclass DemoExpungement extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n caseNumber: \"\",\n caseDate: \"\",\n expDate: \"\",\n id: \"\",\n name: \"\",\n isAppendFile: \"\",\n isPrependExistingFile: \"\",\n isArrestFiles: false,\n isArrestRecords: false,\n isNonArresetFiles: false,\n };\n // console.log(\"DemoExpungement popup props\", props);\n }\n\n async componentDidMount() {\n const selectedRow = this.props.selectedRow;\n let caseNumber = selectedRow[0][\"Case Number\"] || \"\";\n let caseDate = selectedRow[0].Date || \"\";\n this.setState({\n caseNumber,\n caseDate,\n });\n }\n\n handleDemoExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Docket: this.state.jacketNumber,\n ExpDate: this.props.getFormattedDate(new Date(this.state.expDate)),\n Case: this.state.caseNumber,\n CaseDate: this.props.getFormattedDate(new Date(this.state.caseDate)),\n Name: this.state.name,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillDemoExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.props.closeParentPopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n render() {\n return (\n <Fragment>\n <form onSubmit={this.handleDemoExpungementSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Number:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) => this.setState({ expDate: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ name: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Docket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n </Fragment>\n );\n }\n}\n\nexport default DemoExpungement;\n","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n ControlLabel,\n Row,\n Col,\n FormControl,\n Checkbox,\n} from \"react-bootstrap\";\nimport LoaderButton from \"../Component/LoaderButton\";\nimport { fillEastamptonArrestReportExpungmentForm } from \"../libs/API\";\n\nclass EastamptonArrestExpungement extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n caseNumber: \"\",\n caseDate: \"\",\n expDate: \"\",\n id: \"\",\n name: \"\",\n isAppendFile: \"\",\n isPrependExistingFile: \"\",\n isArrestFiles: false,\n isArrestRecords: false,\n isNonArresetFiles: false,\n };\n console.log(\"EastamptonArrestExpungement popup props\", props);\n }\n\n async componentDidMount() {\n const selectedRow = this.props.selectedRow;\n let caseNumber = selectedRow[0][\"Case Number\"] || \"\";\n let caseDate = selectedRow[0][\"Date Of Arrest\"] || \"\";\n this.setState({\n caseNumber,\n caseDate,\n });\n }\n\n handleEastamptonArrestReportExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Docket: this.state.jacketNumber,\n ExpDate: this.props.getFormattedDate(new Date(this.state.expDate)),\n Case: this.state.caseNumber,\n CaseDate: this.props.getFormattedDate(new Date(this.state.caseDate)),\n Name: this.state.name,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillEastamptonArrestReportExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.props.closeParentPopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n render() {\n return (\n <Fragment>\n <form onSubmit={this.handleEastamptonArrestReportExpungementSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Number:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) => this.setState({ expDate: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ name: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Docket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n </Fragment>\n );\n }\n}\n\nexport default EastamptonArrestExpungement;\n","import React, { Component, Fragment } from \"react\";\nimport {\n FormGroup,\n ControlLabel,\n Row,\n Col,\n FormControl,\n Checkbox,\n HelpBlock,\n} from \"react-bootstrap\";\nimport Popup from \"reactjs-popup\";\nimport LoaderButton from \"./LoaderButton\";\nimport {\n fillCliftonExpungmentForm,\n fillMedfordExpungmentForm,\n fillEnglewoodExpungmentForm,\n fillCliftonJuvenileExpungmentForm,\n fillCliftonJuvenileFileReportsExpungmentForm,\n fillGlenrockArrestExpungmentForm,\n} from \"../libs/API\";\nimport AberdeenExpungement from \"../Expungement/AberdeenExpungement\";\nimport DemoExpungement from \"../Expungement/DemoExpungement\";\nimport EastamptonArrestExpungement from \"../Expungement/EastamptonArrestExpungement\";\n\nclass ExpungementPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n isLoading: false,\n caseNumber: \"\",\n caseDate: \"\",\n expDate: \"\",\n id: \"\",\n name: \"\",\n jacketNumber: \"\",\n isAppendFile: \"\",\n isPrependExistingFile: \"\",\n comments: \"\",\n characterCount: 0,\n };\n // console.log(\"Expungement popup props\", props);\n }\n\n async componentDidMount() {\n const selectedRows = this.props.props.selectedRow;\n const templateName = this.props.props.templateName;\n let caseNumber = \"\";\n let caseDate = \"\";\n if (selectedRows.length > 0) {\n if (this.props.props.client === \"clifton\") {\n if (templateName.includes(\"JUVENILE_FILE_REPORTS\")) {\n caseNumber = selectedRows[0].Number || \"\";\n } else if (templateName.includes(\"Juvenile\")) {\n caseNumber = selectedRows[0][\"Case Number\"] || \"\";\n } else {\n caseNumber = selectedRows[0][\"Case Number\"] || \"\";\n caseDate = selectedRows[0].Date || \"\";\n }\n } else if (this.props.props.client === \"englewood\") {\n caseNumber = selectedRows[0][\"Case Number\"] || \"\";\n caseDate = selectedRows[0].Date || \"\";\n } else if (\n this.props.props.client === \"medford\" ||\n this.props.props.client === \"glenrock\"\n ) {\n caseNumber = selectedRows[0][\"Case Number\"];\n caseDate =\n selectedRows[0][\"Date of Incident\"] ||\n selectedRows[0][\"Date of Arrest\"] ||\n selectedRows[0][\"Date Of Arrest\"];\n }\n\n this.setState({\n popupOpen: this.props.props.showExpungementPopup,\n caseNumber,\n caseDate,\n });\n }\n }\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n getFormattedDate = (date) => {\n const year = date.getUTCFullYear();\n let month = (date.getUTCMonth() + 1).toString();\n month = month.length > 1 ? month : \"0\" + month;\n let day = date.getUTCDate().toString();\n day = day.length > 1 ? day : \"0\" + day;\n return month + \"/\" + day + \"/\" + year;\n };\n\n handleExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const client = this.props.props.client;\n const jObject = {\n Case: this.state.caseNumber,\n CaseDate: this.getFormattedDate(new Date(this.state.caseDate)),\n ExpDate: this.getFormattedDate(new Date(this.state.expDate)),\n ID: this.state.id,\n Name: this.state.name,\n Jacket: this.state.jacketNumber,\n Comments: this.state.comments,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n if (client === \"clifton\") {\n fillCliftonExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n }\n if (client === \"medford\") {\n fillMedfordExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n }\n };\n\n handleExpungementJuvenileSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Case: this.state.caseNumber,\n ExpDate: this.getFormattedDate(new Date(this.state.expDate)),\n ID: this.state.id,\n Name: this.state.name,\n Jacket: this.state.jacketNumber,\n Comments: this.state.comments,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillCliftonJuvenileExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n handleExpungementJuvenileFileReportsSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Number: this.state.caseNumber,\n ExpDate: this.getFormattedDate(new Date(this.state.expDate)),\n ID: this.state.id,\n Name: this.state.name,\n Jacket: this.state.jacketNumber,\n Comments: this.state.comments,\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillCliftonJuvenileFileReportsExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n handleEnglewoodExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n ID: this.state.id,\n Jacket: this.state.jacketNumber,\n ExpDate: this.getFormattedDate(new Date(this.state.expDate)),\n Case: this.state.caseNumber,\n CaseDate: this.getFormattedDate(new Date(this.state.caseDate)),\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.props.selectedRow[0].FileId });\n fillEnglewoodExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n handleComment = (e) => {\n e.preventDefault();\n let characterCount = e.target.value.length;\n this.setState({\n characterCount: e.target.value.length,\n comments: e.target.value,\n });\n if (characterCount === 400) {\n return;\n }\n };\n\n handleGlenrockArrestExpungementSubmit = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n const jObject = {\n Docket: this.state.id,\n Name: this.state.name,\n ExpDate: this.getFormattedDate(new Date(this.state.expDate)),\n Case: this.state.caseNumber,\n CaseDate: this.getFormattedDate(new Date(this.state.caseDate)),\n };\n\n const jArray = [];\n jArray.push(jObject);\n jArray.push({ fileId: this.props.props.selectedRow[0].FileId });\n const isAppendFile =\n this.state.isAppendFile === null || this.state.isAppendFile === \"\"\n ? false\n : true;\n const isPrependExistingFile =\n this.state.isPrependExistingFile === null ||\n this.state.isPrependExistingFile === \"\"\n ? false\n : true;\n // console.log(this.state.isPrependExistingFile, \"hello\");\n jArray.push({\n isAppendFile: isAppendFile,\n isPrependExistingFile: isPrependExistingFile,\n });\n\n fillGlenrockArrestExpungmentForm(jArray)\n .then((data) => {\n if (data.status === 200) {\n this.setState({ isLoading: false });\n this.closePopup();\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n renderGlenrockArrestExpungement = () => {\n return (\n <form onSubmit={this.handleGlenrockArrestExpungementSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) => this.setState({ expDate: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Docket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ name: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n );\n };\n\n render() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"590px\",\n borderRadius: \"15px\",\n padding: \"15px\",\n minWidth: \"590px !important\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <h3>Expunge Record</h3>\n <br />\n {this.props.props.client === \"englewood\" ? (\n <form onSubmit={this.handleEnglewoodExpungementSubmit}>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Internal #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Docket #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) =>\n this.setState({ expDate: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n </Row>\n </FormGroup>\n </form>\n ) : this.props.props.templateName.includes(\n \"JUVENILE_FILE_REPORTS\"\n ) && this.props.props.client === \"clifton\" ? (\n <form onSubmit={this.handleExpungementJuvenileFileReportsSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Number:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) =>\n this.setState({ expDate: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n ID#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ name: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Jacket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"comments\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Comments:\n </Col>\n <Col sm={8}>\n <FormControl\n componentClass=\"textarea\"\n onChange={this.handleComment}\n maxLength={400}\n />\n </Col>\n </Row>\n <HelpBlock>\n Total Characters for Expungement Comment is limited to{\" \"}\n {this.state.characterCount}/400.\n </HelpBlock>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n ) : this.props.props.templateName.includes(\"Juvenile\") &&\n this.props.props.client === \"clifton\" ? (\n <form onSubmit={this.handleExpungementJuvenileSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) =>\n this.setState({ expDate: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n ID#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ name: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Jacket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"comments\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Comments:\n </Col>\n <Col sm={8}>\n <FormControl\n componentClass=\"textarea\"\n onChange={this.handleComment}\n maxLength={400}\n />\n </Col>\n </Row>\n <HelpBlock>\n Total Characters for Expungement Comment is limited to{\" \"}\n {this.state.characterCount}/400.\n </HelpBlock>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n ) : this.props.props.client === \"glenrock\" ? (\n this.renderGlenrockArrestExpungement()\n ) : this.props.props.client === \"Aberdeen\" ? (\n <AberdeenExpungement\n selectedRow={this.props.props.selectedRow}\n templateName={this.props.props.templateName}\n closeParentPopup={this.closePopup}\n getFormattedDate={this.getFormattedDate}\n />\n ) : this.props.props.client === \"Demo\" ? (\n <DemoExpungement\n selectedRow={this.props.props.selectedRow}\n closeParentPopup={this.closePopup}\n getFormattedDate={this.getFormattedDate}\n />\n ) : this.props.props.client === \"Eastampton\" ? (\n <EastamptonArrestExpungement\n selectedRow={this.props.props.selectedRow}\n closeParentPopup={this.closePopup}\n getFormattedDate={this.getFormattedDate}\n />\n ) : (\n <form onSubmit={this.handleExpungementSubmit}>\n <FormGroup controlId=\"caseNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case #:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n readOnly\n value={this.state.caseNumber}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"caseDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Case Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n readOnly\n value={this.state.caseDate}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"expDate\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Exp. Date:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"date\"\n onChange={(e) =>\n this.setState({ expDate: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"id\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n ID#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) => this.setState({ id: e.target.value })}\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"name\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Name:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ name: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n <FormGroup controlId=\"jacketNumber\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Jacket#:\n </Col>\n <Col sm={8}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n onChange={(e) =>\n this.setState({ jacketNumber: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n {this.props.props.client === \"medford\" ? (\n <FormGroup controlId=\"comments\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Comments:\n </Col>\n <Col sm={8}>\n <FormControl\n componentClass=\"textarea\"\n onChange={(e) =>\n this.setState({ comments: e.target.value })\n }\n />\n </Col>\n </Row>\n </FormGroup>\n ) : (\n <FormGroup controlId=\"comments\">\n <Row>\n <Col sm={4} componentClass={ControlLabel}>\n Comments:\n </Col>\n <Col sm={8}>\n <FormControl\n componentClass=\"textarea\"\n onChange={this.handleComment}\n maxLength={400}\n />\n </Col>\n </Row>\n <HelpBlock>\n Total Characters for Expungement Comment is limited to{\" \"}\n {this.state.characterCount}/400.\n </HelpBlock>\n </FormGroup>\n )}\n <FormGroup>\n <Row>\n <Col sm={4}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Expunge Record\"\n loadingText=\"Expunging Record...\"\n />\n </Col>\n\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({ isAppendFile: e.target.value })\n }\n >\n {\" \"} Append to Existing Expungement\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n <FormGroup>\n <Row>\n <Col sm={4}></Col>\n <Col sm={8}>\n <Checkbox\n key={1}\n onChange={(e) =>\n this.setState({\n isPrependExistingFile: e.target.value,\n })\n }\n >\n {\" \"} Expunge and retain file\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </form>\n )}\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\nexport default ExpungementPopup;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport { Row, Col, FormGroup, Checkbox } from \"react-bootstrap\";\nimport LoaderButton from \"../LoaderButton\";\nimport { insertOrUpdateUserProfile, getUserProfile } from \"../../libs/API\";\n\nclass FilePropertiesPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n isLoading: false,\n redaction: true,\n pageCount: true,\n fileSize: true,\n fileDimensions: true,\n textScore: true,\n templateColumns: [],\n };\n\n // console.log(\"email popup props\", props);\n }\n\n async componentDidMount() {\n await this.checkUserProfile();\n this.setState({ popupOpen: this.props.props.showFilePropertiesPopup });\n }\n\n checkUserProfile = async () => {\n const userProfile = {\n userId: this.props.props.userId,\n templateName: this.props.props.templateName,\n };\n await getUserProfile(userProfile).then((x) => {\n if (x.data !== \"\" && x.status === 200) {\n this.setState({\n redaction: x.data.redaction,\n fileSize: x.data.fileSize,\n pageCount: x.data.pageCount,\n fileDimensions: x.data.pageDimensions,\n textScore: x.data.textScore,\n templateColumns: x.data.templateColumnsToShow,\n });\n }\n });\n };\n\n handleRedactionChange = (event) => {\n this.setState({ redaction: event.target.checked });\n };\n\n handlePageCountChange = (event) => {\n this.setState({ pageCount: event.target.checked });\n };\n\n handlefileSizeChange = (event) => {\n this.setState({ fileSize: event.target.checked });\n };\n\n handlefileDimensionsChange = (event) => {\n this.setState({ fileDimensions: event.target.checked });\n };\n\n handletextScoreChange = (event) => {\n this.setState({ textScore: event.target.checked });\n };\n\n handleSaveUserProfile = async (e) => {\n e.preventDefault();\n const checkboxDiv = document.getElementById(\"checkboxDiv\");\n const checkboxes = Array.from(\n checkboxDiv.querySelectorAll('input[type=\"checkbox\"]')\n );\n\n const TemplateColumnsToShow = [];\n checkboxes.forEach((checkbox) => {\n if (!checkbox.checked) {\n TemplateColumnsToShow.push(checkbox.name);\n }\n });\n const userProfile = {\n fileSize: this.state.fileSize,\n pageCount: this.state.pageCount,\n pageDimensions: this.state.fileDimensions,\n textScore: this.state.textScore,\n redaction: this.state.redaction,\n templateColumnsToShow: TemplateColumnsToShow,\n userId: this.props.props.userId,\n templateName: this.props.props.templateName,\n };\n console.log(userProfile);\n await insertOrUpdateUserProfile(userProfile).then((x) => {\n console.log(x);\n if (x.status === 200) {\n this.closePopup();\n } else {\n }\n });\n };\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n render() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h3>Hide/Show Columns</h3>\n <form onSubmit={this.handleSaveUserProfile}>\n <Row>\n <Col sm={6}>\n <h5>Active Template Columns</h5>\n <div id=\"checkboxDiv\">\n {this.props.props.columns.map((item, index) => {\n let isChecked = !this.state.templateColumns.includes(\n index.toString()\n );\n return (\n <div key={index}>\n <FormGroup key={index}>\n <Row key={index}>\n <Col sm={12}>\n <Checkbox\n key={index}\n name={index}\n value={item.InputName}\n defaultChecked={isChecked}\n >\n {\"\"} {item.InputName}\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </div>\n );\n })}\n </div>\n </Col>\n <Col sm={6}>\n {this.props.props.hasFileProperties && (\n <div>\n <h5>File Properties</h5>\n\n <FormGroup>\n <Row>\n <Col sm={12}>\n <Checkbox\n key=\"pageCount\"\n value=\"pageCount\"\n name=\"pageCountColumn\"\n onChange={this.handlePageCountChange}\n checked={this.state.pageCount}\n >\n {\"\"} Page Count\n </Checkbox>\n </Col>\n </Row>\n <Row>\n <Col sm={12}>\n <Checkbox\n key=\"fileSize\"\n value=\"fileSize\"\n name=\"fileSizeColumn\"\n onChange={this.handlefileSizeChange}\n checked={this.state.fileSize}\n >\n {\"\"} File Size\n </Checkbox>\n </Col>\n </Row>\n <Row>\n <Col sm={12}>\n <Checkbox\n key=\"fileDimensions\"\n value=\"fileDimensions\"\n name=\"fileDimensionsColumn\"\n onChange={this.handlefileDimensionsChange}\n checked={this.state.fileDimensions}\n >\n {\"\"} Page Dimensions\n </Checkbox>\n </Col>\n </Row>\n </FormGroup>\n </div>\n )}\n {this.props.props.hasManageRedaction ||\n this.props.props.hasTextScore ? (\n <div>\n <h5>Additional Columns</h5>\n {this.props.props.hasManageRedaction && (\n <Row>\n <Col sm={12}>\n <Checkbox\n key=\"redaction\"\n value=\"redaction\"\n name=\"redactionColumn\"\n onChange={this.handleRedactionChange}\n checked={this.state.redaction}\n >\n {\"\"} Redaction\n </Checkbox>\n </Col>\n </Row>\n )}\n {this.props.props.hasTextScore && (\n <Row>\n <Col sm={12}>\n <Checkbox\n key=\"textScore\"\n value=\"textScore\"\n name=\"textScoreColumn\"\n onChange={this.handletextScoreChange}\n checked={this.state.textScore}\n >\n {\"\"} Text Score\n </Checkbox>\n </Col>\n </Row>\n )}\n </div>\n ) : (\n \"\"\n )}\n </Col>\n <FormGroup>\n <Row\n style={{\n marginLeft: \"2px\",\n }}\n >\n <Col sm={12}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Save Preferences\"\n loadingText=\"Saving......\"\n />\n </Col>\n </Row>\n </FormGroup>\n </Row>\n </form>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default FilePropertiesPopup;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport {\n FormGroup,\n Row,\n Col,\n FormControl,\n ControlLabel,\n} from \"react-bootstrap\";\nimport Upload from \"./upload\";\nimport { getPageCount } from \"../../libs/API\";\n\nclass AppendPrependPdf extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n appendPrependValue: \"\",\n showInsertForm: false,\n pageCount: 0,\n insertTextBox: 0,\n showLoadingText: \"\",\n };\n // console.log(\"append prepend popup props\", props);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showAppendPrependPopup });\n }\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n handleChange = async (e) => {\n e.preventDefault();\n let _showInsertForm = false;\n let _pageCount = 0;\n let targetValue = e.target.value;\n if (targetValue === \"Insert\") {\n this.setState({ showLoadingText: \"...Loading page Count\" });\n _showInsertForm = true;\n await getPageCount(this.props.props.fileIdArray[0].FileId).then((x) => {\n _pageCount = x.data;\n });\n }\n this.setState({\n showLoadingText: \"\",\n appendPrependValue: targetValue,\n showInsertForm: _showInsertForm,\n pageCount: _pageCount,\n ShowLoadingText: \"\",\n });\n };\n render() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>\n Insert Files :{this.props.props.filePath}\n {this.props.props.fileIdArray[0].FileName}\n </h5>\n <br />\n <Row>\n <Col sm={12}>\n <FormGroup controlId=\"selectappendTemplates\">\n <FormControl\n componentClass=\"select\"\n onChange={this.handleChange}\n required\n >\n <option key={-1} value=\"\">\n Select Prepend/Insert/Append Option\n </option>\n <option key={0} value=\"Prepend\">\n Prepend\n </option>\n <option key={2} value=\"Insert\">\n Insert\n </option>\n <option key={1} value=\"Append\">\n Append\n </option>\n </FormControl>\n </FormGroup>\n {this.state.showInsertForm ? (\n <div>\n <FormGroup>\n <ControlLabel>\n Total page count - {this.state.pageCount} Insert after\n page :\n </ControlLabel>\n </FormGroup>\n <FormGroup>\n <FormControl\n id=\"insertTextBox\"\n onChange={(e) =>\n this.setState({ insertTextBox: e.target.value })\n }\n placeholder=\"Page number\"\n className=\"input-box\"\n type=\"number\"\n />\n </FormGroup>\n </div>\n ) : (\n <div>{this.state.showLoadingText}</div>\n )}\n </Col>\n </Row>\n <FormGroup>\n <Upload\n appendPrependValue={this.state.appendPrependValue}\n closePopup={this.closePopup}\n appendPrependFileId={this.props.props.fileIdArray[0].FileId}\n insertPageAfter={this.state.insertTextBox}\n totalPageCount={this.state.pageCount}\n prependAppendCall={true}\n email={this.props.props.email}\n />\n </FormGroup>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default AppendPrependPdf;\n","import React from \"react\";\n\nfunction DownloadIndexSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-cloud-download\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4.406 1.342A5.53 5.53 0 0 1 8 0c2.69 0 4.923 2 5.166 4.579C14.758 4.804 16 6.137 16 7.773 16 9.569 14.502 11 12.687 11H10a.5.5 0 0 1 0-1h2.688C13.979 10 15 8.988 15 7.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 2.825 10.328 1 8 1a4.53 4.53 0 0 0-2.941 1.1c-.757.652-1.153 1.438-1.153 2.055v.448l-.445.049C2.064 4.805 1 5.952 1 7.318 1 8.785 2.23 10 3.781 10H6a.5.5 0 0 1 0 1H3.781C1.708 11 0 9.366 0 7.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383z\" />\n <path d=\"M7.646 15.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 14.293V5.5a.5.5 0 0 0-1 0v8.793l-2.146-2.147a.5.5 0 0 0-.708.708l3 3z\" />\n </svg>\n </div>\n );\n}\n\nfunction DeleteFileSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n fillRule=\"currentColor\"\n className=\"bi bi-trash\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z\" />\n <path\n fillRule=\"evenodd\"\n d=\"M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z\"\n />\n </svg>\n </div>\n );\n}\n\nfunction EmailSvgImage() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-envelope\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2zm13 2.383l-4.758 2.855L15 11.114v-5.73zm-.034 6.878L9.271 8.82 8 9.583 6.728 8.82l-5.694 3.44A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.739zM1 11.114l4.758-2.876L1 5.383v5.73z\" />\n </svg>\n </div>\n );\n}\n\nfunction RenameFileSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fillRule=\"currentColor\"\n className=\"bi bi-pencil\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z\" />\n </svg>\n </div>\n );\n}\n\nfunction RenameFileSaveSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fillRule=\"currentColor\"\n className=\"bi bi-save\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H9.5a1 1 0 0 0-1 1v7.293l2.646-2.647a.5.5 0 0 1 .708.708l-3.5 3.5a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L7.5 9.293V2a2 2 0 0 1 2-2H14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h2.5a.5.5 0 0 1 0 1H2z\" />\n </svg>\n </div>\n );\n}\n\nfunction RenameFileCancelSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-x\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\" />\n </svg>\n </div>\n );\n}\n\nfunction ExpungementSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-file-earmark-x\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M6.854 7.146a.5.5 0 1 0-.708.708L7.293 9l-1.147 1.146a.5.5 0 0 0 .708.708L8 9.707l1.146 1.147a.5.5 0 0 0 .708-.708L8.707 9l1.147-1.146a.5.5 0 0 0-.708-.708L8 8.293 6.854 7.146z\" />\n <path d=\"M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5v2z\" />\n </svg>\n </div>\n );\n}\n\nfunction UploadSvgImage() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-cloud-arrow-up\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.646 5.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 6.707V10.5a.5.5 0 0 1-1 0V6.707L6.354 7.854a.5.5 0 1 1-.708-.708l2-2z\"\n />\n <path d=\"M4.406 3.342A5.53 5.53 0 0 1 8 2c2.69 0 4.923 2 5.166 4.579C14.758 6.804 16 8.137 16 9.773 16 11.569 14.502 13 12.687 13H3.781C1.708 13 0 11.366 0 9.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383zm.653.757c-.757.653-1.153 1.44-1.153 2.056v.448l-.445.049C2.064 6.805 1 7.952 1 9.318 1 10.785 2.23 12 3.781 12h8.906C13.98 12 15 10.988 15 9.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 4.825 10.328 3 8 3a4.53 4.53 0 0 0-2.941 1.1z\" />\n </svg>\n </div>\n );\n}\n\nfunction DeleteFolderSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-folder-x\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181L15.546 8H14.54l.265-2.91A1 1 0 0 0 13.81 4H2.19a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91H9v1H2.826a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31zm6.339-1.577A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707z\" />\n <path d=\"M11.854 10.146a.5.5 0 0 0-.707.708L12.293 12l-1.146 1.146a.5.5 0 0 0 .707.708L13 12.707l1.146 1.147a.5.5 0 0 0 .708-.708L13.707 12l1.147-1.146a.5.5 0 0 0-.707-.708L13 11.293l-1.146-1.147z\" />\n </svg>\n </div>\n );\n}\n\nfunction AddFolderSvg() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fillRule=\"currentColor\"\n className=\"bi bi-folder-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"m.5 3 .04.87a1.99 1.99 0 0 0-.342 1.311l.637 7A2 2 0 0 0 2.826 14H9v-1H2.826a1 1 0 0 1-.995-.91l-.637-7A1 1 0 0 1 2.19 4h11.62a1 1 0 0 1 .996 1.09L14.54 8h1.005l.256-2.819A2 2 0 0 0 13.81 3H9.828a2 2 0 0 1-1.414-.586l-.828-.828A2 2 0 0 0 6.172 1H2.5a2 2 0 0 0-2 2zm5.672-1a1 1 0 0 1 .707.293L7.586 3H2.19c-.24 0-.47.042-.683.12L1.5 2.98a1 1 0 0 1 1-.98h3.672z\" />\n <path d=\"M13.5 10a.5.5 0 0 1 .5.5V12h1.5a.5.5 0 1 1 0 1H14v1.5a.5.5 0 1 1-1 0V13h-1.5a.5.5 0 0 1 0-1H13v-1.5a.5.5 0 0 1 .5-.5z\" />\n </svg>\n </div>\n );\n}\n\nfunction SearchSvgImage() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fillRule=\"currentColor\"\n className=\"bi bi-search\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\" />\n </svg>\n </div>\n );\n}\n\nexport {\n DownloadIndexSvg,\n DeleteFileSvg,\n EmailSvgImage,\n RenameFileSvg,\n RenameFileSaveSvg,\n RenameFileCancelSvg,\n ExpungementSvg,\n UploadSvgImage,\n DeleteFolderSvg,\n AddFolderSvg,\n SearchSvgImage,\n};\n","import React, { Component, Fragment } from \"react\";\nimport { Button, FormGroup, FormControl, Row, Col } from \"react-bootstrap\";\nimport \"./search.css\";\nimport \"react-tabulator/lib/styles.css\"; // required styles\nimport \"react-tabulator/lib/css/tabulator.min.css\"; // theme\nimport { ReactTabulator } from \"react-tabulator\";\nimport config from \"../../config\";\nimport Popup from \"reactjs-popup\";\nimport Header from \"../header\";\nimport EmailPopup from \"../emailpopup\";\nimport BrowseFolderImage from \"../Browse/browseFolderImage\";\nimport FilePropertiesImage from \"../Images/FileProperties.svg\";\nimport { Auth } from \"aws-amplify\";\nimport LoaderButton from \"../LoaderButton\";\nimport ExpungementPopup from \"../expungementpopup\";\nimport FileProperties from \"../Search/filePropertiesPopup\";\nimport AppendPrependPdf from \"../Browse/appenPrependPdf\";\nimport {\n templateHasOcredFiles,\n getTemplates,\n getTemplate,\n searchTemplate,\n updateFileName,\n getUserProfile,\n} from \"../../libs/API\";\nimport {\n DownloadIndexSvg,\n EmailSvgImage,\n RenameFileSvg,\n RenameFileSaveSvg,\n RenameFileCancelSvg,\n ExpungementSvg,\n UploadSvgImage,\n} from \"../Svg/allsvg\";\n\n// import TifImage from \"../Images/tif.gif\";\n// import PdfImage from \"../Images/pdf.gif\";\n\nconst scoreColumnName = \"Text Search Score\";\nclass Search extends Component {\n gridSearchRef = null;\n constructor(props) {\n super(props);\n this.state = {\n templates: [],\n columns: [],\n selectedTemplate: \"\",\n fileSize: true,\n pageCount: true,\n pageDimensions: true,\n textScore: true,\n redactionColumn: true,\n templateColumnsToShow: [],\n search: {},\n results: [],\n viewerOpen: false,\n fileIdArray: [],\n showEmailPopup: false,\n ReadOnly: true,\n isLoading: false,\n showTextSearch: false,\n showExpungementPopup: false,\n showFilePropertiesPopup: false,\n client: \"\",\n showAppendPrependPopup: false,\n };\n this.openViewer = this.openViewer.bind(this);\n this.closeViewer = this.closeViewer.bind(this);\n this.viewFile = this.viewFile.bind(this);\n // console.log(\"search props\", props);\n }\n\n async componentDidMount() {\n await this.loadTemplates();\n let clientName = \"\";\n if (this.props.props.hasCliftonWorkflow) {\n clientName = \"clifton\";\n } else if (this.props.props.hasMedfordWorkflow) {\n clientName = \"medford\";\n } else if (this.props.props.hasEnglewoodWorkflow) {\n clientName = \"englewood\";\n } else if (this.props.props.hasGlenrockWorkflow) {\n clientName = \"glenrock\";\n } else if (this.props.props.hasAberdeenWorkflow) {\n clientName = \"Aberdeen\";\n } else if (this.props.props.hasDemoExpungementWorkflow) {\n clientName = \"Demo\";\n } else if (this.props.props.hasEastamptonExpungementWorkflow) {\n clientName = \"Eastampton\";\n }\n this.setState({ client: clientName });\n }\n\n openViewer() {\n this.setState({ viewerOpen: true });\n }\n\n closeViewer() {\n this.setState({ viewerOpen: false });\n }\n\n getSelectedTemplateId() {\n const filtered = this.state.templates.filter((template) => {\n return template.tableName === this.state.selectedTemplate;\n });\n if (filtered.length > 0) {\n return filtered[0].templateId;\n }\n }\n\n async setShowTextSearch() {\n const selectedTemplateId = this.getSelectedTemplateId();\n if (!selectedTemplateId) {\n this.setState({ showTextSearch: false });\n return;\n }\n //check (via API) if OCR Status Table has OCRed files for selected template\n templateHasOcredFiles(selectedTemplateId).then((data) => {\n const templateHasOcredFiles = data === \"true\";\n const hasTextSearch = this.props.props.hasTextSearch;\n const showTextSearch = templateHasOcredFiles && hasTextSearch;\n this.setState({ showTextSearch });\n });\n }\n\n async loadTemplates() {\n getTemplates().then((data) => {\n if (data) {\n // console.log(`Available templates: ${data.map((t) => t.displayName.trim())}`);\n const templates = [\n {\n displayName: \"Select Index Template\",\n tableName: \"Select Index Template\",\n },\n ].concat(data);\n this.setState({ templates }, () => this.onLoadTemplates());\n }\n });\n }\n\n onTemplateChange = async (event) => {\n let options = event.target.options;\n let tableName = options[options.selectedIndex].value;\n if (tableName.length && tableName !== \"Select Index Template\") {\n this.setState({ ReadOnly: false });\n await this.loadSearchControls(tableName);\n await this.setShowTextSearch();\n } else {\n this.setState({\n columns: [],\n results: [],\n ReadOnly: true,\n });\n }\n };\n\n checkUserProfile = async (tableName) => {\n const userProfile = {\n userId: this.props.props.userId,\n templateName: tableName,\n };\n await getUserProfile(userProfile).then(async (x) => {\n if (x.data !== \"\") {\n //console.log(x, this.state.columns);\n // let array = this.state.actualColumns.slice();\n // if (x.data.templateColumnsToShow.length > 1) {\n // for (let i = x.data.templateColumnsToShow.length - 1; i >= 0; i--) {\n // array.splice(x.data.templateColumnsToShow[i], 1);\n // }\n // }\n this.setState(\n {\n templateColumnsToShow: x.data.templateColumnsToShow,\n redactionColumn: x.data.redaction,\n fileSize: x.data.fileSize,\n textScore: x.data.textScore,\n pageDimensions: x.data.pageDimensions,\n pageCount: x.data.pageCount,\n },\n async () => {\n await this.searchTemplates(tableName);\n }\n );\n } else {\n await this.searchTemplates(tableName);\n }\n });\n };\n\n onLoadTemplates = async () => {\n //when the user has access to only one template, hide the first option and auto select the first index\n if (\n this.state &&\n this.state.templates &&\n this.state.templates.length === 2\n ) {\n const templateSelect = document.getElementById(\"templates\");\n templateSelect.options[0].style.display = \"none\";\n templateSelect.selectedIndex = \"1\";\n templateSelect.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n };\n\n async loadSearchControls(tableName) {\n //set current template and clear search object\n let hideParams = [\"div.right\", \"div.renderToolTipButton\"];\n this.hideTooTip(hideParams);\n this.setState({\n search: {},\n selectedTemplate: tableName,\n results: [],\n columns: [],\n });\n getTemplate(tableName).then((data) => {\n let columns = data;\n //console.log(`Template columns: ${columns.map((c) => c.InputName.trim())}`);\n this.setState({ columns });\n });\n }\n\n search = async (event) => {\n event.preventDefault();\n this.setState({ isLoading: true });\n let { selectedTemplate } = this.state;\n await this.checkUserProfile(selectedTemplate);\n // if (!search || Object.keys(search).length === 0) return;\n\n // if (this.props.props.hasManageRedaction) {\n // this.gridSearchRef.table.addColumn({\n // title: \"Redacted\",\n // field: \"HasAnnotations\",\n // formatter: this.boolFormatter,\n // });\n // }\n };\n\n searchTemplates = async (selectedTemplate) => {\n let { search, columns } = this.state;\n const searchQueryString = Object.keys(search)\n .map((key) => `${key}=${search[key]}`)\n .join(\"&\");\n searchTemplate(selectedTemplate, searchQueryString)\n .then((data) => {\n const searchResults = data;\n console.log(searchResults);\n //console.log(`Search results: ${JSON.stringify(data)}`);\n\n searchResults.forEach((searchResult) => {\n if (searchResult.HasAnnotations == null) {\n searchResult.HasAnnotations = false;\n }\n });\n //add/remove 'Text Search Score'\n if (searchResults.length > 0) {\n //if the search result has a 'Text Search Score' property and it's not in the list columns, then add it\n if (Object.keys(searchResults[0]).includes(scoreColumnName)) {\n if (!columns.find((col) => col.InputName === scoreColumnName)) {\n columns = columns.concat({\n InputName: scoreColumnName,\n DataType: \"double\",\n DataTypeLength: null,\n });\n }\n }\n //if the search result doesn't have the 'Text Search Score' property, remove it from columns if it exists\n else {\n if (columns.find((col) => col.InputName === scoreColumnName)) {\n columns = columns.filter(\n (col) => col.InputName !== scoreColumnName\n );\n }\n }\n this.setState({ columns });\n }\n this.setState(\n { results: searchResults, isLoading: false },\n function () {\n this.setGridFooterText(1);\n let gridcolumns = this.mapColumnsToGrid(false);\n this.gridSearchRef.table.setColumns(gridcolumns);\n }\n );\n })\n .catch((error) => {\n console.log(error);\n this.setState({ isLoading: false });\n });\n let showParams = [\"div.right\", \"div.renderToolTipButton\"];\n this.showToolTip(showParams);\n };\n\n setGridFooterText(pageNumber, rowCount) {\n const resultsCountSpan = document.getElementById(\"resultsCount\");\n\n if (resultsCountSpan && this.state.results) {\n let resultsCount = 0;\n if (rowCount == null) {\n resultsCount = this.state.results.length;\n } else {\n resultsCount = rowCount;\n }\n\n if (resultsCount < 1) {\n resultsCountSpan.innerText = \"\";\n return;\n }\n const pageSize = this.gridSearchRef.table.getPageSize();\n const pageFirst = (pageNumber - 1) * pageSize + 1;\n const pageLast = Math.min(pageNumber * pageSize, resultsCount);\n\n let text = \"Result count: \";\n if (resultsCount > pageSize) {\n text += `${pageFirst} - ${pageLast} (of ${resultsCount})`;\n } else {\n text += `${pageLast}`;\n }\n resultsCountSpan.innerText = text;\n }\n }\n\n boolFormatter = function (cell) {\n return cell.getValue() === false ? \"No\" : \"Yes\";\n };\n\n mapColumnsToGrid = (renameFile) => {\n let dateFormatter = function (cell) {\n var value = cell.getValue();\n let dateString = cell.getRow().getData().Date;\n if (value && dateString) {\n if (value === dateString) {\n let date = new Date(value);\n value = getFormattedDate(date);\n }\n }\n return value;\n };\n\n function getFormattedDate(date) {\n const year = date.getUTCFullYear();\n let month = (date.getUTCMonth() + 1).toString();\n month = month.length > 1 ? month : \"0\" + month;\n let day = date.getUTCDate().toString();\n day = day.length > 1 ? day : \"0\" + day;\n return month + \"/\" + day + \"/\" + year;\n }\n\n let canBeLink = function (cell) {\n return renameFile\n ? cell.getValue()\n : \"<a href=\" + cell.getRow().getData() + \">\" + cell.getValue() + \"</a>\";\n };\n\n let columns = []\n .concat({\n formatter: \"rowSelection\",\n titleFormatter: \"rowSelection\",\n titleFormatterParams: {\n rowRange: \"visible\",\n },\n // hozAlign: \"center\",\n width: \"3%\",\n download: false,\n headerSort: false,\n visible: !renameFile ? true : false,\n cellClick: function (e, cell) {\n cell.getRow().toggleSelect();\n },\n })\n .concat({\n title: \"File Type\",\n field: \"FileExtension\",\n headerSort: false,\n width: \"3%\",\n visible: false,\n download: true,\n })\n .concat({\n title: \"FileId\",\n field: \"FileId\",\n headerSort: false,\n width: \"3%\",\n visible: false,\n download: true,\n })\n .concat({\n title: \"File Name\",\n field: \"FileName\",\n formatter: canBeLink,\n editor: \"input\",\n cellClick: (e, cell) => {\n if (!renameFile) {\n this.viewFile(e, cell);\n }\n },\n })\n .concat(\n this.state.columns\n .map((c, i) => {\n let col = {\n title: c.InputName,\n field: c.InputName,\n formatter: dateFormatter,\n visible: !this.state.templateColumnsToShow.includes(i.toString()),\n };\n if (c.InputName === scoreColumnName) {\n col.tooltip = \"Search Relevancy Score\";\n col.visible = this.state.textScore;\n //col.formatter = \"progress\"; //todo - try out after scaling by 10 or 100...\n }\n return col;\n })\n .concat({\n title: \"Redaction\",\n field: \"HasAnnotations\",\n formatter: this.boolFormatter,\n visible:\n this.props.props.hasManageRedaction && this.state.redactionColumn,\n })\n .concat({\n title: \"Page Count\",\n field: \"PageCount\",\n visible: this.props.props.hasFileProperties && this.state.pageCount,\n })\n .concat({\n title: \"File Size (Bytes)\",\n field: \"FileSize\",\n formatter: function (cell, formatterParams) {\n if (cell.getValue() != null) {\n return cell.getValue().toLocaleString();\n } else {\n return cell.getValue();\n }\n },\n visible: this.props.props.hasFileProperties && this.state.fileSize,\n })\n .concat({\n title: \"Page Dimensions\",\n field: \"PageDimensions\",\n visible:\n this.props.props.hasFileProperties && this.state.pageDimensions,\n })\n );\n\n return columns;\n };\n\n handleSearchChange = (event) => {\n const { id, value } = event.target;\n // console.log(\"id, value\", id, value);\n let search = this.state.search ?? {};\n if (!value || id === value) {\n delete search[id];\n } else {\n search[id] = value;\n }\n this.setState({ search: search });\n };\n\n async getRefreshToken() {\n const user = await Auth.currentAuthenticatedUser();\n // console.log(user.signInUserSession.refreshToken.token);\n return user.signInUserSession.refreshToken.token;\n }\n\n async viewFile(e, cell) {\n e.preventDefault();\n this.openViewer();\n const fileId = cell.getRow().getData().FileId;\n const fileName = cell.getRow().getData().FileName;\n const targetOrigin = config.ImageViewer;\n const refreshToken = await this.getRefreshToken();\n // console.log(refreshToken);\n const message = {\n refreshToken: refreshToken,\n fileId: fileId,\n editIndex: this.props.props.hasEditIndex,\n manageRedaction: this.props.props.hasManageRedaction,\n deletePages: this.props.props.hasDelete,\n textSearch: this.props.props.hasTextSearch\n ? this.state.search.textSearch\n : null,\n fileName: fileName,\n userEmailId: this.props.props.loggedInUser,\n managePii: this.props.props.hasPIIRole,\n clientId: this.props.props.clientId,\n };\n const imageViewer = document.getElementById(\"imageViewer\");\n if (imageViewer.attachEvent) {\n imageViewer.attachEvent(\"onload\", function () {\n imageViewer.contentWindow.postMessage(\n JSON.stringify(message),\n targetOrigin\n );\n });\n } else {\n imageViewer.onload = function () {\n imageViewer.contentWindow.postMessage(\n JSON.stringify(message),\n targetOrigin\n );\n };\n }\n }\n\n hideTooTip = (hideParams) => {\n Array.from(document.querySelectorAll(hideParams)).forEach(function (val) {\n val.style.display = \"none\";\n });\n };\n\n showToolTip = (showParams) => {\n Array.from(document.querySelectorAll(showParams)).forEach(function (val) {\n val.style.display = \"block\";\n });\n };\n\n handleReset = () => {\n let hideParams = [\n \"div.right\",\n \"div.renderToolTipButton\",\n \"div.renameFileToolTipButton\",\n ];\n this.hideTooTip(hideParams);\n let allInputs = document.querySelectorAll(\"input\");\n if (allInputs.length > 0) {\n allInputs.forEach((input) => (input.value = \"\"));\n }\n let selectInput = document.querySelectorAll(\".custom-select\");\n if (selectInput) {\n selectInput.forEach((input) => (input.selectedIndex = 0));\n }\n this.setState({ search: {}, results: [] });\n };\n\n handleBrowse = () => {\n this.props.history.push(\"/browse\");\n };\n\n handleChildUnmount = () => {\n this.setState({\n showEmailPopup: false,\n showExpungementPopup: false,\n showFilePropertiesPopup: false,\n showAppendPrependPopup: false,\n });\n };\n\n handleEmailPopup = () => {\n let rows = this.gridSearchRef.table.getSelectedData();\n if (rows.length > 0) {\n let fileIds = rows.map(function (m) {\n return { fileId: m.FileId, redaction: m.HasAnnotations };\n });\n this.setState({ showEmailPopup: true, fileIdArray: fileIds });\n }\n };\n\n handleExpungementPopup = () => {\n let rows = this.gridSearchRef.table.getSelectedData();\n if (rows.length === 1) {\n this.setState({ showExpungementPopup: true, fileIdArray: rows });\n } else if (rows.length > 1) {\n alert(\"You can expunge 1 file at a time.\");\n }\n };\n\n handleFilePropertiesPopup = () => {\n this.setState({ showFilePropertiesPopup: true });\n };\n\n handleRenameFile = () => {\n // disabling the search button when the grid is in rename file view\n this.setState({ ReadOnly: true });\n let rows = this.gridSearchRef.table.getSelectedData();\n let hideParams = [\"div.renderToolTipButton\"];\n let showParams = [\"div.renameFileToolTipButton\"];\n if (rows.length > 0) {\n this.hideTooTip(hideParams);\n this.showToolTip(showParams);\n let gridcolumns = this.mapColumnsToGrid(true);\n this.gridSearchRef.table.setColumns(gridcolumns);\n this.gridSearchRef.table.setData(rows);\n this.setGridFooterText(1, rows.length);\n }\n };\n\n handleRenameFileCancel = (cancelFile) => {\n // enabling the search button when the user click cancel rename file.\n this.setState({ ReadOnly: false });\n let showParams = [\"div.renderToolTipButton\"];\n let hideParams = [\"div.renameFileToolTipButton\"];\n if (cancelFile === false) {\n let editedCells = this.gridSearchRef.table.getEditedCells();\n editedCells.forEach(function (cell) {\n let oldVal = cell.getOldValue();\n if (oldVal !== null) {\n try {\n cell.restoreOldValue();\n } catch {}\n }\n });\n }\n let gridcolumns = this.mapColumnsToGrid(false);\n this.gridSearchRef.table.setColumns(gridcolumns);\n this.gridSearchRef.table.setData(this.state.results);\n this.setGridFooterText(1);\n this.hideTooTip(hideParams);\n this.showToolTip(showParams);\n };\n\n handleRenameFileSave = async () => {\n let editedCells = this.gridSearchRef.table.getEditedCells();\n let mappedCells = [];\n if (editedCells.length > 0) {\n for (let i = 0; i < editedCells.length; i++) {\n let currentValue = editedCells[i].getValue().trim();\n let updateFileNameParams = {\n fileId: editedCells[i].getRow().getData().FileId,\n newfileName: currentValue,\n };\n mappedCells.push(updateFileNameParams);\n }\n await this.updateFileName(mappedCells);\n }\n // enabling the search button when the user click cancel rename file.\n this.setState({ ReadOnly: false });\n };\n\n updateFileName = async (renameFilesParams) => {\n updateFileName(renameFilesParams).then((data) => {\n if (data.status === 200) {\n this.handleRenameFileCancel(true);\n }\n });\n };\n\n handleDownloadIndexCsv = (e) => {\n e.preventDefault();\n const selectedTemplate = document.getElementById(\"templates\");\n const selectedText =\n selectedTemplate.options[selectedTemplate.selectedIndex].text;\n let downloadName = `${selectedText}_IndexData`;\n this.gridSearchRef.table.download(\"csv\", `${downloadName}.csv`, {\n delimiter: \"|\",\n });\n };\n\n renderToolTipButton() {\n return (\n <div style={{ width: \"99%\", height: \"60px\", maxHeight: \"60px\" }}>\n <div className=\"renderToolTipButton\">\n <Row style={{ marginLeft: \"5px\" }}>\n <Col sm={8}>\n <img\n src={FilePropertiesImage}\n alt=\"FileProperties\"\n title=\"Show/Hide Columns\"\n style={{\n width: \"40px\",\n height: \"37px\",\n cursor: \"pointer\",\n marginLeft: \"20px\",\n }}\n onClick={this.handleFilePropertiesPopup}\n />\n </Col>\n <Col sm={4} className=\"text-right\">\n {this.state.client.length > 0 && (\n <Button\n title=\"Expunge Records\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleExpungementPopup}\n >\n <ExpungementSvg />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n title=\"Rename Selected\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleRenameFile}\n >\n <RenameFileSvg />\n </Button>\n )}\n {this.props.props.hasSendEmail && (\n <Button\n title=\"Email Selected\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleEmailPopup}\n >\n <EmailSvgImage />\n </Button>\n )}\n {this.props.props.hasDownloadIndex && (\n <Button\n title=\"Download Index Data\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleDownloadIndexCsv}\n >\n <DownloadIndexSvg />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n title=\"Upload Files\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleUploadFiles}\n >\n <UploadSvgImage />\n </Button>\n )}\n </Col>\n </Row>\n </div>\n <div className=\"renameFileToolTipButton\">\n <Button\n title=\"Save\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleRenameFileSave}\n >\n <RenameFileSaveSvg />\n </Button>\n <Button\n title=\"Cancel\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={() => this.handleRenameFileCancel(false)}\n >\n <RenameFileCancelSvg />\n </Button>\n </div>\n </div>\n );\n }\n\n renderSearchResults() {\n return (\n <Fragment>\n <ReactTabulator\n id=\"table\"\n style={{\n maxHeight: \"100%\",\n width: \"98%\",\n }}\n columns={[]}\n data={this.state.results}\n index=\"FileId\"\n ref={(ref) => (this.gridSearchRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 20,\n placeholder: \"No Files Available\",\n downloadReady: (fileContents, blob) => blob,\n }}\n footerElement={<span id=\"resultsCount\" style={{ float: \"left\" }} />}\n pageLoaded={(pageNumber) => {\n this.setGridFooterText(pageNumber);\n }}\n />\n </Fragment>\n );\n }\n\n renderEmailPop() {\n return (\n <Fragment>\n {this.state.showEmailPopup && (\n <EmailPopup\n props={{\n showEmailPopup: this.state.showEmailPopup,\n fileIdArray: this.state.fileIdArray,\n manageRedaction: this.props.props.hasManageRedaction,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderExpungementPopup() {\n return (\n <Fragment>\n {this.state.showExpungementPopup && (\n <ExpungementPopup\n props={{\n showExpungementPopup: this.state.showExpungementPopup,\n selectedRow: this.state.fileIdArray,\n client: this.state.client,\n templateName: this.state.selectedTemplate,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderAppendPrependFilePopup() {\n return (\n <Fragment>\n {this.state.showAppendPrependPopup && (\n <AppendPrependPdf\n props={{\n filePath: this.state.fileName,\n fileIdArray: this.state.fileIdArray,\n showAppendPrependPopup: this.state.showAppendPrependPopup,\n email: this.props.props.loggedInUser,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n handleUploadFiles = async (e) => {\n e.preventDefault();\n const rows = this.gridSearchRef.table.getSelectedData();\n if (rows.length > 1) {\n alert(\"You can Append or Prepend 1 file at a time.\");\n return;\n }\n if (rows.length === 1) {\n this.setState({ showAppendPrependPopup: true, fileIdArray: rows });\n return;\n }\n };\n\n renderFilePropertiesPopup() {\n return (\n <Fragment>\n {this.state.showFilePropertiesPopup && (\n <FileProperties\n props={{\n showFilePropertiesPopup: this.state.showFilePropertiesPopup,\n columns: this.state.columns,\n userId: this.props.props.userId,\n templateName: this.state.selectedTemplate,\n hasManageRedaction: this.props.props.hasManageRedaction,\n hasTextScore: this.props.props.hasTextSearch,\n hasFileProperties: this.props.props.hasFileProperties,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div id=\"mainPageDiv\">\n <Header props={this.props.props} history={this.props.history} />\n <div className=\"SearchDocumentSync\">\n <div className=\"left\">\n <FormGroup>\n <Button\n title=\"Browse Repository\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleBrowse}\n >\n <BrowseFolderImage />\n </Button>\n </FormGroup>\n <FormGroup controlId=\"templates\">\n {/* <ControlLabel>Index Template:</ControlLabel>{\" \"} */}\n <FormControl\n componentClass=\"select\"\n onChange={this.onTemplateChange}\n className=\"indexTemplateselect\"\n >\n {this.state.templates.map((template) => (\n <option key={template.tableName} value={template.tableName}>\n {template.displayName.trim()}\n </option>\n ))}\n </FormControl>\n </FormGroup>\n <form\n onSubmit={this.search}\n id=\"searchControls\"\n autoComplete=\"off\"\n >\n {this.state.columns\n .filter((x) => x.InputName !== scoreColumnName)\n .map((column) => (\n <FormGroup key={column.InputName}>\n {/* {\n <label>{column.InputName}:</label>\n console.log(column)\n } */}\n {column.ControlledList ? (\n <select\n id={column.InputName}\n onChange={this.handleSearchChange}\n className=\"custom-select\"\n >\n {[`${column.InputName}`]\n .concat(column.ControlledList.sort())\n .map((item) => (\n <option key={item} value={item}>\n {item}\n </option>\n ))}\n </select>\n ) : (\n <div>\n {column.DataType === \"date\" ? (\n <div>\n <Row>\n <Col sm={5}>\n <span className=\"static-label\">\n {column.InputName} From:\n </span>\n </Col>\n <Col sm={7}>\n <FormControl\n id={\"fromDate_\" + column.InputName}\n onChange={this.handleSearchChange}\n placeholder={column.InputName}\n className=\"input-box date\"\n type=\"date\"\n />\n </Col>\n </Row>\n <Row>\n <Col sm={5}>\n <span className=\"static-label\">\n {column.InputName} To:\n </span>\n </Col>\n <Col sm={7}>\n <FormControl\n id={\"toDate_\" + column.InputName}\n onChange={this.handleSearchChange}\n placeholder={column.InputName}\n className=\"input-box date\"\n type=\"date\"\n />\n </Col>\n </Row>\n </div>\n ) : (\n <div>\n <FormControl\n id={column.InputName}\n onChange={this.handleSearchChange}\n placeholder={column.InputName}\n className=\"input-box\"\n type=\"input\"\n />\n <span className=\"floating-label\">\n {column.InputName}:\n </span>\n </div>\n )}\n </div>\n )}\n </FormGroup>\n ))}\n {this.state.showTextSearch && (\n <div>\n <FormGroup controlId=\"textSearch\">\n <FormControl\n onChange={this.handleSearchChange}\n type=\"text\"\n readOnly={this.state.ReadOnly}\n placeholder=\"Text Search\"\n style={{ color: \"#9e0203\" }}\n className=\"input-box\"\n ></FormControl>\n <span className=\"floating-label\">Text search:</span>\n </FormGroup>\n </div>\n )}\n <FormGroup>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.ReadOnly}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Search\"\n loadingText=\"Searching...\"\n className=\"searchResetbutton\"\n />\n <Button\n bsClass=\"btn btn-outline-secondary\"\n type=\"button\"\n className=\"searchResetbutton\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n </FormGroup>\n </form>\n </div>\n {this.renderToolTipButton()}\n <div className=\"right\">{this.renderSearchResults()}</div>\n </div>\n </div>\n <Popup\n contentStyle={{\n width: \"95%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.viewerOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closeViewer}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closeViewer}>\n ×\n </a>\n <iframe\n id=\"imageViewer\"\n src={config.ImageViewer}\n title=\"Image Viewer\"\n style={{ width: \"100%\", height: \"90vh\" }}\n ></iframe>\n </div>\n </Popup>\n {this.renderEmailPop()}\n {this.renderExpungementPopup()}\n {this.renderFilePropertiesPopup()}\n {this.renderAppendPrependFilePopup()}\n </Fragment>\n );\n }\n}\n\nexport default Search;\n","import React from \"react\";\nimport { Route } from \"react-router-dom\";\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default ({ component: C, props: cProps, ...rest }) => (\n <Route {...rest} render={(props) => <C {...props} {...cProps} />} />\n);\n","import React from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\n\nexport default function AuthenticatedRoute({\n component: C,\n props: cProps,\n requiredPermission,\n ...rest\n}) {\n return (\n <Route\n {...rest}\n render={(props) =>\n // Check if the user is authenticated\n cProps.props.hasAuthenticated ? (\n // Check for the required permission if it's provided\n requiredPermission ? (\n cProps.props[requiredPermission] ? (\n <C {...props} {...cProps} />\n ) : (\n // Redirect if the user does not have the required permission\n <Redirect to=\"/no-permission\" />\n )\n ) : (\n // If no specific permission is required, just render the component\n <C {...props} {...cProps} />\n )\n ) : (\n // Redirect to login if not authenticated\n <Redirect to=\"/\" />\n )\n }\n />\n );\n}\n","import React, { Component, Fragment } from \"react\";\nimport \"../Browse/browse.css\";\nimport { ReactTabulator } from \"react-tabulator\";\nimport Popup from \"reactjs-popup\";\nimport \"react-tabulator/lib/styles.css\"; // required styles\nimport \"react-tabulator/lib/css/tabulator.min.css\"; // theme\nimport config from \"../../config\";\nimport { Auth } from \"aws-amplify\";\n// import TifImage from \"../Images/tif.gif\";\n// import PdfImage from \"../Images/pdf.gif\";\n\nclass BrowseGridView extends Component {\n gridBrowseRef = null;\n constructor(props) {\n super(props);\n this.state = {\n viewerOpen: false,\n };\n //console.log(\"anchor\", props);\n }\n\n async componentDidMount() {\n this.props.onRef(this);\n }\n\n openViewer = () => {\n this.setState({ viewerOpen: true });\n };\n\n closeViewer = () => {\n this.setState({ viewerOpen: false });\n };\n\n viewFile = async (e, cell) => {\n e.preventDefault();\n this.openViewer();\n const fileId = cell.getRow().getData().FileId;\n const fileName = cell.getRow().getData().FileName;\n const targetOrigin = config.ImageViewer;\n const refreshToken = (await Auth.currentAuthenticatedUser())\n .signInUserSession.refreshToken.token;\n const message = {\n refreshToken: refreshToken,\n fileId: fileId,\n editIndex: this.props.editIndex,\n manageRedaction: this.props.manageRedaction,\n deletePages: this.props.deletePages,\n fileName: fileName,\n userEmailId: this.props.loggedInUser,\n managePii: this.props.hasPIIRole,\n clientId: this.props.clientId,\n };\n const imageViewer = document.getElementById(\"imageViewer\");\n if (imageViewer.attachEvent) {\n imageViewer.attachEvent(\"onload\", function () {\n imageViewer.contentWindow.postMessage(\n JSON.stringify(message),\n targetOrigin\n );\n });\n } else {\n imageViewer.onload = function () {\n imageViewer.contentWindow.postMessage(\n JSON.stringify(message),\n targetOrigin\n );\n };\n }\n };\n\n handleFilePath = (renameFile) => {\n let canBeLink = function (cell) {\n return cell.getRow().getData().FileId === 0 || renameFile != null\n ? cell.getValue()\n : \"<a href=\" + cell.getRow().getData() + \">\" + cell.getValue() + \"</a>\";\n };\n\n let boolFormatter = function (cell) {\n return cell.getValue() === false ? \"No\" : \"Yes\";\n };\n\n let dateFormatter = function (cell) {\n var value = cell.getValue();\n let dateString = cell.getRow().getData().Date;\n if (value && dateString) {\n if (value === dateString) {\n let date = new Date(value);\n value = getFormattedDate(date);\n }\n }\n return value;\n };\n\n function getFormattedDate(date) {\n const year = date.getUTCFullYear();\n let month = (date.getUTCMonth() + 1).toString();\n month = month.length > 1 ? month : \"0\" + month;\n let day = date.getUTCDate().toString();\n day = day.length > 1 ? day : \"0\" + day;\n return month + \"/\" + day + \"/\" + year;\n }\n return []\n .concat({\n formatter: \"rowSelection\",\n titleFormatter: \"rowSelection\",\n titleFormatterParams: {\n rowRange: \"visible\",\n },\n // hozAlign: \"center\",\n width: \"1px\",\n headerSort: false,\n visible: !renameFile ? true : false,\n cellClick: function (e, cell) {\n cell.getRow().toggleSelect();\n },\n })\n .concat({\n title: \"File Name\",\n field: \"FileName\",\n formatter: canBeLink,\n editor: \"input\",\n cellClick: (e, cell) => {\n if (!renameFile && cell.getRow().getData().FileId !== 0) {\n this.viewFile(e, cell);\n }\n },\n })\n .concat(\n this.props.columns.map((c, i) => {\n let col = {\n title: c.InputName,\n field: c.InputName,\n formatter: dateFormatter,\n visible: !this.props.templateColumnsToShow.includes(i.toString()),\n };\n return col;\n })\n )\n .concat({\n title: \"Redaction\",\n field: \"HasAnnotations\",\n formatter: boolFormatter,\n cellClick: (e, cell) => {\n if (!renameFile) {\n this.viewFile(e, cell);\n }\n },\n visible: this.props.manageRedaction && this.props.redactionColumn,\n })\n .concat({\n title: \"Page Count\",\n field: \"PageCount\",\n cellClick: (e, cell) => {\n if (!renameFile) {\n this.viewFile(e, cell);\n }\n },\n visible: this.props.fileProperties && this.props.pageCount,\n })\n .concat({\n title: \"File Size (Bytes)\",\n field: \"FileSize\",\n formatter: function (cell, formatterParams) {\n if (cell.getValue() != null) {\n return cell.getValue().toLocaleString();\n } else {\n return cell.getValue();\n }\n },\n cellClick: (e, cell) => {\n if (!renameFile) {\n this.viewFile(e, cell);\n }\n },\n visible: this.props.fileProperties && this.props.fileSize,\n })\n .concat({\n title: \"Page Dimensions\",\n field: \"PageDimensions\",\n cellClick: (e, cell) => {\n if (!renameFile) {\n this.viewFile(e, cell);\n }\n },\n visible: this.props.fileProperties && this.props.pageDimensions,\n });\n };\n\n handleIndexTemplateColumns = (renameFile) => {\n let canBeLink = function (cell) {\n return cell.getRow().getData().FileId === 0 || renameFile != null\n ? cell.getValue()\n : \"<a href=\" + cell.getRow().getData() + \">\" + cell.getValue() + \"</a>\";\n };\n\n let boolFormatter = function (cell) {\n return cell.getValue() === false ? \"No\" : \"Yes\";\n };\n let newColumns = [\n {\n formatter: \"rowSelection\",\n titleFormatter: \"rowSelection\",\n headerSort: false,\n width: \"1px\",\n titleFormatterParams: {\n rowRange: \"visible\",\n },\n cellClick: (e, cell) => {\n cell.getRow().toggleSelect();\n },\n visible: !renameFile ? true : false,\n },\n {\n title: \"File Name\",\n field: \"FileName\",\n formatter: canBeLink,\n editor: \"input\",\n cellClick: (e, cell) => {\n if (!renameFile && cell.getRow().getData().FileId !== 0) {\n this.viewFile(e, cell);\n }\n },\n },\n {\n title: \"Redaction\",\n field: \"HasAnnotations\",\n headerSort: false,\n width: \"10%\",\n formatter: boolFormatter,\n visible: this.props.manageRedaction && this.props.redactionColumn,\n },\n {\n title: \"Page Count\",\n field: \"PageCount\",\n headerSort: false,\n width: \"10%\",\n visible: this.props.fileProperties && this.props.pageCount,\n },\n {\n title: \"File Size (Bytes)\",\n field: \"FileSize\",\n formatter: function (cell, formatterParams) {\n if (cell.getValue() != null) {\n return cell.getValue().toLocaleString();\n } else {\n return cell.getValue();\n }\n },\n headerSort: false,\n width: \"10%\",\n visible: this.props.fileProperties && this.props.fileSize,\n },\n {\n title: \"Page Dimensions\",\n field: \"PageDimensions\",\n headerSort: false,\n width: \"10%\",\n visible: this.props.fileProperties && this.props.pageDimensions,\n },\n ];\n return newColumns;\n };\n\n setGridFooterText(pageNumber, rowCount) {\n const resultsCountSpan = document.getElementById(\"resultsCount\");\n if (\n resultsCountSpan &&\n this.props.props &&\n this.gridBrowseRef &&\n this.gridBrowseRef.table\n ) {\n let resultsCount = 0;\n if (rowCount == null) {\n resultsCount = this.props.props.length;\n } else {\n resultsCount = rowCount;\n }\n if (resultsCount < 1) {\n resultsCountSpan.innerText = \"\";\n return;\n }\n const pageSize = this.gridBrowseRef.table.getPageSize();\n const pageFirst = (pageNumber - 1) * pageSize + 1;\n const pageLast = Math.min(pageNumber * pageSize, resultsCount);\n\n let text = \"File count: \";\n if (resultsCount > pageSize) {\n text += `${pageFirst} - ${pageLast} (of ${resultsCount})`;\n } else {\n text += `${pageLast}`;\n }\n resultsCountSpan.innerText = text;\n }\n }\n\n render() {\n let data = this.props.props;\n this.setGridFooterText(1);\n\n return (\n <Fragment>\n <div>\n <ReactTabulator\n id=\"table\"\n columns={[]}\n data={data}\n index=\"FileId\"\n ref={(ref) => (this.gridBrowseRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 20,\n placeholder: \"No Files For This Folder\",\n }}\n footerElement={<span id=\"resultsCount\" style={{ float: \"left\" }} />}\n pageLoaded={(pageNumber) => {\n this.setGridFooterText(pageNumber);\n }}\n />\n </div>\n <Popup\n contentStyle={{\n width: \"95%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.viewerOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closeViewer}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closeViewer}>\n ×\n </a>\n <iframe\n id=\"imageViewer\"\n src={config.ImageViewer}\n title=\"Image Viewer\"\n style={{ width: \"100%\", height: \"90vh\" }}\n ></iframe>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default BrowseGridView;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport {\n FormControl,\n ControlLabel,\n Row,\n Col,\n FormGroup,\n} from \"react-bootstrap\";\nimport LoaderButton from \"../LoaderButton\";\nimport { addFolder } from \"../../libs/API\";\n\nclass AddFolderPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n isLoading: false,\n folderName: \"\",\n message: \"\",\n };\n // console.log(\"add folder popup props\", props);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showAddFolderPopup });\n }\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n handleAddFolderSubmit = (e) => {\n this.setState({ isLoading: true });\n e.preventDefault();\n let folderParams = [];\n folderParams.push({ nodeId: this.props.props.parentNodeId });\n folderParams.push({ folderName: this.state.folderName });\n addFolder(folderParams).then((data) => {\n if (data > 0) {\n this.setState({ isLoading: false, message: \"\" });\n let newLeaf = {\n parentId: this.props.props.parentNodeId,\n id: parseInt(data),\n label: this.state.folderName,\n items: [],\n };\n this.props.addFolder(newLeaf);\n this.closePopup();\n } else {\n this.setState({ isLoading: false, message: data });\n }\n });\n };\n\n render() {\n const rowStyle = {\n marginBottom: \"0.4rem\",\n };\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>Add Folder - {this.props.props.filePath}</h5>\n <br />\n <form onSubmit={this.handleAddFolderSubmit}>\n <FormGroup>\n <div>\n <Row style={rowStyle}>\n <Col sm={3} componentClass={ControlLabel}>\n Folder Name:\n </Col>\n <Col sm={9}>\n <FormControl\n className=\"input-box\"\n type=\"text\"\n required\n onChange={(e) =>\n this.setState({ folderName: e.target.value })\n }\n />\n </Col>\n </Row>\n </div>\n <br />\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Add Folder\"\n loadingText=\"Adding Folder......\"\n />\n </FormGroup>\n <br />\n <h5 style={{ color: \"red\" }}>{this.state.message}</h5>\n </form>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default AddFolderPopup;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport Tree from \"@naisutech/react-tree\";\nimport BrowserImage from \"./browseFolderImage\";\nimport { getInnerNodes, moveOrCopyFiles } from \"../../libs/API\";\nimport LoaderButton from \"../LoaderButton\";\nimport { ControlLabel, Row, Col } from \"react-bootstrap\";\n\nclass MoveFilesToFolderPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n selectedNode: 0,\n folderArray: [],\n innerNodes: [],\n filePath: \"\",\n isLoading: false,\n isdisabled: true,\n repoId: 0,\n buttonText: \"\",\n };\n //console.log(\"move files to folder popup props\", props);\n }\n\n async componentDidMount() {\n let parentNode = this.props.Data.find(\n (x) => x.id === this.props.selectedNode.id\n );\n let rootNode = this.getRoot(this.props.Data, this.props.selectedNode);\n let newData = null;\n if (parentNode) {\n newData = this.props.Data.filter((x) => x.id === rootNode);\n }\n this.setState({\n popupOpen: this.props.props.showMoveFileToFolderPopup,\n folderArray: newData,\n repoId: parentNode.repoId,\n buttonText: this.props.isCopy === true ? \"Copy\" : \"Move\",\n });\n }\n\n getRoot = (data, selectedNode) => {\n let parentId = selectedNode.parentId;\n if (parentId === null) {\n return selectedNode.id;\n }\n var element = data.find((x) => x.id === parentId);\n if (element && element.parentId !== null) {\n return this.getRoot(data, element);\n }\n return element.id;\n };\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n async GetInnerNodes(nodeId) {\n await getInnerNodes(nodeId, 1).then((data) => {\n let json = this.state.innerNodes;\n for (let i = 0; i < data.DataTable.length; i++) {\n if (\n json.findIndex((x) => x.nodeId === data.DataTable[i].NodeId) === -1\n ) {\n json.push(data.DataTable[i]);\n }\n }\n let jsonData = this.state.folderArray;\n this.transformInnerChild(nodeId).then((e, json) => {\n for (let i = 0; i < e.length; i++) {\n if (jsonData.findIndex((x) => x.id === e[i].id) === -1) {\n jsonData.push(e[i]);\n }\n }\n this.setState({ folderArray: jsonData });\n });\n });\n }\n\n generatePath = (nodeId, nodeName) => {\n let data = this.state.folderArray;\n let node = data.find((x) => x.id === nodeId);\n if (node) {\n if (node.parentId != null) {\n return this.generatePath(node.parentId, node.label + \"/\" + nodeName);\n } else {\n return node.label + \"/\" + nodeName;\n }\n }\n };\n\n onSelect = async (selectedNode) => {\n let nodeId = selectedNode.id;\n let node = this.generatePath(nodeId, \"\");\n let isdisable = false;\n if (\n (node === this.props.mainFilePath && !this.props.isCopy)\n ) {\n isdisable = true;\n } else {\n isdisable = false;\n }\n this.setState({\n selectedNode: nodeId,\n filePath: node,\n isdisabled: isdisable,\n });\n await this.GetInnerNodes(nodeId);\n };\n\n transformInnerChild = (parentId, json) => {\n return new Promise((y) => {\n let data = this.state.innerNodes;\n let maps = data.map(function (x) {\n return {\n parentId: parentId,\n id: x.NodeId,\n label: x.FolderName,\n items: [],\n };\n });\n return y(maps);\n });\n };\n\n handleMoveOrCopyFiles = async (e) => {\n this.setState({ isdisabled: true, isLoading: true });\n e.preventDefault();\n let moveFileParameter = {\n fileData: this.props.fileIdArray,\n changeNodeIdTo: this.state.selectedNode,\n repoId: this.state.repoId,\n isCopy: this.props.isCopy,\n };\n await moveOrCopyFiles(moveFileParameter).then(async (x) => {\n console.log(x);\n if (x.status === 200 && !this.props.isCopy) {\n this.props.fileIdArray.forEach((element) => {\n this.props.handleRemoveFilesAfterMove(element.fileId);\n });\n } else if (\n x.status === 200 &&\n this.props.isCopy &&\n this.state.filePath === this.props.mainFilePath\n ) {\n x.data.forEach((element) => {\n let newTabulatorRow = {\n FileName: element.fileName,\n FileId: element.fileId,\n HasAnnotations: element.redaction,\n };\n this.props.addNewTabulatorRow(newTabulatorRow);\n });\n }\n this.setState({\n isdisabled: true,\n isLoading: false,\n buttonText: \"Completed\",\n });\n });\n };\n\n render() {\n let text = this.props.isCopy === true ? \"Copy\" : \"Move\";\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"40%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>{text} Folder</h5>\n <hr />\n <Row style={{ marginBottom: \"2px\" }}>\n <Col sm={6} componentClass={ControlLabel}>\n Select the Folder you want to {text} the file(s):\n </Col>\n <Col sm={6}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isdisabled}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text={`${this.state.buttonText}`}\n loadingText=\"Processing File(s).....\"\n onClick={this.handleMoveOrCopyFiles}\n />\n </Col>\n </Row>\n <Row style={{ margin: \"auto\" }}>\n <h6>{this.state.filePath}</h6>\n <Tree\n nodes={this.state.folderArray}\n onSelect={this.onSelect}\n size=\"full\"\n theme={\"light\"}\n className=\"comp\"\n iconSet={{\n node: <BrowserImage />,\n file: <BrowserImage />,\n }}\n />\n </Row>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default MoveFilesToFolderPopup;\n","import React from \"react\";\n\nfunction MoveCopyFileSvg(props) {\n if (props.move) {\n return (\n <div>\n <svg\n id=\"move\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n className=\"bi bi-arrow-right-square\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm4.5 5.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H4.5z\"\n />\n </svg>\n </div>\n );\n } else {\n return (\n <div>\n <svg\n id=\"copy\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n className=\"bi bi-clipboard\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z\" />\n <path d=\"M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z\" />\n </svg>\n </div>\n );\n }\n}\n\nexport default MoveCopyFileSvg;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport { FormGroup, Row, Col, FormControl } from \"react-bootstrap\";\nimport Upload from \"./upload\";\nimport { getTemplatesBasedOnRepositoryId } from \"../../libs/API\";\n\nclass UploadFilesPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n indexTemplateData: [],\n popupOpen: false,\n isLoading: false,\n folderName: \"\",\n tableName: \"\",\n };\n // console.log(\"add folder popup props\", props);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showUploadFilesPopup });\n await this.loadTemplates();\n }\n\n closePopup = () => {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n };\n\n handleUploadFilesSubmit = (e) => {\n e.preventDefault();\n };\n\n loadTemplates = async () => {\n getTemplatesBasedOnRepositoryId(this.props.props.mainNode).then((data) => {\n if (data) {\n this.setState({ indexTemplateData: data }, () =>\n this.onLoadTemplates()\n );\n }\n });\n };\n\n onLoadTemplates = async () => {\n //when the user has access to only one template, hide the first option and auto select the first index\n if (\n this.state &&\n this.state.indexTemplateData &&\n this.state.indexTemplateData.length === 1\n ) {\n const templateSelect = document.getElementById(\"selectTemplates\");\n templateSelect.options[0].style.display = \"none\";\n templateSelect.selectedIndex = \"1\";\n templateSelect.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n };\n\n render() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>Upload Files - {this.props.props.filePath}</h5>\n <br />\n <Row>\n <Col sm={12}>\n <FormGroup controlId=\"selectTemplates\">\n <FormControl\n componentClass=\"select\"\n required\n onChange={(e) =>\n this.setState({ tableName: e.target.value })\n }\n >\n <option key={-1} value=\"\">\n Select Index Template\n </option>\n {this.state.indexTemplateData.map((template, i) => (\n <option key={i} value={template.tableName}>\n {template.displayName}\n </option>\n ))}\n </FormControl>\n </FormGroup>\n </Col>\n </Row>\n <FormGroup>\n <Upload\n tableName={this.state.tableName}\n nodeId={this.props.props.parentNodeId}\n closePopup={this.closePopup}\n addNewTabulatorRow={this.props.addNewTabulatorRow}\n />\n </FormGroup>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n}\n\nexport default UploadFilesPopup;\n","import React, { Component, Fragment } from \"react\";\nimport \"../Browse/browse.css\";\nimport { Button, Row, Col, FormGroup, FormControl } from \"react-bootstrap\";\nimport Header from \"../../Component/header\";\nimport Tree from \"@naisutech/react-tree\";\nimport BrowseGridView from \"./gridViewFile\";\nimport BrowserImage from \"./browseFolderImage\";\nimport Split from \"react-split\";\nimport EmailPopup from \"../emailpopup\";\nimport AddFolderPopup from \"./addfolderpopup\";\nimport MoveFilesToFolderPopup from \"./moveAndCopyFilesToFolderPopup\";\nimport ExpungementPopup from \"../expungementpopup\";\nimport Popup from \"reactjs-popup\";\nimport MoveCopyFileSvg from \"./moveCopyFileSvg\";\nimport FileProperties from \"../Search/filePropertiesPopup\";\nimport FilePropertiesImage from \"../Images/FileProperties.svg\";\nimport {\n DeleteFileSvg,\n RenameFileSvg,\n EmailSvgImage,\n RenameFileSaveSvg,\n RenameFileCancelSvg,\n ExpungementSvg,\n UploadSvgImage,\n DeleteFolderSvg,\n AddFolderSvg,\n SearchSvgImage,\n} from \"../Svg/allsvg\";\nimport {\n getRepos,\n getInnerNodes,\n updateFileName,\n getFileData,\n deleteFolder,\n deleteFile,\n getTemplatesBasedOnRepositoryId,\n getFileLIst,\n getUserProfile,\n getUserProfileWithOutTemplate,\n} from \"../../libs/API\";\nimport UploadFilesPopup from \"./uploadfilespopup\";\nimport AppendPrependPdf from \"./appenPrependPdf\";\n\nclass Browse extends Component {\n constructor(props) {\n super(props);\n this.state = {\n repos: [],\n innerNodes: [],\n folderArray: [],\n fileObject: [],\n showEmailPopup: false,\n fileIdArray: [],\n fileName: \"\",\n selectedNode: 0,\n showExpungementPopup: false,\n showAddFolderPopup: false,\n showUploadFilesPopup: false,\n popupOpen: false,\n client: \"\",\n deleteFilePopupOpen: false,\n mainNode: 0,\n indexTemplateData: [],\n columns: [],\n disabled: true,\n showMoveFileToFolderPopup: false,\n isCopy: false,\n copyMoveSelectedNode: null,\n showAppendPrependPopup: false,\n showFilePropertiesPopup: false,\n fileSize: true,\n pageCount: true,\n pageDimensions: true,\n redactionColumn: true,\n selectedTemplate: \"\",\n templateColumnsToShow: [],\n filePropertiesButton: false,\n };\n this.LoadRepository = this.LoadRepository.bind(this);\n // console.log(\"Browse-Props\", props);\n }\n\n async componentDidMount() {\n await this.LoadRepository();\n let clientName = \"\";\n if (this.props.props.hasCliftonWorkflow) {\n clientName = \"clifton\";\n } else if (this.props.props.hasMedfordWorkflow) {\n clientName = \"medford\";\n } else if (this.props.props.hasEnglewoodWorkflow) {\n clientName = \"englewood\";\n } else if (this.props.props.hasGlenrockWorkflow) {\n clientName = \"glenrock\";\n } else if (this.props.props.hasAberdeenWorkflow) {\n clientName = \"Aberdeen\";\n } else if (this.props.props.hasDemoExpungementWorkflow) {\n clientName = \"Demo\";\n } else if (this.props.props.hasEastamptonExpungementWorkflow) {\n clientName = \"Eastampton\";\n }\n this.setState({ client: clientName });\n }\n\n async LoadRepository() {\n await getRepos().then((data) => {\n this.setState({ repos: data });\n let jsonData = this.transformData();\n this.setState({ folderArray: jsonData });\n });\n }\n\n pushFiles = (nodeId, files) => {\n let data = this.state.folderArray;\n let parentNode = data.find((x) => x.id === nodeId);\n if (parentNode && files) {\n let tabData = [];\n // eslint-disable-next-line array-callback-return\n files.map((x) => {\n tabData.push({\n FileName:\n x.FileName === \"No Files for this Folder\" ? null : x.FileName,\n FileId: x.FileId,\n HasAnnotations:\n x.FileName !== \"No Files for this Folder\"\n ? x.HasAnnotations == null\n ? false\n : x.HasAnnotations\n : null,\n PageCount:\n x.FileName !== \"No Files for this Folder\"\n ? x.PageCount == null\n ? \"\"\n : x.PageCount\n : null,\n FileSize:\n x.FileName !== \"No Files for this Folder\"\n ? x.FileSize == null\n ? \"\"\n : x.FileSize\n : null,\n PageDimensions:\n x.FileName !== \"No Files for this Folder\"\n ? x.PageDimensions == null\n ? \"\"\n : x.PageDimensions\n : null,\n FileExtension:\n x.FileExtension === \"No Files for this Folder\"\n ? null\n : x.FileExtension,\n });\n });\n tabData.forEach((eachObj) => {\n if (eachObj.FileId === 0) {\n tabData = [];\n }\n });\n this.setState({ fileObject: tabData });\n }\n };\n\n async GetInnerNodes(nodeId, count) {\n await getInnerNodes(nodeId, count).then((data) => {\n let json = this.state.innerNodes;\n for (let i = 0; i < data.DataTable.length; i++) {\n if (\n json.findIndex((x) => x.nodeId === data.DataTable[i].NodeId) === -1\n ) {\n json.push(data.DataTable[i]);\n }\n }\n let jsonData = this.state.folderArray;\n this.transformInnerChild(nodeId).then((e) => {\n for (let i = 0; i < e.length; i++) {\n if (jsonData.findIndex((x) => x.id === e[i].id) === -1) {\n jsonData.push(e[i]);\n }\n }\n if (data && data.FilesTable !== null && data.FilesTable.length >= 1) {\n this.pushFiles(nodeId, data.FilesTable);\n }\n this.setState({ folderArray: jsonData });\n });\n });\n }\n\n loadTemplates = async (mainNode) => {\n await getTemplatesBasedOnRepositoryId(mainNode).then((data) => {\n if (data) {\n this.setState({ indexTemplateData: data, disabled: false }, () => {\n const templateSelect = document.getElementById(\"indexTemplates\");\n if (data.length === 1 && data[0].tableName !== \"-1\") {\n templateSelect.options[0].style.display = \"none\";\n templateSelect.selectedIndex = \"1\";\n } else {\n templateSelect.options[0].style.display = \"block\";\n templateSelect.selectedIndex = \"0\";\n }\n templateSelect.dispatchEvent(new Event(\"change\", { bubbles: true }));\n });\n }\n });\n };\n\n checkUserProfile = async (tableName) => {\n const userProfile = {\n userId: this.props.props.userId,\n templateName: tableName,\n };\n await getUserProfile(userProfile).then(async (x) => {\n if (x.data !== \"\") {\n this.setState({\n templateColumnsToShow: x.data.templateColumnsToShow,\n redactionColumn: x.data.redaction,\n fileSize: x.data.fileSize,\n pageDimensions: x.data.pageDimensions,\n pageCount: x.data.pageCount,\n });\n }\n });\n };\n\n checkUserProfileWithOutTemplate = async (mainNode) => {\n const userProfile = {\n userId: this.props.props.userId,\n repoId: mainNode,\n };\n await getUserProfileWithOutTemplate(userProfile).then(async (x) => {\n console.log(x, \"x\");\n if (x.data !== \"\") {\n this.setState({\n redactionColumn: x.data.redaction,\n fileSize: x.data.fileSize,\n pageDimensions: x.data.pageDimensions,\n pageCount: x.data.pageCount,\n });\n } else {\n this.setState({\n templateColumnsToShow: [],\n redactionColumn: true,\n fileSize: true,\n pageDimensions: true,\n pageCount: true,\n });\n }\n });\n };\n\n handleIndexTemplateChange = async (e) => {\n e.preventDefault();\n let tableName = e.target.value;\n this.child.gridBrowseRef.table.setColumns([]);\n this.setState({\n fileObject: [],\n selectedTemplate: tableName,\n filePropertiesButton: false,\n });\n if (tableName !== \"-1\") {\n await this.checkUserProfile(tableName);\n await getFileLIst(this.state.selectedNode, tableName).then((data) => {\n let results = JSON.parse(data[1]);\n results.forEach((results) => {\n if (results.HasAnnotations == null) {\n results.HasAnnotations = false;\n }\n });\n if (results.length > 0) {\n this.setState({\n fileObject: results,\n columns: data[0],\n filePropertiesButton: true,\n });\n //let node = this.generatePath(this.state.selectedNode, \"\");\n let newColumns = this.child.handleFilePath();\n this.child.gridBrowseRef.table.setColumns(newColumns);\n }\n });\n } else {\n await this.GetInnerNodes(this.state.selectedNode, 2);\n let newColumns = this.child.handleIndexTemplateColumns();\n this.child.gridBrowseRef.table.setColumns(newColumns);\n }\n };\n\n handleSearch = () => {\n this.props.history.push(\"/search\");\n };\n\n onSelect = async (selectedNode) => {\n let nodeId = selectedNode.id;\n let node = this.generatePath(nodeId, \"\");\n this.setState({\n selectedNode: nodeId,\n copyMoveSelectedNode: selectedNode,\n fileName: node,\n });\n let data = this.state.folderArray;\n let mainNode = this.getRoot(data, selectedNode);\n if (mainNode) {\n this.setState({ mainNode: mainNode });\n }\n await this.loadTemplates(mainNode);\n await this.GetInnerNodes(nodeId, this.state.indexTemplateData.length);\n if (\n this.state.indexTemplateData.length > 1 ||\n this.state.indexTemplateData.length === 0\n ) {\n let newColumns = this.child.handleIndexTemplateColumns();\n this.child.gridBrowseRef.table.setColumns(newColumns);\n }\n };\n\n getRoot = (data, selectedNode) => {\n let parentId = selectedNode.parentId;\n if (parentId === null) {\n this.checkUserProfileWithOutTemplate(selectedNode.repoId);\n return selectedNode.repoId;\n }\n var element = data.find((x) => x.id === parentId);\n if (element && element.parentId !== null) {\n return this.getRoot(data, element);\n }\n return element.repoId;\n };\n\n generatePath = (nodeId, nodeName) => {\n let data = this.state.folderArray;\n let node = data.find((x) => x.id === nodeId);\n if (node) {\n if (node.parentId != null) {\n return this.generatePath(node.parentId, node.label + \"/\" + nodeName);\n } else {\n return node.label + \"/\" + nodeName;\n }\n }\n };\n\n transformInnerChild = (parentId) => {\n return new Promise((y) => {\n let data = this.state.innerNodes;\n let maps = data.map(function (x) {\n return {\n parentId: parentId,\n id: x.NodeId,\n label: x.FolderName,\n items: [],\n };\n });\n return y(maps);\n });\n };\n\n transformData = () => {\n let data = this.state.repos;\n return data.map(function (x) {\n return {\n parentId: null,\n id: x.nodeId,\n label: x.folderName,\n items: [],\n repoId: x.repositoryId,\n };\n });\n };\n\n handlePopup = () => {\n let rows = this.child.gridBrowseRef.table.getSelectedData();\n if (rows.length > 0) {\n let fileIds = rows.map(function (m) {\n return {\n fileId: m.FileId,\n redaction: m.HasAnnotations,\n fileName: m.FileName,\n };\n });\n this.setState({ showEmailPopup: true, fileIdArray: fileIds });\n }\n };\n\n addNewTabulatorRow = (addNewRow) => {\n //this.child.gridBrowseRef.table.addRow(addNewRow, true);\n let fileList = this.state.fileObject;\n fileList.unshift(addNewRow);\n this.setState({ fileObject: fileList });\n };\n\n hideTooTip = (hideParams) => {\n document.getElementsByClassName(hideParams)[0].style.display = \"none\";\n };\n\n showToolTip = (showParams) => {\n document.getElementsByClassName(showParams)[0].style.display = \"block\";\n };\n\n disableBrowseFolderClick = () => {\n document.getElementsByClassName(\"cJYPLF\")[0].style.pointerEvents = \"none\";\n };\n\n enableBrowseFolderClick = () => {\n document.getElementsByClassName(\"cJYPLF\")[0].style.pointerEvents = \"all\";\n };\n\n handleRenameFile = () => {\n let selectedRows = this.child.gridBrowseRef.table.getSelectedData();\n if (selectedRows.length > 0) {\n let hideParams = \"emailSelectToolTip\";\n let showParams = \"renameFileToolTip\";\n this.hideTooTip(hideParams);\n this.showToolTip(showParams);\n let newColumns = [];\n const templateSelect = document.getElementById(\"indexTemplates\");\n if (\n this.state.indexTemplateData.length > 1 ||\n templateSelect.selectedIndex === \"0\"\n ) {\n newColumns = this.child.handleIndexTemplateColumns(true);\n this.child.gridBrowseRef.table.setColumns(newColumns);\n } else {\n newColumns = this.child.handleFilePath(true);\n this.child.gridBrowseRef.table.setColumns(newColumns);\n }\n this.child.gridBrowseRef.table.setData(selectedRows);\n this.child.setGridFooterText(1, selectedRows.length);\n this.disableBrowseFolderClick();\n }\n };\n\n handleRenameFileCancel = (cancelFile) => {\n let showParams = \"emailSelectToolTip\";\n let hideParams = \"renameFileToolTip\";\n if (cancelFile === false) {\n let editedCells = this.child.gridBrowseRef.table.getEditedCells();\n editedCells.forEach(function (cell) {\n let oldVal = cell.getOldValue();\n if (oldVal !== null) {\n try {\n cell.restoreOldValue();\n } catch {}\n }\n });\n }\n let newColumns = [];\n const templateSelect = document.getElementById(\"indexTemplates\");\n if (\n this.state.indexTemplateData.length > 1 ||\n templateSelect.selectedIndex === \"0\"\n ) {\n newColumns = this.child.handleIndexTemplateColumns();\n this.child.gridBrowseRef.table.setColumns(newColumns);\n } else {\n newColumns = this.child.handleFilePath();\n this.child.gridBrowseRef.table.setColumns(newColumns);\n }\n this.child.gridBrowseRef.table.setData(this.state.fileObject);\n this.child.setGridFooterText(1);\n this.hideTooTip(hideParams);\n this.showToolTip(showParams);\n this.enableBrowseFolderClick();\n };\n\n handleRenameFileSave = async () => {\n let editedCells = this.child.gridBrowseRef.table.getEditedCells();\n let mappedCells = [];\n if (editedCells.length > 0) {\n for (let i = 0; i < editedCells.length; i++) {\n let currentValue = editedCells[i].getValue().trim();\n let updateFileNameParams = {\n fileId: editedCells[i].getRow().getData().FileId,\n newfileName: currentValue,\n };\n mappedCells.push(updateFileNameParams);\n }\n await this.updateFileName(mappedCells);\n }\n this.enableBrowseFolderClick();\n };\n\n updateFileName = async (renameFilesParams) => {\n updateFileName(renameFilesParams).then((data) => {\n if (data.status === 200) {\n this.handleRenameFileCancel(true);\n }\n });\n };\n\n handleChildUnmount = () => {\n this.setState({\n showEmailPopup: false,\n showExpungementPopup: false,\n showAddFolderPopup: false,\n showUploadFilesPopup: false,\n showMoveFileToFolderPopup: false,\n showAppendPrependPopup: false,\n showFilePropertiesPopup: false,\n });\n };\n\n handleRemoveFilesAfterMove = (fileId) => {\n this.child.gridBrowseRef.table.deleteRow(fileId);\n };\n\n addNewTreeFolder = (e) => {\n let treeData = this.state.folderArray;\n let index = treeData.findIndex((x) => x.id === e.id);\n if (index <= 0) {\n treeData.push(e);\n }\n this.setState({ folderArray: treeData });\n };\n\n handleExpungementPopup = async (e) => {\n e.preventDefault();\n const rows = this.child.gridBrowseRef.table.getSelectedData();\n // console.log(rows);\n if (this.state.selectedTemplate != -1) {\n if (rows.length === 1) {\n const FileId = rows[0].FileId;\n if (\n this.state.client === \"Aberdeen\" ||\n this.state.client === \"Demo\" ||\n this.state.client === \"Eastampton\"\n ) {\n this.setState({ showExpungementPopup: true, fileIdArray: rows });\n } else {\n getFileData(FileId, this.state.client).then((data) => {\n if (data) {\n data[0].FileId = FileId;\n this.setState({ showExpungementPopup: true, fileIdArray: data });\n }\n });\n }\n } else if (rows.length > 1) {\n alert(\"You can expunge 1 file at a time.\");\n }\n } else {\n alert(\"Please Select Index Template.\");\n }\n };\n\n handleAddFolderPopup = async (e) => {\n e.preventDefault();\n if (this.state.selectedNode > 0) {\n this.setState({ showAddFolderPopup: true });\n }\n };\n\n handleMoveCopyFilePopup = async (e) => {\n const rows = this.child.gridBrowseRef.table.getSelectedData();\n let isCopy = e.currentTarget.id === \"moveButton\" ? false : true;\n if (rows.length >= 1) {\n let fileIds = rows.map(function (m) {\n return {\n fileId: m.FileId,\n fileName: m.FileName,\n };\n });\n this.setState({\n showMoveFileToFolderPopup: true,\n isCopy: isCopy,\n fileIdArray: fileIds,\n });\n }\n };\n\n handleUploadFiles = async (e) => {\n e.preventDefault();\n const rows = this.child.gridBrowseRef.table.getSelectedData();\n if (rows.length > 1) {\n alert(\"You can Append or Prepend 1 file at a time.\");\n return;\n }\n if (rows.length === 1) {\n this.setState({ showAppendPrependPopup: true, fileIdArray: rows });\n return;\n }\n if (this.state.selectedNode > 0) {\n this.setState({ showUploadFilesPopup: true });\n return;\n }\n };\n\n handleDeleteFolderPopup = async (e) => {\n e.preventDefault();\n let folderData = this.state.folderArray;\n let node = folderData.find((x) => x.id === this.state.selectedNode);\n if (node) {\n if (node.parentId != null) {\n deleteFolder(node.id).then((data) => {\n if (data.status === 200) {\n this.setState({ folderArray: [] });\n let filteredData = folderData.filter((x) => x.parentId == null);\n this.setState({\n folderArray: filteredData,\n innerNodes: [],\n selectedNode: node.parentId,\n popupOpen: false,\n fileObject: [],\n fileName: \"\",\n });\n //let node1 = this.generatePath(node.parentId, \"\");\n // let newColumns = this.child.handleFilePath();\n //this.child.gridBrowseRef.table.setColumns(newColumns);\n this.child.gridBrowseRef.table.setColumns([]);\n this.closePopup();\n }\n });\n }\n }\n };\n\n handleDeleteFile = (e) => {\n e.preventDefault();\n const rows = this.child.gridBrowseRef.table.getSelectedData();\n if (rows.length >= 1) {\n let fileIds = [];\n for (let i = 0; i < rows.length; i++) {\n let Params = {\n fileId: rows[i].FileId,\n };\n fileIds.push(Params);\n }\n deleteFile(fileIds).then((data) => {\n if (data.status === 200) {\n let fileList = this.state.fileObject;\n // for (var i = 0; i < rows.length; i++) {\n // this.child.gridBrowseRef.table.deleteRow(rows[i]);\n // console.log(\"singh\", rows[i].FileId);\n // }\n let filteredList = fileList.filter((x) => {\n return !fileIds.some(\n (y) => parseInt(y.fileId) === parseInt(x.FileId)\n );\n });\n this.setState({ fileObject: filteredList });\n this.closePopup();\n }\n });\n }\n };\n\n closePopup = () => {\n this.setState({\n popupOpen: false,\n deleteFilePopupOpen: false,\n showFilePropertiesPopup: false,\n });\n };\n\n handleFilePropertiesPopup = () => {\n this.setState({ showFilePropertiesPopup: true });\n };\n\n openDeleteFolderPopup = (e) => {\n e.preventDefault();\n let folderData = this.state.folderArray;\n let node = folderData.find((x) => x.id === this.state.selectedNode);\n if (node) {\n if (node.parentId != null) {\n this.setState({ popupOpen: true });\n }\n }\n };\n\n openDeleteFilePopup = (e) => {\n e.preventDefault();\n const rows = this.child.gridBrowseRef.table.getSelectedData();\n if (rows.length >= 1) {\n this.setState({ deleteFilePopupOpen: true });\n }\n };\n\n renderAppendPrependFilePopup() {\n return (\n <Fragment>\n {this.state.showAppendPrependPopup && (\n <AppendPrependPdf\n props={{\n filePath: this.state.fileName,\n fileIdArray: this.state.fileIdArray,\n showAppendPrependPopup: this.state.showAppendPrependPopup,\n email: this.props.props.loggedInUser,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderEmailPop() {\n return (\n <Fragment>\n {this.state.showEmailPopup && (\n <EmailPopup\n props={{\n showEmailPopup: this.state.showEmailPopup,\n fileIdArray: this.state.fileIdArray,\n manageRedaction: this.props.props.hasManageRedaction,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderAddFolderPop() {\n return (\n <Fragment>\n {this.state.showAddFolderPopup && (\n <AddFolderPopup\n props={{\n parentNodeId: this.state.selectedNode,\n showAddFolderPopup: this.state.showAddFolderPopup,\n filePath: this.state.fileName,\n }}\n unmountMe={this.handleChildUnmount}\n addFolder={this.addNewTreeFolder}\n />\n )}\n </Fragment>\n );\n }\n\n renderMoveFilesToFolderPopup() {\n return (\n <Fragment>\n {this.state.showMoveFileToFolderPopup && (\n <MoveFilesToFolderPopup\n props={{\n showMoveFileToFolderPopup: this.state.showMoveFileToFolderPopup,\n }}\n selectedNode={this.state.copyMoveSelectedNode}\n Data={this.state.folderArray}\n getRoot={this.getRoot}\n unmountMe={this.handleChildUnmount}\n mainFilePath={this.state.fileName}\n fileIdArray={this.state.fileIdArray}\n isCopy={this.state.isCopy}\n handleRemoveFilesAfterMove={this.handleRemoveFilesAfterMove}\n addNewTabulatorRow={this.addNewTabulatorRow}\n />\n )}\n </Fragment>\n );\n }\n renderFilePropertiesPopup() {\n return (\n <Fragment>\n {this.state.showFilePropertiesPopup && (\n <FileProperties\n props={{\n showFilePropertiesPopup: this.state.showFilePropertiesPopup,\n columns: this.state.columns,\n userId: this.props.props.userId,\n templateName: this.state.selectedTemplate,\n hasManageRedaction: this.props.props.hasManageRedaction,\n hasTextScore: false,\n hasFileProperties: this.props.props.hasFileProperties,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderUploadFilesPop() {\n return (\n <Fragment>\n {this.state.showUploadFilesPopup && (\n <UploadFilesPopup\n props={{\n parentNodeId: this.state.selectedNode,\n showUploadFilesPopup: this.state.showUploadFilesPopup,\n filePath: this.state.fileName,\n mainNode: this.state.mainNode,\n email: this.props.props.loggedInUser,\n }}\n addNewTabulatorRow={this.addNewTabulatorRow}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderExpungementPopup() {\n return (\n <Fragment>\n {this.state.showExpungementPopup && (\n <ExpungementPopup\n props={{\n showExpungementPopup: this.state.showExpungementPopup,\n selectedRow: this.state.fileIdArray,\n client: this.state.client,\n templateName: this.state.selectedTemplate,\n }}\n unmountMe={this.handleChildUnmount}\n />\n )}\n </Fragment>\n );\n }\n\n renderDeleteFolderPopup() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"35px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closeopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>Delete Folder - {this.state.fileName}</h5>\n <div>\n <FormGroup>\n Are you sure to delete the folder and all subfolders and files\n </FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleDeleteFolderPopup}\n >\n Yes\n </Button>\n </FormGroup>\n </div>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n\n renderDeleteFilePopup() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"35px\",\n }}\n open={this.state.deleteFilePopupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closeopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>Delete File</h5>\n <div>\n <FormGroup>Are you sure to delete the file(s)</FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleDeleteFile}\n >\n Yes\n </Button>\n </FormGroup>\n </div>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n\n renderToolTipButton = () => {\n return (\n <div className=\"renderToolTipBrowseButton\">\n <div className=\"emailSelectToolTip\">\n {this.props.props.hasManageFiles && (\n <Button\n id=\"moveButton\"\n title=\"Move File\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleMoveCopyFilePopup}\n >\n <MoveCopyFileSvg move={true} />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n id=\"copyButton\"\n title=\"Copy File\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleMoveCopyFilePopup}\n >\n <MoveCopyFileSvg move={false} />\n </Button>\n )}\n {this.state.client.length > 0 && (\n <Button\n title=\"Expunge Records\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleExpungementPopup}\n >\n <ExpungementSvg />\n </Button>\n )}\n {this.props.props.hasDelete && (\n <Button\n title=\"Delete File\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.openDeleteFilePopup}\n >\n <DeleteFileSvg />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n title=\"Rename Selected Files\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleRenameFile}\n >\n <RenameFileSvg />\n </Button>\n )}\n {this.props.props.hasSendEmail && (\n <Button\n title=\"Email Selected\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handlePopup}\n >\n <EmailSvgImage />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n title=\"Upload Files\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleUploadFiles}\n >\n <UploadSvgImage />\n </Button>\n )}\n </div>\n <div className=\"renameFileToolTip\">\n <Button\n title=\"Save\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={this.handleRenameFileSave}\n >\n <RenameFileSaveSvg />\n </Button>\n <Button\n title=\"Cancel\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n onClick={() => this.handleRenameFileCancel(false)}\n >\n <RenameFileCancelSvg />\n </Button>\n </div>\n </div>\n );\n };\n\n render() {\n let data = this.state.folderArray;\n let fileList = this.state.fileObject;\n let disabledImage = this.state.filePropertiesButton;\n return (\n <Fragment>\n <Header props={this.props.props} history={this.props.history} />\n <Fragment>\n <div className=\"browseDocumentsync\">\n <Row></Row>\n <Split className=\"wrap\" sizes={[25, 75]}>\n <div>\n <Button\n title=\"Search Repository\"\n bsClass=\"btn btn-outline-secondary\"\n className=\"browseButton\"\n onClick={this.handleSearch}\n >\n <SearchSvgImage />\n </Button>\n {this.props.props.hasDelete && (\n <Button\n title=\"Delete Folder\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n style={{ float: \"right\" }}\n onClick={this.openDeleteFolderPopup}\n >\n <DeleteFolderSvg />\n </Button>\n )}\n {this.props.props.hasManageFiles && (\n <Button\n title=\"Add Folder\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-default\"\n style={{ float: \"right\" }}\n onClick={this.handleAddFolderPopup}\n >\n <AddFolderSvg />\n </Button>\n )}\n <Tree\n nodes={data}\n onSelect={this.onSelect}\n size=\"full\"\n theme={\"light\"}\n className=\"comp\"\n iconSet={{\n node: <BrowserImage />,\n file: <BrowserImage />,\n }}\n />\n </div>\n <div>\n <Row>\n <Col sm={6}>\n <div style={{ display: \"flex\" }}>\n <FormGroup controlId=\"indexTemplates\">\n <FormControl\n componentClass=\"select\"\n required\n onChange={this.handleIndexTemplateChange}\n disabled={this.state.disabled}\n >\n <option key={-1} value=\"-1\">\n Select Index Template\n </option>\n {this.state.indexTemplateData.map((template, i) => (\n <option key={i} value={template.tableName}>\n {template.displayName}\n </option>\n ))}\n </FormControl>\n </FormGroup>\n <img\n src={FilePropertiesImage}\n alt=\"FileProperties\"\n style={{\n width: \"40px\",\n height: \"37px\",\n cursor: \"pointer\",\n opacity: disabledImage ? \"1\" : \"0.5\",\n }}\n title=\"Show/Hide Columns\"\n onClick={\n disabledImage ? this.handleFilePropertiesPopup : null\n }\n />\n </div>\n </Col>\n <Col sm={6}>{this.renderToolTipButton()}</Col>\n </Row>\n <Row>\n <Col\n sm={12}\n style={{\n border: \"1px solid #999\",\n borderRadius: \"5px\",\n backgroundColor: \"#E6E6E6\",\n flex: \"0 0 98%\",\n margin: \"auto\",\n display: this.state.disabled ? \"none\" : \"block\",\n fontSize: \"14px\",\n fontWeight: \"bold\",\n }}\n >\n {this.state.fileName}\n </Col>\n </Row>\n <Row>\n <Col sm={12}>\n <BrowseGridView\n className=\"comp\"\n props={fileList}\n columns={this.state.columns}\n editIndex={this.props.props.hasEditIndex}\n manageRedaction={this.props.props.hasManageRedaction}\n fileProperties={this.props.props.hasFileProperties}\n loggedInUser={this.props.props.loggedInUser}\n hasPIIRole={this.props.props.hasPIIRole}\n redactionColumn={this.state.redactionColumn}\n fileSize={this.state.fileSize}\n pageCount={this.state.pageCount}\n pageDimensions={this.state.pageDimensions}\n templateColumnsToShow={this.state.templateColumnsToShow}\n deletePages={this.props.props.hasDelete}\n clientId={this.props.props.clientId}\n onRef={(ref) => (this.child = ref)}\n />\n </Col>\n </Row>\n </div>\n </Split>\n </div>\n {this.renderEmailPop()}\n {this.renderExpungementPopup()}\n {this.renderAddFolderPop()}\n {this.renderDeleteFolderPopup()}\n {this.renderDeleteFilePopup()}\n {this.renderUploadFilesPop()}\n {this.renderMoveFilesToFolderPopup()}\n {this.renderAppendPrependFilePopup()}\n {this.renderFilePropertiesPopup()}\n </Fragment>\n </Fragment>\n );\n }\n}\n\nexport default Browse;\n","export const PASSWORD_MATCH_INVALID = \"Your password and confirmation password do not match.\";\n","import React, { Component, Fragment } from \"react\";\nimport { ControlLabel, FormGroup, FormControl, Button } from \"react-bootstrap\";\nimport { Auth } from \"aws-amplify\";\nimport { getRepos } from \"../../libs/API\";\nimport Header from \"../header\";\nimport LoaderButton from \"../LoaderButton\";\nimport * as constants from \"../../constants\";\nimport \"./myaccount.css\";\nimport EnableTotpPopup from \"../Login/enabletotppopup\";\nimport MfaSelectionPopup from \"../Login/MfaSelectionPopup\";\n\nclass MyAccount extends Component {\n constructor(props) {\n super(props);\n this.state = {\n password: \"\",\n newPassword: \"\",\n confirmPassword: \"\",\n errorMessage: \"\",\n isLoading: false,\n repoList: [],\n groups: [],\n showEnableTotpPopup: false,\n showDisableButton: \"\",\n // New state for MFA selection:\n showMfaSelection: false,\n selectedMfaType: null,\n };\n }\n\n async componentDidMount() {\n const user = await Auth.currentAuthenticatedUser({\n bypassCache: true,\n });\n if (user.preferredMFA === \"NOMFA\") {\n this.setState({ showDisableButton: \"false\" });\n } else {\n this.setState({ showDisableButton: \"true\" });\n }\n await this.loadRepos();\n }\n\n handleSubmit = async (e) => {\n this.setState({ successMessage: \"\" });\n e.preventDefault();\n if (!this.state.newPassword.match(/^(?=.*\\d)(?=.*[a-zA-Z]).{8,}$/)) {\n this.setState({\n errorMessage: \"Minimum 8 Characters including 1 number.\",\n });\n return;\n }\n if (this.state.newPassword !== this.state.confirmPassword) {\n this.setState({\n errorMessage: constants.PASSWORD_MATCH_INVALID,\n });\n return;\n }\n await this.handleSavePassword();\n };\n\n resetInput = () => {\n let allInputs = document.querySelectorAll(\"input\");\n if (allInputs.length > 0) {\n allInputs.forEach((input) =>\n input.id !== \"username\" ? (input.value = \"\") : input.value\n );\n }\n };\n\n handleSavePassword = async () => {\n this.setState({ isLoading: true, errorMessage: \"\", successMessage: \"\" });\n Auth.currentAuthenticatedUser()\n .then((user) => {\n return Auth.changePassword(\n user,\n this.state.password,\n this.state.newPassword\n );\n })\n .then(\n (data) => {\n this.setState({ isLoading: false });\n if (data === \"SUCCESS\") {\n this.resetInput();\n this.setState({\n successMessage: \"Password Changed successfully\",\n isLoading: false,\n });\n }\n },\n (err) => {\n console.log(err);\n this.setState({\n errorMessage: err.message,\n isLoading: false,\n });\n }\n );\n };\n\n handleChange = (e) => {\n this.setState({ [e.target.id]: e.target.value, errorMessage: \"\" });\n };\n\n getAuthHeader = async () => {\n const user = await Auth.currentAuthenticatedUser();\n const token = user.signInUserSession.idToken.jwtToken;\n return { headers: { Authorization: `Bearer ${token}` } };\n };\n\n loadRepos = async () => {\n getRepos().then((data) => {\n this.setState({ repoList: data });\n });\n await this.loadGroups();\n };\n\n loadGroups = async () => {\n this.setState({ groups: this.props.props.groups });\n };\n\n formatGroupDisplay(group) {\n switch (group) {\n case \"DocumentSync_ManageRedactions\":\n return \"Manage Redactions - Add, edit, and see through redaction annotations. Export with or without redactions\";\n case \"DocumentSync_TextSearch\":\n return \"Text Search - Perform text search of OCRed documents\";\n case \"DocumentSync_ManageUsers\":\n return \"Manage Users - Add and delete users, manage repository access and privileges\";\n case \"DocumentSync_EditIndex\":\n return \"Edit Index - Update index data from viewer\";\n case \"DocumentSync_ManageMetadataTemplates\":\n return \"Manage Index Templates - Create, delete, and edit Index Templates\";\n case \"DocumentSync_ManageRepositories\":\n return \"Manage Repositories - Create, delete, and edit names and S3 location of repositories\";\n case \"DocumentSync_Delete\":\n return \"Delete - Delete files, folders, and pages\";\n case \"DocumentSync_ManageFiles\":\n return \"Manage Files - Add, rename, and move files\";\n case \"DocumentSync_CliftonExpungementWorkflow\":\n return \"Clifton Expungement Workflow - Allows Clifton NJ PD Expungement and Juvenile Workflow\";\n case \"DocumentSync_MedfordExpungementWorkflow\":\n return \"Medford Expungement Workflow - Allows Medford NJ PD Expungement Workflow\";\n case \"DocumentSync_EnglewoodExpungementWorkflow\":\n return \"Englewood Expungement Workflow - Allows Englewood NJ PD Expungement Workflow\";\n\n case \"DocumentSync_GlenrockExpungementWorkflow\":\n return \"Glenrock Expungement Workflow - Allows Glenrock PD Expungement Workflow\";\n\n case \"DocumentSync_AberdeenExpungementWorkflow\":\n return \"Aberdeen Expungement Workflow - Allows Aberdeen Township Expungement Workflow\";\n case \"DocumentSync_OCR\":\n return \"Ocr - Allows User to OCR templates based on Repositories\";\n case \"DocumentSync_PII\":\n return \"PII - Allows User to redact PII in files from the image viewer\";\n case \"DocumentSync_Print\":\n return \"Print with Options - Print from viewer and show the machine's print dialogue box\";\n case \"DocumentSync_Email\":\n return \"Email - Email file from viewer or email file(s) from browse / search pages\";\n case \"DocumentSync_Download\":\n return \"Download - Download file from viewer, or download file(s) from browse / search pages\";\n case \"FoveonicsAdmin\":\n return \"Foveonics Admin - Has full access and privileges to all repositories, can run OCR jobs, and can run workflows\";\n case \"DocumentSync_DownloadIndex\":\n return \"This role allows the user to download the index information from the search page\";\n case \"DocumentSync_FileProperties\":\n return \"Show page count on the browse and search screens for users with the File Properties Role\";\n default:\n return null;\n }\n }\n // When the user clicks Enable MFA, first open the selection popup.\n handleEnableTotpPopup = (e) => {\n e.preventDefault();\n this.setState({ showMfaSelection: true });\n };\n\n // When MFA selection is complete, update state and show the MFA setup popup.\n handleMfaSelection = (selectedType) => {\n console.log(\"Selected MFA type:\", selectedType);\n this.setState({\n selectedMfaType: selectedType, // \"SMS\" or \"TOTP\"\n showMfaSelection: false,\n showEnableTotpPopup: true,\n });\n };\n\n closeMfaSelection = () => {\n this.setState({ showMfaSelection: false });\n };\n\n handleDisableTotpPopup = async (e) => {\n if (!this.props.props.requireMfa) {\n const user = await Auth.currentAuthenticatedUser({\n bypassCache: true,\n });\n await Auth.setPreferredMFA(user, \"NOMFA\");\n this.setState({ showDisableButton: \"false\" });\n alert(\"MFA Disabled\");\n } else {\n alert(\n \"MFA is required for login. Please contact your administrator to disable MFA.\"\n );\n }\n };\n\n renderEnableDisableButton = () => {\n return (\n <Fragment>\n {this.state.showDisableButton === \"false\" && (\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleEnableTotpPopup}\n style={{ marginRight: \"5px\" }}\n >\n Enable MFA\n </Button>\n )}\n {this.state.showDisableButton === \"true\" && (\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleDisableTotpPopup}\n style={{ float: \"right\" }}\n >\n Disable MFA\n </Button>\n )}\n </Fragment>\n );\n };\n\n renderEnableTotpPopup() {\n return (\n <Fragment>\n {this.state.showEnableTotpPopup && (\n <EnableTotpPopup\n props={{\n showEnableTotpPopup: this.state.showEnableTotpPopup,\n // Pass the selected MFA type; default to \"TOTP\" if none selected.\n }}\n unmountMe={this.handleChildUnmount}\n mfaType={this.state.selectedMfaType}\n handleHideEnableButton={this.handleHideEnableButton}\n />\n )}\n </Fragment>\n );\n }\n\n renderMfaSelectionPopup() {\n return (\n <Fragment>\n {this.state.showMfaSelection && (\n <MfaSelectionPopup\n isOpen={this.state.showMfaSelection}\n onClose={this.closeMfaSelection}\n onSelectMfaType={this.handleMfaSelection}\n />\n )}\n </Fragment>\n );\n }\n\n // Called by the MFA popups when they unmount\n handleChildUnmount = () => {\n this.setState({\n showEnableTotpPopup: false,\n // Optionally reset selectedMfaType if needed:\n selectedMfaType: null,\n });\n };\n\n handleHideEnableButton = () => {\n this.setState({\n showDisableButton: \"true\",\n });\n };\n\n render() {\n const { groups, repoList } = this.state;\n return (\n <Fragment>\n <Header props={this.props.props} history={this.props.history} />\n <div className=\"maindiv\">\n <h4>My Account</h4>\n <br />\n <div className=\"myRepoandPrivilege\">\n <fieldset className=\"my-fieldset\">\n <legend className=\"login-legend\">\n Repository Access and Privilege(s)\n </legend>\n <div style={{ float: \"right\" }}>\n {this.renderEnableDisableButton()}\n </div>\n <h6>Repository Access List</h6>\n <ol>\n {repoList.length > 0 &&\n repoList.map((repo, i) => (\n <li key={repo.folderName + i}>{repo.folderName}</li>\n ))}\n </ol>\n <h6>Privilege(s)</h6>\n <ol>\n {groups.length > 0 &&\n groups\n .sort()\n .filter(\n (group) =>\n group !== \"DocumentSync\" && !group.startsWith(\"OPRA_\")\n )\n .map((group) => (\n <li key={group}>{this.formatGroupDisplay(group)}</li>\n ))}\n </ol>\n </fieldset>\n </div>\n\n <div className=\"myaccountContentRight\">\n <form autoComplete=\"off\" onSubmit={this.handleSubmit}>\n <fieldset className=\"my-fieldset\">\n <legend className=\"login-legend\">Change Password</legend>\n <FormGroup controlId=\"username\">\n <ControlLabel>Username:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n readOnly\n type=\"text\"\n value={this.props.props.loggedInUser}\n autoComplete=\"off\"\n ></FormControl>\n </FormGroup>\n <FormGroup controlId=\"password\">\n <ControlLabel>Current Password:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n type=\"password\"\n autoComplete=\"new-password\"\n required\n minLength={8}\n onChange={this.handleChange}\n ></FormControl>\n </FormGroup>\n <FormGroup controlId=\"newPassword\">\n <ControlLabel>New Password:</ControlLabel>\n <span className=\"PasswordText\">\n (Minimum 8 Characters including 1 number.)\n </span>\n <FormControl\n componentClass=\"input\"\n type=\"password\"\n autoComplete=\"new-password\"\n required\n onChange={this.handleChange}\n minLength={8}\n ></FormControl>\n </FormGroup>\n <FormGroup controlId=\"confirmPassword\">\n <ControlLabel>Confirm Password:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n type=\"password\"\n autoComplete=\"new-password\"\n required\n minLength={8}\n onChange={this.handleChange}\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Save New Password\"\n loadingText=\"Saving New Password…\"\n />\n </FormGroup>\n <span className=\"errorMessage\">{this.state.errorMessage}</span>\n <span className=\"successMessage\">\n {this.state.successMessage}\n </span>\n </fieldset>\n </form>\n {/* Render the MFA selection popup and then the MFA enable popup */}\n {this.renderMfaSelectionPopup()}\n {this.renderEnableTotpPopup()}\n </div>\n </div>\n </Fragment>\n );\n }\n}\n\nexport default MyAccount;\n","import React, { Component } from \"react\";\n\nclass CreateNewUserSvg extends Component {\n render() {\n return (\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fillRule=\"currentColor\"\n className=\"bi bi-person-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm4 8c0 1-1 1-1 1H1s-1 0-1-1 1-4 6-4 6 3 6 4zm-1-.004c-.001-.246-.154-.986-.832-1.664C9.516 10.68 8.289 10 6 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10z\" />\n <path\n fillRule=\"evenodd\"\n d=\"M13.5 5a.5.5 0 0 1 .5.5V7h1.5a.5.5 0 0 1 0 1H14v1.5a.5.5 0 0 1-1 0V8h-1.5a.5.5 0 0 1 0-1H13V5.5a.5.5 0 0 1 .5-.5z\"\n />\n </svg>\n </div>\n );\n }\n}\n\nexport default CreateNewUserSvg;\n","import React, { Component } from \"react\";\nimport {\n Checkbox,\n Button,\n FormGroup,\n FormControl,\n ControlLabel,\n} from \"react-bootstrap\";\nimport Popup from \"reactjs-popup\";\nimport * as constants from \"../../constants\";\nimport { getRepos, signUp, getReposByClientId } from \"../../libs/API\";\n\nclass CreateUserPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n userEmail: \"\",\n userPassword: \"\",\n confirmPassword: \"\",\n errorMessage: \"\",\n addingUser: false,\n availableRepos: [],\n selectedRepos: [],\n clientId: this.props.clientId,\n };\n this.closePopup = this.closePopup.bind(this);\n console.log(this.props);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showCreateUserPopup });\n\n getReposByClientId(this.state.clientId).then((data) => {\n //console.log(`Repos: ${JSON.stringify(data)}`);\n this.setState({ availableRepos: data });\n });\n }\n\n closePopup() {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n }\n\n handleChange = (e) => {\n this.setState({ [e.target.id]: e.target.value, errorMessage: \"\" });\n };\n\n handleRepoSelection = (e) => {\n const repoNodeId = e.target.id;\n const checked = document.getElementById(repoNodeId).checked;\n let { availableRepos, selectedRepos } = this.state;\n\n if (checked) {\n //add to selectedRepos\n const selectedRepo = availableRepos.filter(\n (r) => r.nodeId.toString() === repoNodeId\n )[0];\n selectedRepos.push(selectedRepo);\n } else {\n //remove from selectedRepos\n selectedRepos = selectedRepos.filter(\n (r) => r.nodeId.toString() !== repoNodeId\n );\n }\n\n this.setState({ selectedRepos });\n };\n\n handleAddUser = async (e) => {\n this.setState({ successMessage: \"\" });\n e.preventDefault();\n if (!this.state.confirmPassword.match(/^(?=.*\\d)(?=.*[a-zA-Z]).{8,}$/)) {\n this.setState({\n errorMessage: \"Minimum 8 Characters including 1 number.\",\n });\n return;\n }\n if (this.state.userPassword !== this.state.confirmPassword) {\n this.setState({ errorMessage: constants.PASSWORD_MATCH_INVALID });\n return;\n }\n this.setState({ addingUser: true });\n const userDetails = {\n userEmail: this.state.userEmail,\n userPassword: this.state.userPassword,\n repos: this.state.selectedRepos,\n clientId: this.state.clientId,\n };\n signUp(userDetails).then(async (data) => {\n let dataText = \"\";\n if (data.status === 200) {\n dataText = await data.text();\n let addNewRow = {\n email: dataText.split(\"|\")[1],\n roles: [],\n userId: dataText.split(\"|\")[0],\n };\n this.props.handleNewRowInUserList(addNewRow);\n } else {\n dataText = await data.text();\n }\n this.setState({ addingUser: false });\n this.closePopup();\n alert(dataText);\n });\n };\n\n renderCreateUser() {\n return (\n <div>\n <h4>Add New User</h4>\n <hr />\n <div style={{ float: \"left\", width: \"25%\" }}>\n <form onSubmit={this.handleAddUser}>\n <FormGroup controlId=\"userEmail\">\n <ControlLabel>Email:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={this.handleChange}\n type=\"input\"\n required\n placeholder=\"Email\"\n autoComplete=\"false\"\n ></FormControl>\n </FormGroup>\n <FormGroup controlId=\"userPassword\">\n <ControlLabel>Password:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n type=\"password\"\n onChange={this.handleChange}\n required\n minLength={8}\n placeholder=\"Password\"\n autoComplete=\"new-password\"\n ></FormControl>\n </FormGroup>\n <FormGroup controlId=\"confirmPassword\">\n <ControlLabel>Confirm Password:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n type=\"password\"\n onChange={this.handleChange}\n required\n minLength={8}\n placeholder=\"Confirm Password\"\n autoComplete=\"new-password\"\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <Button\n bsClass=\"btn btn-outline-secondary\"\n type=\"submit\"\n disabled={\n //disable the button if no repos are selected, or the app is currently processing a request\n this.state.selectedRepos.length < 1 || this.state.addingUser\n }\n >\n Add User\n </Button>\n </FormGroup>\n <span className=\"errorMessage\">{this.state.errorMessage}</span>\n </form>\n </div>\n <div>\n <FormGroup>\n <ControlLabel>Grant access to these repositories:</ControlLabel>\n <div style={{ height: \"300px\", overflow: \"auto\" }}>\n {this.state.availableRepos\n .sort((x, y) => (x.owner < y.owner ? -1 : 1))\n .map((repo, i) => (\n <Checkbox\n key={i}\n id={repo.nodeId}\n onChange={this.handleRepoSelection}\n >\n {\" \" + repo.owner + \" / \" + repo.folderName}\n </Checkbox>\n ))}\n </div>\n </FormGroup>\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <div>\n <Popup\n contentStyle={{\n width: \"60%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n {this.renderCreateUser()}\n </div>\n </Popup>\n </div>\n );\n }\n}\n\nexport default CreateUserPopup;\n","import React, { Component } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport {\n Button,\n FormGroup,\n Checkbox,\n ControlLabel,\n FormControl,\n} from \"react-bootstrap\";\nimport {\n updateUserRoles,\n getSavedRestrictedIps,\n getListRoles,\n} from \"../../libs/API\";\n\nclass UpdateGroupsPopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: this.props.props.showUpdateGroupsPopup,\n userEmail: this.props.props.email,\n username: this.props.props.username,\n groups: this.props.props.groups,\n fullGroupList: [],\n ipAccess: \"\",\n };\n this.closePopup = this.closePopup.bind(this);\n }\n\n async componentDidMount() {\n this.loadGroups();\n }\n\n async getSavedRestrictedIp() {\n const { email, groups } = this.props.props;\n try {\n // Await the result of getSavedRestrictedIps\n const data = await getSavedRestrictedIps(email);\n\n this.setState({ ipAccess: data }, () => {\n // Check if the RestrictAccessByIP role exists in the groups\n const hasRestrictAccessByIP = groups.find(\n (group) =>\n group.roleName && group.roleName.includes(\"RestrictAccessByIP\")\n );\n\n if (hasRestrictAccessByIP) {\n const restrictIpTextBox = document.getElementsByName(\n `textboxDocumentSync_RestrictAccessByIP`\n );\n // Ensure that restrictIpTextBox[0] exists before trying to modify it\n if (restrictIpTextBox.length > 0) {\n restrictIpTextBox[0].style.display = \"block\";\n }\n }\n });\n } catch (error) {\n console.error(\"Error fetching saved IP restrictions:\", error);\n }\n }\n\n async loadGroups() {\n const data = await getListRoles(\n this.props.props.selectedClientId,\n this.props.props.loggedInUser\n );\n this.setState(\n {\n fullGroupList: data,\n },\n () => this.getSavedRestrictedIp()\n );\n }\n\n closePopup() {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n }\n\n handleChange = (event) => {\n const { name, type, checked, value } = event.target;\n\n // Determine if the element is a checkbox\n const isChecked = type === \"checkbox\" ? checked : false;\n\n // Extract roleId from data-key attribute\n const roleId = parseInt(event.target.getAttribute(\"data-key\"), 10);\n const roleName = name;\n\n // Create the group object with roleName and roleId\n const groupObject = { roleName, roleId };\n let restrictIpTextBox = document.getElementsByName(\n `textbox${event.target.name}`\n );\n if (event.target.name.includes(\"RestrictAccessByIP\") && value) {\n restrictIpTextBox[0].style.display = \"block\";\n } else {\n restrictIpTextBox[0].style.display = \"none\";\n }\n\n this.setState((prevState) => {\n // Check if the RestrictAccessByIP checkbox is checked or unchecked\n\n // Update the groups array immutably (add or remove the object)\n const updatedGroups = isChecked\n ? prevState.groups.some((group) => group.roleId === roleId)\n ? prevState.groups // If the roleId already exists, don't add it again\n : [...prevState.groups, groupObject] // Add new group object if it's not already in the groups array\n : prevState.groups.filter((group) => group.roleId !== roleId); // Remove group by roleId if unchecked\n\n return {\n groups: updatedGroups,\n };\n });\n };\n\n handleUpdateGroups = async (e) => {\n e.preventDefault();\n const { username, groups, userEmail, ipAccess } = this.state;\n await updateUserRoles(\n username,\n groups.map((role) => role.roleId),\n this.props.props.selectedClientId,\n userEmail,\n ipAccess\n );\n // await updateGroups({ username, groups, userEmail, ipAccess });\n await this.props.updateGroups(username, groups);\n this.closePopup();\n };\n\n formatGroupName = (groupname) => {\n if (groupname === \"DocumentSync_OCR\" || groupname === \"DocumentSync_PII\") {\n return groupname.replace(/^DocumentSync_/, \"\");\n } else if (groupname === \"DocumentSync_RestrictAccessByIP\") {\n return groupname\n .replace(/^DocumentSync_/, \"\")\n .replace(/(?<=[a-z])(?=[A-Z0-9])/g, \" \");\n } else {\n return groupname\n .replace(/^DocumentSync_/, \"\")\n .replace(/([A-Z])(?=[a-z0-9])/g, \" $1\")\n .trim();\n }\n };\n\n render() {\n const { popupOpen, userEmail, groups, fullGroupList } = this.state;\n return (\n <Popup\n contentStyle={{\n width: \"25%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n height: \"600px\",\n overflow: \"auto\",\n }}\n open={popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h4>Update Roles</h4>\n <hr />\n <div style={{ marginBottom: \"10px\" }}>\n <b>Email:</b> {userEmail}\n </div>\n\n <form onSubmit={this.handleUpdateGroups}>\n <FormGroup>\n <ControlLabel>\n <b>Roles:</b>\n </ControlLabel>\n <div>\n {fullGroupList.map((role) => (\n <span key={role.roleId}>\n <Checkbox\n key={role.roleId}\n data-key={role.roleId}\n name={`${role.roleName}`}\n inline\n onChange={this.handleChange}\n checked={\n !!groups.find(\n (group) =>\n group.roleName && group.roleName === role.roleName\n )\n }\n >\n {\" \" + this.formatGroupName(role.roleName)}\n </Checkbox>\n <FormControl\n componentClass=\"input\"\n name={`textbox${role.roleName}`}\n onChange={(e) =>\n this.setState({ ipAccess: e.target.value })\n }\n value={this.state.ipAccess}\n type=\"text\"\n autoComplete=\"off\"\n style={{ display: \"none\" }}\n ></FormControl>\n <br />\n </span>\n ))}\n </div>\n </FormGroup>\n <FormGroup>\n <Button bsClass=\"btn btn-outline-secondary\" type=\"submit\">\n Update Roles\n </Button>\n </FormGroup>\n </form>\n </div>\n </div>\n </Popup>\n );\n }\n}\n\nexport default UpdateGroupsPopup;\n","import React, { Component, Fragment } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport { Button, FormGroup, Checkbox, ControlLabel } from \"react-bootstrap\";\nimport { getReposByClientId, updateRepoAccess } from \"../../libs/API\";\n\nclass UpdateReposPopup extends Component {\n _isMounted = false; // Flag to track if component is mounted\n\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: this.props.props.showUpdateReposPopup,\n email: this.props.props.email,\n username: this.props.props.username,\n repos: this.props.props.repos,\n clientId: this.props.props.selectedClientId,\n fullRepoList: [],\n };\n this.closePopup = this.closePopup.bind(this);\n }\n\n async componentDidMount() {\n this._isMounted = true; // Set the component as mounted\n this.loadAvailableRepos();\n }\n\n componentWillUnmount() {\n this._isMounted = false; // Set the component as unmounted\n }\n\n async loadAvailableRepos() {\n // Load available repos only if component is still mounted\n getReposByClientId(this.state.clientId).then(async (data) => {\n if (this._isMounted) {\n // Check if component is still mounted\n const fullRepoList = data;\n console.log(fullRepoList);\n this.setState({ fullRepoList });\n }\n });\n }\n\n closePopup() {\n // Close the popup and clear data only if component is still mounted\n if (this._isMounted) {\n this.setState({\n popupOpen: false,\n email: \"\",\n username: \"\",\n repos: [],\n fullRepoList: [],\n });\n }\n this.props.unmountMe(); // Perform any parent-level unmount cleanup if necessary\n }\n\n handleChange = (event) => {\n const id =\n event.target.type === \"radio\" || event.target.type === \"checkbox\"\n ? event.target.name\n : event.target.id;\n const value =\n event.target.type === \"checkbox\"\n ? event.target.checked\n : event.target.value;\n const repoId = parseInt(id);\n\n let { fullRepoList, repos } = this.state;\n if (value) {\n const addRepo = fullRepoList.find((r) => r.repositoryId === repoId);\n repos.push(addRepo);\n } else {\n repos = repos.filter((repo) => repo.repositoryId !== repoId);\n }\n this.setState({ repos });\n };\n\n handleUpdateRepos = async (e) => {\n e.preventDefault();\n const { username, repos, email } = this.state;\n updateRepoAccess(username, repos, email).then((data) => {\n console.log(data);\n });\n this.closePopup();\n };\n\n render() {\n const { popupOpen, email, repos, fullRepoList } = this.state;\n\n return (\n <Popup\n contentStyle={{\n width: \"50%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h4>Update Repos</h4>\n <hr />\n <div style={{ marginBottom: \"10px\" }}>\n <b>Email:</b> {email}\n </div>\n\n <form onSubmit={this.handleUpdateRepos}>\n <FormGroup>\n <ControlLabel>\n <b>Repos:</b>\n </ControlLabel>\n <div style={{ height: \"50vh\", overflow: \"auto\" }}>\n {fullRepoList.map((repo, i) => (\n <Fragment key={repo.repositoryId}>\n <Checkbox\n key={repo.repositoryId}\n name={repo.repositoryId}\n inline\n onChange={this.handleChange}\n checked={repos\n .map((r) => r.repositoryId)\n .includes(repo.repositoryId)}\n >\n {` ${repo.folderName} / ${repo.owner}`}\n </Checkbox>\n <br />\n </Fragment>\n ))}\n </div>\n </FormGroup>\n <FormGroup>\n <Button bsClass=\"btn btn-outline-secondary\" type=\"submit\">\n Update Repos\n </Button>\n </FormGroup>\n </form>\n </div>\n </div>\n </Popup>\n );\n }\n}\n\nexport default UpdateReposPopup;\n","export var role = {\n documentSync_Manage_Metadata_Template: \"DocumentSync_ManageMetadataTemplates\",\n documentSync_Manage_Repositories: \"DocumentSync_ManageRepositories\",\n documentSync_Edit_Index: \"DocumentSync_EditIndex\",\n documentSync_Manage_Redactions: \"DocumentSync_ManageRedactions\",\n documentSync_Manage_Users: \"DocumentSync_ManageUsers\",\n documentSync_Text_Search: \"DocumentSync_TextSearch\",\n documentSync_Manage_Files: \"DocumentSync_ManageFiles\",\n documentSync_Delete: \"DocumentSync_Delete\",\n documentSync_CliftonExpungementWorkflow:\n \"DocumentSync_CliftonExpungementWorkflow\",\n foveonicsAdmin: \"FoveonicsAdmin\",\n documentSync_Email: \"DocumentSync_Email\",\n documentSync_MedfordExpungementWorkflow:\n \"DocumentSync_MedfordExpungementWorkflow\",\n documentSync_GlenrockExpungementWorkflow:\n \"DocumentSync_GlenrockExpungementWorkflow\",\n documentSync_RestrictAccessByIP: \"DocumentSync_RestrictAccessByIP\",\n documentSync_DownloadIndex: \"DocumentSync_DownloadIndex\",\n documentSync_FileProperties: \"DocumentSync_FileProperties\",\n documentSync_EnglewoodExpungementWorkflow:\n \"DocumentSync_EnglewoodExpungementWorkflow\",\n documentSync_AberdeenExpungementWorkflow:\n \"DocumentSync_AberdeenExpungementWorkflow\",\n documentSync_OCR: \"DocumentSync_OCR\",\n documentSync_PII: \"DocumentSync_PII\",\n documentSync_DemoExpungementWorkflow: \"DocumentSync_DemoExpungementWorkflow\",\n documentSync_EastamptonExpungementWorkflow:\n \"DocumentSync_EastamptonExpungementWorkflow\",\n documentSync_ManageClients: \"DocumentSync_ManageClients\",\n};\n","import React, { Component, Fragment } from \"react\";\nimport { Button, FormGroup, FormControl } from \"react-bootstrap\";\nimport { ReactTabulator } from \"react-tabulator\";\nimport Header from \"../header\";\nimport CreateNewUserSvg from \"./createnewusersvg\";\nimport CreateUserPopup from \"./createuserpopup\";\nimport UpdateGroupsPopup from \"./updateGroups\";\nimport UpdateReposPopup from \"./updateRepos\";\nimport {\n listGroupsForUser2,\n listReposForUser,\n getUsersByClientId,\n deleteUser,\n getClientDetails,\n updateClientMfaRequirement,\n} from \"../../libs/API\";\nimport \"./manageusers.css\";\nimport { DeleteFileSvg } from \"../Svg/allsvg\";\nimport Popup from \"reactjs-popup\";\nimport { role } from \"../enum\";\n\nclass ManageUsers extends Component {\n constructor(props) {\n super(props);\n this.state = {\n showCreateUserPopup: false,\n showUpdateGroupsPopup: false,\n showUpdateReposPopup: false,\n deleteUserPopupOpen: false,\n users: [],\n email: \"\",\n username: \"\",\n groups: [],\n repos: [],\n client: \"\",\n clientId: this.props.props.clientId,\n clientData: null,\n selectedClientId: this.props.props.clientId,\n hasManageClientsUserRole: false,\n selectedClientRequireMfa: false,\n isUpdatingMfa: false, // Flag to track MFA update in progress\n };\n this.ref = null;\n\n this.handleEditGroups = this.handleEditGroups.bind(this);\n this.hideUpdateGroups = this.hideUpdateGroups.bind(this);\n this.showUpdateGroups = this.showUpdateGroups.bind(this);\n this.hideUpdateRepos = this.hideUpdateRepos.bind(this);\n this.showUpdateRepos = this.showUpdateRepos.bind(this);\n this.toggleMfaRequirement = this.toggleMfaRequirement.bind(this);\n }\n\n async componentDidMount() {\n await this.populateClient();\n if (this.state.selectedClientId) {\n // Create a synthetic event object if needed\n const event = {\n preventDefault: () => {},\n target: { value: this.state.selectedClientId },\n };\n this.onClientChange(event);\n }\n }\n\n async populateClient() {\n try {\n var hasManageClientsUserRole = this.props.props.groups.includes(\n role.documentSync_ManageClients\n );\n\n if (\n this.state.clientId &&\n this.state.clientId > 0 &&\n !hasManageClientsUserRole\n ) {\n // For a single client, we need to fetch its MFA status\n const clientData = await getClientDetails();\n const currentClient = clientData.find(\n (client) => client.clientId === parseInt(this.state.clientId)\n );\n\n if (currentClient) {\n this.setState({\n selectedClientRequireMfa: currentClient.requireMfa,\n selectedClientId: this.state.clientId,\n });\n }\n\n await this.populateUsers(this.state.clientId);\n } else {\n const data = await getClientDetails(); // Fetch client details\n this.setState({\n clientData: data,\n hasManageClientsUserRole,\n }); // Update state with client data\n }\n } catch (error) {\n console.error(\"Error populating client details:\", error); // Handle errors\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.selectedClientId !== this.state.selectedClientId) {\n this.populateUsers(this.state.selectedClientId);\n }\n }\n\n async populateUsers(clientId) {\n await getUsersByClientId(clientId).then(async (data) => {\n this.setState({ users: data }, () => {\n if (this.ref && this.ref.table) {\n this.ref.table.setData(data);\n }\n });\n });\n }\n\n async loadGroups(user) {\n const { username } = user;\n listGroupsForUser2(username).then((data) => {\n const groups = data;\n if (!groups.includes(\"DocumentSync\")) {\n this.ref.table.deleteRow(username);\n } else {\n const rowData = this.ref.table.getRow(username).getData();\n rowData.groups = groups;\n this.ref.table.updateOrAddData([rowData]);\n }\n });\n }\n\n handleChildUnmount = () => {\n this.setState({ showCreateUserPopup: false });\n };\n\n handleNewRowInUserList = (addNewRow) => {\n let userList = this.state.users;\n userList.unshift(addNewRow);\n this.setState({ users: userList });\n this.ref.table.addRow(addNewRow, true);\n };\n\n handleCreateUser = () => {\n if (this.state.selectedClientId) {\n this.setState({ showCreateUserPopup: true });\n } else {\n alert(\"Please select a client from dropdown\");\n }\n };\n\n showUpdateGroups() {\n this.setState({ showUpdateGroupsPopup: true });\n }\n\n async hideUpdateGroups() {\n this.setState({ showUpdateGroupsPopup: false });\n }\n\n updateGroups = async (userId, roles) => {\n const rowData = await this.ref.table.getRow(userId).getData();\n rowData.roles = roles;\n this.ref.table.updateOrAddData([rowData]);\n };\n\n showUpdateRepos() {\n this.setState({ showUpdateReposPopup: true });\n }\n\n async hideUpdateRepos() {\n this.setState({ showUpdateReposPopup: false });\n }\n\n groupFormatter(cell) {\n const groupArray = cell._cell.value;\n // Filter and map to display names of roles that have relevant DS roles\n if (groupArray) {\n const formattedNames = groupArray\n .map((role) => role.roleName) // Extract roleName from each role\n .filter((roleName) => roleName.startsWith(\"DocumentSync_\")) // Only keep DocumentSync roles\n .map((roleName) => {\n const role = roleName.split(\"_\")[1]; // Extract the part after \"DocumentSync_\"\n if (role === \"OCR\" || role === \"PII\") {\n return role; // Return OCR or PII directly\n } else if (role === \"RestrictAccessByIP\") {\n return \"Restrict Access By IP\"; // Special case for RestrictAccessByIP\n } else {\n // Add space between camelCase words\n return role.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n }\n })\n .join(\", \");\n\n return formattedNames || \"No Roles\"; // Return formatted names or default text\n }\n }\n\n handleEditGroups(e, row) {\n e.preventDefault();\n const rowData = row._row.data;\n this.setState(\n {\n email: rowData.email,\n groups: rowData.roles,\n username: rowData.userId,\n },\n () => {\n this.showUpdateGroups();\n }\n );\n }\n\n async updateRepos(e, row) {\n e.preventDefault();\n const rowData = row._row.data;\n await listReposForUser(rowData.email).then((data) => {\n const rowData1 = this.ref.table.getRow(rowData.userId).getData();\n rowData.repos = data;\n this.ref.table.updateOrAddData([rowData1]);\n });\n // username is mostly userId from sql\n this.setState(\n {\n email: rowData.email,\n repos: rowData.repos,\n username: rowData.userId,\n },\n () => {\n this.showUpdateRepos();\n }\n );\n }\n\n renderDeleteUserPopup() {\n return (\n <Fragment>\n <Popup\n contentStyle={{\n width: \"32%\",\n borderRadius: \"15px\",\n padding: \"35px\",\n }}\n open={this.state.deleteUserPopupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closeopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>\n <h5>Delete User</h5>\n <div>\n <FormGroup>Are you sure to delete the user(s)</FormGroup>\n <FormGroup>\n <Button\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n onClick={this.handleDeleteUsers}\n >\n Yes\n </Button>\n </FormGroup>\n </div>\n </div>\n </div>\n </Popup>\n </Fragment>\n );\n }\n\n openDeleteUserPopup = (e) => {\n e.preventDefault();\n const rows = this.ref.table.getSelectedData();\n if (rows.length >= 1) {\n this.setState({ deleteUserPopupOpen: true });\n }\n };\n\n handleDeleteUsers = (e) => {\n e.preventDefault();\n const rows = this.ref.table.getSelectedData(); // Get selected rows from the table\n if (rows.length >= 1) {\n let users = [];\n for (let i = 0; i < rows.length; i++) {\n let Params = {\n username: rows[i].userId,\n userEmail: rows[i].email,\n groups: rows[i].roles.map((group) => group.roleName),\n };\n users.push(Params);\n }\n\n // Call deleteUser API\n deleteUser(users).then((data) => {\n if (data.status === 200) {\n let userList = this.state.users;\n\n // Filter out users that were deleted from the userList\n let filteredList = userList.filter((x) => {\n return !users.some((y) => y.userEmail === x.email);\n });\n\n // Update the state first to trigger a re-render\n this.setState({ users: filteredList }, () => {\n // After the state is updated, reflect changes in the table\n this.ref.table.replaceData(filteredList); // use replaceData to update the entire table\n this.closePopup(); // Close popup after the operation\n });\n }\n });\n }\n };\n\n closePopup = () => {\n this.setState({ deleteUserPopupOpen: false });\n };\n\n // Add this method to your ManageUsers component\n\n toggleMfaRequirement = async () => {\n const { selectedClientId, selectedClientRequireMfa } = this.state;\n\n if (!selectedClientId) return;\n\n try {\n // Show loading state\n this.setState({ isUpdatingMfa: true });\n\n // Call API to update MFA requirement\n const newMfaStatus = !selectedClientRequireMfa;\n await updateClientMfaRequirement(selectedClientId, newMfaStatus);\n\n // Update local state\n this.setState({\n selectedClientRequireMfa: newMfaStatus,\n isUpdatingMfa: false,\n });\n\n // Update clientData array with new MFA status\n if (this.state.clientData) {\n const updatedClientData = this.state.clientData.map((client) => {\n if (client.clientId.toString() === selectedClientId.toString()) {\n return { ...client, requireMfa: newMfaStatus };\n }\n return client;\n });\n\n this.setState({ clientData: updatedClientData });\n }\n\n // Show success notification\n alert(\n `MFA requirement ${\n newMfaStatus ? \"enabled\" : \"disabled\"\n } for this client`\n );\n } catch (error) {\n console.error(\"Failed to toggle MFA requirement:\", error);\n this.setState({ isUpdatingMfa: false });\n alert(\"Failed to update MFA requirement. Please try again.\");\n }\n };\n\n onClientChange = async (event) => {\n event.preventDefault();\n const selectedClientId = event.target.value;\n if (selectedClientId) {\n // Find the selected client in the clientData\n const selectedClient =\n this.state.clientData && this.state.clientData.length\n ? this.state.clientData.find(\n (client) => client.clientId.toString() === selectedClientId\n )\n : null;\n // Update the state with the selected client ID and its MFA requirement\n this.setState(\n {\n selectedClientId,\n selectedClientRequireMfa: selectedClient\n ? selectedClient.requireMfa\n : false,\n },\n async () => {\n try {\n // Call populateUsers after the state has been updated\n await this.populateUsers(selectedClientId);\n } catch (error) {\n console.error(\"Failed to load users:\", error);\n }\n }\n );\n } else {\n this.setState({\n selectedClientId: null,\n selectedClientRequireMfa: false,\n });\n if (this.ref && this.ref.table) {\n this.ref.table.setData(null);\n }\n }\n };\n\n render() {\n const {\n showCreateUserPopup,\n showUpdateGroupsPopup,\n showUpdateReposPopup,\n email,\n username,\n groups,\n repos,\n client,\n selectedClientId,\n selectedClientRequireMfa,\n } = this.state;\n\n const loggedInUser = this.props.props.loggedInUser;\n\n return (\n <div className=\"manageusers-main\">\n <Header props={this.props.props} history={this.props.history} />\n <div className=\"manageusers-content\">\n <h4> Manage Users</h4>\n <br />\n <div className=\"client-controls\">\n {this.state.clientId &&\n this.state.clientId > 0 &&\n !this.state.hasManageClientsUserRole ? null : (\n <div className=\"client-selector-container\">\n <FormControl\n componentClass=\"select\"\n className=\"client-select\"\n onChange={this.onClientChange}\n value={selectedClientId || \"\"}\n >\n {/* Default option prompting user to select a client */}\n <option value=\"\">Select Client</option>\n\n {/* Conditionally map over clientData only if it's not null or undefined */}\n {this.state.clientData &&\n this.state.clientData.map((client) => (\n <option key={client.clientId} value={client.clientId}>\n {client.clientName}\n </option>\n ))}\n </FormControl>\n\n {/* MFA Indicator that shows when a client is selected - now clickable */}\n {selectedClientId && (\n <div\n className={`mfa-indicator ${\n selectedClientRequireMfa\n ? \"mfa-required\"\n : \"mfa-not-required\"\n } ${this.state.isUpdatingMfa ? \"mfa-updating\" : \"\"}`}\n onClick={this.toggleMfaRequirement}\n title=\"Click to toggle MFA requirement\"\n >\n <span className=\"mfa-icon\">\n {this.state.isUpdatingMfa\n ? \"⟳\"\n : selectedClientRequireMfa\n ? \"🔒\"\n : \"🔓\"}\n </span>\n <span className=\"mfa-text\">\n {this.state.isUpdatingMfa\n ? \"Updating...\"\n : selectedClientRequireMfa\n ? \"MFA Required\"\n : \"MFA Not Required\"}\n </span>\n </div>\n )}\n </div>\n )}\n <Button\n title=\"Delete User\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-secondary\"\n className=\"Delete-UserButton\"\n onClick={this.openDeleteUserPopup}\n >\n <DeleteFileSvg />\n </Button>\n <Button\n title=\"Create a New User\"\n bsSize=\"xsmall\"\n bsClass=\"btn btn-outline-secondary\"\n className=\"Add-UserButton\"\n onClick={this.handleCreateUser}\n >\n <CreateNewUserSvg />\n </Button>\n </div>\n <div id=\"listUsers\">\n <ReactTabulator\n ref={(ref) => (this.ref = ref)}\n index=\"userId\"\n columns={[\n {\n formatter: \"rowSelection\",\n titleFormatter: \"rowSelection\",\n titleFormatterParams: {\n rowRange: \"visible\",\n },\n width: \"2%\",\n headerSort: false,\n visible: true,\n cellClick: function (e, cell) {\n cell.getRow().toggleSelect();\n },\n },\n {\n field: \"email\",\n title: \"Email\",\n width: \"15%\",\n headerFilter: true,\n },\n {\n field: \"roles\",\n title: \"Roles\",\n formatter: this.groupFormatter,\n width: \"70%\",\n },\n {\n width: \"88\",\n formatter: () => {\n return \"<button>Edit Roles</button>\";\n },\n cellClick: (e, cell) => {\n this.handleEditGroups(e, cell.getRow());\n },\n },\n {\n width: \"92\",\n formatter: () => {\n return \"<button>Edit Repos</button>\";\n },\n cellClick: async (e, cell) => {\n await this.updateRepos(e, cell.getRow());\n },\n },\n ]}\n data={[]}\n //rowDblClick={this.updateGroups}\n options={{\n pagination: \"local\",\n paginationSize: 10,\n paginationSizeSelector: [10, 20, 50, 100],\n placeholder: \"Loading...\",\n }}\n />\n </div>\n {showCreateUserPopup && (\n <CreateUserPopup\n props={{ showCreateUserPopup }}\n unmountMe={this.handleChildUnmount}\n clientId={this.state.selectedClientId}\n handleNewRowInUserList={this.handleNewRowInUserList}\n />\n )}\n {showUpdateGroupsPopup && (\n <UpdateGroupsPopup\n props={{\n showUpdateGroupsPopup,\n email,\n username,\n groups,\n client,\n selectedClientId,\n loggedInUser,\n }}\n unmountMe={this.hideUpdateGroups}\n updateGroups={this.updateGroups}\n />\n )}\n {showUpdateReposPopup && (\n <UpdateReposPopup\n props={{\n showUpdateReposPopup,\n email,\n username,\n repos,\n selectedClientId,\n }}\n unmountMe={this.hideUpdateRepos}\n />\n )}\n {this.renderDeleteUserPopup()}\n </div>\n </div>\n );\n }\n}\n\nexport default ManageUsers;\n","import React, { Fragment, Component } from \"react\";\nimport { Button, FormControl, Row, Col, ControlLabel } from \"react-bootstrap\";\nimport \"react-tabulator/lib/styles.css\"; // required styles\nimport \"react-tabulator/lib/css/tabulator.min.css\"; // theme\nimport { ReactTabulator } from \"react-tabulator\";\nimport { confirmAlert } from \"react-confirm-alert\"; // Import\nimport \"react-confirm-alert/src/react-confirm-alert.css\"; // Import css\nimport Header from \"../header\";\nimport LoaderButton from \"../LoaderButton\";\nimport {\n deleteRepository,\n addRepoData,\n getRepositories,\n updateRepoData,\n getAllClients,\n getRepositoriesByClient,\n saveNewClient,\n} from \"../../libs/API\";\nimport \"./managerepository.css\";\n\nclass ManageRepository extends Component {\n gridRepoRef = null;\n constructor(props) {\n super(props);\n this.state = {\n repoData: [],\n clients: [],\n repositoryOwner: \"\",\n folderName: \"\",\n s3Path: \"\",\n message: \"\",\n repositoryId: 0,\n isLoading: false,\n selectedClient: \"\",\n clientId: this.props.props.clientId,\n showAddClientForm: false,\n newClientName: \"\",\n };\n // console.log(\"ManageRepository\", props.props.token);\n }\n async componentDidMount() {\n if (this.state.clientId && this.state.clientId > 0) {\n await this.getAllRepositories();\n } else {\n await this.getAllClients();\n }\n }\n\n getAllRepositories = async () => {\n getRepositories().then((data) => {\n if (data) {\n this.setState({ repoData: data });\n }\n });\n };\n\n getAllClients = async () => {\n getAllClients().then((data) => {\n if (data) {\n this.setState({ clients: data });\n }\n });\n };\n\n toggleAddClientForm = () => {\n this.setState((prevState) => ({\n showAddClientForm: !prevState.showAddClientForm,\n }));\n };\n\n handleNewClientNameChange = (event) => {\n this.setState({ newClientName: event.target.value });\n };\n\n saveNewClient = async () => {\n try {\n // Call the API function to save the new client\n const newClient = await saveNewClient(this.state.newClientName);\n\n // Update the clients state with the new client\n this.setState((prevState) => ({\n clients: [...prevState.clients, newClient].sort((a, b) => {\n if (!a.name) return 1; // Move undefined or null `name` to the end\n if (!b.name) return -1; // Move undefined or null `name` to the end\n return a.name.localeCompare(b.name); // Sort by `name` in ascending order\n }),\n newClientName: \"\",\n showAddClientForm: false,\n }));\n } catch (error) {\n console.error(\"Error saving new client:\", error);\n // Handle the error appropriately\n }\n };\n\n addNewRow = async (event) => {\n event.preventDefault();\n this.setState({ isLoading: true });\n\n var currentClientId = this.state.selectedClient;\n\n // check if the client is selected\n if (!currentClientId || currentClientId < 1) {\n currentClientId = this.state.clientId;\n }\n\n if (!currentClientId || currentClientId < 1) {\n alert(\"No Client data found!\");\n }\n\n try {\n let newRow = {\n repositoryOwner: this.state.repositoryOwner,\n folderName: this.state.folderName,\n directoryPath: this.state.s3Path,\n repositoryId: this.state.repositoryId,\n clientId: currentClientId,\n };\n\n const data = await addRepoData(newRow);\n\n if (data.errorMessage.length === 0) {\n newRow = data;\n this.gridRepoRef.table.addRow(newRow, false);\n } else {\n this.setState({ message: data.errorMessage });\n }\n } catch (error) {\n // Handle any errors that occur during the execution\n console.error(\"An error occurred:\", error);\n } finally {\n this.setState({ isLoading: false });\n document.getElementById(\"repoOwner\").value = \"\";\n document.getElementById(\"folderName\").value = \"\";\n }\n };\n\n showAlert = (cell) => {\n confirmAlert({\n title: \"Confirm to Delete\",\n message: \"Are you sure to delete this.\",\n buttons: [\n {\n label: \"Yes\",\n onClick: () => {\n let repositoryId = cell.getRow().getData().repositoryId;\n deleteRepository(repositoryId).then((data) => {\n if (data.status === 200) {\n cell.getRow().delete();\n }\n });\n },\n },\n {\n label: \"No\",\n },\n ],\n });\n };\n\n updateData = async (e, cell) => {\n e.preventDefault();\n if (e.target.innerText === \"Update\") {\n const rowData = cell.getRow().getData();\n\n rowData.clientId = this.state.clientId;\n\n updateRepoData(rowData).then((data) => {\n if (data.status === 200) {\n alert(\"Updated\");\n }\n });\n } else if (e.target.innerText === \"Delete\") {\n this.showAlert(cell);\n }\n };\n\n //handleClientChange = (event) => {\n // this.setState({ selectedClient: event.target.value });\n //}\n\n handleClientChange = async (event) => {\n const selectedClientId = event.target.value;\n this.setState({ clientId: selectedClientId, selectedClient: selectedClientId, isLoading: true });\n\n try {\n if (selectedClientId) {\n const repositories = await getRepositoriesByClient(selectedClientId);\n this.setState({ repoData: repositories });\n\n // Update the tabular grid with the new data\n if (this.gridRepoRef && this.gridRepoRef.table) {\n this.gridRepoRef.table.setData(repositories);\n }\n } else {\n // If no client is selected, fetch all repositories\n //await this.getAllRepositories();\n }\n } catch (error) {\n console.error(\"Error fetching repositories:\", error);\n this.setState({\n message: \"Failed to fetch repositories. Please try again.\",\n });\n } finally {\n this.setState({ isLoading: false });\n }\n };\n\n renderRepoTabulator() {\n let openButton = function () {\n let button =\n \"<div><button type='button'class='btn btn-outline-secondary btn-sm updatedeletebuttons' >Update</button> <button type='button'class='btn btn-outline-secondary btn-sm updatedeletebuttons' >Delete</button></div>\";\n return button;\n };\n console.log(this.state.clients);\n return (\n <div className=\"managerepo-content\">\n <div className=\"header-container\">\n <h4>Manage Repositories</h4>\n\n {!(this.state.clientId && this.state.clientId > 0) && (\n <div className=\"client-selection-container\">\n <FormControl\n componentClass=\"select\"\n value={this.state.selectedClient}\n onChange={this.handleClientChange}\n className=\"client-dropdown\"\n >\n <option value=\"\">Select a client</option>\n {this.state.clients.map((client) => (\n <option key={client.clientId} value={client.clientId}>\n {client.name}\n </option>\n ))}\n </FormControl>\n <Button\n onClick={this.toggleAddClientForm}\n className=\"add-client-button\"\n aria-label=\"Add Client\"\n >\n <span className=\"green-plus-sign\">{\"\\u2795\"}</span>\n </Button>\n </div>\n )}\n\n {this.state.showAddClientForm && (\n <div className=\"add-client-form\">\n <FormControl\n type=\"text\"\n value={this.state.newClientName}\n onChange={this.handleNewClientNameChange}\n placeholder=\"Enter client name\"\n />\n <Button onClick={this.saveNewClient}>Save</Button>\n <Button onClick={this.toggleAddClientForm}>Cancel</Button>\n </div>\n )}\n </div>\n\n <br />\n <ReactTabulator\n id=\"table\"\n style={{\n height: \"74%\",\n marginLeft: \"5px\",\n }}\n columns={[\n {\n title: \"Repository Owner\",\n field: \"repositoryOwner\",\n editor: \"input\",\n headerFilter: \"input\",\n },\n {\n title: \"Repository Name\",\n field: \"folderName\",\n editor: \"input\",\n headerFilter: \"input\",\n },\n {\n title: \"S3 Path\",\n field: \"s3Path\",\n headerFilter: \"input\",\n },\n {\n title: \"\",\n headerSort: false,\n formatter: openButton,\n hozAlign: \"center\",\n cellClick: (e, cell) => {\n this.updateData(e, cell);\n },\n },\n ]}\n ref={(ref) => (this.gridRepoRef = ref)}\n data={this.state.repoData}\n options={{\n pagination: \"local\",\n paginationSize: 15,\n }}\n />\n <ControlLabel className=\"errorLabel\">{this.state.message}</ControlLabel>\n <div className=\"addnew-content\">\n <form onSubmit={this.addNewRow}>\n <Row>\n <Col sm={3}>\n Repository Owner:\n <FormControl\n className=\"input-box\"\n id=\"repoOwner\"\n type=\"input\"\n onChange={(e) =>\n this.setState({ repositoryOwner: e.target.value })\n }\n required\n />\n </Col>\n <Col sm={3}>\n Repository Name:\n <FormControl\n className=\"input-box\"\n type=\"input\"\n id=\"folderName\"\n onChange={(e) =>\n this.setState({ folderName: e.target.value })\n }\n required\n />\n </Col>\n {/* <Col sm={3}>\n S3 Path:\n <FormControl\n className=\"input-box\"\n type=\"input\"\n onChange={(e) => this.setState({ s3Path: e.target.value })}\n />\n </Col> */}\n <Col sm={3}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Add New Repository\"\n loadingText=\"Adding Repository...\"\n className=\"addNewButton\"\n />\n </Col>\n </Row>\n </form>\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div className=\"managerepo-main\">\n <Header props={this.props.props} history={this.props.history} />\n {this.renderRepoTabulator()}\n </div>\n </Fragment>\n );\n }\n}\n\nexport default ManageRepository;\n","import React, { Component } from \"react\";\nimport Popup from \"reactjs-popup\";\nimport \"react-tabulator/lib/styles.css\"; // required styles\nimport \"react-tabulator/lib/css/tabulator.min.css\"; // theme\nimport { ReactTabulator } from \"react-tabulator\";\nimport { FormControl, ControlLabel, Button, Row, Col } from \"react-bootstrap\";\nimport {\n getListValue,\n getListValueField,\n updateControlListData,\n deleteListField,\n addFieldListData,\n} from \"../../libs/API\";\n\nclass RenderFieldPopup extends Component {\n gridListValueRef = null;\n constructor(props) {\n super(props);\n this.state = {\n popupOpen: false,\n selectListValue: [],\n listValues: [],\n inputFieldName: \"\",\n canBeLoaded: false,\n selectedField: \"\",\n };\n this.closePopup = this.closePopup.bind(this);\n }\n\n async componentDidMount() {\n this.setState({ popupOpen: this.props.props.showFieldPopup });\n await this.getControlledList();\n }\n\n closePopup() {\n this.setState({ popupOpen: false });\n this.props.unmountMe();\n }\n\n getControlledList = async () => {\n const tableName = this.props.props.tableName;\n getListValue(tableName).then((data) => {\n this.setState({ selectListValue: data });\n });\n };\n\n handleOnChange = async (e) => {\n if (e.target.value.length > 0) {\n this.setState({ selectedField: e.target.value });\n await this.getListValuesForTemplateField(e.target.value);\n } else {\n this.setState({ canBeLoaded: false });\n }\n };\n\n getListValuesForTemplateField = async (fieldName) => {\n const tableName = this.props.props.tableName;\n getListValueField(tableName, fieldName).then((data) => {\n this.setState({ listValues: data, canBeLoaded: true });\n });\n };\n\n updateDeleteFields = async (e, cell) => {\n e.preventDefault();\n if (e.target.innerText === \"Update\") {\n let rowData = cell.getRow().getData();\n updateControlListData(rowData).then((data) => {\n if (data.status === 200) {\n alert(\"Updated\");\n }\n });\n } else if (e.target.innerText === \"Delete\") {\n let controlledListId = cell.getRow().getData().autokey;\n deleteListField(controlledListId).then((data) => {\n if (data.status === 200) {\n cell.getRow().delete();\n alert(\"Deleted\");\n }\n });\n }\n };\n\n addListField = async (e) => {\n e.preventDefault();\n let addParams = {\n tableName: this.props.props.tableName,\n valueEntry: this.state.inputFieldName,\n fieldName: this.state.selectedField,\n };\n addFieldListData(addParams).then((data) => {\n let newFeild = {\n valueEntry: addParams.valueEntry,\n autokey: data,\n };\n this.gridListValueRef.table.addRow(newFeild, false);\n });\n };\n\n renderListContent() {\n let addUpdateandDeleteButton = function () {\n let button =\n \"<div><button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnindextemplate' >Update</button> <button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnindextemplate' >Delete</button></div>\";\n return button;\n };\n return (\n <div>\n <ControlLabel className=\"indexTemplatemargin\">Edit List</ControlLabel>\n <Row className=\"marginforpopupField\">\n <Col componentClass={ControlLabel} sm={5}>\n Controlled Lists for this Template:\n </Col>\n <Col sm={5}>\n <FormControl componentClass=\"select\" onChange={this.handleOnChange}>\n <option key={-1} value=\"\">\n Select One--\n </option>\n {this.state.selectListValue.map((x) => (\n <option key={x.dataType} value={x.inputName}>\n {x.inputName}\n </option>\n ))}\n </FormControl>\n </Col>\n <Col sm={2}></Col>\n </Row>\n {this.state.canBeLoaded ? (\n <div>\n <form onSubmit={this.addListField}>\n <Row className=\"marginforpopupField\">\n <Col sm={5}>\n <FormControl\n className=\"input-box\"\n type=\"input\"\n required\n onChange={(e) =>\n this.setState({ inputFieldName: e.target.value })\n }\n />\n </Col>\n <Col sm={3}>\n <Button\n bsClass=\"btn btn-outline-secondary\"\n bsSize=\"small\"\n type=\"submit\"\n >\n Add Field\n </Button>\n </Col>\n <Col sm={4}></Col>\n </Row>\n </form>\n <Row className=\"marginforpopupField\">\n <Col sm={12}>\n <ReactTabulator\n id=\"ListTable\"\n columns={[\n {\n title: \"\",\n headerSort: false,\n field: \"valueEntry\",\n editor: \"input\",\n },\n {\n title: \"\",\n headerSort: false,\n formatter: addUpdateandDeleteButton,\n hozAlign: \"center\",\n cellClick: (e, cell) => {\n this.updateDeleteFields(e, cell);\n },\n },\n ]}\n data={this.state.listValues}\n ref={(ref) => (this.gridListValueRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 5,\n placeholder: \"No Data Available\",\n }}\n />\n </Col>\n </Row>\n </div>\n ) : (\n \"\"\n )}\n </div>\n );\n }\n\n render() {\n return (\n <div>\n <Popup\n contentStyle={{\n width: \"50%\",\n borderRadius: \"15px\",\n padding: \"15px\",\n }}\n open={this.state.popupOpen}\n modal\n closeOnDocumentClick={false}\n onClose={this.closePopup}\n >\n <div>\n {/* eslint-disable-next-line */}\n <a className=\"close\" onClick={this.closePopup}>\n ×\n </a>\n <div>{this.renderListContent()}</div>\n </div>\n </Popup>\n </div>\n );\n }\n}\n\nexport default RenderFieldPopup;\n","import React, { Fragment, Component } from \"react\";\nimport Header from \"../header\";\nimport \"./manageindextemplate.css\";\nimport \"react-tabulator/lib/styles.css\"; // required styles\nimport \"react-tabulator/lib/css/tabulator.min.css\"; // theme\nimport { ReactTabulator } from \"react-tabulator\";\nimport { FormControl, ControlLabel, Row, Col, Button } from \"react-bootstrap\";\nimport { confirmAlert } from \"react-confirm-alert\"; // Import\nimport \"react-confirm-alert/src/react-confirm-alert.css\"; // Import css\nimport LoaderButton from \"../LoaderButton\";\nimport RenderFieldPopup from \"./renderfieldpopup\";\nimport {\n getTemplates2,\n getRepositories,\n deleteTemplate,\n getAllTemplateColumns,\n addIndexTemplateData,\n updateFieldData,\n deleteColTemplate,\n addFieldData,\n} from \"../../libs/API\";\n\nclass ManageIndexTemplate extends Component {\n gridTemplateRef = null;\n gridTempColumnsRef = null;\n constructor(props) {\n super(props);\n this.state = {\n indexTemplateData: [],\n repoData: [],\n displayName: \"\",\n repositoryId: \"\",\n repositoryOwner: \"\",\n isLoading: false,\n selectedTemplateData: {\n displayName: \"\",\n repositoryOwner: \"\",\n tableName: \"\",\n },\n templateColumns: [],\n showFieldPopup: false,\n addField: {\n fieldName: \"\",\n fieldType: \"\",\n fieldLength: \"\",\n },\n };\n }\n\n async componentDidMount() {\n await this.loadTemplates();\n await this.getAllRepositories();\n }\n\n loadTemplates = async () => {\n getTemplates2().then((data) => {\n if (data) {\n this.setState({ indexTemplateData: data });\n }\n });\n };\n\n getAllRepositories = async () => {\n getRepositories().then((data) => {\n if (data) {\n this.setState({ repoData: data });\n }\n });\n };\n\n deleteTemplateData = async (e, cell) => {\n e.preventDefault();\n const tableName = cell.getRow().getData().tableName;\n confirmAlert({\n title: \"Confirm to Delete\",\n message: \"Are you sure to delete this.\",\n buttons: [\n {\n label: \"Yes\",\n onClick: () => {\n deleteTemplate(tableName).then((data) => {\n if (data.status === 200) {\n cell.getRow().delete();\n }\n });\n },\n },\n {\n label: \"No\",\n },\n ],\n });\n };\n\n getAllTemplatesColumns = async (e, cell) => {\n e.preventDefault();\n const tableName = cell.getRow().getData().tableName;\n const selectedDisplayName = cell.getRow().getData().displayName;\n const selectedRepositoryOnwer = cell.getRow().getData().repositoryOwner;\n getAllTemplateColumns(tableName).then((data) => {\n if (data) {\n this.setState({\n selectedTemplateData: {\n displayName: selectedDisplayName,\n repositoryOwner: selectedRepositoryOnwer,\n tableName: tableName,\n },\n templateColumns: data,\n });\n document.getElementsByClassName(\"rightdivTemplate\")[0].style.display =\n \"block\";\n }\n });\n };\n\n addNewTemplate = async (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n let repositoryId = this.state.repositoryId;\n let tablename = this.state.displayName;\n let addNewTemplateParams = {\n tableName: tablename,\n repositoryId: repositoryId,\n };\n\n try {\n const data = await addIndexTemplateData(addNewTemplateParams);\n let newIndexTemplateRow = {\n repositoryOwner: this.state.repositoryOwner,\n displayName: this.state.displayName,\n tableName: data,\n };\n this.gridTemplateRef.table.addRow(newIndexTemplateRow, false);\n } catch (error) {\n // Handle the error, e.g., display an error message to the user.\n console.error(\"Error while adding a new template:\", error);\n } finally {\n this.setState({\n isLoading: false,\n });\n document.getElementById(\"templateName\").value = \"\";\n document.getElementById(\"templatedropdown\").selectedIndex = 0;\n }\n };\n\n updateDeleteFields = async (e, cell) => {\n e.preventDefault();\n if (e.target.innerText === \"Update\") {\n let rowData = cell.getRow().getData();\n let inputOldValue = cell.getRow().getCells()[0].getOldValue();\n let hiddenFieldData =\n cell.getRow().getCells()[3].getValue() === undefined\n ? false\n : cell.getRow().getCells()[3].getValue();\n Object.assign(rowData, {\n tableName: this.state.selectedTemplateData.tableName,\n inputOldValue: inputOldValue,\n hiddenFieldData: hiddenFieldData,\n });\n updateFieldData(rowData).then((data) => {\n if (data.status === 200) {\n alert(\"Updated\");\n }\n });\n } else if (e.target.innerText === \"Delete\") {\n this.showAlert(cell);\n }\n };\n\n showAlert = (cell) => {\n confirmAlert({\n title: \"Confirm to Delete\",\n message: \"Are you sure to delete this.\",\n buttons: [\n {\n label: \"Yes\",\n onClick: () => {\n let deleteParams = {\n fieldName: cell.getRow().getData().inputName,\n tableName: this.state.selectedTemplateData.tableName,\n };\n deleteColTemplate(deleteParams).then((data) => {\n if (data.status === 200) {\n cell.getRow().delete();\n }\n });\n },\n },\n {\n label: \"No\",\n },\n ],\n });\n };\n\n handleControlledList = (e) => {\n this.setState({ showFieldPopup: true });\n };\n\n addField = async (e) => {\n e.preventDefault();\n try {\n let addParams = {\n tableName: this.state.selectedTemplateData.tableName,\n fieldName: this.state.addField.fieldName,\n fieldType: this.state.addField.fieldType,\n fieldLength: this.state.addField.fieldLength,\n };\n\n const data = await addFieldData(addParams);\n\n if (data.status === 200) {\n let needle = [\"String\", \"List\"];\n let result = needle.some((i) => addParams.fieldType.includes(i));\n if (!addParams.fieldLength && result) {\n addParams.fieldLength = 50;\n }\n let newField = {\n inputName: addParams.fieldName,\n dataType: addParams.fieldType,\n dataTypeLength: addParams.fieldLength,\n };\n this.gridTempColumnsRef.table.addRow(newField, false);\n } else {\n // Handle the case where the response status is not 200\n console.error(\"Field addition failed with status:\", data.status);\n }\n } catch (error) {\n // Handle any errors that occur during the execution\n console.error(\"An error occurred:\", error);\n } finally {\n document.getElementById(\"filedLength\").value = \"\";\n document.getElementById(\"filedName\").value = \"\";\n document.getElementById(\"dataType\").selectedIndex = 0;\n }\n };\n\n handleChildUnmount = () => {\n this.setState({ showFieldPopup: false });\n };\n\n renderIndextemplateRepo() {\n let addButton = function () {\n let button =\n \"<button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnindextemplate' >Delete</button>\";\n return button;\n };\n\n let addUpdateandDeleteButton = function () {\n let button =\n \"<div><button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnindextemplate' >Update</button> <button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnindextemplate' >Delete</button></div>\";\n return button;\n };\n\n let editCheck = (cell) => {\n return !(cell.getRow().getData().dataType === \"Date\");\n };\n\n return (\n <Fragment>\n <h4> Manage Index Templates</h4>\n <br />\n <div className=\"maintemplateDiv\">\n <div className=\"leftdivTemplate\">\n <form\n onSubmit={this.addNewTemplate}\n className=\"indexTemplatemargin\"\n >\n <Row>\n <Col sm={4}>\n <FormControl\n className=\"input-box\"\n type=\"input\"\n id=\"templateName\"\n onChange={(e) =>\n this.setState({ displayName: e.target.value })\n }\n required\n />\n </Col>\n <Col sm={5}>\n <FormControl\n className=\"customindexTemplateSelect\"\n componentClass=\"select\"\n id=\"templatedropdown\"\n onChange={(e) =>\n this.setState({\n repositoryId:\n e.target.options[\n e.target.options.selectedIndex\n ].getAttribute(\"data-key\"),\n repositoryOwner: e.target.value,\n })\n }\n required\n >\n <option key={-1} value=\"\">\n Select Index Template\n </option>\n {this.state.repoData.map((repo, i) => (\n <option\n key={i}\n data-key={repo.repositoryId}\n value={repo.repositoryOwner}\n >\n {repo.repositoryOwner}\n </option>\n ))}\n </FormControl>\n </Col>\n <Col sm={3}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Add New Template\"\n loadingText=\"Adding Template...\"\n />\n </Col>\n </Row>\n </form>\n <ReactTabulator\n id=\"templateTable\"\n columns={[\n {\n title: \"Template Name\",\n field: \"displayName\",\n formatter: \"link\",\n cellClick: (e, cell) => {\n this.getAllTemplatesColumns(e, cell);\n },\n },\n {\n title: \"Repository Owner\",\n field: \"repositoryOwner\",\n },\n {\n title: \"\",\n headerSort: false,\n formatter: addButton,\n hozAlign: \"center\",\n cellClick: (e, cell) => {\n this.deleteTemplateData(e, cell);\n },\n },\n ]}\n data={this.state.indexTemplateData}\n ref={(ref) => (this.gridTemplateRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 10,\n placeholder: \"No Data Available\",\n }}\n />\n </div>\n <div className=\"rightdivTemplate\">\n <div\n style={{\n margin: \"1px\",\n }}\n >\n <ControlLabel className=\"controlLableindextemp\">\n Templates: {this.state.selectedTemplateData.displayName}\n </ControlLabel>\n <ControlLabel className=\"controlLableindextemp\">\n Repository Owner:\n {this.state.selectedTemplateData.repositoryOwner}\n </ControlLabel>\n <Button bsStyle=\"link\" onClick={this.handleControlledList}>\n Edit Controlled List\n </Button>\n </div>\n <ReactTabulator\n id=\"templateColumnTable\"\n columns={[\n {\n title: \"Filed Name\",\n field: \"inputName\",\n headerHozAlign: \"center\",\n hozAlign: \"center\",\n editor: \"input\",\n },\n {\n title: \"Data Type\",\n field: \"dataType\",\n headerHozAlign: \"center\",\n hozAlign: \"center\",\n editor: \"select\",\n editorParams: {\n String: \"String\",\n Number: \"Number\",\n List: \"List\",\n Date: \"Date\",\n },\n },\n {\n title: \"Filed Length\",\n field: \"dataTypeLength\",\n headerHozAlign: \"center\",\n hozAlign: \"center\",\n editor: \"input\",\n editable: editCheck,\n },\n {\n title: \"Hidden\",\n field: \"hidden\",\n headerHozAlign: \"center\",\n hozAlign: \"center\",\n editor: true,\n formatter: \"tickCross\",\n },\n {\n title: \"\",\n headerSort: false,\n formatter: addUpdateandDeleteButton,\n hozAlign: \"center\",\n cellClick: (e, cell) => {\n this.updateDeleteFields(e, cell);\n },\n },\n ]}\n data={this.state.templateColumns}\n ref={(ref) => (this.gridTempColumnsRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 12,\n placeholder: \"No Data Available\",\n }}\n />\n <div className=\"addfieldDiv\">\n <form onSubmit={this.addField}>\n <Row>\n <Col sm={4}>\n <FormControl\n className=\"input-box\"\n type=\"input\"\n required\n id=\"filedName\"\n onChange={(e) =>\n this.setState({\n addField: {\n ...this.state.addField,\n fieldName: e.target.value,\n },\n })\n }\n />\n </Col>\n <Col sm={3}>\n <FormControl\n className=\"customindexTemplateSelect\"\n componentClass=\"select\"\n id=\"dataType\"\n onChange={(e) =>\n this.setState({\n addField: {\n ...this.state.addField,\n fieldType: e.target.value,\n },\n })\n }\n required\n >\n <option key={-1} value=\"\">\n Select\n </option>\n <option key={0} value=\"String\">\n String\n </option>\n <option key={1} value=\"Number\">\n Number\n </option>\n <option key={2} value=\"List\">\n List\n </option>\n <option key={3} value=\"Date\">\n Date\n </option>\n </FormControl>\n </Col>\n <Col sm={3}>\n <FormControl\n className=\"input-box\"\n type=\"input\"\n id=\"filedLength\"\n onChange={(e) =>\n this.setState({\n addField: {\n ...this.state.addField,\n fieldLength: e.target.value,\n },\n })\n }\n />\n </Col>\n <Col sm={2}>\n <Button\n bsClass=\"btn btn-outline-secondary\"\n bsSize=\"small\"\n type=\"submit\"\n >\n Add Field\n </Button>\n </Col>\n </Row>\n </form>\n </div>\n </div>\n </div>\n </Fragment>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div className=\"manageindextemp-main\">\n <Header props={this.props.props} history={this.props.history} />\n <div className=\"managerepo-content\">\n {this.renderIndextemplateRepo()}\n {this.state.showFieldPopup ? (\n <RenderFieldPopup\n props={{\n showFieldPopup: this.state.showFieldPopup,\n tableName: this.state.selectedTemplateData.tableName,\n }}\n unmountMe={this.handleChildUnmount}\n />\n ) : (\n \"\"\n )}\n </div>\n </div>\n </Fragment>\n );\n }\n}\n\nexport default ManageIndexTemplate;\n","import React, { Component, Fragment } from \"react\";\nimport { Auth } from \"aws-amplify\";\nimport { Link } from \"react-router-dom\";\nimport {\n FormGroup,\n FormControl,\n ControlLabel,\n HelpBlock,\n Glyphicon,\n} from \"react-bootstrap\";\nimport LoaderButton from \"../LoaderButton\";\nimport * as constants from \"../../constants\";\nimport DocumentSync from \"../../Component/Images/DocumentSync-Logo.png\";\nimport \"../Login/login.css\";\n\nclass ResetPassword extends Component {\n constructor() {\n super();\n this.state = {\n username: \"\",\n isSendingCode: false,\n isCodeSent: false,\n confirmationCode: \"\",\n password: \"\",\n confirmPassword: \"\",\n isConfirming: false,\n isConfirmed: false,\n errorMessage: \"\",\n };\n }\n\n validateConfirmationCode = () => {\n return this.state.username.length > 0 ? false : true;\n };\n\n handleCodeButtonClick = async (e) => {\n e.preventDefault();\n this.setState({ isSendingCode: true });\n try {\n await Auth.forgotPassword(this.state.username);\n this.setState({ isCodeSent: true });\n } catch (error) {\n alert(error.message);\n this.setState({ isSendingCode: false });\n }\n };\n\n validateConfirmationForm = () => {\n if (this.state.confirmationCode === \"\") {\n this.setState({ errorMessage: \"Please enter Confirmation Code\" });\n return;\n }\n if (!this.state.password.match(/^(?=.*\\d)(?=.*[a-zA-Z]).{8,}$/)) {\n this.setState({\n errorMessage: \"Minimum 8 Characters including 1 number.\",\n });\n return;\n }\n if (this.state.password !== this.state.confirmPassword) {\n this.setState({ errorMessage: constants.PASSWORD_MATCH_INVALID });\n return;\n }\n return true;\n };\n\n handleConfirmationFormButtonClick = async (e) => {\n e.preventDefault();\n if (this.validateConfirmationForm()) {\n this.setState({ isConfirming: true, errorMessage: \"\" });\n try {\n await Auth.forgotPasswordSubmit(\n this.state.username,\n this.state.confirmationCode,\n this.state.password\n );\n this.setState({ isConfirmed: true });\n } catch (error) {\n this.setState({ isConfirming: false });\n }\n }\n };\n\n renderConfirmationCode = () => {\n return (\n <div>\n <form onSubmit={this.handleCodeButtonClick} autoComplete=\"off\">\n <FormGroup controlId=\"username\">\n <ControlLabel>Email:</ControlLabel>\n <FormControl\n componentClass=\"input\"\n onChange={(e) => this.setState({ username: e.target.value })}\n type=\"text\"\n ></FormControl>\n </FormGroup>\n <FormGroup>\n <Link to=\"/\">Return to Login Page</Link>\n </FormGroup>\n <FormGroup>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n bsSize=\"large\"\n disabled={this.validateConfirmationCode()}\n type=\"submit\"\n isLoading={this.state.IsSendingCode}\n text=\"Send Password Reset Code\"\n loadingText=\"Sending Password Reset Code…\"\n />\n </FormGroup>\n </form>\n </div>\n );\n };\n\n renderConfirmationForm = () => {\n return (\n <div>\n <form\n onSubmit={this.handleConfirmationFormButtonClick}\n autoComplete=\"off\"\n >\n <HelpBlock>\n Please check your email ({this.state.username}) for the confirmation\n code.\n </HelpBlock>\n <br />\n <br />\n <FormGroup bsSize=\"large\" controlId=\"confirmationCode\">\n <ControlLabel>Confirmation Code</ControlLabel>\n <FormControl\n type=\"text\"\n autoFocus\n autoComplete=\"off\"\n onChange={(e) =>\n this.setState({ confirmationCode: e.target.value })\n }\n />\n </FormGroup>\n <hr />\n <FormGroup bsSize=\"large\" controlId=\"password\">\n <ControlLabel>New Password</ControlLabel>\n <span\n style={{ marginLeft: \"3%\", fontSize: \"small\", color: \"gray\" }}\n >\n (Minimum 8 Characters including 1 number.)\n </span>\n <FormControl\n type=\"password\"\n autoComplete=\"new-password\"\n onChange={(e) => this.setState({ password: e.target.value })}\n minLength={8}\n />\n </FormGroup>\n <FormGroup bsSize=\"large\" controlId=\"confirmPassword\">\n <ControlLabel>Confirm Password</ControlLabel>\n <FormControl\n type=\"password\"\n autoComplete=\"new-password\"\n onChange={(e) =>\n this.setState({ confirmPassword: e.target.value })\n }\n minLength={8}\n />\n </FormGroup>\n <FormGroup>\n <Link to=\"/\">Return to Login Page</Link>\n </FormGroup>\n <FormGroup>\n <LoaderButton\n block\n type=\"submit\"\n bsSize=\"small\"\n bsClass=\"btn btn-outline-secondary\"\n isLoading={this.state.isConfirming}\n text=\"Confirm\"\n loadingText=\"Confirming…\"\n ></LoaderButton>\n </FormGroup>\n <span className=\"errorMessage\">{this.state.errorMessage}</span>\n </form>\n </div>\n );\n };\n\n renderSuccessMessage = () => {\n return (\n <div className=\"success\">\n <Glyphicon glyph=\"ok\" />\n <p>Your password has been reset.</p>\n <p>\n <Link to=\"/\">Click here to login with your new credentials.</Link>\n </p>\n </div>\n );\n };\n\n render() {\n return (\n <Fragment>\n <div id=\"loginmain\">\n <div id=\"loginheader\"></div>\n <div id=\"logo\">\n <img src={DocumentSync} alt=\"DocumentSync\" />\n </div>\n <div id=\"logincontent\">\n <br />\n <br />\n {!this.state.isCodeSent\n ? this.renderConfirmationCode()\n : !this.state.isConfirmed\n ? this.renderConfirmationForm()\n : this.renderSuccessMessage()}\n </div>\n <div id=\"footer\">\n <p>\n © {new Date().getFullYear()} Foveonics Document Solutions\n </p>\n </div>\n </div>\n </Fragment>\n );\n }\n}\n\nexport default ResetPassword;\n","import React, { Fragment, Component } from \"react\";\nimport Header from \"../header\";\nimport \"./ocrindextemplates.css\";\nimport {\n getOcrTemplatesInfo,\n startOcr,\n getInitializedOcrStatus,\n UpdateAutoOcrItem,\n} from \"../../libs/API\";\nimport { ReactTabulator } from \"react-tabulator\";\nimport { FormControl, Row, Col } from \"react-bootstrap\";\nimport LoaderButton from \"../LoaderButton\";\n\nclass OcrIndexTempates extends Component {\n gridOcrTemplateRef = null;\n constructor(props) {\n super(props);\n this.state = {\n indexTemplateOcrData: [],\n templateId: \"\",\n tableData: [],\n isLoading: false,\n };\n }\n async componentDidMount() {\n await this.loadOcrWithTemplateInfo();\n }\n\n loadTableData = async (e) => {\n e.preventDefault();\n this.setState({ tableData: [], isLoading: true });\n getInitializedOcrStatus(this.state.templateId)\n .then((data) => {\n console.log(data.data, data, \"innerTemplates\");\n if (data.data) {\n this.setState({ tableData: data.data, isLoading: false });\n }\n })\n .catch((error) => {\n console.error(error);\n this.setState({ isLoading: false });\n });\n };\n\n loadOcrWithTemplateInfo = async () => {\n getOcrTemplatesInfo()\n .then((data) => {\n console.log(data.data, data, \"template\");\n if (data.data) {\n this.setState({ indexTemplateOcrData: data.data });\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n PerformOcr = async (e, cell) => {\n e.preventDefault();\n cell.getElement().querySelector(\"button\").disabled = true;\n const templateId = cell.getRow().getData().TemplateId;\n startOcr(templateId)\n .then((data) => {\n console.log(data, \"PerformOcr\");\n cell.getElement().querySelector(\"button\").disabled = false;\n })\n .catch((error) => {\n console.error(error);\n cell.getElement().querySelector(\"button\").disabled = false;\n });\n };\n\n handleOcrToggle = async (e, cell) => {\n e.preventDefault();\n const newValue = cell.getRow().getData().AutoOcr; // Get the updated value from row data\n\n try {\n const templateId = cell.getRow().getData().TemplateId;\n await UpdateAutoOcrItem(templateId, newValue); // Perform the update\n } catch (error) {}\n };\n\n ocrToggleFormatter = (cell) => {\n const isChecked = cell.getValue();\n const toggle = document.createElement(\"input\");\n toggle.type = \"checkbox\";\n toggle.checked = isChecked;\n toggle.onchange = (e) => {\n const row = cell.getRow();\n row.update({ AutoOcr: e.target.checked });\n };\n\n return toggle;\n };\n\n RefreshButtonOcr = async (e, cell) => {\n e.preventDefault();\n cell.getElement().querySelector(\"button\").disabled = true;\n const templateId = cell.getRow().getData().TemplateId;\n getInitializedOcrStatus(templateId)\n .then((data) => {\n console.log(data, \"RefreshButtonOcr\");\n if (data.data) {\n this.gridOcrTemplateRef.table.updateData(data.data);\n cell.getElement().querySelector(\"button\").disabled = false;\n }\n })\n .catch((error) => {\n console.error(error);\n cell.getElement().querySelector(\"button\").disabled = false;\n });\n };\n\n renderOcrStatusTable() {\n let ocrButton = function () {\n let button =\n \"<button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnocr' > OCR </button>\";\n return button;\n };\n\n let refreshButton = function () {\n let button =\n \"<button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnocr' > Refresh </button>\";\n return button;\n };\n\n let updateButton = function () {\n let button =\n \"<button type='button'class='btn btn-outline-secondary btn-sm updatedeletebtnocr' > Update </button>\";\n return button;\n };\n\n return (\n <Fragment>\n <div className=\"mainOcrDiv\">\n <form onSubmit={this.loadTableData}>\n <Row>\n <Col sm={4}>\n <FormControl\n className=\"customindexTemplateSelect\"\n componentClass=\"select\"\n onChange={(e) =>\n this.setState({\n // templateId:\n // e.target.options[\n // e.target.options.selectedIndex\n // ].getAttribute(\"data-key\"),\n templateId: e.target.value,\n })\n }\n required\n >\n <option key={-1} value=\"\">\n Select Index Template{\" \"}\n </option>\n {this.state.indexTemplateOcrData.map((indexTemplate, i) => (\n <option key={i} value={indexTemplate.TemplateId}>\n {indexTemplate.DisplayName}\n </option>\n ))}\n </FormControl>\n </Col>\n <Col sm={2}>\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isLoading}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text=\"Load Templates\"\n loadingText=\"Loading...\"\n />\n </Col>\n </Row>\n </form>\n <div className=\"leftdivTemplate\">\n <ReactTabulator\n id=\"templateTable\"\n index=\"TemplateId\"\n columns={[\n {\n title: \"Template Name\",\n field: \"DisplayName\",\n widthGrow: 2,\n },\n {\n title: \"Repository Owner\",\n field: \"RepositoryOwner\",\n widthGrow: 3,\n },\n {\n title: \"Table Name\",\n field: \"TableName\",\n visible: false,\n },\n {\n title: \"File Count\",\n field: \"filecount\",\n widthGrow: 1,\n },\n {\n title: \"Ocr Count\",\n field: \"OcrCompleteCount\",\n widthGrow: 1,\n },\n {\n title: \"Initiated Count\",\n field: \"InitialtedCount\",\n widthGrow: 1,\n },\n {\n title: \"Auto OCR\",\n field: \"AutoOcr\",\n formatter: this.ocrToggleFormatter,\n hozAlign: \"left\",\n headerSort: false,\n widthGrow: 1,\n },\n {\n title: \"\",\n headerSort: false,\n formatter: ocrButton,\n hozAlign: \"center\",\n widthGrow: 1,\n cellClick: async (e, cell) => {\n await this.PerformOcr(e, cell);\n },\n },\n {\n title: \"\",\n headerSort: false,\n formatter: refreshButton,\n hozAlign: \"center\",\n widthGrow: 1,\n cellClick: async (e, cell) => {\n await this.RefreshButtonOcr(e, cell);\n },\n },\n {\n title: \"\",\n headerSort: false,\n formatter: updateButton,\n hozAlign: \"center\",\n widthGrow: 1,\n cellClick: async (e, cell) => {\n await this.handleOcrToggle(e, cell);\n },\n },\n ]}\n data={this.state.tableData}\n ref={(ref) => (this.gridOcrTemplateRef = ref)}\n options={{\n pagination: \"local\",\n paginationSize: 10,\n placeholder:\n \"Select the Index Template and then click Load button\",\n layout: \"fitColumns\", // Ensure columns fit within table width\n }}\n />\n </div>\n </div>\n </Fragment>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div className=\"ocr-main\">\n <Header props={this.props.props} history={this.props.history} />\n <div className=\"ocr-content\">\n <div>\n <h4> OCR Template Status Table</h4>\n <br />\n {this.renderOcrStatusTable()}\n </div>\n </div>\n </div>\n </Fragment>\n );\n }\n}\n\nexport default OcrIndexTempates;\n","// NoPermission.js\nimport React from \"react\";\n\nconst NoPermission = () => {\n return (\n <div style={{ padding: \"20px\", textAlign: \"center\" }}>\n <h1>Access Denied</h1>\n <p>You do not have permission to view this page.</p>\n </div>\n );\n};\n\nexport default NoPermission;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport axios from \"axios\";\nimport \"./chat.css\";\n\nexport const Chat = () => {\n const [messages, setMessages] = useState([]);\n const [newMessage, setNewMessage] = useState(\"\");\n const [isGenieTyping, setIsGenieTyping] = useState(false);\n const messagesEndRef = useRef(null);\n\n const USER_ID = \"Document Sync Trainee\";\n const GENIE_ID = \"Document Sync Genie\";\n\n useEffect(() => {\n // Add initial welcome message\n setMessages([\n {\n sender: GENIE_ID,\n content: \"Hello! I'm Document Sync Genie. How can I help you today?\",\n timestamp: new Date().toISOString(),\n },\n ]);\n }, []);\n\n useEffect(() => {\n // Scroll to bottom whenever messages change\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" });\n }\n }, [messages, isGenieTyping]);\n\n const sendMessage = async (e) => {\n e.preventDefault();\n if (!newMessage.trim()) return;\n\n // Add user message\n const userMessage = {\n sender: USER_ID,\n content: newMessage,\n timestamp: new Date().toISOString(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n setNewMessage(\"\");\n setIsGenieTyping(true); // Show typing indicator\n\n try {\n // Make API call for Genie's response\n const response = await axios.post(\"http://localhost:5009/ProcessQuery\", {\n message: newMessage,\n });\n\n // Add Genie's response after a small delay\n setTimeout(() => {\n const genieMessage = {\n sender: GENIE_ID,\n content: response.data.response,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, genieMessage]);\n setIsGenieTyping(false); // Hide typing indicator\n }, 500);\n } catch (error) {\n console.error(\"Error:\", error);\n const errorMessage = {\n sender: GENIE_ID,\n content:\n \"I apologize, but I'm having trouble responding right now. Please try again.\",\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, errorMessage]);\n setIsGenieTyping(false); // Hide typing indicator\n }\n };\n\n const formatMessage = (content) => {\n // Split the message by new lines\n const lines = content.split(\"\\n\");\n return lines.map((line, index) => {\n // Check if line starts with bullet points or numbers\n if (line.trim().match(/^[•*-]|^\\d+\\./)) {\n return (\n <li key={index}>{line.trim().replace(/^[•*-]|\\d+\\.\\s*/, \"\")}</li>\n );\n }\n return <p key={index}>{line}</p>;\n });\n };\n\n return (\n <div className=\"chat-popup\">\n <div className=\"chat-header\">\n <h3>Chat with Document Sync Genie</h3>\n </div>\n <div className=\"chat-messages\">\n {messages.map((message, index) => (\n <div\n key={index}\n className={`message ${\n message.sender === USER_ID ? \"user-message\" : \"genie-message\"\n }`}\n >\n <div className=\"message-sender\">{message.sender}</div>\n <div className=\"message-content\">\n {formatMessage(message.content)}\n </div>\n <div className=\"message-timestamp\">\n {new Date(message.timestamp).toLocaleTimeString()}\n </div>\n </div>\n ))}\n {isGenieTyping && (\n <div className=\"typing-indicator\">\n <div className=\"typing-bubble\"></div>\n <div className=\"typing-bubble\"></div>\n <div className=\"typing-bubble\"></div>\n <span className=\"typing-text\">Genie typing... </span>\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n <form onSubmit={sendMessage} className=\"chat-input-form\">\n <input\n type=\"text\"\n value={newMessage}\n onChange={(e) => setNewMessage(e.target.value)}\n placeholder=\"Type your message...\"\n className=\"chat-input\"\n disabled={isGenieTyping}\n />\n <button\n type=\"submit\"\n className=\"chat-send-button\"\n disabled={isGenieTyping}\n >\n Send\n </button>\n </form>\n </div>\n );\n};\n\nexport default Chat;\n","import React from \"react\";\nimport Login from \"./../Login/login\";\nimport Search from \"./../Search/search\";\nimport HomePageRoute from \"./homePageRoute\";\nimport AuthenticatedRoute from \"./authenticatedRoute\";\nimport Browse from \"../Browse/browse\";\nimport MyAccount from \"../MyAccount/myaccount\";\nimport ManageUsers from \"../ManageUsers/manageusers\";\nimport ManageRepository from \"../ManageRepository/managerepository\";\nimport ManageIndexTemplate from \"../ManageIndexTemplate/manageindextemplate\";\nimport ResetPassword from \"../ResetPassword/resetpassword\";\nimport OcrIndexTempates from \"../Ocr/ocrindextempates\";\nimport NoPermission from \"../NoPermission\";\nimport Chat from \"../Chat/chat\"; // or\n\nclass RoutePage extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n render() {\n return (\n <div>\n <HomePageRoute\n path=\"/\"\n exact\n component={Login}\n props={this.props}\n ></HomePageRoute>\n <HomePageRoute\n path=\"/login/reset\"\n exact\n component={ResetPassword}\n props={this.props}\n ></HomePageRoute>\n <HomePageRoute\n path=\"/chat\"\n exact\n component={Chat}\n props={this.props}\n ></HomePageRoute>\n {/* No Permission Route */}\n <HomePageRoute\n path=\"/no-permission\"\n exact\n component={NoPermission}\n props={this.props}\n />\n <AuthenticatedRoute\n path=\"/search\"\n exact\n component={Search}\n props={this.props}\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/browse\"\n exact\n component={Browse}\n props={this.props}\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/myaccount\"\n exact\n component={MyAccount}\n props={this.props}\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/manageusers\"\n exact\n component={ManageUsers}\n props={this.props}\n requiredPermission=\"hasManageUsers\"\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/managerepository\"\n exact\n component={ManageRepository}\n props={this.props}\n requiredPermission=\"hasManageRepositories\"\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/manageindextemplate\"\n exact\n component={ManageIndexTemplate}\n props={this.props}\n requiredPermission=\"hasManageMetadataTemplate\"\n ></AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/ocrindextempates\"\n exact\n component={OcrIndexTempates}\n props={this.props}\n requiredPermission=\"hasOcrRole\"\n ></AuthenticatedRoute>\n </div>\n );\n }\n}\n\nexport default RoutePage;\n","import React from \"react\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport RoutePage from \"./Component/Route/route\";\nimport { role } from \"./Component/enum\";\nimport { Auth } from \"aws-amplify\";\nimport { getUserDetailsByEmail, getRequireMfabyClientSql } from \"./libs/API\";\n\nclass App extends React.Component {\n constructor() {\n super();\n this.state = {\n hasAuthenticated: false,\n isAuthenticating: true,\n loggedInUser: \"\",\n hasManageMetadataTemplate: false,\n hasManageRepositories: false,\n hasEditIndex: false,\n hasManageRedaction: false,\n hasManageUsers: false,\n hasTextSearch: false,\n hasManageFiles: false,\n hasDelete: false,\n hasCliftonWorkflow: false,\n hasEnglewoodWorkflow: false,\n hasFoveonicsAdmin: false,\n hasSendEmail: false,\n hasMedfordWorkflow: false,\n hasRestrictAccessByIP: false,\n hasDownloadIndex: false,\n hasFileProperties: false,\n hasGlenrockWorkflow: false,\n hasAberdeenWorkflow: false,\n userIpAddress: \"\",\n userId: \"\",\n hasOcrRole: false,\n hasPIIRole: false,\n hasDemoExpungementWorkflow: false,\n hasEastamptonExpungementWorkflow: false,\n clientId: 0,\n groups: null,\n requireMfa: false,\n };\n this.userHasAuthenticated = this.userHasAuthenticated.bind(this);\n }\n\n async componentDidMount() {\n try {\n await this.setUserPermissions();\n } catch (e) {\n if (e !== \"No current user\") {\n console.log(e);\n }\n }\n\n this.setState({ isAuthenticating: false });\n }\n\n userHasAuthenticated = (passedAuthenticated) => {\n this.setState({ hasAuthenticated: passedAuthenticated });\n };\n\n setUserPermissions = async (ip) => {\n const user = await Auth.currentAuthenticatedUser({\n bypassCache: true, // Optional, By default is false. If set to true, this call will send a request to Cognito to get the latest user data\n });\n // const groups = user.signInUserSession.idToken.payload[\"cognito:groups\"];\n //sql call dsuserroles\n const userDetails = await getUserDetailsByEmail(user.attributes[\"email\"]);\n const groups = userDetails.map((user) => user.name);\n const clientId = userDetails && userDetails[0].clientId;\n let requireMfa = false;\n if (clientId) {\n requireMfa = await getRequireMfabyClientSql(clientId);\n }\n this.setState({\n loggedInUser: user.attributes[\"email\"],\n userId: user.username,\n userIpAddress: ip,\n clientId: clientId,\n groups: groups,\n requireMfa: requireMfa,\n hasManageMetadataTemplate:\n groups && groups.includes(role.documentSync_Manage_Metadata_Template),\n hasManageRepositories:\n groups && groups.includes(role.documentSync_Manage_Repositories),\n hasEditIndex: groups && groups.includes(role.documentSync_Edit_Index),\n hasManageRedaction:\n groups && groups.includes(role.documentSync_Manage_Redactions),\n hasManageUsers: groups && groups.includes(role.documentSync_Manage_Users),\n hasTextSearch: groups && groups.includes(role.documentSync_Text_Search),\n hasManageFiles: groups && groups.includes(role.documentSync_Manage_Files),\n hasDelete: groups && groups.includes(role.documentSync_Delete),\n hasCliftonWorkflow:\n groups && groups.includes(role.documentSync_CliftonExpungementWorkflow),\n hasFoveonicsAdmin: groups && groups.includes(role.foveonicsAdmin),\n hasSendEmail: groups && groups.includes(role.documentSync_Email),\n hasMedfordWorkflow:\n groups && groups.includes(role.documentSync_MedfordExpungementWorkflow),\n hasGlenrockWorkflow:\n groups &&\n groups.includes(role.documentSync_GlenrockExpungementWorkflow),\n hasEnglewoodWorkflow:\n groups &&\n groups.includes(role.documentSync_EnglewoodExpungementWorkflow),\n hasAberdeenWorkflow:\n groups &&\n groups.includes(role.documentSync_AberdeenExpungementWorkflow),\n hasRestrictAccessByIP:\n groups && groups.includes(role.documentSync_RestrictAccessByIP),\n hasDownloadIndex:\n groups && groups.includes(role.documentSync_DownloadIndex),\n hasFileProperties:\n groups && groups.includes(role.documentSync_FileProperties),\n hasOcrRole: groups && groups.includes(role.documentSync_OCR),\n hasPIIRole: groups && groups.includes(role.documentSync_PII),\n hasDemoExpungementWorkflow:\n groups && groups.includes(role.documentSync_DemoExpungementWorkflow),\n hasEastamptonExpungementWorkflow:\n groups &&\n groups.includes(role.documentSync_EastamptonExpungementWorkflow),\n });\n this.userHasAuthenticated(true);\n };\n\n render() {\n const childProps = {\n hasAuthenticated: this.state.hasAuthenticated,\n loggedInUser: this.state.loggedInUser,\n hasManageMetadataTemplate: this.state.hasManageMetadataTemplate,\n hasManageRepositories: this.state.hasManageRepositories,\n hasEditIndex: this.state.hasEditIndex,\n hasManageRedaction: this.state.hasManageRedaction,\n hasManageUsers: this.state.hasManageUsers,\n hasManageFiles: this.state.hasManageFiles,\n hasTextSearch: this.state.hasTextSearch,\n hasDelete: this.state.hasDelete,\n hasCliftonWorkflow: this.state.hasCliftonWorkflow,\n hasEnglewoodWorkflow: this.state.hasEnglewoodWorkflow,\n hasFoveonicsAdmin: this.state.hasFoveonicsAdmin,\n hasSendEmail: this.state.hasSendEmail,\n hasMedfordWorkflow: this.state.hasMedfordWorkflow,\n hasGlenrockWorkflow: this.state.hasGlenrockWorkflow,\n hasRestrictAccessByIP: this.state.hasRestrictAccessByIP,\n hasDownloadIndex: this.state.hasDownloadIndex,\n hasFileProperties: this.state.hasFileProperties,\n userIpAddress: this.state.userIpAddress,\n userId: this.state.userId,\n hasOcrRole: this.state.hasOcrRole,\n hasPIIRole: this.state.hasPIIRole,\n clientId: this.state.clientId,\n hasAberdeenWorkflow: this.state.hasAberdeenWorkflow,\n hasDemoExpungementWorkflow: this.state.hasDemoExpungementWorkflow,\n hasEastamptonExpungementWorkflow:\n this.state.hasEastamptonExpungementWorkflow,\n setUserPermissions: this.setUserPermissions,\n userHasAuthenticated: this.userHasAuthenticated,\n groups: this.state.groups,\n requireMfa: this.state.requireMfa,\n };\n //console.log(\"childProps\", childProps);\n return (\n !this.state.isAuthenticating && (\n <BrowserRouter>\n <div className=\"App\"></div>\n <RoutePage props={childProps} />\n </BrowserRouter>\n )\n );\n }\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport Amplify from \"aws-amplify\";\nimport config from \"./config\";\n\nAmplify.configure({\n Auth: {\n mandatorySignIn: true,\n region: config.cognito.REGION,\n userPoolId: config.cognito.USER_POOL_ID,\n identityPoolId: config.cognito.IDENTITY_POOL_ID,\n userPoolWebClientId: config.cognito.APP_CLIENT_ID,\n },\n});\n\nReactDOM.render(\n <div>\n <App />\n </div>,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { Auth } from \"aws-amplify\";\nimport Config from \"../config\";\nimport axios from \"axios\";\n\nasync function getToken() {\n const user = await Auth.currentAuthenticatedUser();\n const token = user.signInUserSession.idToken.jwtToken;\n return token;\n}\n\nasync function getAuthHeader() {\n return { headers: { Authorization: `Bearer ${await getToken()}` } };\n}\n\nasync function getPostInit(body) {\n return {\n method: \"POST\",\n mode: \"cors\", // no-cors, *cors, same-origin\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n },\n body: JSON.stringify(body),\n };\n}\n\nasync function getDeleteInit(body) {\n const init = {\n method: \"DELETE\",\n mode: \"cors\", // no-cors, *cors, same-origin\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n },\n };\n if (body) {\n init.body = JSON.stringify(body);\n }\n return init;\n}\n\nasync function getRepos() {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetRepo`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getReposByClientId(clientId) {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetReposByClientId`;\n const response = await axios.get(url, {\n params: {\n clientId: clientId,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response.data;\n}\n\nasync function getInnerNodes(nodeId, count) {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetInnerNodes/${nodeId}/${count}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getFileLIst(nodeId, indexTemplate) {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetFileListByTemplateName/${nodeId}/${indexTemplate}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function updateFileName(renameFilesParams) {\n const init = await getPostInit(renameFilesParams);\n const url = `${Config.FoveonicsAPI}/api/Files/UpdateFileName`;\n return await fetch(url, init);\n}\n\nasync function deleteFile(deleteFileIdsParams) {\n const init = await getDeleteInit(deleteFileIdsParams);\n const url = `${Config.FoveonicsAPI}/api/Files/DeleteFiles`;\n return await fetch(url, init);\n}\n\nasync function getFileData(fileId, client) {\n const url = `${Config.FoveonicsAPI}/api/Workflow/GetFileData/${fileId}/${client}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function selectedFilesSendEmail(emailParams) {\n const init = await getPostInit(emailParams);\n const url = `${Config.FoveonicsAPI}/api/Email/SelectedFilesSendEmail`;\n return await fetch(url, init);\n}\n\nasync function fillCliftonExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillCliftonExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillCliftonJuvenileExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillCliftonJuvenileExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillCliftonJuvenileFileReportsExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillCliftonJuvenileFileReportsExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillGlenrockArrestExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillGlenRockArrestExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillAberdeenArrestExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillAberdeenExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillMedfordExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillMedfordExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillEnglewoodExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillEnglewoodExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillDemoExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillDemoExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function fillEastamptonArrestReportExpungmentForm(body) {\n const init = await getPostInit(body);\n const url = `${Config.FoveonicsAPI}/api/Workflow/FillEastamptonArrestReportExpungmentForm`;\n return await fetch(url, init);\n}\n\nasync function getTemplates() {\n const url = `${Config.FoveonicsAPI}/api/Templates/`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getTemplate(tableName) {\n const url = `${Config.FoveonicsAPI}/api/Templates/${tableName}/`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function searchTemplate(selectedTemplate, searchQueryString) {\n const url = `${Config.FoveonicsAPI}/api/Templates/${selectedTemplate}/search?${searchQueryString}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getTemplates2() {\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/GetTemplates/`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getRepositoriesByClient(clientId) {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetRepositoriesByClient/${clientId}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getAllClients(repositoryId) {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetAllClients/`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getTemplatesBasedOnRepositoryId(repositoryId) {\n const url = `${Config.FoveonicsAPI}/api/Templates/GetTemplatedBasedOnRepository/${repositoryId}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getRepositories() {\n const url = `${Config.FoveonicsAPI}/api/Repository/GetRepositories/`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function deleteTemplate(tableName) {\n const init = await getDeleteInit();\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/DeleteTemplate/${tableName}`;\n return await fetch(url, init);\n}\n\nasync function getAllTemplateColumns(tableName) {\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/GetAllTemplatesColumns/${tableName}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function addIndexTemplateData(addNewTemplateParams) {\n const init = await getPostInit(addNewTemplateParams);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/AddIndexTemplateData/`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function updateFieldData(rowData) {\n const init = await getPostInit(rowData);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/UpdateFieldData`;\n return await fetch(url, init);\n}\n\nasync function deleteColTemplate(deleteParams) {\n const init = await getDeleteInit(deleteParams);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/DeleteColTemplate`;\n return await fetch(url, init);\n}\n\nasync function addFieldData(addParams) {\n const init = await getPostInit(addParams);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/AddFieldData/`;\n return await fetch(url, init);\n}\n\nasync function signUp(userDetails) {\n const init = await getPostInit(userDetails);\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/SignUp`;\n return await fetch(url, init);\n}\n\nasync function listGroups() {\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/ListGroups`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function updateGroups(userDetails) {\n const init = await getPostInit(userDetails);\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/UpdateGroups`;\n return await fetch(url, init);\n}\n\nasync function getListValue(tableName) {\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/GeListValue/${tableName}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function getListValueField(tableName, fieldName) {\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/GetListValuesField/${tableName}/${fieldName}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function updateControlListData(rowData) {\n const init = await getPostInit(rowData);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/UpdateControlListData`;\n return await fetch(url, init);\n}\n\nasync function deleteListField(controlledListId) {\n const init = await getDeleteInit();\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/DeleteListField/${controlledListId}`;\n return await fetch(url, init);\n}\n\nasync function addFieldListData(addParams) {\n const init = await getPostInit(addParams);\n const url = `${Config.FoveonicsAPI}/api/ManageIndexTemplate/AddFieldListData/`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function addRepoData(newRow) {\n const init = await getPostInit(newRow);\n const url = `${Config.FoveonicsAPI}/api/Repository/AddRepoData/`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function saveNewClient(clientName) {\n const init = await getPostInit(clientName);\n const url = `${Config.FoveonicsAPI}/api/Repository/AddClientData/`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function deleteRepository(repositoryId) {\n const init = await getDeleteInit();\n const url = `${Config.FoveonicsAPI}/api/Repository/DeleteRepository/${repositoryId}`;\n return await fetch(url, init);\n}\n\nasync function updateRepoData(rowData) {\n const init = await getPostInit(rowData);\n const url = `${Config.FoveonicsAPI}/api/Repository/UpdateRepoData/`;\n return await fetch(url, init);\n}\n\nasync function addFolder(jArrayData) {\n const init = await getPostInit(jArrayData);\n const url = `${Config.FoveonicsAPI}/api/Repository/AddFolder/`;\n const response = await fetch(url, init);\n return await response.text();\n}\n\nasync function deleteFolder(nodeId) {\n const init = await getDeleteInit();\n const url = `${Config.FoveonicsAPI}/api/Repository/DeleteFolder/${nodeId}`;\n return await fetch(url, init);\n}\n\nasync function moveOrCopyFiles(moveFileParameter) {\n const url = `${Config.FoveonicsAPI}/api/Files/MoveOrCopyFile`;\n const response = await axios.post(url, moveFileParameter, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function getPageCount(fileId) {\n const url = `${Config.FoveonicsAPI}/api/Files/GetPageCount`;\n const response = await axios.post(url, fileId, {\n params: {\n fileId: fileId,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function updateUserRoles(userId, roleIds, clientId, userEmail, ipAccess) {\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/UpdateUserRoles`;\n\n // Prepare the request payload\n const userDetails = {\n userId: userId,\n roleIds: roleIds, // This should be an array of role IDs (strings)\n clientId: clientId,\n userEmail: userEmail,\n ipAccess: ipAccess,\n };\n\n // Make the POST request with the payload, headers, and token\n const response = await axios.post(url, userDetails, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Assuming you have an async getToken function\n \"Access-Control-Allow-Origin\": \"*\", // If needed for CORS\n },\n });\n\n return response; // Return the response to handle further if needed\n}\n\nasync function getListRoles(clientId, email) {\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/GetListRoles`;\n const response = await axios.get(url, {\n params: {\n clientId: clientId,\n email: email,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response.data;\n}\n\nasync function getClientDetails() {\n // Define the URL for the API call\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/GetClientDetails`;\n\n try {\n // Make the API request using axios\n const response = await axios.get(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Use the token for authorization\n \"Access-Control-Allow-Origin\": \"*\", // Allow cross-origin\n },\n });\n\n // Return the API response\n return response.data;\n } catch (error) {\n console.error(\"Error fetching user details:\", error);\n throw error; // Handle or propagate the error as needed\n }\n}\n\nasync function updateClientMfaRequirement(clientId, requireMfa) {\n // Define the URL for the API call\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/UpdateMfaRequirement`;\n\n try {\n // Make the API request using axios\n const response = await axios.post(\n url,\n {\n clientId: clientId,\n requireMfa: requireMfa,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Use the token for authorization\n \"Access-Control-Allow-Origin\": \"*\", // Allow cross-origin\n },\n }\n );\n\n // Return the API response\n return response.data;\n } catch (error) {\n console.error(\"Error updating MFA requirement:\", error);\n throw error; // Handle or propagate the error as needed\n }\n}\n\nasync function getRequireMfabyClientSql(clientId) {\n // Define the URL for the API call\n const url = `${Config.FoveonicsAPI}/api/Authentication/GetRequireMfaByClientId/${clientId}`;\n\n try {\n // Make the API request using axios\n const response = await axios.get(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Use the token for authorization\n \"Access-Control-Allow-Origin\": \"*\", // Allow cross-origin\n },\n });\n\n // Return the API response\n return response.data.requireMfa;\n } catch (error) {\n console.error(\"Error fetching MFA requirement:\", error);\n throw error; // Handle or propagate the error as needed\n }\n}\n\nasync function getUserDetailsByEmail(email) {\n // Define the URL for the API call\n const url = `${Config.FoveonicsAPI}/api/Authentication/GetUserDetailsByEmail`;\n\n try {\n // Make the API request using axios\n const response = await axios.get(url, {\n params: {\n email: email, // Pass the email parameter to the API call\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Use the token for authorization\n \"Access-Control-Allow-Origin\": \"*\", // Allow cross-origin\n },\n });\n\n // Return the API response\n return response.data;\n } catch (error) {\n console.error(\"Error fetching user details:\", error);\n throw error; // Handle or propagate the error as needed\n }\n}\n\nasync function getUsersByClientId(clientId) {\n // Define the URL for the API call\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/GetUsersWithRolesByClientId`;\n try {\n // Make the API request using axios\n const response = await axios.get(url, {\n params: {\n clientId: clientId, // Pass the email parameter to the API call\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`, // Use the token for authorization\n \"Access-Control-Allow-Origin\": \"*\", // Allow cross-origin\n },\n });\n\n // Return the API response\n return response.data;\n } catch (error) {\n console.error(\"Error fetching user details:\", error);\n throw error; // Handle or propagate the error as needed\n }\n}\n\nasync function startOcr(templateId) {\n const url = `${Config.FoveonicsAPI}/api/Ocr/StartOcr`;\n const response = await axios.post(url, templateId, {\n params: {\n templateId: templateId,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function getInitializedOcrStatus(templateId) {\n const url = `${Config.FoveonicsAPI}/api/Ocr/GetInitializedOcrStatus`;\n const response = await axios.get(url, {\n params: {\n templateId: templateId,\n },\n headers: {\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function UpdateAutoOcrItem(templateId, autoOcr) {\n const url = `${Config.FoveonicsAPI}/api/Ocr/UpdateAutoOcrItem`;\n const response = await axios.put(\n url,\n {\n TemplateId: templateId,\n AutoOcr: autoOcr,\n },\n {\n headers: {\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n }\n );\n return response;\n}\n\nasync function getOcrTemplatesInfo() {\n const url = `${Config.FoveonicsAPI}/api/Ocr/GetOcrStatusWithTemplatesAndFileCount`;\n const response = await axios.get(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return await response;\n}\n\nasync function insertOrUpdateUserProfile(data) {\n const url = `${Config.FoveonicsAPI}/api/Files/InsertOrUpdateUserProfile`;\n const response = await axios.post(url, data, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function getUserProfile(data) {\n const url = `${Config.FoveonicsAPI}/api/Templates/GetUserProfile`;\n const response = await axios.post(url, data, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function getUserProfileWithOutTemplate(data) {\n const url = `${Config.FoveonicsAPI}/api/Templates/GetUserProfileWithOutTemplate`;\n const response = await axios.post(url, data, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function listUsersWithoutGroups() {\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/ListUsersWithoutGroups`;\n const response = await fetch(url, await getAuthHeader());\n return await response.json();\n}\n\nasync function listGroupsForUser2(username) {\n const init = await getPostInit({ username });\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/ListGroupsForUser2`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function listReposForUser(userEmail) {\n const init = await getPostInit({ userEmail });\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/ListReposForUser`;\n const response = await fetch(url, init);\n return await response.json();\n}\n\nasync function updateRepoAccess(username, repos, userEmail) {\n const init = await getPostInit({ username, repos, userEmail });\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/UpdateRepoAccess`;\n return await fetch(url, init);\n}\n\nasync function templateHasOcredFiles(templateId) {\n const url = `${Config.FoveonicsAPI}/api/OCR/TemplateHasOcredFiles/${templateId}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.text();\n}\n\nasync function uploadFile(addFileParams) {\n const url = `${Config.FoveonicsAPI}/api/Files/AddAndUploadFiles`;\n const init = await getPostInit(addFileParams);\n const response = await fetch(url, init);\n return await response.text();\n}\n\nasync function deleteUser(deleteUserParams) {\n const init = await getDeleteInit(deleteUserParams);\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/DeleteUsers`;\n return await fetch(url, init);\n}\n\nasync function getGeoLoaction() {\n var config = {\n crossDomain: true,\n };\n const url = Config.Geolocation;\n const response = await axios.get(url, config, {\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n //console.log(response);\n return response.data.ip;\n}\n\nasync function checkIpAddress(ipParams) {\n const url = `${Config.FoveonicsAPI}/api/Authentication/CheckIpAddress`;\n const init = await getPostInit(ipParams);\n const response = await fetch(url, init);\n return response;\n}\n\nasync function saveAuditTrail(auditDetails) {\n const url = `${Config.FoveonicsAPI}/api/Authentication/SaveAuditTrail`;\n const init = await getPostInit(auditDetails);\n return await fetch(url, init);\n}\n\nasync function getSavedRestrictedIps(userEmailAddress) {\n const url = `${Config.FoveonicsAPI}/api/ManageUsers/GetSavedRestrictedIps/${userEmailAddress}`;\n const response = await fetch(url, await getAuthHeader());\n return await response.text();\n}\n\nasync function uploadFileChunk(addFileParams) {\n const url = `${Config.FoveonicsAPI}/api/Files/UploadChunks`;\n const response = await axios.post(url, addFileParams.chunk, {\n params: {\n chunkFileName: addFileParams.chunkFileName,\n count: addFileParams.count,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n return response;\n}\n\nasync function uploadFileComplete(addFileParams) {\n const url = `${Config.FoveonicsAPI}/api/Files/UploadComplete`;\n const response = await axios.post(\n url,\n {},\n {\n params: {\n chunkFileName: addFileParams.chunkFileName,\n tableName: addFileParams.tableName,\n nodeId: addFileParams.nodeId,\n originalFileName: addFileParams.originalFileName,\n appendPrependOperation: addFileParams.appendPrependOperation,\n appendPrependFileId: addFileParams.appendPrependFileId,\n insertPageAfter: addFileParams.insertPageAfter,\n email: addFileParams.email,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await getToken()}`,\n \"Access-Control-Allow-Origin\": \"*\",\n },\n }\n );\n return response;\n}\n\nexport {\n getRepos,\n getRepositories,\n getInnerNodes,\n updateFileName,\n getFileData,\n selectedFilesSendEmail,\n fillCliftonExpungmentForm,\n getTemplates,\n getTemplate,\n searchTemplate,\n getTemplates2,\n getAllTemplateColumns,\n getRepositoriesByClient,\n getAllClients,\n addIndexTemplateData,\n addFieldData,\n updateFieldData,\n deleteColTemplate,\n deleteTemplate,\n signUp,\n listGroupsForUser2,\n listReposForUser,\n listUsersWithoutGroups,\n listGroups,\n updateGroups,\n getListValue,\n getListValueField,\n updateControlListData,\n deleteListField,\n addFieldListData,\n addRepoData,\n saveNewClient,\n deleteRepository,\n updateRepoData,\n updateRepoAccess,\n templateHasOcredFiles,\n fillMedfordExpungmentForm,\n addFolder,\n deleteFolder,\n deleteFile,\n uploadFile,\n getTemplatesBasedOnRepositoryId,\n getFileLIst,\n getGeoLoaction,\n checkIpAddress,\n getSavedRestrictedIps,\n saveAuditTrail,\n moveOrCopyFiles,\n uploadFileChunk,\n uploadFileComplete,\n deleteUser,\n getPageCount,\n insertOrUpdateUserProfile,\n getUserProfile,\n getUserProfileWithOutTemplate,\n fillEnglewoodExpungmentForm,\n getOcrTemplatesInfo,\n startOcr,\n getInitializedOcrStatus,\n fillCliftonJuvenileExpungmentForm,\n fillCliftonJuvenileFileReportsExpungmentForm,\n fillGlenrockArrestExpungmentForm,\n fillAberdeenArrestExpungmentForm,\n fillDemoExpungmentForm,\n fillEastamptonArrestReportExpungmentForm,\n UpdateAutoOcrItem,\n getUserDetailsByEmail,\n getUsersByClientId,\n getClientDetails,\n getListRoles,\n updateUserRoles,\n getReposByClientId,\n updateClientMfaRequirement,\n getRequireMfabyClientSql,\n};\n","export const config = {\n cognito: {\n REGION: \"us-east-1\",\n USER_POOL_ID: \"us-east-1_Ay1jNpzGc\",\n APP_CLIENT_ID: \"1kkr46pqb0m7j8lmpfa0p0lo87\",\n IDENTITY_POOL_ID: \"us-east-1:8509f566-818c-478a-bcb6-152bd6ad9f5c\",\n },\n FoveonicsAPI: \"https://api.documentsync.com\",\n ImageViewer: \"https://viewer.documentsync.com\",\n Geolocation: \"https://api.ipify.org/?format=json\",\n};\n\nexport default config;\n","module.exports = __webpack_public_path__ + \"static/media/DocumentSync-Logo.860d70f0.png\";","import React from \"react\";\nimport { Button, Glyphicon } from \"react-bootstrap\";\nimport \"./LoaderButton.css\";\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default ({\n isLoading,\n text,\n loadingText,\n className = \"\",\n disabled = false,\n ...props\n}) => (\n <Button\n className={`LoaderButton ${className}`}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && <Glyphicon glyph=\"refresh\" className=\"spinning\" />}\n {!isLoading ? text : loadingText}\n </Button>\n);\n","module.exports = __webpack_public_path__ + \"static/media/FileProperties.b9637046.svg\";","import React, { Component } from \"react\";\nimport Dropzone from \"react-dropzone\";\nimport {\n uploadFile,\n uploadFileChunk,\n uploadFileComplete,\n} from \"../../libs/API\";\nimport LoaderButton from \"../LoaderButton\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nclass Upload extends Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedFiles: [],\n progressInfos: [],\n message: [],\n fileInfos: [],\n isLoading: false,\n isDisabled: true,\n error: \"\",\n };\n // console.log(\"upload.js\", props);\n }\n\n componentDidMount() {}\n\n uploadFileData = async (file, count, fileCount) => {\n this.setState({ isLoading: true });\n const fileSplit = file.name.split(\".\");\n const bytes = Array.from(Buffer.from(await this.getFileBytes(file)));\n let addFileParams = {\n uploadedFile: bytes,\n fileName: fileSplit[0],\n tableName: this.props.tableName,\n nodeId: this.props.nodeId,\n extension: fileSplit[1],\n };\n\n uploadFile(addFileParams)\n .then((response) => {\n if (response) {\n let newTabulatorRow = {\n FileName: fileSplit[0],\n FileId: response,\n HasAnnotations: false,\n FileExtension: fileSplit[1],\n };\n this.props.addNewTabulatorRow(newTabulatorRow);\n this.setState((prev) => {\n let nextMessage = [\n ...prev.message,\n \"Uploaded the file successfully: \" + fileSplit[0],\n ];\n if (count === fileCount) {\n return {\n message: nextMessage,\n selectedFiles: [],\n isLoading: false,\n isDisabled: true,\n };\n } else {\n return {\n message: nextMessage,\n };\n }\n });\n }\n })\n\n .catch(() => {\n this.setState((prev) => {\n let nextMessage = [\n ...prev.message,\n \"Uploaded the file successfully: \" + fileSplit[0],\n ];\n return {\n message: nextMessage,\n isLoading: false,\n };\n });\n });\n };\n\n getFileBytes = async (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n resolve(event.target.result);\n };\n reader.onerror = (err) => {\n reject(err);\n };\n reader.readAsArrayBuffer(file);\n });\n };\n\n uploadFiles = (e) => {\n e.preventDefault();\n this.setState({\n error: \"\",\n });\n const selectedFiles = this.state.selectedFiles;\n if (this.props.tableName.length <= 0) {\n this.setState({\n error: \"Select The Index Template\",\n });\n return;\n }\n if (selectedFiles.length <= 0) {\n this.setState({\n error: \"Select the file\",\n });\n return;\n }\n this.setState(\n {\n message: [],\n },\n () => {\n const partSize = 1048576 * 2;\n for (let i = 0; i < selectedFiles.length; i++) {\n //this.uploadFileData(selectedFiles[i], i, selectedFiles.length - 1);\n this.processFile(\n selectedFiles[i],\n partSize,\n selectedFiles.length - 1,\n i\n );\n }\n }\n );\n };\n\n uploadFileForAppendPrepend = (e) => {\n e.preventDefault();\n this.setState({\n error: \"\",\n });\n const selectedFiles = this.state.selectedFiles;\n if (this.props.appendPrependValue.length <= 0) {\n this.setState({\n error: \"Select the append prepend option\",\n });\n return;\n }\n if (this.props.appendPrependValue === \"Insert\") {\n if (this.props.insertPageAfter <= 0) {\n this.setState({\n error: \"Page number required\",\n });\n return;\n }\n if (this.props.insertPageAfter > this.props.totalPageCount) {\n this.setState({\n error: \"Page number entered is more than total page count\",\n });\n return;\n }\n }\n if (selectedFiles.length <= 0) {\n this.setState({\n error: \"Select the file\",\n });\n return;\n }\n if (selectedFiles.length > 1) {\n this.setState({\n error: \"You can Append or Prepend 1 file at a time.\",\n });\n return;\n }\n this.setState(\n {\n message: [],\n },\n () => {\n const partSize = 1048576 * 2;\n for (let i = 0; i < selectedFiles.length; i++) {\n //this.uploadFileData(selectedFiles[i], i, selectedFiles.length - 1);\n this.processFile(\n selectedFiles[i],\n partSize,\n selectedFiles.length - 1,\n i\n );\n }\n }\n );\n };\n\n onDrop = (files) => {\n if (files.length > 0) {\n this.setState({ selectedFiles: files, isDisabled: false });\n }\n };\n\n processFile = async (file, chunkSize, fileCount, iterationCount) => {\n this.setState({ isLoading: true });\n const totalCount =\n file.size % chunkSize === 0\n ? file.size / chunkSize\n : Math.floor(file.size / chunkSize) + 1;\n\n let start = 0;\n let end = chunkSize;\n let count = 1;\n let chunkFileName = uuidv4() + \".\" + file.name.split(\".\").pop();\n this.setState({ originalName: file.name });\n while (count <= totalCount) {\n let chunk = file.slice(start, end);\n await this.uploadChunk(\n chunk,\n count,\n chunkFileName,\n totalCount,\n file.name,\n fileCount,\n iterationCount\n );\n count++;\n start = end;\n end = end + chunkSize;\n }\n };\n\n uploadChunk = async (\n chunk,\n count,\n chunkFileName,\n totalCount,\n originalFileName,\n fileCount,\n iterationCount\n ) => {\n let addFileParams = {\n chunk: chunk,\n chunkFileName: chunkFileName,\n count: count,\n };\n await uploadFileChunk(addFileParams).then(async (response) => {\n try {\n const data = response.data;\n if (data.data === -1) {\n alert(response.errorMessage);\n return;\n }\n if (data.isSuccess && data.data >= 0) {\n if (data.data == totalCount) {\n let uploadParams = {\n chunkFileName: chunkFileName,\n originalFileName: originalFileName,\n tableName: this.props.tableName,\n nodeId: this.props.nodeId,\n appendPrependOperation: this.props.appendPrependValue,\n appendPrependFileId: this.props.appendPrependFileId,\n insertPageAfter: this.props.insertPageAfter,\n email: this.props.email,\n };\n await uploadFileComplete(uploadParams).then((response) => {\n console.log(response);\n if (response.data.data !== \"BadRequest\") {\n let fileSplit = originalFileName.split(\".\");\n if (!this.props.prependAppendCall) {\n let newTabulatorRow = {\n FileName: fileSplit[0],\n FileId: response.data.data,\n HasAnnotations: false,\n FileExtension: fileSplit[1],\n };\n this.props.addNewTabulatorRow(newTabulatorRow);\n }\n if (!this.props.prependAppendCall) {\n this.setState((prev) => {\n let nextMessage = [\n ...prev.message,\n \"Uploaded the file successfully: \" + fileSplit[0],\n ];\n if (iterationCount === fileCount) {\n return {\n message: nextMessage,\n selectedFiles: [],\n isLoading: false,\n isDisabled: true,\n };\n } else {\n return {\n message: nextMessage,\n };\n }\n });\n } else {\n this.setState((prev) => {\n let nextMessage = [\n ...prev.message,\n `The file is being ${this.props.appendPrependValue}. You'll get an email notification soon.`,\n ];\n if (iterationCount === fileCount) {\n return {\n message: nextMessage,\n selectedFiles: [],\n isLoading: false,\n isDisabled: true,\n };\n } else {\n return {\n message: nextMessage,\n };\n }\n });\n }\n } else {\n this.setState((prev) => {\n let nextMessage = [...prev.message, `Error Contact Admin`];\n return {\n message: nextMessage,\n selectedFiles: [],\n isLoading: false,\n isDisabled: true,\n };\n });\n }\n });\n }\n }\n } catch (error) {\n console.log(\"error\", error);\n }\n });\n };\n\n // uploadCompleted = async (fileGuid) => {\n // let url = `${Config.ImageSyncAPI}/api/Chunks/UploadComplete`;\n // var formData = new FormData();\n // formData.append(\"fileName\", fileGuid);\n // const response = await axios.post(\n // url,\n // {},\n // {\n // params: {\n // fileName: fileGuid,\n // originalFileName: this.state.originalName,\n // },\n // data: formData,\n // }\n // );\n // const data = response.data;\n // if (data.isSuccess) {\n // this.setState({ progress: 100 });\n // const message = \"Upload completed\";\n // this.setState({ message: message, enableAlert: true, success: true });\n // } else {\n // const message = \"Upload Error\";\n // this.setState({ progress: 0, message: message, enableAlert: true });\n // }\n // };\n\n render() {\n const { selectedFiles, message, fileInfos } = this.state;\n return (\n <div>\n <div className=\"my-3\">\n <Dropzone onDrop={this.onDrop}>\n {({ getRootProps, getInputProps }) => (\n <section>\n <div {...getRootProps({ className: \"dropzone\" })}>\n <input {...getInputProps()} />\n {selectedFiles &&\n Array.isArray(selectedFiles) &&\n selectedFiles.length ? (\n <div className=\"selected-file\">\n {selectedFiles.length > 3\n ? `${selectedFiles.length} files`\n : selectedFiles.map((file) => file.name).join(\", \")}\n </div>\n ) : (\n `Drag and drop files here, or click to select files`\n )}\n </div>\n <aside className=\"selected-file-wrapper\">\n <LoaderButton\n block\n bsClass=\"btn btn-outline-secondary\"\n disabled={this.state.isDisabled}\n type=\"submit\"\n isLoading={this.state.isLoading}\n text={\n this.props.prependAppendCall ? \"Insert\" : \"Upload File\"\n }\n loadingText={\n this.props.prependAppendCall\n ? \"Inserting File......\"\n : \"Uploading File......\"\n }\n onClick={\n this.props.prependAppendCall\n ? this.uploadFileForAppendPrepend\n : this.uploadFiles\n }\n />\n {/* <button\n className=\"btn btn-success\"\n disabled={!selectedFiles}\n onClick={this.uploadFiles}\n >\n Upload\n </button> */}\n </aside>\n </section>\n )}\n </Dropzone>\n </div>\n {this.state.error.length > 0 && (\n <div className=\"alert alert-secondary\" role=\"alert\">\n {this.state.error}\n </div>\n )}\n {message.length > 0 && (\n <div className=\"alert alert-secondary\" role=\"alert\">\n <ul>\n {message.map((item, i) => {\n return <li key={i}>{item}</li>;\n })}\n </ul>\n </div>\n )}\n {fileInfos.length > 0 && (\n <div className=\"card\">\n <div className=\"card-header\">List of Files</div>\n <ul className=\"list-group list-group-flush\">\n {fileInfos &&\n fileInfos.map((file, index) => (\n <li className=\"list-group-item\" key={index}>\n <a href={file.url}>{file.name}</a>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default Upload;\n"],"sourceRoot":""}