{"version":3,"sources":["hooks/useAsync.js","firebase.js","LoadingComponent.js","SignIn.js","SignUp.js","ChatRoom.js","MoreInformation.js","App.js","index.js"],"names":["AsyncStatus","defaultInitialState","status","data","error","useAsync","initialState","initialStateRef","React","s","a","current","safeSetState","dispatch","mounted","useSafeDispatch","run","promise","then","Error","success","setData","setError","reset","isIdle","isLoading","isError","isSuccess","firebase","initializeApp","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","databaseURL","auth","database","firestore","LoadingComponent","style","display","height","justifyContent","alignItems","CircularProgress","useStyles","makeStyles","theme","root","image","backgroundImage","backgroundRepeat","backgroundColor","palette","type","grey","backgroundSize","backgroundPosition","paper","margin","spacing","flexDirection","form","width","marginTop","submit","or","textAlign","submitGg","background","color","submitFb","SignIn","classes","useState","email","setEmail","password","setPassword","handleSubmit","e","preventDefault","signInWithEmailAndPassword","Grid","container","component","className","CssBaseline","item","xs","sm","md","Paper","elevation","square","Typography","variant","onSubmit","noValidate","TextField","onChange","target","value","required","fullWidth","id","label","name","autoComplete","autoFocus","Button","startIcon","Icon","onClick","provider","GoogleAuthProvider","signInWithRedirect","FacebookAuthProvider","textDecoration","to","genders","SignUp","photoURL","handleChangeAuthAndFilled","nickname","setNickname","gender","setGender","birthday","setBirthday","createUserWithEmailAndPassword","userCredential","uid","user","hashEmail","md5","userData","inConversation","beingCalled","ref","set","select","map","option","MenuItem","InputLabelProps","shrink","userInfo","maxWidth","header","content","online","fontSize","offline","conversation","position","top","left","border","boxShadow","shadows","padding","receivedUserMessage","borderRadius","sentUserMessage","list","overflow","marginBottom","btnSend","ChatRoom","sentUid","setPhotoURL","listUser","setListUser","open","setOpen","message","setMessage","listMessage","setListMessage","receivedUid","setReceivedUid","console","log","handleInConversationSentUser","useCallback","orderByChild","on","snapshot","listMessageFromDB","Object","keys","val","messageId","messageArray","forEach","receivedUser","sentUser","push","handleCloseModal","update","handleStatus","handleSendMessageToDatabase","timestamp","ServerValue","TIMESTAMP","handleListItemClick","useEffect","beingCalledByUid","child","exists","alert","userArray","modalBody","List","messageData","ListItem","ListItemAvatar","Avatar","alt","src","ListItemText","primary","onKeyUp","keyCode","handleKeyUp","Container","pr","signOut","catch","Divider","disabled","button","divider","secondary","Modal","onClose","MoreInformation","code","App","authenticated","setAuthenticated","authenticatedAndFilled","setAuthenticatedAndFilled","userFirebaseData","setUserFirebaseData","onAuthStateChanged","snap","onDisconnect","get","length","exact","from","path","render","ReactDOM","StrictMode","document","getElementById"],"mappings":"sSAEMA,EACE,OADFA,EAEK,UAFLA,EAGM,WAHNA,EAIM,WAqBZ,IAAMC,EAAsB,CAC1BC,OAAQF,EACRG,KAAM,KACNC,MAAO,MAuEMC,MApEf,SAAkBC,GAChB,IAAMC,EAAkBC,SAAA,2BACnBP,GACAK,IAEL,EAA4CE,cAC1C,SAACC,EAAGC,GAAJ,mBAAC,eAAeD,GAAMC,KACtBH,EAAgBI,SAFlB,0BAAST,EAAT,EAASA,OAAQC,EAAjB,EAAiBA,KAAMC,EAAvB,EAAuBA,MAKjBQ,EAlCR,SAAyBC,GACvB,IAAMC,EAAUN,UAAa,GAS7B,OAPAA,mBAAsB,WAEpB,OADAM,EAAQH,SAAU,EACX,WACLG,EAAQH,SAAU,KAEnB,IAEIH,eACL,WACEM,EAAQH,SAAWE,EAAQ,WAAR,eAErB,CAACA,IAoBkBE,CALrB,MAOMC,EAAMR,eACV,SAACS,GACC,IAAKA,IAAYA,EAAQC,KACvB,MAAM,IAAIC,MAAJ,qHAKR,OADAP,EAAa,CAAEV,OAAQF,IAChBiB,EAAQC,MACb,SAACf,GAEC,OADAS,EAAa,CAAET,OAAMD,OAAQF,IACtB,2BACFG,GADL,IAEEiB,SAAS,OAGb,SAAChB,GAEC,OADAQ,EAAa,CAAEV,OAAQF,EAAsBI,UACtC,2BACFA,GADL,IAEEgB,SAAS,SAKjB,CAACR,IAGGS,EAAUb,eACd,SAACL,GAAD,OAAUS,EAAa,CAAET,WACzB,CAACS,IAEGU,EAAWd,eACf,SAACJ,GAAD,OAAWQ,EAAa,CAAER,YAC1B,CAACQ,IAEGW,EAAQf,eACZ,kBAAMI,EAAaL,EAAgBI,WACnC,CAACC,IAGH,MAAO,CACLY,OAAQtB,IAAWF,EACnByB,UAAWvB,IAAWF,EACtB0B,QAASxB,IAAWF,EACpB2B,UAAWzB,IAAWF,EACtBqB,UACAC,WACAlB,QACAF,SACAC,OACAa,MACAO,U,2BCpFJK,IAASC,cATc,CACrBC,OAAQ,0CACRC,WAAY,yCACZC,UAAW,yBACXC,cAAe,qCACfC,kBAAmB,eACnBC,MAAO,4CACPC,YAAa,qFAGf,IAAMC,EAAOT,IAASS,OAEhBC,GADYV,IAASW,YACVX,IAASU,Y,gBCdX,SAASE,IACtB,OACE,qBACEC,MAAO,CACLC,QAAS,OACTC,OAAQ,QACRC,eAAgB,SAChBC,WAAY,UALhB,SAQE,cAACC,EAAA,EAAD,MCIN,IAAMC,EAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJP,OAAQ,SAEVQ,MAAO,CACLC,gBACE,2LACFC,iBAAkB,YAClBC,gBACyB,UAAvBL,EAAMM,QAAQC,KACVP,EAAMM,QAAQE,KAAK,IACnBR,EAAMM,QAAQE,KAAK,KACzBC,eAAgB,QAChBC,mBAAoB,UAEtBC,MAAO,CACLC,OAAQZ,EAAMa,QAAQ,EAAG,GACzBpB,QAAS,OACTqB,cAAe,SACflB,WAAY,UAEdmB,KAAM,CACJC,MAAO,OACPC,UAAWjB,EAAMa,QAAQ,IAE3BK,OAAQ,CACNN,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,IAE9BM,GAAI,CACFC,UAAW,UAEbC,SAAU,CACRT,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,GAC5BS,WAAY,mDACZC,MAAO,SAETC,SAAU,CACRZ,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,GAC5BS,WAAY,mDACZC,MAAO,aAII,SAASE,IACtB,IAAMC,EAAU5B,IAChB,EAA0B6B,qBAA1B,mBAAOC,EAAP,KAAcC,EAAd,KACA,EAAgCF,qBAAhC,mBAAOG,EAAP,KAAiBC,EAAjB,KACA,EAA2B3E,IAAnBoB,EAAR,EAAQA,UAAWT,EAAnB,EAAmBA,IACbiE,EAAY,uCAAG,WAAOC,GAAP,SAAAxE,EAAA,sDACnBwE,EAAEC,iBACFnE,EAAIqB,EAAK+C,2BAA2BP,EAAOE,IAFxB,2CAAH,sDAYlB,OAAItD,EAAkB,cAACe,EAAD,IAEpB,eAAC6C,EAAA,EAAD,CAAMC,WAAS,EAACC,UAAU,OAAOC,UAAWb,EAAQzB,KAApD,UACE,cAACuC,EAAA,EAAD,IACA,cAACJ,EAAA,EAAD,CAAMK,MAAI,EAACC,IAAI,EAAOC,GAAI,EAAGC,GAAI,EAAGL,UAAWb,EAAQxB,QACvD,cAACkC,EAAA,EAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGN,UAAWO,IAAOC,UAAW,EAAGC,QAAM,EAAvE,SACE,sBAAKR,UAAWb,EAAQf,MAAxB,UACE,cAACqC,EAAA,EAAD,CAAYC,QAAQ,KAApB,qBACA,uBAAMV,UAAWb,EAAQX,KAAMmC,SAAUlB,EAAcmB,YAAU,EAAjE,UACE,cAACC,EAAA,EAAD,CACEC,SAAU,SAACpB,GACTJ,EAASI,EAAEqB,OAAOC,QAEpB3C,OAAO,SACP4C,UAAQ,EACRC,WAAS,EACTC,GAAG,QACHC,MAAM,QACNC,KAAK,QACLC,aAAa,QACbC,WAAS,IAEX,cAACV,EAAA,EAAD,CACEC,SAAU,SAACpB,GACTF,EAAYE,EAAEqB,OAAOC,QAEvB3C,OAAO,SACP4C,UAAQ,EACRC,WAAS,EACTG,KAAK,WACLD,MAAM,WACNpD,KAAK,WACLmD,GAAG,WACHG,aAAa,qBAEf,cAACE,EAAA,EAAD,CACExD,KAAK,SACLgB,MAAM,UACNkC,WAAS,EACTR,QAAQ,YACRV,UAAWb,EAAQR,OALrB,qBASA,cAAC8B,EAAA,EAAD,CAAYT,UAAWb,EAAQP,GAA/B,gBACA,eAACiB,EAAA,EAAD,CAAMC,WAAS,EAAf,UACE,cAACD,EAAA,EAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,SACE,cAACoB,EAAA,EAAD,CACEd,QAAQ,YACRQ,WAAS,EACTO,UAAW,cAACC,EAAA,EAAD,CAAM1B,UAAU,kBAC3BA,UAAWb,EAAQL,SACnB6C,QA5DW,WACzB,IAAMC,EAAW,IAAIxF,IAASS,KAAKgF,mBACnCrG,EAAIqB,EAAKiF,mBAAmBF,KAqDhB,mCAUF,cAAC/B,EAAA,EAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAvB,SACE,cAACoB,EAAA,EAAD,CACEd,QAAQ,YACRQ,WAAS,EACTO,UAAW,cAACC,EAAA,EAAD,CAAM1B,UAAU,sBAC3BA,UAAWb,EAAQF,SACnB0C,QAnEa,WAC3B,IAAMC,EAAW,IAAIxF,IAASS,KAAKkF,qBACnCvG,EAAIqB,EAAKiF,mBAAmBF,KA4DhB,wCAWJ,cAAC/B,EAAA,EAAD,CAAMC,WAAS,EAAf,SACE,cAACD,EAAA,EAAD,CAAMK,MAAI,EAAV,SACE,cAAC,IAAD,CACEjD,MAAO,CAAE+E,eAAgB,OAAQhD,MAAO,QACxCiD,GAAG,UAFL,2D,8BCpIV1E,EAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJP,OAAQ,SAEVQ,MAAO,CACLC,gBACE,2LACFC,iBAAkB,YAClBC,gBACyB,UAAvBL,EAAMM,QAAQC,KACVP,EAAMM,QAAQE,KAAK,IACnBR,EAAMM,QAAQE,KAAK,KACzBC,eAAgB,QAChBC,mBAAoB,UAEtBC,MAAO,CACLC,OAAQZ,EAAMa,QAAQ,EAAG,GACzBpB,QAAS,OACTqB,cAAe,SACflB,WAAY,UAEdmB,KAAM,CACJC,MAAO,OACPC,UAAWjB,EAAMa,QAAQ,IAE3BK,OAAQ,CACNN,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,IAE9BM,GAAI,CACFC,UAAW,UAEbC,SAAU,CACRT,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,GAC5BS,WAAY,mDACZC,MAAO,SAETC,SAAU,CACRZ,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,GAC5BS,WAAY,mDACZC,MAAO,aAILkD,EAAU,CACd,CACElB,MAAO,OACPI,MAAO,QAET,CACEJ,MAAO,SACPI,MAAO,UAET,CACEJ,MAAO,SACPI,MAAO,WAII,SAASe,EAAT,GAAgD,IAsBzDC,EAtB2BC,EAA6B,EAA7BA,0BACzBlD,EAAU5B,IAChB,EAA0B6B,qBAA1B,mBAAOC,EAAP,KAAcC,EAAd,KACA,EAAgCF,qBAAhC,mBAAOG,EAAP,KAAiBC,EAAjB,KACA,EAAgCJ,qBAAhC,mBAAOkD,EAAP,KAAiBC,EAAjB,KACA,EAA4BnD,mBAAS,QAArC,mBAAOoD,EAAP,KAAeC,EAAf,KACA,EAAgCrD,qBAAhC,mBAAOsD,EAAP,KAAiBC,EAAjB,KAiBMlD,EAAY,uCAAG,WAAOC,GAAP,qBAAAxE,EAAA,6DACnBwE,EAAEC,iBADiB,SAEU9C,EAAK+F,+BAChCvD,EACAE,GAJiB,cAEbsD,EAFa,OAMbC,EAAMD,EAAeE,KAAKD,IAC3BD,EAAeT,WACZY,EAAYC,IAAI5D,GACtB+C,EACE,mCAAqCY,EAAY,gBAE/CE,EAAW,CACfJ,IAAKA,EACLR,SAAUA,EACVjD,MAAOA,EACPmD,OAAQA,EACRE,SAAUA,EACVN,SAAUA,EACVe,gBAAgB,EAChBC,YAAa,KACb1I,OAAQ,UArBS,SAuBboC,EAASuG,IAAI,SAAWP,GAAKQ,IAAIJ,GAvBpB,OAwBnBb,GAA0B,GAxBP,4CAAH,sDA0BlB,OACE,eAACxC,EAAA,EAAD,CAAMC,WAAS,EAACC,UAAU,OAAOC,UAAWb,EAAQzB,KAApD,UACE,cAACuC,EAAA,EAAD,IACA,cAACJ,EAAA,EAAD,CAAMK,MAAI,EAACC,IAAI,EAAOC,GAAI,EAAGC,GAAI,EAAGL,UAAWb,EAAQxB,QACvD,cAACkC,EAAA,EAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGN,UAAWO,IAAOC,UAAW,EAAGC,QAAM,EAAvE,SACE,sBAAKR,UAAWb,EAAQf,MAAxB,UACE,cAACqC,EAAA,EAAD,CAAYC,QAAQ,KAApB,qBACA,uBAAMV,UAAWb,EAAQX,KAAMoC,YAAU,EAACD,SAAUlB,EAApD,UACE,cAACoB,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SArDc,SAACpB,GACzBJ,EAASI,EAAEqB,OAAOC,QAqDRE,WAAS,EACTC,GAAG,QACHC,MAAM,gBACNC,KAAK,QACLC,aAAa,QACbC,WAAS,IAEX,cAACV,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SA7DiB,SAACpB,GAC5BF,EAAYE,EAAEqB,OAAOC,QA6DXE,WAAS,EACTG,KAAK,WACLD,MAAM,WACNpD,KAAK,WACLmD,GAAG,WACHG,aAAa,qBAEf,cAACT,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SArEiB,SAACpB,GAC5B6C,EAAY7C,EAAEqB,OAAOC,QAqEXE,WAAS,EACTG,KAAK,WACLD,MAAM,WACND,GAAG,WACHG,aAAa,aAEf,cAACT,EAAA,EAAD,CACExC,OAAO,SACPkF,QAAM,EACNtC,UAAQ,EACRH,SA7Ee,SAACpB,GAC1B+C,EAAU/C,EAAEqB,OAAOC,QA6ETE,WAAS,EACTF,MAAOwB,EACPnB,KAAK,SACLD,MAAM,SACND,GAAG,SATL,SAWGe,EAAQsB,KAAI,SAACC,GAAD,OACX,cAACC,EAAA,EAAD,CAA6B1C,MAAOyC,EAAOzC,MAA3C,SACGyC,EAAOrC,OADKqC,EAAOzC,YAK1B,cAACH,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SA1FiB,SAACpB,GAC5BiD,EAAYjD,EAAEqB,OAAOC,QA0FXG,GAAG,WACHC,MAAM,WACNpD,KAAK,OACL2F,gBAAiB,CACfC,QAAQ,KAGZ,cAACpC,EAAA,EAAD,CACExD,KAAK,SACLkD,WAAS,EACTR,QAAQ,YACR1B,MAAM,UACNgB,UAAWb,EAAQR,OALrB,qBASA,cAAC,IAAD,CACE1B,MAAO,CAAE+E,eAAgB,OAAQhD,MAAO,QACxCiD,GAAG,UAFL,6C,4ECtLN1E,EAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJmB,UAAW,UAEbgF,SAAU,CACRpF,MAAO,OACPqF,SAAU,KAEZC,OAAQ,CACN7G,QAAS,OACTE,eAAgB,gBAChBC,WAAY,UAEd2G,QAAS,CACPtF,UAAW,IAEbuF,OAAQ,CACNjF,MAAO,QACPkF,SAAU,IAEZC,QAAS,CACPnF,MAAO,MACPkF,SAAU,IAEZE,aAAc,CACZpF,MAAO,OACPkF,SAAU,IAEZ9F,MAAO,CACLiG,SAAU,QACVC,IAAK,IACLC,KAAM,IACN9F,MAAO,IACPX,gBAAiBL,EAAMM,QAAQgB,WAAWX,MAC1CoG,OAAQ,iBACRC,UAAWhH,EAAMiH,QAAQ,GACzBC,QAASlH,EAAMa,QAAQ,EAAG,EAAG,IAE/BsG,oBAAqB,CACnB7F,WAAY,UACZ8F,aAAc,GACdF,QAAS,IAEXG,gBAAiB,CACf/F,WAAY,UACZC,MAAO,QACP6F,aAAc,GACdF,QAAS,IAEXI,KAAM,CACJC,SAAU,OACV7H,OAAQ,IACR8H,aAAc,GACdT,OAAQ,kBAEVU,QAAS,CACPnG,WAAY,UACZC,MAAO,QACPN,UAAW,QAIA,SAASyG,EAAT,GAA6B,IACpCC,EADmC,EAARrC,KACZD,IACf3D,EAAU5B,IAChB,EAAgC6B,mBAAS,IAAzC,mBAAOgD,EAAP,KAAiBiD,EAAjB,KACA,EAA0BjG,mBAAS,IAAnC,mBAAOC,EAAP,KAAcC,EAAd,KACA,EAAgCF,mBAAS,IAAzC,mBAAOkG,EAAP,KAAiBC,EAAjB,KACA,EAAwBnG,oBAAS,GAAjC,mBAAOoG,EAAP,KAAaC,EAAb,KACA,EAA8BrG,mBAAS,IAAvC,mBAAOsG,EAAP,KAAgBC,EAAhB,KACA,EAAsCvG,mBAAS,IAA/C,mBAAOwG,EAAP,KAAoBC,EAApB,KACA,EAAsCzG,mBAAS,IAA/C,mBAAO0G,EAAP,KAAoBC,EAApB,KACAC,QAAQC,IAAI,cAAeH,GAC3BE,QAAQC,IAAI,WAAYb,GAExB,IAAMc,EAA+BC,uBAAY,WAC/CrJ,EACGuG,IAAI,aACJ+C,aAAa,aACbC,GAAG,SAAS,SAACC,GACZ,IAAMC,EAAoBC,OAAOC,KAAKH,EAASI,OAAOlD,KACpD,SAACmD,GAAD,OAAeL,EAASI,MAAMC,MAE1BC,EAAe,GACrBL,EAAkBM,SAAQ,SAACnB,IAEtBA,EAAQoB,eAAiBhB,GACxBJ,EAAQqB,WAAa3B,GACtBM,EAAQoB,eAAiB1B,GACxBM,EAAQqB,WAAajB,IAEvBc,EAAaI,KAAKtB,MAGtBG,EAAee,QAElB,CAACd,EAAaV,IAEX6B,EAAgB,uCAAG,sBAAA/L,EAAA,sEACjB4B,EAASuG,IAAI,SAAW+B,GAAS8B,OAAO,CAAE/D,gBAAgB,IADzC,uBAEjBrG,EACHuG,IAAI,SAAWyC,GACfoB,OAAO,CAAE/D,gBAAgB,IAJL,OAKvBsC,GAAQ,GALe,2CAAH,qDAQhB0B,EAAe,SAACpE,GACpB,MAAoB,WAAhBA,EAAKrI,SAA+C,IAAxBqI,EAAKI,eAEjC,cAAC1C,EAAA,EAAD,CAAYT,UAAWb,EAAQiF,aAA/B,6BAIuB,WAAhBrB,EAAKrI,SAA+C,IAAxBqI,EAAKI,eACnC,cAAC1C,EAAA,EAAD,CAAYT,UAAWb,EAAQ8E,OAA/B,oBAEA,cAACxD,EAAA,EAAD,CAAYT,UAAWb,EAAQgF,QAA/B,sBAmBLiD,GAA2B,uCAAG,sBAAAlM,EAAA,sEAC5B4B,EAASuG,IAAI,aAAa2D,KAAK,CACnCD,SAAU3B,EACV0B,aAAchB,EACduB,UAAWjL,IAASU,SAASwK,YAAYC,UACzC7B,QAASA,IALuB,OAOlCC,EAAW,IAPuB,2CAAH,qDAU3B6B,GAAmB,uCAAG,WAAO1B,GAAP,SAAA5K,EAAA,sEACpB4B,EAASuG,IAAI,SAAW+B,GAAS8B,OAAO,CAAE/D,gBAAgB,IADtC,uBAEpBrG,EAASuG,IAAI,SAAWyC,GAAaoB,OAAO,CAAE/D,gBAAgB,IAF1C,OAG1B4C,EAAeD,GAHW,2CAAH,sDAYzB2B,qBAAU,WACR3K,EAASuG,IAAI,SAAW+B,GAASiB,GAAG,QAApC,uCAA6C,WAAOC,GAAP,SAAApL,EAAA,0DACvCoL,EAASI,MAAMvD,eADwB,qBAErC2C,EAFqC,gCAGjChJ,EACHuG,IAAI,SAAWyC,GACfoB,OAAO,CAAEQ,iBAAkBtC,IALS,6BAOvCW,EAAeO,EAASI,MAAMgB,kBAPS,OASzCjC,GAAQ,GACRS,IAVyC,+BAYzCT,GAAQ,GAZiC,UAanC3I,EAASuG,IAAI,SAAW+B,GAAS8B,OAAO,CAAEQ,iBAAkB,KAbzB,4CAA7C,uDAgBA5K,EACGuG,IAAI,SAAW+B,GACfuC,MAAM,oBACNtB,GAAG,SAAS,SAACC,GACPA,EAASI,OACZX,EAAe,SAGpB,CAACG,EAA8BJ,EAAaV,IAG/CqC,qBAAU,WACR3K,EAASuG,IAAI,SAAW+B,GAASiB,GAAG,SAAS,SAACC,GACxCA,EAASsB,UACXvC,EAAYiB,EAASI,MAAMtE,UAC3B9C,EAASgH,EAASI,MAAMrH,QAExBwI,MAAM,8DAGV/K,EAASuG,IAAI,SAASgD,GAAG,SAAS,SAACC,GACjC,IAAMwB,EAAY,GAClBxB,EAASO,SAAQ,SAAC9D,GAChB+E,EAAUd,KAAKjE,EAAK2D,UAEtBnB,EAAYuC,QAEb,CAAC1C,IAEJ,IAAM2C,GACJ,sBAAK/H,UAAWb,EAAQf,MAAxB,UACE,cAAC4J,EAAA,EAAD,CAAMhI,UAAWb,EAAQ4F,KAAzB,SACGa,EAAYpC,KAAI,SAACyE,GAChB,OAAIA,EAAYlB,WAAajB,EAEzB,eAACoC,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,cAACC,EAAA,EAAD,CAAQC,IAAI,cAAcC,IAAI,OAEhC,cAACC,EAAA,EAAD,CACEC,QACE,cAAC/H,EAAA,EAAD,CACEV,UAAU,OACVC,UAAWb,EAAQyF,oBAFrB,SAIGqD,EAAYvC,cAVNuC,EAAYZ,WAkB3B,cAACa,EAAA,EAAD,CAEEjL,MAAO,CAAE4B,UAAW,SAFtB,SAIE,cAAC0J,EAAA,EAAD,CACEC,QACE,cAAC/H,EAAA,EAAD,CACEV,UAAU,OACVC,UAAWb,EAAQ2F,gBAFrB,SAIGmD,EAAYvC,aATduC,EAAYZ,gBAkB3B,cAACxG,EAAA,EAAD,CACEK,WAAS,EACTR,QAAQ,WACRM,MAAO0E,EACP5E,SAAU,SAACpB,GAAD,OAAOiG,EAAWjG,EAAEqB,OAAOC,QACrCyH,QAAS,SAAC/I,GAAD,OApGK,SAACA,GACD,KAAdA,EAAEgJ,SACJtB,KAkGkBuB,CAAYjJ,MAE9B,cAAC8B,EAAA,EAAD,CAAQG,QAASyF,GAA6BpH,UAAWb,EAAQ+F,QAAjE,qBAKJ,OACE,sBAAKlF,UAAWb,EAAQzB,KAAxB,UACE,eAACkL,EAAA,EAAD,CAAW5I,UAAWb,EAAQ4E,OAA9B,UACE,eAACmE,EAAA,EAAD,CAAUlI,UAAWb,EAAQ0E,SAA7B,UACE,cAACsE,EAAA,EAAD,UACE,cAACC,EAAA,EAAD,CAAQE,IAAKlG,MAEf,cAACmG,EAAA,EAAD,CAAcC,QAASnJ,OAEzB,cAACmC,EAAA,EAAD,CACEqH,GAAI,EACJlH,QAAS,WAnJf9E,EACGiM,UACApN,MAAK,WACJmM,MAAM,4BAEPkB,OAAM,SAACnO,GACNiN,MAAM,8CAAD,OAC2CjN,EAD3C,2BA8IH8F,QAAQ,YACR1B,MAAM,UAJR,yBASF,cAACgK,EAAA,EAAD,IACA,cAACJ,EAAA,EAAD,CAAW5I,UAAWb,EAAQ6E,QAA9B,SACE,eAACgE,EAAA,EAAD,WACE,cAACvH,EAAA,EAAD,CAAYC,QAAQ,KAApB,uBAGE4E,EAAS9B,KAAI,SAACT,GACZ,GAAIA,EAAKD,MAAQsC,EACf,OACE,eAAC8C,EAAA,EAAD,CACEe,SACkB,YAAhBlG,EAAKrI,SAAgD,IAAxBqI,EAAKI,eAEpC+F,QAAM,EACNvH,QAAS,kBAAM6F,GAAoBzE,EAAKD,MAExCqG,SAAO,EAPT,UASE,cAAChB,EAAA,EAAD,UACE,cAACC,EAAA,EAAD,CAAQC,IAAI,cAAcC,IAAKvF,EAAKX,aAEtC,cAACmG,EAAA,EAAD,CACEC,QAASzF,EAAK1D,MACd+J,UAAWjC,EAAapE,OARrBA,EAAKD,aAgBxB,cAACuG,EAAA,EAAD,CAAO7D,KAAMA,EAAM8D,QAASrC,EAA5B,SACGc,QCvTT,IAAMxK,EAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJP,OAAQ,SAEVQ,MAAO,CACLC,gBAAiB,0CACjBC,iBAAkB,YAClBC,gBACyB,UAAvBL,EAAMM,QAAQC,KACVP,EAAMM,QAAQE,KAAK,IACnBR,EAAMM,QAAQE,KAAK,KACzBC,eAAgB,QAChBC,mBAAoB,UAEtBC,MAAO,CACLC,OAAQZ,EAAMa,QAAQ,EAAG,GACzBpB,QAAS,OACTqB,cAAe,SACflB,WAAY,UAEdmB,KAAM,CACJC,MAAO,OACPC,UAAWjB,EAAMa,QAAQ,IAE3BK,OAAQ,CACNN,OAAQZ,EAAMa,QAAQ,EAAG,EAAG,QAG1B4D,EAAU,CACd,CACElB,MAAO,OACPI,MAAO,QAET,CACEJ,MAAO,SACPI,MAAO,UAET,CACEJ,MAAO,SACPI,MAAO,WAGI,SAASmI,GAAT,GAA+D,IAApClH,EAAmC,EAAnCA,0BAA2BU,EAAQ,EAARA,KAC7D5D,EAAU5B,IAChB,EAAgC6B,qBAAhC,mBAAOkD,EAAP,KAAiBC,EAAjB,KACA,EAA4BnD,mBAAS,QAArC,mBAAOoD,EAAP,KAAeC,EAAf,KACA,EAAgCrD,qBAAhC,mBAAOsD,EAAP,KAAiBC,EAAjB,KAUMlD,EAAY,uCAAG,WAAOC,GAAP,uBAAAxE,EAAA,6DACnBwE,EAAEC,iBADiB,SAGXmD,EAAMC,EAAKD,IACXzD,EAAQ0D,EAAK1D,OACf+C,EAAWW,EAAKX,YAEZY,EAAYC,IAAI5D,GACtB+C,EACE,mCAAqCY,EAAY,gBAE/CE,EAAW,CACfJ,IAAKA,EACLzD,MAAOA,EACPiD,SAAUA,EACVE,OAAQA,EACRE,SAAUA,EACVN,SAAUA,EACVe,gBAAgB,EAChBC,YAAa,MAnBE,SAqBXtG,EAASuG,IAAI,SAAWP,GAAKoE,OAAOhE,GArBzB,OAsBjBb,GAA0B,GAtBT,kDAwBjBwF,MAAM,gBAAkB,KAAM2B,KAAO,IAAM,KAAM9D,SAxBhC,0DAAH,sDA2BlB,OACE,eAAC7F,EAAA,EAAD,CAAMC,WAAS,EAACC,UAAU,OAAOC,UAAWb,EAAQzB,KAApD,UACE,cAACuC,EAAA,EAAD,IACA,cAACJ,EAAA,EAAD,CAAMK,MAAI,EAACC,IAAI,EAAOC,GAAI,EAAGC,GAAI,EAAGL,UAAWb,EAAQxB,QACvD,cAACkC,EAAA,EAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGN,UAAWO,IAAOC,UAAW,EAAGC,QAAM,EAAvE,SACE,sBAAKR,UAAWb,EAAQf,MAAxB,UACE,cAACqC,EAAA,EAAD,CAAYV,UAAU,KAAKW,QAAQ,KAAnC,6CAGA,uBAAMV,UAAWb,EAAQX,KAAMoC,YAAU,EAACD,SAAUlB,EAApD,UACE,cAACoB,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SAjDiB,SAACpB,GAC5B6C,EAAY7C,EAAEqB,OAAOC,QAiDXE,WAAS,EACTG,KAAK,WACLD,MAAM,WACND,GAAG,WACHG,aAAa,aAEf,cAACT,EAAA,EAAD,CACExC,OAAO,SACPkF,QAAM,EACNtC,UAAQ,EACRH,SAzDe,SAACpB,GAC1B+C,EAAU/C,EAAEqB,OAAOC,QAyDTE,WAAS,EACTF,MAAOwB,EACPnB,KAAK,SACLD,MAAM,SACND,GAAG,SATL,SAWGe,EAAQsB,KAAI,SAACC,GAAD,OACX,cAACC,EAAA,EAAD,CAA6B1C,MAAOyC,EAAOzC,MAA3C,SACGyC,EAAOrC,OADKqC,EAAOzC,YAK1B,cAACH,EAAA,EAAD,CACExC,OAAO,SACP4C,UAAQ,EACRH,SAtEiB,SAACpB,GAC5BiD,EAAYjD,EAAEqB,OAAOC,QAsEXG,GAAG,WACHC,MAAM,WACNpD,KAAK,OACL2F,gBAAiB,CACfC,QAAQ,KAGZ,cAACpC,EAAA,EAAD,CACExD,KAAK,SACLkD,WAAS,EACTR,QAAQ,YACR1B,MAAM,UACNgB,UAAWb,EAAQR,OALrB,+BCvIZ,IAAM1B,GAAQ,CACZE,OAAQ,QACRsB,MAAO,QAGM,SAASgL,KACtB,MAA0CrK,oBAAS,GAAnD,mBAAOsK,EAAP,KAAsBC,EAAtB,KACA,EAA4DvK,oBAAS,GAArE,mBAAOwK,EAAP,KAA+BC,EAA/B,KACA,EAAgDzK,mBAAS,IAAzD,mBAAO0K,EAAP,KAAyBC,EAAzB,KACA,EAA2BlP,IAAnBoB,EAAR,EAAQA,UAAWT,EAAnB,EAAmBA,IAEb6G,EAA4B,SAACrB,GACjC6I,EAA0B7I,IAkD5B,OA/CAyG,qBAAU,WACR5K,EAAKmN,mBAAL,+BAAA9O,EAAA,MAAwB,WAAO6H,GAAP,SAAA7H,EAAA,0DAClB6H,EADkB,uBAEpBiD,QAAQC,IAAI,eACZnJ,EAASuG,IAAI,mBAAmBgD,GAAG,SAAS,SAAC4D,IACxB,IAAfA,EAAKvD,OACP5J,EAASuG,IAAI,UAAYN,EAAKD,KAAKoE,OAAO,CAAExM,OAAQ,cALpC,SAQdoC,EACHuG,IAAI,SAAWN,EAAKD,KACpBoH,eACAhD,OAAO,CACNxM,OAAQ,UACRyI,gBAAgB,EAChBC,YAAa,OAdG,OAgBpB5H,EACEsB,EACGuG,IAAI,SAAWN,EAAKD,KACpBqH,MACAzO,MAAK,SAAC4K,GACDE,OAAOC,KAAKH,EAASI,OAAO0D,QAAU,EACxCT,GAAiB,GAEjBE,GAA0B,OAIlCE,EAAoBhH,GA5BA,uBA8BpBiD,QAAQC,IAAI,gBACR6D,EAAiBhH,KACnBhG,EAASuG,IAAI,SAAWyG,EAAiBhH,KAAKoE,OAAO,CACnDxM,OAAQ,UACRyI,gBAAgB,EAChBC,YAAa,OAGjBuG,GAAiB,GACjBE,GAA0B,GAE1BE,EAAoB,IAzCA,4CAAxB,yDA4CC,CAACvO,EAAKsO,EAAiBhH,MAGxB,qBAAK9C,UAAU,MAAM/C,MAAOA,GAA5B,SACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAUoN,OAAK,EAACC,KAAK,IAAIrI,GAAG,YAC5B,cAAC,IAAD,CACEsI,KAAK,UACLC,OAAQ,WACN,OAAIvO,EAAkB,cAACe,EAAD,IAClB0M,EACK,cAAC,IAAD,CAAUzH,GAAG,qBACX2H,EACF,cAAC,IAAD,CAAU3H,GAAG,cAEb,cAAC/C,EAAD,OAIb,cAAC,IAAD,CACEqL,KAAK,UACLC,OAAQ,WACN,OAAIvO,EAAkB,cAACe,EAAD,IAClB4M,EACK,cAAC,IAAD,CAAU3H,GAAG,cAGlB,cAACE,EAAD,CAAQE,0BAA2BA,OAK3C,cAAC,IAAD,CACEkI,KAAK,mBACLC,OAAQ,WACN,OAAIvO,EAAkB,cAACe,EAAD,IAClB4M,EACK,cAAC,IAAD,CAAU3H,GAAG,cACXyH,EAEP,cAACH,GAAD,CACElH,0BAA2BA,EAC3BU,KAAM+G,IAIH,cAAC,IAAD,CAAU7H,GAAG,SAI1B,cAAC,IAAD,CACEsI,KAAK,YACLC,OAAQ,WACN,OAAIvO,EAAkB,cAACe,EAAD,IAClB4M,EAEA,cAACzE,EAAD,CACE9C,0BAA2BA,EAC3BU,KAAM+G,IAGDJ,EACF,cAAC,IAAD,CAAUzH,GAAG,qBAEb,cAAC,IAAD,CAAUA,GAAG,c,MChIlCwI,IAASD,OACP,cAAC,IAAME,WAAP,UACE,cAAC,IAAD,UACE,cAACjB,GAAD,QAGJkB,SAASC,eAAe,W","file":"static/js/main.492a94d7.chunk.js","sourcesContent":["import * as React from \"react\";\r\n\r\nconst AsyncStatus = {\r\n IDLE: \"idle\",\r\n PENDING: \"pending\",\r\n RESOLVED: \"resolved\",\r\n REJECTED: \"rejected\",\r\n};\r\n\r\nfunction useSafeDispatch(dispatch) {\r\n const mounted = React.useRef(false);\r\n\r\n React.useLayoutEffect(() => {\r\n mounted.current = true;\r\n return () => {\r\n mounted.current = false;\r\n };\r\n }, []);\r\n\r\n return React.useCallback(\r\n (...args) => {\r\n mounted.current && dispatch(...args);\r\n },\r\n [dispatch]\r\n );\r\n}\r\n\r\nconst defaultInitialState = {\r\n status: AsyncStatus.IDLE,\r\n data: null,\r\n error: null,\r\n};\r\n\r\nfunction useAsync(initialState) {\r\n const initialStateRef = React.useRef({\r\n ...defaultInitialState,\r\n ...initialState,\r\n });\r\n const [{ status, data, error }, setState] = React.useReducer(\r\n (s, a) => ({ ...s, ...a }),\r\n initialStateRef.current\r\n );\r\n\r\n const safeSetState = useSafeDispatch(setState);\r\n\r\n const run = React.useCallback(\r\n (promise) => {\r\n if (!promise || !promise.then) {\r\n throw new Error(\r\n `The argument passed to useAsync().run must be a promise. Maybe a function that's passed isn't returning anything?`\r\n );\r\n }\r\n safeSetState({ status: AsyncStatus.PENDING });\r\n return promise.then(\r\n (data) => {\r\n safeSetState({ data, status: AsyncStatus.RESOLVED });\r\n return {\r\n ...data,\r\n success: true,\r\n };\r\n },\r\n (error) => {\r\n safeSetState({ status: AsyncStatus.REJECTED, error });\r\n return {\r\n ...error,\r\n success: false,\r\n };\r\n }\r\n );\r\n },\r\n [safeSetState]\r\n );\r\n\r\n const setData = React.useCallback(\r\n (data) => safeSetState({ data }),\r\n [safeSetState]\r\n );\r\n const setError = React.useCallback(\r\n (error) => safeSetState({ error }),\r\n [safeSetState]\r\n );\r\n const reset = React.useCallback(\r\n () => safeSetState(initialStateRef.current),\r\n [safeSetState]\r\n );\r\n\r\n return {\r\n isIdle: status === AsyncStatus.IDLE,\r\n isLoading: status === AsyncStatus.PENDING,\r\n isError: status === AsyncStatus.REJECTED,\r\n isSuccess: status === AsyncStatus.RESOLVED,\r\n setData,\r\n setError,\r\n error,\r\n status,\r\n data,\r\n run,\r\n reset,\r\n };\r\n}\r\n\r\nexport default useAsync;\r\n","import firebase from \"firebase/app\";\r\nimport \"firebase/auth\";\r\nimport \"firebase/firestore\";\r\nimport \"firebase/database\";\r\nconst firebaseConfig = {\r\n apiKey: \"AIzaSyAXxuq6xTemrSpZ9Q1_EHlOA1Axf4joUSo\",\r\n authDomain: \"chat-application-37557.firebaseapp.com\",\r\n projectId: \"chat-application-37557\",\r\n storageBucket: \"chat-application-37557.appspot.com\",\r\n messagingSenderId: \"448401421505\",\r\n appId: \"1:448401421505:web:e2d9d9826b35dd1c365040\",\r\n databaseURL: \"https://chat-application-37557-default-rtdb.asia-southeast1.firebasedatabase.app\",\r\n};\r\nfirebase.initializeApp(firebaseConfig);\r\nconst auth = firebase.auth();\r\nconst firestore = firebase.firestore();\r\nconst database = firebase.database();\r\nexport { firebase, firestore, auth, database };\r\n","import { CircularProgress } from \"@material-ui/core\";\r\n\r\nexport default function LoadingComponent() {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { React, useState } from \"react\";\r\nimport {\r\n Button,\r\n CssBaseline,\r\n TextField,\r\n Paper,\r\n Grid,\r\n Typography,\r\n Icon,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { Link } from \"react-router-dom\";\r\nimport useAsync from \"./hooks/useAsync\";\r\nimport { firebase, auth } from \"./firebase\";\r\nimport LoadingComponent from \"./LoadingComponent\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n height: \"100vh\",\r\n },\r\n image: {\r\n backgroundImage:\r\n \"url(https://images.unsplash.com/photo-1638008084961-074c14787275?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxfDB8MXxyYW5kb218MHx8fHx8fHx8MTYzODkzMDIwNw&ixlib=rb-1.2.1&q=80&w=1080)\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundColor:\r\n theme.palette.type === \"light\"\r\n ? theme.palette.grey[50]\r\n : theme.palette.grey[900],\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n },\r\n paper: {\r\n margin: theme.spacing(8, 4),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n form: {\r\n width: \"100%\", // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n or: {\r\n textAlign: \"center\",\r\n },\r\n submitGg: {\r\n margin: theme.spacing(2, 0, 2),\r\n background: \"linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)\",\r\n color: \"white\",\r\n },\r\n submitFb: {\r\n margin: theme.spacing(2, 0, 2),\r\n background: \"linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)\",\r\n color: \"white\",\r\n },\r\n}));\r\n\r\nexport default function SignIn() {\r\n const classes = useStyles();\r\n const [email, setEmail] = useState();\r\n const [password, setPassword] = useState();\r\n const { isLoading, run } = useAsync();\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n run(auth.signInWithEmailAndPassword(email, password));\r\n };\r\n const handleSignInGoogle = () => {\r\n const provider = new firebase.auth.GoogleAuthProvider();\r\n run(auth.signInWithRedirect(provider));\r\n };\r\n const handleSignInFacebook = () => {\r\n const provider = new firebase.auth.FacebookAuthProvider();\r\n run(auth.signInWithRedirect(provider));\r\n };\r\n if (isLoading) return ;\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n Sign in\r\n
\r\n {\r\n setEmail(e.target.value);\r\n }}\r\n margin=\"normal\"\r\n required\r\n fullWidth\r\n id=\"email\"\r\n label=\"Email\"\r\n name=\"email\"\r\n autoComplete=\"email\"\r\n autoFocus\r\n />\r\n {\r\n setPassword(e.target.value);\r\n }}\r\n margin=\"normal\"\r\n required\r\n fullWidth\r\n name=\"password\"\r\n label=\"Password\"\r\n type=\"password\"\r\n id=\"password\"\r\n autoComplete=\"current-password\"\r\n />\r\n \r\n Sign In\r\n \r\n or\r\n \r\n \r\n }\r\n className={classes.submitGg}\r\n onClick={handleSignInGoogle}\r\n >\r\n Sign in with Google\r\n \r\n \r\n \r\n }\r\n className={classes.submitFb}\r\n onClick={handleSignInFacebook}\r\n >\r\n Sign in with Facebook\r\n \r\n \r\n \r\n \r\n \r\n \r\n Don't have an account? Sign Up\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import { React, useState } from \"react\";\r\nimport {\r\n Button,\r\n CssBaseline,\r\n TextField,\r\n Paper,\r\n Grid,\r\n Typography,\r\n MenuItem,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { Link } from \"react-router-dom\";\r\nimport md5 from \"md5\";\r\nimport { auth, database } from \"./firebase\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n height: \"100vh\",\r\n },\r\n image: {\r\n backgroundImage:\r\n \"url(https://images.unsplash.com/photo-1638008084961-074c14787275?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxfDB8MXxyYW5kb218MHx8fHx8fHx8MTYzODkzMDIwNw&ixlib=rb-1.2.1&q=80&w=1080)\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundColor:\r\n theme.palette.type === \"light\"\r\n ? theme.palette.grey[50]\r\n : theme.palette.grey[900],\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n },\r\n paper: {\r\n margin: theme.spacing(8, 4),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n form: {\r\n width: \"100%\", // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n or: {\r\n textAlign: \"center\",\r\n },\r\n submitGg: {\r\n margin: theme.spacing(3, 0, 2),\r\n background: \"linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)\",\r\n color: \"white\",\r\n },\r\n submitFb: {\r\n margin: theme.spacing(3, 0, 2),\r\n background: \"linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)\",\r\n color: \"white\",\r\n },\r\n}));\r\n\r\nconst genders = [\r\n {\r\n value: \"Male\",\r\n label: \"Male\",\r\n },\r\n {\r\n value: \"Female\",\r\n label: \"Female\",\r\n },\r\n {\r\n value: \"Others\",\r\n label: \"Others\",\r\n },\r\n];\r\n\r\nexport default function SignUp({ handleChangeAuthAndFilled }) {\r\n const classes = useStyles();\r\n const [email, setEmail] = useState();\r\n const [password, setPassword] = useState();\r\n const [nickname, setNickname] = useState();\r\n const [gender, setGender] = useState(\"Male\");\r\n const [birthday, setBirthday] = useState();\r\n const handleChangeEmail = (e) => {\r\n setEmail(e.target.value);\r\n };\r\n const handleChangePassword = (e) => {\r\n setPassword(e.target.value);\r\n };\r\n const handleChangeNickname = (e) => {\r\n setNickname(e.target.value);\r\n };\r\n const handleChangeGender = (e) => {\r\n setGender(e.target.value);\r\n };\r\n const handleChangeBirthday = (e) => {\r\n setBirthday(e.target.value);\r\n };\r\n let photoURL;\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n const userCredential = await auth.createUserWithEmailAndPassword(\r\n email,\r\n password\r\n );\r\n const uid = userCredential.user.uid;\r\n if (!userCredential.photoURL) {\r\n const hashEmail = md5(email);\r\n photoURL =\r\n \"https://www.gravatar.com/avatar/\" + hashEmail + \"?d=identicon\";\r\n }\r\n const userData = {\r\n uid: uid,\r\n nickname: nickname,\r\n email: email,\r\n gender: gender,\r\n birthday: birthday,\r\n photoURL: photoURL,\r\n inConversation: false,\r\n beingCalled: \"no\",\r\n status: \"Online\",\r\n };\r\n await database.ref(\"users/\" + uid).set(userData);\r\n handleChangeAuthAndFilled(true);\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n Sign up\r\n
\r\n \r\n \r\n \r\n \r\n {genders.map((option) => (\r\n \r\n {option.label}\r\n \r\n ))}\r\n \r\n \r\n \r\n Sign up\r\n \r\n \r\n Back to sign in page\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import { useState, useEffect, useCallback } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport {\r\n Avatar,\r\n Typography,\r\n Button,\r\n List,\r\n ListItem,\r\n ListItemAvatar,\r\n ListItemText,\r\n Divider,\r\n Container,\r\n Modal,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { firebase, auth, database } from \"./firebase\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n textAlign: \"center\",\r\n },\r\n userInfo: {\r\n width: \"100%\",\r\n maxWidth: 300,\r\n },\r\n header: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n },\r\n content: {\r\n marginTop: 50,\r\n },\r\n online: {\r\n color: \"green\",\r\n fontSize: 13,\r\n },\r\n offline: {\r\n color: \"red\",\r\n fontSize: 13,\r\n },\r\n conversation: {\r\n color: \"#F40\",\r\n fontSize: 13,\r\n },\r\n paper: {\r\n position: \"fixed\",\r\n top: 100,\r\n left: 550,\r\n width: 700,\r\n backgroundColor: theme.palette.background.paper,\r\n border: \"1px solid #000\",\r\n boxShadow: theme.shadows[5],\r\n padding: theme.spacing(2, 4, 3),\r\n },\r\n receivedUserMessage: {\r\n background: \"#E4E6EB\",\r\n borderRadius: 20,\r\n padding: 10,\r\n },\r\n sentUserMessage: {\r\n background: \"#0099FF\",\r\n color: \"white\",\r\n borderRadius: 20,\r\n padding: 10,\r\n },\r\n list: {\r\n overflow: \"auto\",\r\n height: 500,\r\n marginBottom: 20,\r\n border: \"1px solid gray\",\r\n },\r\n btnSend: {\r\n background: \"#0099FF\",\r\n color: \"white\",\r\n marginTop: 10,\r\n },\r\n}));\r\n\r\nexport default function ChatRoom({ user }) {\r\n const sentUid = user.uid;\r\n const classes = useStyles();\r\n const [photoURL, setPhotoURL] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [listUser, setListUser] = useState([]);\r\n const [open, setOpen] = useState(false);\r\n const [message, setMessage] = useState(\"\");\r\n const [listMessage, setListMessage] = useState([]);\r\n const [receivedUid, setReceivedUid] = useState(\"\");\r\n console.log(\"receivedUid\", receivedUid);\r\n console.log(\"sentUser\", sentUid);\r\n\r\n const handleInConversationSentUser = useCallback(() => {\r\n database\r\n .ref(\"messages/\")\r\n .orderByChild(\"timestamp\")\r\n .on(\"value\", (snapshot) => {\r\n const listMessageFromDB = Object.keys(snapshot.val()).map(\r\n (messageId) => snapshot.val()[messageId]\r\n );\r\n const messageArray = [];\r\n listMessageFromDB.forEach((message) => {\r\n if (\r\n (message.receivedUser === receivedUid &&\r\n message.sentUser === sentUid) ||\r\n (message.receivedUser === sentUid &&\r\n message.sentUser === receivedUid)\r\n ) {\r\n messageArray.push(message);\r\n }\r\n });\r\n setListMessage(messageArray);\r\n });\r\n }, [receivedUid, sentUid]);\r\n\r\n const handleCloseModal = async () => {\r\n await database.ref(\"users/\" + sentUid).update({ inConversation: false });\r\n await database\r\n .ref(\"users/\" + receivedUid)\r\n .update({ inConversation: false });\r\n setOpen(false);\r\n };\r\n\r\n const handleStatus = (user) => {\r\n if (user.status === \"Online\" && user.inConversation === true) {\r\n return (\r\n \r\n In conversation\r\n \r\n );\r\n } else if (user.status === \"Online\" && user.inConversation === false) {\r\n return Online;\r\n } else {\r\n return Offline;\r\n }\r\n };\r\n\r\n // pass\r\n const handleSignOut = () => {\r\n auth\r\n .signOut()\r\n .then(() => {\r\n alert(\"Sign out successfully\");\r\n })\r\n .catch((error) => {\r\n alert(\r\n `There is something wrong when signing out: ${error}, please try again`\r\n );\r\n });\r\n };\r\n\r\n //pass\r\n const handleSendMessageToDatabase = async () => {\r\n await database.ref(\"messages/\").push({\r\n sentUser: sentUid,\r\n receivedUser: receivedUid,\r\n timestamp: firebase.database.ServerValue.TIMESTAMP,\r\n message: message,\r\n });\r\n setMessage(\"\");\r\n };\r\n\r\n const handleListItemClick = async (receivedUid) => {\r\n await database.ref(\"users/\" + sentUid).update({ inConversation: true });\r\n await database.ref(\"users/\" + receivedUid).update({ inConversation: true });\r\n setReceivedUid(receivedUid);\r\n };\r\n\r\n const handleKeyUp = (e) => {\r\n if (e.keyCode === 13) {\r\n handleSendMessageToDatabase();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n database.ref(\"users/\" + sentUid).on(\"value\", async (snapshot) => {\r\n if (snapshot.val().inConversation) {\r\n if (receivedUid) {\r\n await database\r\n .ref(\"users/\" + receivedUid)\r\n .update({ beingCalledByUid: sentUid });\r\n } else {\r\n setReceivedUid(snapshot.val().beingCalledByUid);\r\n }\r\n setOpen(true);\r\n handleInConversationSentUser();\r\n } else {\r\n setOpen(false);\r\n await database.ref(\"users/\" + sentUid).update({ beingCalledByUid: \"\" });\r\n }\r\n });\r\n database\r\n .ref(\"users/\" + sentUid)\r\n .child(\"beingCalledByUid\")\r\n .on(\"value\", (snapshot) => {\r\n if (!snapshot.val()) {\r\n setReceivedUid(\"\");\r\n }\r\n });\r\n }, [handleInConversationSentUser, receivedUid, sentUid]);\r\n\r\n // load initial list user\r\n useEffect(() => {\r\n database.ref(\"users/\" + sentUid).on(\"value\", (snapshot) => {\r\n if (snapshot.exists()) {\r\n setPhotoURL(snapshot.val().photoURL);\r\n setEmail(snapshot.val().email);\r\n } else {\r\n alert(\"Chat room err: Get Data Current User: No data available\");\r\n }\r\n });\r\n database.ref(\"users\").on(\"value\", (snapshot) => {\r\n const userArray = [];\r\n snapshot.forEach((user) => {\r\n userArray.push(user.val());\r\n });\r\n setListUser(userArray);\r\n });\r\n }, [sentUid]);\r\n\r\n const modalBody = (\r\n
\r\n \r\n {listMessage.map((messageData) => {\r\n if (messageData.sentUser === receivedUid) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {messageData.message}\r\n \r\n }\r\n />\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n {messageData.message}\r\n \r\n }\r\n />\r\n \r\n );\r\n }\r\n })}\r\n \r\n setMessage(e.target.value)}\r\n onKeyUp={(e) => handleKeyUp(e)}\r\n />\r\n \r\n
\r\n );\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleSignOut()}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Sign out\r\n \r\n \r\n \r\n \r\n \r\n List User\r\n {\r\n // eslint-disable-next-line\r\n listUser.map((user) => {\r\n if (user.uid !== sentUid)\r\n return (\r\n handleListItemClick(user.uid)}\r\n key={user.uid}\r\n divider\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n {modalBody}\r\n \r\n
\r\n );\r\n}\r\n","import { React, useState } from \"react\";\r\nimport {\r\n Button,\r\n CssBaseline,\r\n TextField,\r\n Paper,\r\n Grid,\r\n Typography,\r\n MenuItem,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport md5 from \"md5\";\r\nimport { database } from \"./firebase\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n height: \"100vh\",\r\n },\r\n image: {\r\n backgroundImage: \"url(https://source.unsplash.com/random)\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundColor:\r\n theme.palette.type === \"light\"\r\n ? theme.palette.grey[50]\r\n : theme.palette.grey[900],\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n },\r\n paper: {\r\n margin: theme.spacing(8, 4),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n form: {\r\n width: \"100%\", // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n}));\r\nconst genders = [\r\n {\r\n value: \"Male\",\r\n label: \"Male\",\r\n },\r\n {\r\n value: \"Female\",\r\n label: \"Female\",\r\n },\r\n {\r\n value: \"Others\",\r\n label: \"Others\",\r\n },\r\n];\r\nexport default function MoreInformation({ handleChangeAuthAndFilled, user }) {\r\n const classes = useStyles();\r\n const [nickname, setNickname] = useState();\r\n const [gender, setGender] = useState(\"Male\");\r\n const [birthday, setBirthday] = useState();\r\n const handleChangeNickname = (e) => {\r\n setNickname(e.target.value);\r\n };\r\n const handleChangeGender = (e) => {\r\n setGender(e.target.value);\r\n };\r\n const handleChangeBirthday = (e) => {\r\n setBirthday(e.target.value);\r\n };\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n try {\r\n const uid = user.uid;\r\n const email = user.email;\r\n let photoURL = user.photoURL;\r\n if (!photoURL) {\r\n const hashEmail = md5(email);\r\n photoURL =\r\n \"https://www.gravatar.com/avatar/\" + hashEmail + \"?d=identicon\";\r\n }\r\n const userData = {\r\n uid: uid,\r\n email: email,\r\n nickname: nickname,\r\n gender: gender,\r\n birthday: birthday,\r\n photoURL: photoURL,\r\n inConversation: false,\r\n beingCalled: \"no\",\r\n };\r\n await database.ref(\"users/\" + uid).update(userData);\r\n handleChangeAuthAndFilled(true);\r\n } catch (error) {\r\n alert(\"Sign in err: \" + error.code + \" \" + error.message);\r\n }\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n Please fill in more information\r\n \r\n
\r\n \r\n \r\n {genders.map((option) => (\r\n \r\n {option.label}\r\n \r\n ))}\r\n \r\n \r\n \r\n Submit\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import { useState, useEffect } from \"react\";\nimport { Redirect, Switch, Route } from \"react-router-dom\";\nimport SignIn from \"./SignIn\";\nimport SignUp from \"./SignUp\";\nimport ChatRoom from \"./ChatRoom\";\nimport MoreInformation from \"./MoreInformation\";\nimport LoadingComponent from \"./LoadingComponent\";\nimport useAsync from \"./hooks/useAsync\";\nimport { auth, database } from \"./firebase\";\n\nconst style = {\n height: \"100vh\",\n width: \"100%\",\n};\n\nexport default function App() {\n const [authenticated, setAuthenticated] = useState(false);\n const [authenticatedAndFilled, setAuthenticatedAndFilled] = useState(false);\n const [userFirebaseData, setUserFirebaseData] = useState({});\n const { isLoading, run } = useAsync();\n\n const handleChangeAuthAndFilled = (value) => {\n setAuthenticatedAndFilled(value);\n };\n\n useEffect(() => {\n auth.onAuthStateChanged(async (user) => {\n if (user) {\n console.log(\"user log in\");\n database.ref(\".info/connected\").on(\"value\", (snap) => {\n if (snap.val() === true) {\n database.ref(\"/users/\" + user.uid).update({ status: \"Online\" });\n }\n });\n await database\n .ref(\"users/\" + user.uid)\n .onDisconnect()\n .update({\n status: \"Offline\",\n inConversation: false,\n beingCalled: \"no\",\n });\n run(\n database\n .ref(\"users/\" + user.uid)\n .get()\n .then((snapshot) => {\n if (Object.keys(snapshot.val()).length <= 1) {\n setAuthenticated(true);\n } else {\n setAuthenticatedAndFilled(true);\n }\n })\n );\n setUserFirebaseData(user);\n } else {\n console.log(\"user log out\");\n if (userFirebaseData.uid) {\n database.ref(\"users/\" + userFirebaseData.uid).update({\n status: \"Offline\",\n inConversation: false,\n beingCalled: \"no\",\n });\n }\n setAuthenticated(false);\n setAuthenticatedAndFilled(false);\n //refactor this to avoid garbage data\n setUserFirebaseData({});\n }\n });\n }, [run, userFirebaseData.uid]);\n\n return (\n
\n \n \n {\n if (isLoading) return ;\n if (authenticated) {\n return ;\n } else if (authenticatedAndFilled) {\n return ;\n } else {\n return ;\n }\n }}\n />\n {\n if (isLoading) return ;\n if (authenticatedAndFilled) {\n return ;\n } else {\n return (\n \n );\n }\n }}\n />\n {\n if (isLoading) return ;\n if (authenticatedAndFilled) {\n return ;\n } else if (authenticated) {\n return (\n \n );\n } else {\n return ;\n }\n }}\n />\n {\n if (isLoading) return ;\n if (authenticatedAndFilled) {\n return (\n \n );\n } else if (authenticated) {\n return ;\n } else {\n return ;\n }\n }}\n />\n \n
\n );\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport App from \"./App\";\nimport \"./index.css\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}