{"version":3,"sources":["assets/setu-logo.svg","assets/google-logo.svg","assets/setu-icon.png","assets/loading.gif","Config/config.js","Login/Login.js","Errors/ErrorMessages.js","Chatbot/Chatbot.js","NavBar/NavBar.js","About/About.js","FileUpload/FileUpload.js","Layout/Layout.js","App.js","index.js"],"names":["module","exports","API_BASE_URL","config","UPLOAD_FILE_URL","PROCESS_FILE_URL","EMAIL_FILE_URL","CHATBOT_URL","current_user","logout","googlelogin","ENABLE_GOOGLE_AUTH","Login","React","createElement","className","onClick","handleGoogleLogin","window","location","href","src","googleLogo","alt","handleApiError","error","response","data","detail","detailMessage","console","log","sheetNotFoundMatch","match","columnNotFoundMatch","Chatbot","isOpen","setIsOpen","useState","message","setMessage","chatLog","setChatLog","isTyping","setIsTyping","showPlaceholder","setShowPlaceholder","chatBodyRef","useRef","useEffect","current","scrollTop","scrollHeight","toggleChat","length","setTimeout","sender","handleSend","async","trim","prev","axios","get","params","question","status","answer","alt_answer","ref","map","chat","index","key","type","value","onChange","e","target","onKeyDown","event","placeholder","NavBar","_ref","visibleSection","showSection","setIsCollapsed","navigate","useNavigate","collapsed","setCollapsed","toggleSidebar","icon","logo","handleLogout","withCredentials","then","catch","err","About","visibleCards","setVisibleCards","timers","prevVisibleCards","newVisibleCards","forEach","timer","clearTimeout","FileUpload","file1","setFile1","file2","setFile2","dragging1","setDragging1","dragging2","setDragging2","sheetName1","setSheetName1","sheetName2","setSheetName2","questionsColumn1","setQuestionsColumn1","answersColumn1","setAnswersColumn1","questionsColumn2","setQuestionsColumn2","answersColumn2","setAnswersColumn2","uploading1","setUploading1","uploadSuccess1","setUploadSuccess1","uploading2","setUploading2","uploadSuccess2","setUploadSuccess2","showEmailInput","setShowEmailInput","email","setEmail","emailSentMessage","setEmailSentMessage","fileInputRef1","fileInputRef2","uploadError1","setUploadError1","uploadError2","setUploadError2","setVisibleSection","isCollapsed","isSendingEmail","setIsSendingEmail","isAuthenticated","setIsAuthenticated","isEmailSent","setIsEmailSent","sectionRefs","trainModel","getAnswers","about","userName","setUserName","fetch","credentials","json","user","given_name","handleSheetNameChange","setSheetName","setUploadSuccess","handleUpload","file","sheetName","questionsColumn","answersColumn","setUploading","formData","FormData","append","post","headers","errorMessage","handleDrop","fileSetter","draggingSetter","preventDefault","droppedFile","dataTransfer","files","handleDragOver","handleDragLeave","handleClickUploadText","fileInputRef","click","sendEmailNotification","encodeURIComponent","section","scrollIntoView","behavior","block","onDrop","onDragOver","onDragLeave","Fragment","name","size","toFixed","handleFileChange","uploadSuccessSetter","style","display","htmlFor","id","disabled","xmlns","viewBox","cx","cy","r","fill","d","responseType","blob","Blob","downloadUrl","URL","createObjectURL","link","document","setAttribute","body","appendChild","removeChild","reader","FileReader","onload","errorJson","JSON","parse","result","onerror","readAsText","processFile","class","handleEmailMeClick","loadingGif","includes","Layout","children","useLocation","pathname","App","theme","setTheme","documentElement","Router","onThemeChange","newTheme","Routes","Route","path","element","Navigate","to","ReactDOM","render","StrictMode","getElementById"],"mappings":"oGAAAA,EAAOC,QAAU,IAA0B,uC,mBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gTCE3C,MAAMC,EAAe,6BAgBNC,MAdA,CACXD,eACAE,gBAAoBF,EAAH,eACjBG,iBAAqBH,EAAH,gBAClBI,eAAmBJ,EAAH,wBAChBK,YAAgBL,EAAH,OAGbM,aAAiBN,EAAH,gBACdO,OAAWP,EAAH,UACRQ,YAAgBR,EAAH,eACbS,oBAAoB,GCWTC,MArBf,WAKE,OACEC,IAAAC,cAAA,OAAKC,UAAU,SACbF,IAAAC,cAAA,OAAKC,UAAU,aACbF,IAAAC,cAAA,UACED,IAAAC,cAAA,QAAMC,UAAU,UAAS,UACzBF,IAAAC,cAAA,QAAMC,UAAU,OAAM,QAExBF,IAAAC,cAAA,UAAQE,QAXYC,KACxBC,OAAOC,SAASC,KAAOjB,EAAOO,aAUUK,UAAU,uBAC5CF,IAAAC,cAAA,YAAM,cACND,IAAAC,cAAA,OAAKO,IAAKC,IAAYC,IAAI,cAAcR,UAAU,oB,cCnBrD,MAAMS,EAAkBC,IAC3B,GAAIA,EAAMC,UAAYD,EAAMC,SAASC,MAAQF,EAAMC,SAASC,KAAKC,OAAQ,CACrE,MAAMC,EAAgBJ,EAAMC,SAASC,KAAKC,OAC1CE,QAAQC,IAAI,oBAAqBF,GAEjC,MAAMG,EAAqBH,EAAcI,MAAM,2DAC/C,GAAID,EACA,OAAUA,EAAmB,GAAtB,aAIX,MAAME,EAAsBL,EAAcI,MAAM,wCAChD,OAAIC,EACUA,EAAoB,GAAvB,oBAKJL,EAEP,MAAO,sD,YC+GAM,MA7HCA,KACZ,MAAOC,EAAQC,GAAaC,oBAAS,IAC9BC,EAASC,GAAcF,mBAAS,KAChCG,EAASC,GAAcJ,mBAAS,KAChCK,EAAUC,GAAeN,oBAAS,IAClCO,EAAiBC,GAAsBR,oBAAS,GACjDS,EAAcC,iBAAO,MAE3BC,oBAAU,KACFF,EAAYG,UACZH,EAAYG,QAAQC,UAAYJ,EAAYG,QAAQE,eAEzD,CAACX,EAASE,IAEb,MAAMU,EAAaA,KACfhB,GAAWD,GAGNA,GAA6B,IAAnBK,EAAQa,SACnBV,GAAY,GACZW,WAAW,KACPb,EAAW,CAAC,CAAEc,OAAQ,MAAOjB,QAAS,8DACtCK,GAAY,IACb,OAILa,EAAaC,UACf,GAAInB,EAAQoB,OAAQ,CACZd,GACAC,GAAmB,GAGvBJ,EAAWkB,GAAQ,IAAIA,EAAM,CAAEJ,OAAQ,OAAQjB,aAC/CC,EAAW,IAEXI,GAAY,GAEZ,IACI,MAAMlB,QAAiBmC,IAAMC,IAAI3D,EAAOI,YAAa,CACjDwD,OAAQ,CACJC,SAAUzB,EAAQoB,UAI1B,GAAwB,MAApBjC,EAASuC,OAAgB,CACzB,MAAMtC,EAAOD,EAASC,KACtBG,QAAQC,IAAI,gBAAiBJ,GAE7BiB,GAAY,GAEZF,EAAWkB,GAAQ,IAAIA,EAAM,CAAEJ,OAAQ,MAAOjB,QAASZ,EAAKuC,UACxDvC,EAAKwC,WACLzB,EAAWkB,GAAQ,IAAIA,EAAM,CAAEJ,OAAQ,MAAOjB,QAASZ,EAAKwC,cAG5DvB,GAAY,QAGhBd,QAAQL,MAAM,uBAAuBC,EAASuC,QAC9CrB,GAAY,GAGlB,MAAOnB,GACLK,QAAQL,MAAM,SAAUA,GACxBmB,GAAY,MAWxB,OACI/B,IAAAC,cAAA,OAAKC,UAAU,YACTqB,GACEvB,IAAAC,cAAA,OAAKC,UAAU,cAAcC,QAASqC,GAAY,iBAKrDjB,GACGvB,IAAAC,cAAA,OAAKC,UAAU,eACXF,IAAAC,cAAA,OAAKC,UAAU,eACXF,IAAAC,cAAA,UAAI,aACJD,IAAAC,cAAA,UAAQE,QAASqC,EAAYtC,UAAU,cAAa,MAExDF,IAAAC,cAAA,OAAKC,UAAU,YAAYqD,IAAKrB,GAC3BF,GACGhC,IAAAC,cAAA,OAAKC,UAAU,oBAAmB,6BAIrC0B,EAAQ4B,IAAI,CAACC,EAAMC,IAChB1D,IAAAC,cAAA,OAAK0D,IAAKD,EAAOxD,UAAW,WAAWuD,EAAKd,QACvCc,EAAK/B,UAGbI,GACG9B,IAAAC,cAAA,OAAKC,UAAU,oBACXF,IAAAC,cAAA,aAAaD,IAAAC,cAAA,aAAaD,IAAAC,cAAA,eAItCD,IAAAC,cAAA,OAAKC,UAAU,eACXF,IAAAC,cAAA,SACI2D,KAAK,OACLC,MAAOnC,EACPoC,SAAWC,GAAMpC,EAAWoC,EAAEC,OAAOH,OACrCI,UA1CDC,IACD,UAAdA,EAAMP,KACNf,KAyCgBuB,YAAY,yBAEhBnE,IAAAC,cAAA,UAAQE,QAASyC,EAAY1C,UAAU,eACnCF,IAAAC,cAAA,KAAGC,UAAU,uBAAyB,S,wCClDnDkE,MAhEf,SAAeC,GAAmD,IAAlD,eAAEC,EAAc,YAAEC,EAAW,eAAEC,GAAgBH,EAC7D,MAAMI,EAAWC,eACVC,EAAWC,GAAgBnD,oBAAS,GAiB3C,OACEzB,IAAAC,cAAA,OAAKC,UAAW,aAAYyE,EAAY,YAAc,KACpD3E,IAAAC,cAAA,OAAKC,UAAU,kBAAkBC,QAPf0E,KACpBD,GAAcD,GACdH,GAAgBG,KAMZ3E,IAAAC,cAAA,KAAGC,UAAW,kBAAiByE,EAAY,sBAAwB,yBAErE3E,IAAAC,cAAA,OAAKC,UAAU,kBACbF,IAAAC,cAAA,OACEO,IAAKmE,EAAYG,IAAOC,IACxBrE,IAAI,OACJR,UAAW,SAAQyE,EAAY,iBAAmB,OAGtD3E,IAAAC,cAAA,OAAKC,UAAU,aACbF,IAAAC,cAAA,OACEE,QAASA,IAAMoE,EAAY,cAC3BrE,UAAW,aAA+B,eAAnBoE,EAAkC,SAAW,KAEpEtE,IAAAC,cAAA,KAAGC,UAAU,oCACXyE,GAAa3E,IAAAC,cAAA,QAAMC,UAAU,YAAW,qBAE5CF,IAAAC,cAAA,OAAKC,UAAU,iBACfF,IAAAC,cAAA,OACEE,QAASA,IAAMoE,EAAY,cAC3BrE,UAAW,aAA+B,eAAnBoE,EAAkC,SAAW,KAEpEtE,IAAAC,cAAA,KAAGC,UAAU,yBACXyE,GAAa3E,IAAAC,cAAA,QAAMC,UAAU,YAAW,oBAE5CF,IAAAC,cAAA,OAAKC,UAAU,iBACfF,IAAAC,cAAA,OACEE,QAASA,IAAMoE,EAAY,SAC3BrE,UAAW,aAA+B,UAAnBoE,EAA6B,SAAW,KAEhEtE,IAAAC,cAAA,KAAGC,UAAU,gCACVyE,GAAa3E,IAAAC,cAAA,QAAMC,UAAU,YAAW,WAG9CF,IAAAC,cAAA,OAAKE,QApDY6E,KACnBhC,IAAMC,IAAI3D,EAAOM,OAAQ,CAAEqF,iBAAiB,IACzCC,KAAK,KACJT,EAAS,OAEVU,MAAOC,IACNnE,QAAQL,MAAM,gBAAiBwE,MA8CLlF,UAAU,eACpCF,IAAAC,cAAA,KAAGC,UAAU,gCACXyE,GAAa3E,IAAAC,cAAA,QAAMC,UAAU,YAAW,a,MCfnCmF,MAhDf,WACI,MAAOC,EAAcC,GAAmB9D,mBAAS,EAAC,GAAO,GAAO,IAiBhE,OAfAW,oBAAU,KAEN,MAAMoD,EAAS,CAAC,EAAG,EAAG,GAAGhC,IAAKE,GAC1BhB,WAAW,KACP6C,EAAiBE,IACb,MAAMC,EAAkB,IAAID,GAE5B,OADAC,EAAgBhC,IAAS,EAClBgC,KAEJ,IAARhC,IAGP,MAAO,IAAM8B,EAAOG,QAASC,GAAUC,aAAaD,KACrD,IAGC5F,IAAAC,cAAA,OAAKC,UAAU,mBACXF,IAAAC,cAAA,OAAKC,UAAW,SAAQoF,EAAa,GAAK,UAAY,KAClDtF,IAAAC,cAAA,UAAI,sBACJD,IAAAC,cAAA,SAAG,wUAIPD,IAAAC,cAAA,OAAKC,UAAW,SAAQoF,EAAa,GAAK,UAAY,KAClDtF,IAAAC,cAAA,UAAI,OACJD,IAAAC,cAAA,SAAG,8UAIPD,IAAAC,cAAA,OAAKC,UAAW,SAAQoF,EAAa,GAAK,UAAY,KAClDtF,IAAAC,cAAA,UAAI,gBACJD,IAAAC,cAAA,SAAG,uDAGHD,IAAAC,cAAA,MAAIC,UAAU,kBACVF,IAAAC,cAAA,UACID,IAAAC,cAAA,KAAGC,UAAU,oBACbF,IAAAC,cAAA,KAAGM,KAAK,gCAA+B,8B,iBCsgBhDuF,MAtiBf,WACE,MAAOC,EAAOC,GAAYvE,mBAAS,OAC5BwE,EAAOC,GAAYzE,mBAAS,OAC5B0E,EAAWC,GAAgB3E,oBAAS,IACpC4E,EAAWC,GAAgB7E,oBAAS,IACpC8E,EAAYC,GAAiB/E,mBAAS,KACtCgF,EAAYC,GAAiBjF,mBAAS,KACtCkF,EAAkBC,GAAuBnF,mBAAS,KAClDoF,EAAgBC,GAAqBrF,mBAAS,KAC9CsF,EAAkBC,GAAuBvF,mBAAS,KAClDwF,EAAgBC,GAAqBzF,mBAAS,KAC9C0F,EAAYC,GAAiB3F,oBAAS,IACtC4F,EAAgBC,GAAqB7F,oBAAS,IAC9C8F,EAAYC,GAAiB/F,oBAAS,IACtCgG,EAAgBC,GAAqBjG,oBAAS,IAC9CkG,EAAgBC,GAAqBnG,oBAAS,IAC9CoG,EAAOC,GAAYrG,mBAAS,KAC5BsG,EAAkBC,GAAuBvG,mBAAS,IACnDwG,EAAgB9F,iBAAO,MACvB+F,EAAgB/F,iBAAO,MACvBsC,EAAWC,eACVyD,EAAcC,GAAmB3G,mBAAS,KAC1C4G,EAAcC,GAAmB7G,mBAAS,KAC1C6C,EAAgBiE,GAAqB9G,mBAAS,eAC9C+G,EAAahE,IAAkB/C,oBAAS,IACxCgH,GAAgBC,IAAqBjH,oBAAS,IAE9CkH,GAAiBC,IAAsBnH,mBAAS,OAChDoH,GAAaC,IAAkBrH,oBAAS,GACzCsH,GAAc,CAClBC,WAAY7G,iBAAO,MACnB8G,WAAY9G,iBAAO,MACnB+G,MAAO/G,iBAAO,QAETgH,GAAUC,IAAe3H,mBAAS,IASzCW,oBAAU,KACJ9C,EAAOQ,mBAETuJ,MAAM/J,EAAOK,aAAc,CACzB2J,YAAa,YAEZpE,KAAKrE,GAAYA,EAAS0I,QAC1BrE,KAAKsE,IACAA,GACFZ,IAAmB,GACnBQ,GAAYI,EAAKC,cAEjBb,IAAmB,GACnBnE,EAAS,QAGZU,MAAMvE,IACLK,QAAQL,MAAM,wCAAyCA,GACvDgI,IAAmB,GACnBnE,EAAS,OAIbmE,IAAmB,IAEpB,CAACnE,IAEJ,MASMiF,GAAwBA,CAAC3F,EAAG4F,EAAcC,KAC9CD,EAAa5F,EAAEC,OAAOH,OACtB+F,GAAiB,IAIbC,GAAehH,MAAOiH,EAAMC,EAAWC,EAAiBC,EAAeC,EAAcN,KACzF,IAAKE,IAASC,IAAcC,IAAoBC,EAAe,OAC/DC,GAAa,GACbN,GAAiB,GACjBxB,EAAgB,IAChB,MAAM+B,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQP,GACxBK,EAASE,OAAO,cAAeN,GAC/BI,EAASE,OAAO,kBAAmBL,GACnCG,EAASE,OAAO,iBAAkBJ,GAClC,UACQjH,IAAMsH,KAAKhL,EAAOC,gBAAiB4K,EAAU,CACjDI,QAAS,CACP,eAAgB,yBAGpBX,GAAiB,GACjB,MAAOhJ,GACP,GAAIA,EAAMC,UAAsC,MAA1BD,EAAMC,SAASuC,OAAgB,CACnD,MAAMoH,EAAe7J,EAAeC,GACpCwH,EAAgBoC,QAEhBvJ,QAAQL,MAAM,wBAAyBA,GACvCwH,EAAgB,qCAEnB,QACC8B,GAAa,KAiEXO,GAAaA,CAAC1G,EAAG2G,EAAYC,EAAgBT,EAAcN,KAC/D7F,EAAE6G,iBACFD,GAAe,GACf,MAAME,EAAc9G,EAAE+G,aAAaC,MAAM,GACrCF,IACFH,EAAWG,GACXhB,GACEgB,EACA7E,IAAa0E,EAAanE,EAAaE,EACvCT,IAAa0E,EAAa/D,EAAmBI,EAC7Cf,IAAa0E,EAAa7D,EAAiBI,EAC3CiD,EACAN,KAKAoB,GAAiBA,CAACjH,EAAG4G,KACzB5G,EAAE6G,iBACFD,GAAe,IAGXM,GAAmBN,IACvBA,GAAe,IAGXO,GAAyBC,IACzBA,EAAa9I,SACf8I,EAAa9I,QAAQ+I,SA6CnBC,GAAwBxI,UAC5B,IAEE,aADuBG,IAAMsH,KAAK,GAAGhL,EAAOG,iBAAiB6L,mBAAmBzD,MAEhF,MAAOjH,GACP,MAAMA,IAIV,OACEZ,IAAAC,cAAA,OAAKC,UAAW,qBAAoBsI,EAAc,YAAc,KAE9DxI,IAAAC,cAACmE,EAAM,CAACE,eAAgBA,EAAgBC,YAjOvBgH,IACnBhD,EAAkBgD,GACdxC,GAAYwC,GAASlJ,SACvB0G,GAAYwC,GAASlJ,QAAQmJ,eAAe,CAAEC,SAAU,SAAUC,MAAO,YA8NPlH,eAAgBA,KAClFxE,IAAAC,cAAA,QAAMC,UAAU,aACdF,IAAAC,cAAA,QAAMC,UAAU,YAAW,QAAW,IAAEiJ,GAAS,KAEnDnJ,IAAAC,cAACqB,EAAO,MACRtB,IAAAC,cAAA,OAAKC,UAAU,mBACO,eAAnBoE,GACCtE,IAAAC,cAAA,OAAKsD,IAAKwF,GAAYC,WAAY9I,UAAU,kBAC1CF,IAAAC,cAAA,UAAI,mBACJD,IAAAC,cAAA,OACEC,UAAW,cAAaiG,EAAY,WAAa,IACjDwF,OAAS5H,GAAM0G,GAAW1G,EAAGiC,EAAUI,EAAcgB,EAAeE,GACpEsE,WAAa7H,GAAMiH,GAAejH,EAAGqC,GACrCyF,YAAaA,IAAMZ,GAAgB7E,IAElCL,EACC/F,IAAAC,cAAAD,IAAA8L,SAAA,KAEE9L,IAAAC,cAAA,OAAKC,UAAU,gBACbF,IAAAC,cAAA,KAAGC,UAAU,8BAAgC,IAC7CF,IAAAC,cAAA,QAAMC,UAAU,aAAa6F,EAAMgG,MACnC/L,IAAAC,cAAA,QAAMC,UAAU,aAAY,KAAG6F,EAAMiG,KAAO,MAAMC,QAAQ,GAAG,SAI/DjM,IAAAC,cAAA,KAAGC,UAAU,oBAAoBC,QAASA,IAAM+K,GAAsBjD,IAAgB,+BAKxFjI,IAAAC,cAAAD,IAAA8L,SAAA,KAEE9L,IAAAC,cAAA,SAAG,8BACHD,IAAAC,cAAA,KAAGC,UAAU,oBAAoBC,QAASA,IAAM+K,GAAsBjD,IAAgB,yBAK1FjI,IAAAC,cAAA,SACE2D,KAAK,OACLE,SAAWC,GAvOAmI,EAACnI,EAAG2G,EAAYyB,KACvC,MAAMrC,EAAO/F,EAAEC,OAAO+G,MAAM,GAE5BhH,EAAEC,OAAOH,MAAQ,KAEjB6G,EAAWZ,GACXqC,GAAoB,IAiOSD,CAAiBnI,EAAGiC,EAAUsB,GAC/CpH,UAAU,aACVqD,IAAK0E,EACLmE,MAAO,CAAEC,QAAS,UAInBtG,IAAyB,sEAAfA,EAAMnC,MAA+F,6BAAfmC,EAAMnC,OACrG5D,IAAAC,cAAAD,IAAA8L,SAAA,KACE9L,IAAAC,cAAA,OAAKC,UAAU,cACbF,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,cAAa,yBAC5BtM,IAAAC,cAAA,SACEsM,GAAG,aACH3I,KAAK,OACLC,MAAO0C,EACPpC,YAAY,aACZL,SAAWC,GAAM2F,GAAsB3F,EAAGyC,EAAec,MAG7DtH,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,oBAAmB,gCAClCtM,IAAAC,cAAA,SACEsM,GAAG,mBACH3I,KAAK,OACLC,MAAO8C,EACPxC,YAAY,cACZL,SAAWC,GAAM6C,EAAoB7C,EAAEC,OAAOH,UAGlD7D,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,kBAAiB,+BAChCtM,IAAAC,cAAA,SACEsM,GAAG,iBACH3I,KAAK,OACLC,MAAOgD,EACP1C,YAAY,cACZL,SAAWC,GAAM+C,EAAkB/C,EAAEC,OAAOH,YAQrDkC,GACC/F,IAAAC,cAAA,UACEE,QAASA,KAEU,sEAAf4F,EAAMnC,MACS,6BAAfmC,EAAMnC,KAGNiG,GAAa9D,EAAO,QAAS,QAAS,QAASqB,EAAeE,GAG1Df,GAAcI,GAAoBE,GACpCgD,GAAa9D,EAAOQ,EAAYI,EAAkBE,EAAgBO,EAAeE,IAIvFpH,UAAW,iBAAiBiH,EAAa,YAAc,MAAME,EAAiB,cAAgB,KAC9FmF,SACErF,GACCpB,IACiB,sEAAfA,EAAMnC,MACU,6BAAfmC,EAAMnC,SACN2C,IAAeI,IAAqBE,IAIzCM,EACCnH,IAAAC,cAAA,OAAKC,UAAU,YACbmH,EACFrH,IAAAC,cAAA,OAAKC,UAAU,YAAYuM,MAAM,6BAA6BC,QAAQ,aACpE1M,IAAAC,cAAA,UAAQC,UAAU,oBAAoByM,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAKC,KAAK,SAClE9M,IAAAC,cAAA,QAAMC,UAAU,mBAAmB4M,KAAK,OAAOC,EAAE,kCAGnD,UAKL5E,GAAgBnI,IAAAC,cAAA,OAAKC,UAAU,iBAAiBiI,KAMnC,eAAnB7D,GACCtE,IAAAC,cAAA,OAAKC,UAAU,kBACbF,IAAAC,cAAA,UAAI,oBACJD,IAAAC,cAAA,OACEC,UAAW,cAAamG,EAAY,WAAa,IACjDsF,OAAS5H,GAAM0G,GAAW1G,EAAGmC,EAAUI,EAAckB,EAAeE,GACpEkE,WAAa7H,GAAMiH,GAAejH,EAAGuC,GACrCuF,YAAaA,IAAMZ,GAAgB3E,IAElCL,EACCjG,IAAAC,cAAAD,IAAA8L,SAAA,KAEE9L,IAAAC,cAAA,OAAKC,UAAU,gBACbF,IAAAC,cAAA,KAAGC,UAAU,8BAAgC,IAC7CF,IAAAC,cAAA,QAAMC,UAAU,aAAa+F,EAAM8F,MACnC/L,IAAAC,cAAA,QAAMC,UAAU,aAAY,KAAG+F,EAAM+F,KAAO,MAAMC,QAAQ,GAAG,SAI/DjM,IAAAC,cAAA,KAAGC,UAAU,oBAAoBC,QAASA,IAAM+K,GAAsBhD,IAAgB,+BAKxFlI,IAAAC,cAAAD,IAAA8L,SAAA,KAEE9L,IAAAC,cAAA,SAAG,8BACHD,IAAAC,cAAA,KAAGC,UAAU,oBAAoBC,QAASA,IAAM+K,GAAsBhD,IAAgB,yBAK1FlI,IAAAC,cAAA,SACE2D,KAAK,OACLE,SAAWC,IACT,MAAM+F,EAAO/F,EAAEC,OAAO+G,MAAM,GAC5B7E,EAAS4D,GACTpC,GAAkB,GAClBY,EAAgB,IAIA,sEAAdwB,EAAKlG,MACS,6BAAdkG,EAAKlG,MAEL0E,EAAgB,0EAGpBpI,UAAU,aACVqD,IAAK2E,EACLkE,MAAO,CAAEC,QAAS,UAInBhE,GAAgBrI,IAAAC,cAAA,OAAKC,UAAU,iBAAiBmI,GAGhDpC,IAAUoC,GACTrI,IAAAC,cAAAD,IAAA8L,SAAA,KACE9L,IAAAC,cAAA,OAAKC,UAAU,cACbF,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,cAAa,oBAC5BtM,IAAAC,cAAA,SACEsM,GAAG,aACH3I,KAAK,OACLC,MAAO4C,EACPtC,YAAY,aACZL,SAAWC,GAAM2F,GAAsB3F,EAAG2C,EAAegB,MAG7D1H,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,oBAAmB,+BAClCtM,IAAAC,cAAA,SACEsM,GAAG,mBACH3I,KAAK,OACLC,MAAOkD,EACP5C,YAAY,cACZL,SAAWC,GAAMiD,EAAoBjD,EAAEC,OAAOH,UAGlD7D,IAAAC,cAAA,OAAKC,UAAU,eACbF,IAAAC,cAAA,SAAOqM,QAAQ,kBAAiB,6BAChCtM,IAAAC,cAAA,SACEsM,GAAG,iBACH3I,KAAK,OACLC,MAAOoD,EACP9C,YAAY,cACZL,SAAWC,GAAMmD,EAAkBnD,EAAEC,OAAOH,WAIlD7D,IAAAC,cAAA,UACEE,QAASA,IAhXP0C,OAAOiH,EAAMC,EAAWC,EAAiBC,EAAeC,EAAcN,KACxF,IAAKE,IAASC,IAAcC,IAAoBC,EAAe,OAE/DC,GAAa,GACbN,GAAiB,GACjBtB,EAAgB,IAChB,MAAM6B,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQP,GACxBK,EAASE,OAAO,cAAeN,GAC/BI,EAASE,OAAO,mBAAoBL,GACpCG,EAASE,OAAO,kBAAmBJ,GAEnC,IACE,MAAMpJ,QAAiBmC,IAAMsH,KAAKhL,EAAOE,iBAAkB2K,EAAU,CACnE6C,aAAc,SAGhB,GAAwB,MAApBnM,EAASuC,OAAgB,CAC3B,MAAM6J,EAAO,IAAIC,KAAK,CAACrM,EAASC,MAAO,CAAE8C,KAAM/C,EAAS0J,QAAQ,kBAC1D4C,EAAcC,IAAIC,gBAAgBJ,GAElCK,EAAOC,SAAStN,cAAc,KACpCqN,EAAK/M,KAAO4M,EACZG,EAAKE,aAAa,WAAY,uBAC9BD,SAASE,KAAKC,YAAYJ,GAC1BA,EAAKlC,QACLmC,SAASE,KAAKE,YAAYL,GAE1B1D,GAAiB,QAEjB3I,QAAQL,MAAM,sCAAuCC,EAASuC,QAC9DkF,EAAgB,6CAElB,MAAO1H,GACP,GAAIA,EAAMC,UAAsC,MAA1BD,EAAMC,SAASuC,OAAgB,CAEnD,MAAMwK,EAAS,IAAIC,WACnBD,EAAOE,OAAS,WACd,IACE,MAAMC,EAAYC,KAAKC,MAAML,EAAOM,QAC9B1D,EAAe7J,EAAe,CAAEE,SAAU,CAAEC,KAAMiN,KACxDzF,EAAgBkC,GAChB,MAAOzG,GACPuE,EAAgB,4DAGpBsF,EAAOO,QAAU,WACf7F,EAAgB,kCAElBsF,EAAOQ,WAAWxN,EAAMC,SAASC,WAEjCG,QAAQL,MAAM,yBAA0BA,GACxC0H,EAAgB,qCAEnB,QACC4B,GAAa,KAyTgBmE,CAAYpI,EAAOQ,EAAYM,EAAkBE,EAAgBO,EAAeE,GAC/FxH,UAAW,iBAAiBqH,EAAa,YAAc,MAAME,EAAiB,cAAgB,KAC9F+E,SAAU/E,IAAmBxB,IAAUQ,IAAeM,IAAqBE,GAAkBM,GAE5FA,EACCvH,IAAAC,cAAA,OAAKC,UAAU,YACbuH,EACFzH,IAAAC,cAAA,OAAKqO,MAAM,YAAY7B,MAAM,6BAA6BC,QAAQ,aAChE1M,IAAAC,cAAA,UAAQqO,MAAM,oBAAoB3B,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAKC,KAAK,SAC9D9M,IAAAC,cAAA,QAAMqO,MAAM,mBAAmBxB,KAAK,OAAOC,EAAE,kCAG/C,yBAOP9G,GAASwB,IAAmBE,GAC3B3H,IAAAC,cAAAD,IAAA8L,SAAA,KACE9L,IAAAC,cAAA,KACEC,UAAU,oCACVC,QAzSSoO,KACzB3G,GAAkB,KAySH,YAID5H,IAAAC,cAAA,OAAKC,UAAU,uBACZuI,IAAkBzI,IAAAC,cAAA,OAAKO,IAAKgO,IAAY9N,IAAI,aAAaR,UAAU,iBAClEuI,IAAkBI,IAClB7I,IAAAC,cAAA,KAAGC,UAAW,uBAAsB6H,EAAiB0G,SAAS,SAAW,QAAU,YAChF1G,KAOV9B,GAASwB,GAAkBE,GAC1B3H,IAAAC,cAAA,OAAKC,UAAU,yBACbF,IAAAC,cAAA,SACE2D,KAAK,QACLC,MAAOgE,EACP1D,YAAY,mBACZL,SAAWC,GAAM+D,EAAS/D,EAAEC,OAAOH,OACnC3D,UAAU,gBAEZF,IAAAC,cAAA,UAAQE,QA9TA0C,UACtB,GAAKgF,EAAL,CAEAa,IAAkB,GAClBd,GAAkB,GAElB,IACE,MAAM/G,QAAiBwK,GAAsBxD,GAE7CnF,WAAW,KACTgG,IAAkB,GAEd7H,GAAgC,MAApBA,EAASuC,QACvB0F,IAAe,GACfd,EAAoB,6BAEpBc,IAAe,GACfd,EAAoB,mDAErB,KAEH,MAAOpH,GACP8B,WAAW,KACTgG,IAAkB,GAClBI,IAAe,GACfd,EAAoB,iDACnB,KAEH/G,QAAQL,MAAM,uBAAwBA,MAkSQV,UAAU,qBAAoB,WAStD,UAAnBoE,GACCtE,IAAAC,cAAA,OAAKsD,IAAKwF,GAAYG,MAAOhJ,UAAU,kBACrCF,IAAAC,cAACoF,EAAK,U,MCnhBHqJ,MAjBf,SAAerK,GAAgB,IAAf,SAAEsK,GAAUtK,EAC1B,MAAM/D,EAAWsO,cAEjB,OACE5O,IAAAC,cAAA,OAAKC,UAAU,oBACW,MAAtBI,EAASuO,UACT7O,IAAAC,cAAA,UAAQC,UAAU,iBAChBF,IAAAC,cAAA,OAAKO,IAAKuE,IAAMrE,IAAI,YAAYR,UAAU,iBAG9CF,IAAAC,cAAA,OAAKC,UAAU,qBACZyO,KCoEMG,MA3Ef,WACE,MAAOC,EAAOC,GAAYvN,mBAAS,SAC5BkH,EAAiBC,GAAsBnH,mBAAS,OAChD6C,EAAgBiE,GAAqB9G,mBAAS,eAC9C+G,EAAahE,GAAkB/C,oBAAS,GAmC/C,OAjCAW,oBAAU,KACRmL,SAAS0B,gBAAgBzB,aAAa,aAAcuB,GAGhDzP,EAAOQ,mBACTuJ,MAAM/J,EAAOK,aAAc,CACzB2J,YAAa,YAEZpE,KAAKrE,GAAYA,EAAS0I,QAC1BrE,KAAKsE,IAEFZ,IADEY,KAMLrE,MAAMvE,IACLK,QAAQL,MAAM,wCAAyCA,GACvDgI,GAAmB,KAGvBA,GAAmB,IAEpB,CAACmG,IAUoB,OAApBpG,EACK3I,IAAAC,cAAA,WAAK,cAIZD,IAAAC,cAACiP,IAAM,KACLlP,IAAAC,cAAA,OAAKC,UAAU,OACbF,IAAAC,cAACyO,EAAM,CACLK,MAAOA,EACPI,cAjBmBC,IACzBJ,EAASI,IAiBHzG,gBAAiBA,EACjBrE,eAAgBA,EAChBC,YAhBagH,IACnBhD,EAAkBgD,IAgBZ/C,YAAaA,EACbhE,eAAgBA,GAEhBxE,IAAAC,cAACoP,IAAM,KACLrP,IAAAC,cAACqP,IAAK,CAACC,KAAK,IAAIC,QAASxP,IAAAC,cAACF,EAAK,QAE/BC,IAAAC,cAACqP,IAAK,CACJC,KAAK,UACLC,QAAS7G,EAAkB3I,IAAAC,cAAC6F,EAAU,CAACxB,eAAgBA,IAAqBtE,IAAAC,cAACwP,IAAQ,CAACC,GAAG,QAG3F1P,IAAAC,cAACqP,IAAK,CACJC,KAAK,SACLC,QAAS7G,EAAkB3I,IAAAC,cAACoF,EAAK,MAAMrF,IAAAC,cAACwP,IAAQ,CAACC,GAAG,QAEtD1P,IAAAC,cAACqP,IAAK,CAACC,KAAK,IAAIC,QAASxP,IAAAC,cAACwP,IAAQ,CAACC,GAAG,a,MCtElDC,IAASC,OACP5P,IAAAC,cAACD,IAAM6P,WAAU,KACf7P,IAAAC,cAAC6O,EAAG,OAENvB,SAASuC,eAAe,W","file":"static/js/main.ada2103a.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/setu-logo.a6fefa17.svg\";","module.exports = __webpack_public_path__ + \"static/media/google-logo.a2df6b0e.svg\";","module.exports = __webpack_public_path__ + \"static/media/setu-icon.b2141cff.png\";","module.exports = __webpack_public_path__ + \"static/media/loading.071b42ac.gif\";","// const API_BASE_URL = 'http://51.21.72.99:8000';\n// const API_BASE_URL = 'http://localhost:8000'\nconst API_BASE_URL = 'https://comply.setu.co/api';\n\nconst config = {\n API_BASE_URL,\n UPLOAD_FILE_URL: `${API_BASE_URL}/uploadfile/`,\n PROCESS_FILE_URL: `${API_BASE_URL}/processfile/`,\n EMAIL_FILE_URL: `${API_BASE_URL}/emailfile/?email_to=`,\n CHATBOT_URL: `${API_BASE_URL}/qna`,\n \n // google auth related stuff\n current_user: `${API_BASE_URL}/current_user`,\n logout: `${API_BASE_URL}/logout`,\n googlelogin: `${API_BASE_URL}/auth/google`,\n ENABLE_GOOGLE_AUTH: true,\n};\n\nexport default config;\n","import React from 'react';\nimport './Login.css';\nimport googleLogo from '../assets/google-logo.svg'; // Adjust the path as necessary\nimport config from '../Config/config';\n\nfunction Login() {\n const handleGoogleLogin = () => {\n window.location.href = config.googlelogin;\n };\n\n return (\n
\n
\n

\n Comply\n Bot\n

\n \n
\n
\n );\n}\n\nexport default Login;","export const handleApiError = (error) => {\n if (error.response && error.response.data && error.response.data.detail) {\n const detailMessage = error.response.data.detail;\n console.log('API Error Detail:', detailMessage);\n // Check for \"Sheet(s) ['Sheet'] not found in the uploaded file.\" error\n const sheetNotFoundMatch = detailMessage.match(/Sheet\\(s\\) \\['([^']+)'\\] not found in the uploaded file/);\n if (sheetNotFoundMatch) {\n return `${sheetNotFoundMatch[1]} not found`;\n }\n\n // Check for \"Column 'ColumnName' not found in sheet\" error\n const columnNotFoundMatch = detailMessage.match(/Column\\s'([^']+)' not found in sheet/);\n if (columnNotFoundMatch) {\n return `${columnNotFoundMatch[1]} column not found`;\n }\n\n \n // Return the detail message as a fallback\n return detailMessage;\n } else {\n return 'An unknown error occurred. Please try again later.';\n }\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport './Chatbot.css'; // Include your updated styles here\nimport axios from 'axios';\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport config from '../Config/config';\n\nconst Chatbot = () => {\n const [isOpen, setIsOpen] = useState(false);\n const [message, setMessage] = useState('');\n const [chatLog, setChatLog] = useState([]);\n const [isTyping, setIsTyping] = useState(false); // State to manage typing animation\n const [showPlaceholder, setShowPlaceholder] = useState(true); // State to manage placeholder text\n const chatBodyRef = useRef(null);\n\n useEffect(() => {\n if (chatBodyRef.current) {\n chatBodyRef.current.scrollTop = chatBodyRef.current.scrollHeight;\n }\n }, [chatLog, isTyping]);\n\n const toggleChat = () => {\n setIsOpen(!isOpen);\n\n // If chat is opened and no messages exist, show typing animation and then the initial bot message\n if (!isOpen && chatLog.length === 0) {\n setIsTyping(true);\n setTimeout(() => {\n setChatLog([{ sender: 'bot', message: \"Hey, we don't believe in greetings. Shoot your question!\" }]);\n setIsTyping(false);\n }, 1000); // Adjust the delay as needed\n }\n };\n\n const handleSend = async () => {\n if (message.trim()) {\n if (showPlaceholder) {\n setShowPlaceholder(false); // Hide placeholder text when user starts interacting\n }\n\n setChatLog(prev => [...prev, { sender: 'user', message }]);\n setMessage('');\n\n setIsTyping(true); // Show typing animation\n\n try {\n const response = await axios.get(config.CHATBOT_URL, {\n params: {\n question: message.trim(),\n },\n });\n\n if (response.status === 200) {\n const data = response.data;\n console.log('API response:', data);\n\n setIsTyping(false); // Hide typing animation\n\n setChatLog(prev => [...prev, { sender: 'bot', message: data.answer }]);\n if (data.alt_answer) {\n setChatLog(prev => [...prev, { sender: 'bot', message: data.alt_answer }]);\n }\n else {\n setIsTyping(false);\n }\n } else {\n console.error(`HTTP error! Status: ${response.status}`);\n setIsTyping(false); // Hide typing animation even if there's an error\n }\n\n } catch (error) {\n console.error('Error:', error);\n setIsTyping(false); // Hide typing animation on error\n }\n }\n };\n\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n handleSend();\n }\n };\n\n return (\n
\n {!isOpen && (\n
\n Ask ComplyBot\n
\n )}\n\n {isOpen && (\n
\n
\n

ComplyBot

\n \n
\n
\n {showPlaceholder && (\n
\n Ask anything to ComplyBot\n
\n )}\n {chatLog.map((chat, index) => (\n
\n {chat.message}\n
\n ))}\n {isTyping && (\n
\n \n
\n )}\n
\n
\n setMessage(e.target.value)}\n onKeyDown={handleKeyDown} // Added this line to handle Enter key\n placeholder=\"Type your message...\"\n />\n \n
\n
\n )}\n
\n );\n};\n\nexport default Chatbot;\n","import React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport axios from 'axios';\nimport config from '../Config/config';\nimport logo from '../assets/setu-logo.svg'; // Full logo for expanded mode\nimport icon from '../assets/setu-icon.png'; // Collapsed logo\nimport './NavBar.css';\n\nfunction NavBar({ visibleSection, showSection, setIsCollapsed }) {\n const navigate = useNavigate();\n const [collapsed, setCollapsed] = useState(false);\n\n const handleLogout = () => {\n axios.get(config.logout, { withCredentials: true })\n .then(() => {\n navigate('/');\n })\n .catch((err) => {\n console.error('Logout error:', err);\n });\n };\n\n const toggleSidebar = () => {\n setCollapsed(!collapsed);\n setIsCollapsed(!collapsed); // Pass collapsed state to parent\n };\n\n return (\n \n );\n}\n\nexport default NavBar;\n","import React, { useState, useEffect } from 'react';\nimport './About.css';\n\nfunction About() {\n const [visibleCards, setVisibleCards] = useState([false, false, false]);\n\n useEffect(() => {\n // Show the cards one by one with a delay\n const timers = [0, 1, 2].map((index) =>\n setTimeout(() => {\n setVisibleCards((prevVisibleCards) => {\n const newVisibleCards = [...prevVisibleCards];\n newVisibleCards[index] = true;\n return newVisibleCards;\n });\n }, index * 500) // delay of 500ms between each card\n );\n\n return () => timers.forEach((timer) => clearTimeout(timer)); // Cleanup timeouts on unmount\n }, []); // Empty dependency array to only run on mount\n\n return (\n
\n
\n

