{"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              &times;\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            &times;\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              &copy; {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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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              &times;\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            &times;\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            &times;\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              &times;\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              &times;\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              &copy; {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":""}