What is ComplyBot?

\n

\n ComplyBot is a compliance automation tool designed to help Setu adhere to regulations. It leverages both pretrained models and an auto-trained model, which is actively being developed, to provide answers to audit-related questions. The tool streamlines the regulatory process, making compliance more efficient and accurate.\n

\n
\n
\n

Aim

\n

\n The aim of ComplyBot is to simplify and automate the compliance process, ensuring that Setu can efficiently meet regulatory requirements. By providing accurate, real-time answers to audit and compliance-related questions, ComplyBot reduces the manual effort involved in regulatory adherence, minimizes the risk of non-compliance.\n

\n
\n
\n

Get in Touch

\n

\n Reach out via email for any questions or assistance\n

\n \n
\n
\n );\n}\n\nexport default About;\n","import React, { useEffect, useState, useRef } from 'react';\nimport axios from 'axios';\nimport { useNavigate } from 'react-router-dom';\nimport './FileUpload.css';\nimport { handleApiError } from '../Errors/ErrorMessages';\nimport Chatbot from '../Chatbot/Chatbot';\nimport config from '../Config/config';\nimport NavBar from '../NavBar/NavBar';\nimport About from '../About/About';\nimport loadingGif from '../assets/loading.gif';\n\nfunction FileUpload() {\n const [file1, setFile1] = useState(null);\n const [file2, setFile2] = useState(null);\n const [dragging1, setDragging1] = useState(false);\n const [dragging2, setDragging2] = useState(false);\n const [sheetName1, setSheetName1] = useState('');\n const [sheetName2, setSheetName2] = useState('');\n const [questionsColumn1, setQuestionsColumn1] = useState('');\n const [answersColumn1, setAnswersColumn1] = useState('');\n const [questionsColumn2, setQuestionsColumn2] = useState('');\n const [answersColumn2, setAnswersColumn2] = useState('');\n const [uploading1, setUploading1] = useState(false);\n const [uploadSuccess1, setUploadSuccess1] = useState(false);\n const [uploading2, setUploading2] = useState(false);\n const [uploadSuccess2, setUploadSuccess2] = useState(false);\n const [showEmailInput, setShowEmailInput] = useState(false);\n const [email, setEmail] = useState('');\n const [emailSentMessage, setEmailSentMessage] = useState('');\n const fileInputRef1 = useRef(null);\n const fileInputRef2 = useRef(null);\n const navigate = useNavigate();\n const [uploadError1, setUploadError1] = useState('');\n const [uploadError2, setUploadError2] = useState('');\n const [visibleSection, setVisibleSection] = useState('getAnswers');\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [isSendingEmail, setIsSendingEmail] = useState(false);\n // eslint-disable-next-line\n const [isAuthenticated, setIsAuthenticated] = useState(null);\n const [isEmailSent, setIsEmailSent] = useState(false);\n const sectionRefs = {\n trainModel: useRef(null),\n getAnswers: useRef(null),\n about: useRef(null),\n };\n const [userName, setUserName] = useState('');\n\n const showSection = (section) => {\n setVisibleSection(section);\n if (sectionRefs[section].current) {\n sectionRefs[section].current.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n };\n\n useEffect(() => {\n if (config.ENABLE_GOOGLE_AUTH) {\n // Fetch authentication status from the backend\n fetch(config.current_user, {\n credentials: 'include',\n })\n .then(response => response.json())\n .then(user => {\n if (user) {\n setIsAuthenticated(true);\n setUserName(user.given_name);\n } else {\n setIsAuthenticated(false);\n navigate('/'); // Redirect to login if not authenticated\n }\n })\n .catch(error => {\n console.error('Error fetching authentication status:', error);\n setIsAuthenticated(false);\n navigate('/'); // Redirect to login on error\n });\n } else {\n // If Google auth is disabled, set user as authenticated directly\n setIsAuthenticated(true);\n }\n }, [navigate]);\n\n const handleFileChange = (e, fileSetter, uploadSuccessSetter) => {\n const file = e.target.files[0];\n\n e.target.value = null;\n\n fileSetter(file);\n uploadSuccessSetter(false);\n };\n\n const handleSheetNameChange = (e, setSheetName, setUploadSuccess) => {\n setSheetName(e.target.value);\n setUploadSuccess(false);\n };\n\n\n const handleUpload = async (file, sheetName, questionsColumn, answersColumn, setUploading, setUploadSuccess) => {\n if (!file || !sheetName || !questionsColumn || !answersColumn) return;\n setUploading(true);\n setUploadSuccess(false);\n setUploadError1(''); // Reset the error message\n const formData = new FormData();\n formData.append('file', file);\n formData.append('sheet_names', sheetName);\n formData.append('question_column', questionsColumn);\n formData.append('answers_column', answersColumn);\n try {\n await axios.post(config.UPLOAD_FILE_URL, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n setUploadSuccess(true);\n } catch (error) {\n if (error.response && error.response.status === 422) {\n const errorMessage = handleApiError(error);\n setUploadError1(errorMessage);\n } else {\n console.error('Error uploading file:', error);\n setUploadError1('Error occurred: Please try again.'); // Set generic error message\n }\n } finally {\n setUploading(false);\n }\n };\n\n const processFile = async (file, sheetName, questionsColumn, answersColumn, setUploading, setUploadSuccess) => {\n if (!file || !sheetName || !questionsColumn || !answersColumn) return;\n\n setUploading(true);\n setUploadSuccess(false);\n setUploadError2(''); // Reset the error message for section 2\n const formData = new FormData();\n formData.append('file', file);\n formData.append('sheet_names', sheetName);\n formData.append('questions_column', questionsColumn);\n formData.append('comments_column', answersColumn);\n\n try {\n const response = await axios.post(config.PROCESS_FILE_URL, formData, {\n responseType: 'blob', // We expect a blob, but errors might be in JSON\n });\n\n if (response.status === 200) {\n const blob = new Blob([response.data], { type: response.headers['content-type'] });\n const downloadUrl = URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = downloadUrl;\n link.setAttribute('download', 'processed_file.xlsx');\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n setUploadSuccess(true);\n } else {\n console.error('File processing failed with status:', response.status);\n setUploadError2('File processing failed. Please try again.'); // Set a generic error message if processing fails\n }\n } catch (error) {\n if (error.response && error.response.status === 422) {\n // Manually parse the error blob as text\n const reader = new FileReader();\n reader.onload = function () {\n try {\n const errorJson = JSON.parse(reader.result);\n const errorMessage = handleApiError({ response: { data: errorJson } });\n setUploadError2(errorMessage);\n } catch (e) {\n setUploadError2('File processing error: Unable to parse error response.');\n }\n };\n reader.onerror = function () {\n setUploadError2('Error reading error response.');\n };\n reader.readAsText(error.response.data); // Read the blob as text\n } else {\n console.error('Error processing file:', error);\n setUploadError2('Error occurred: Please try again.');\n }\n } finally {\n setUploading(false);\n }\n };\n\n\n\n const handleDrop = (e, fileSetter, draggingSetter, setUploading, setUploadSuccess) => {\n e.preventDefault();\n draggingSetter(false);\n const droppedFile = e.dataTransfer.files[0];\n if (droppedFile) {\n fileSetter(droppedFile);\n handleUpload(\n droppedFile,\n setFile1 === fileSetter ? sheetName1 : sheetName2,\n setFile1 === fileSetter ? questionsColumn1 : questionsColumn2,\n setFile1 === fileSetter ? answersColumn1 : answersColumn2,\n setUploading,\n setUploadSuccess\n );\n }\n };\n\n const handleDragOver = (e, draggingSetter) => {\n e.preventDefault();\n draggingSetter(true);\n };\n\n const handleDragLeave = (draggingSetter) => {\n draggingSetter(false);\n };\n\n const handleClickUploadText = (fileInputRef) => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n\n const handleEmailMeClick = () => {\n setShowEmailInput(true);\n };\n\n const handleSendClick = async () => {\n if (!email) return;\n\n setIsSendingEmail(true);\n setShowEmailInput(false);\n\n try {\n const response = await sendEmailNotification(email);\n\n setTimeout(() => {\n setIsSendingEmail(false); // Stop the animation\n\n if (response && response.status === 200) {\n setIsEmailSent(true);\n setEmailSentMessage('Email sent successfully');\n } else {\n setIsEmailSent(true);\n setEmailSentMessage('Failed to send email. Please try again later.');\n }\n }, 2000);\n\n } catch (error) {\n setTimeout(() => {\n setIsSendingEmail(false);\n setIsEmailSent(true);\n setEmailSentMessage('Error sending email. Please try again later.');\n }, 2000); // Delay for 2 seconds to allow the animation to run fully\n\n console.error('Error sending email:', error);\n\n } finally {\n }\n };\n\n\n\n const sendEmailNotification = async (email) => {\n try {\n const response = await axios.post(`${config.EMAIL_FILE_URL}${encodeURIComponent(email)}`);\n return response;\n } catch (error) {\n throw error;\n }\n };\n\n return (\n
\n {/* Pass collapsed state to NavBar and handle the collapse behavior */}\n \n \n hey, {userName}!\n \n \n
\n {visibleSection === 'trainModel' && (\n
\n

Train the model

\n handleDrop(e, setFile1, setDragging1, setUploading1, setUploadSuccess1)}\n onDragOver={(e) => handleDragOver(e, setDragging1)}\n onDragLeave={() => handleDragLeave(setDragging1)}\n >\n {file1 ? (\n <>\n {/* File display with icon and file name */}\n
\n {/* Font Awesome file icon */}\n {file1.name}\n ({(file1.size / 1024).toFixed(2)} KB)\n
\n\n {/* Option to upload another file */}\n

handleClickUploadText(fileInputRef1)}>\n Click here to upload again\n

\n \n ) : (\n <>\n {/* Initial message for uploading */}\n

Drag & drop a file here or

\n

handleClickUploadText(fileInputRef1)}>\n Click here to upload\n

\n \n )}\n handleFileChange(e, setFile1, setUploadSuccess1)}\n className=\"file-input\"\n ref={fileInputRef1}\n style={{ display: 'none' }}\n />\n\n {/* Show inputs for Excel files */}\n {file1 && (file1.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file1.type === 'application/vnd.ms-excel') && (\n <>\n
\n
\n \n handleSheetNameChange(e, setSheetName1, setUploadSuccess1)}\n />\n
\n
\n \n setQuestionsColumn1(e.target.value)}\n />\n
\n
\n \n setAnswersColumn1(e.target.value)}\n />\n
\n
\n \n )}\n\n {/* Show the upload button after a file is uploaded */}\n {file1 && (\n {\n if (\n file1.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' &&\n file1.type !== 'application/vnd.ms-excel'\n ) {\n // For non-Excel files, the button is enabled immediately but no inputs are required\n handleUpload(file1, 'dummy', 'dummy', 'dummy', setUploading1, setUploadSuccess1);\n } else {\n // For Excel files, ensure all inputs are filled before making the API call\n if (sheetName1 && questionsColumn1 && answersColumn1) {\n handleUpload(file1, sheetName1, questionsColumn1, answersColumn1, setUploading1, setUploadSuccess1);\n }\n }\n }}\n className={`upload-button ${uploading1 ? 'uploading' : ''} ${uploadSuccess1 ? 'upload-done' : ''}`}\n disabled={\n uploading1 ||\n (file1 &&\n (file1.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n file1.type === 'application/vnd.ms-excel') &&\n (!sheetName1 || !questionsColumn1 || !answersColumn1)\n )\n }\n >\n {uploading1 ? (\n
\n ) : uploadSuccess1 ? (\n \n \n \n \n ) : (\n 'Upload'\n )}\n \n )}\n\n {uploadError1 &&
{uploadError1}
}\n
\n
\n )}\n\n\n {visibleSection === 'getAnswers' && (\n
\n

Get your answers

\n handleDrop(e, setFile2, setDragging2, setUploading2, setUploadSuccess2)}\n onDragOver={(e) => handleDragOver(e, setDragging2)}\n onDragLeave={() => handleDragLeave(setDragging2)}\n >\n {file2 ? (\n <>\n {/* File display with icon and file name */}\n
\n {/* Font Awesome file icon */}\n {file2.name}\n ({(file2.size / 1024).toFixed(2)} KB)\n
\n\n {/* Option to upload another file */}\n

handleClickUploadText(fileInputRef2)}>\n Click here to upload again\n

\n \n ) : (\n <>\n {/* Initial message for uploading */}\n

Drag & drop a file here or

\n

handleClickUploadText(fileInputRef2)}>\n Click here to upload\n

\n \n )}\n {\n const file = e.target.files[0];\n setFile2(file);\n setUploadSuccess2(false);\n setUploadError2(''); // Reset error message\n\n // Check if the file is not an Excel file and show error message\n if (\n file.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' &&\n file.type !== 'application/vnd.ms-excel'\n ) {\n setUploadError2('Please upload an Excel file. Current support is only for Excel files.');\n }\n }}\n className=\"file-input\"\n ref={fileInputRef2}\n style={{ display: 'none' }}\n />\n\n {/* Show error message if the file is not an Excel file */}\n {uploadError2 &&
{uploadError2}
}\n\n {/* Show input fields and button only for valid Excel file */}\n {file2 && !uploadError2 && (\n <>\n
\n
\n \n handleSheetNameChange(e, setSheetName2, setUploadSuccess2)}\n />\n
\n
\n \n setQuestionsColumn2(e.target.value)}\n />\n
\n
\n \n setAnswersColumn2(e.target.value)}\n />\n
\n
\n processFile(file2, sheetName2, questionsColumn2, answersColumn2, setUploading2, setUploadSuccess2)}\n className={`upload-button ${uploading2 ? 'uploading' : ''} ${uploadSuccess2 ? 'upload-done' : ''}`}\n disabled={uploadSuccess2 || !file2 || !sheetName2 || !questionsColumn2 || !answersColumn2 || uploading2}\n >\n {uploading2 ? (\n
\n ) : uploadSuccess2 ? (\n \n \n \n \n ) : (\n 'Process and Download'\n )}\n \n \n )}\n\n {/* Show email options and send button */}\n {file2 && uploadSuccess2 && !showEmailInput && (\n <>\n \n Email Me\n

\n {/* Animation and message container */}\n
\n {isSendingEmail && \"Loading...\"}\n {!isSendingEmail && isEmailSent && (\n

\n {emailSentMessage}\n

\n )}\n
\n \n )}\n\n {file2 && uploadSuccess2 && showEmailInput && (\n
\n setEmail(e.target.value)}\n className=\"email-input\"\n />\n \n
\n )}\n
\n
\n )}\n\n {visibleSection === 'about' && (\n
\n \n
\n )}\n \n \n );\n}\n\nexport default FileUpload;","import React from 'react';\nimport { useLocation } from 'react-router-dom';\nimport './Layout.css';\nimport logo from '../assets/setu-logo.svg';\n\nfunction Layout({ children }) {\n const location = useLocation();\n\n return (\n
\n {(location.pathname === '/') && (\n
\n \"Setu\n
\n )}\n
\n {children}\n
\n
\n );\n}\n\nexport default Layout;\n","import React, { useState, useEffect } from 'react';\nimport { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom';\nimport './App.css';\nimport Login from './Login/Login';\nimport FileUpload from './FileUpload/FileUpload';\nimport Layout from './Layout/Layout';\nimport config from './Config/config';\nimport About from './About/About';\n\nfunction App() {\n const [theme, setTheme] = useState('dark');\n const [isAuthenticated, setIsAuthenticated] = useState(null);\n const [visibleSection, setVisibleSection] = useState('getAnswers'); // Control section state\n const [isCollapsed, setIsCollapsed] = useState(false); // Control collapse state\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme);\n\n // Check if Google auth is enabled\n if (config.ENABLE_GOOGLE_AUTH) {\n fetch(config.current_user, {\n credentials: 'include',\n })\n .then(response => response.json())\n .then(user => {\n if (user) {\n setIsAuthenticated(true);\n } else {\n setIsAuthenticated(false);\n }\n })\n .catch(error => {\n console.error('Error fetching authentication status:', error);\n setIsAuthenticated(false);\n });\n } else {\n setIsAuthenticated(true);\n }\n }, [theme]);\n\n const handleThemeChange = (newTheme) => {\n setTheme(newTheme);\n };\n\n const showSection = (section) => {\n setVisibleSection(section); // Update the section being displayed\n };\n\n if (isAuthenticated === null) {\n return
Loading...
;\n }\n\n return (\n \n
\n \n \n } />\n {/* The upload page handles both sections */}\n : }\n />\n {/* The about page is a separate route */}\n : }\n />\n } />\n \n \n
\n
\n );\n}\n\nexport default App;\n","// src/index.js\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport './index.css'; // Import global styles\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}