VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /opt/mattermost/client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/mattermost/client/3461.b2536127835134a39eb3.js.map
{"version":3,"file":"3461.b2536127835134a39eb3.js","mappings":"8NAuBA,MAAMA,EAAaC,IAAmD,IAAlD,IAACC,EAAG,UAAEC,EAAS,QAAEC,GAAeH,EAChD,MAAM,cAACI,IAAiBC,EAAAA,EAAAA,WAExB,OACIC,IAAAA,cAAA,OAAKJ,UAAWK,IAAW,gBAAiBL,IACxCI,IAAAA,cAACE,EAAAA,KAAI,CACD,cAAY,cACZL,QAASA,EACTM,GAAIR,GAEJK,IAAAA,cAAA,QACII,GAAG,mBACHR,UAAU,yBACVS,MAAOP,EAAc,CAACM,GAAI,qBAAsBE,eAAgB,gBAEpEN,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,kBACHE,eAAe,UAGrB,EAEZb,EAAAe,UAAA,CAhCEb,IAAGc,IAAAA,OAEHb,UAASa,IAAAA,OAKTZ,QAAOY,IAAAA,MA0BXhB,EAAWiB,aAAe,CACtBf,IAAK,KAGT,S,+EC7BA,QAbA,SAAiCgB,GAC7B,OAAQC,IACJ,MAAMC,GAAcC,EAAAA,EAAAA,KAEpB,OACId,IAAAA,cAACW,EAAgBI,OAAAC,OAAA,CACbH,YAAaA,GACTD,GACN,CAGd,C,iFCHO,MAAMK,EAAkBA,CAACC,EAAgCC,IAA2BA,GAAgBD,QAAAA,EAAkCE,OAAOC,UAErI,SAASP,IACpB,MAAMQ,GAAQC,EAAAA,EAAAA,MACPC,EAAQL,IAAgBM,EAAAA,EAAAA,KAwB/B,OAtBmBC,EAAAA,EAAAA,UAAQ,KAAM,IAAAC,EAAAC,EAAAC,EAC7B,MACI,CACIC,MAAO,CACHC,aAAcT,EAAMQ,MAAMC,aAAed,EAA4B,QAAbU,EAACH,EAAOM,aAAK,IAAAH,OAAA,EAAZA,EAAcK,cAAeb,GACtFc,mBAAoBX,EAAMQ,MAAMG,oBAEpCC,SAAU,CACNC,QAASb,EAAMY,SAASC,QAAUlB,EAA+B,QAAhBW,EAACJ,EAAOU,gBAAQ,IAAAN,OAAA,EAAfA,EAAiBO,QAAShB,GAC5EiB,cAAed,EAAMY,SAASE,eAElCC,MAAO,CACHC,OAAQhB,EAAMe,MAAMC,OAASrB,EAA4B,QAAbY,EAACL,EAAOa,aAAK,IAAAR,OAAA,EAAZA,EAAcS,OAAQnB,GAGnEoB,cAAejB,EAAMe,MAAME,cAC3BC,YAAalB,EAAMe,MAAMG,aAEhC,GAEN,CAAClB,EAAOE,EAAQL,GAGvB,C,0FCnCA,MAAMsB,EAAyB/C,IAA6D,IAA5D,sBAACgD,EAAqB,SAAEC,EAAW,cAAoBjD,EACnF,MAAMkD,EAAcF,GAChB1C,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,uBACHE,eAAe,4EAIvB,OACIN,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,MAAII,GAAG,aAAauC,GACpB3C,IAAAA,cAAA,MACII,GAAG,mBACHR,UAAU,gBAETgD,GAEN,EAETH,EAAAjC,UAAA,CAtBEkC,sBAAqBjC,IAAAA,QAwBzB,QAAeT,IAAAA,KAAWyC,E,+vBCkCX,MAAMI,UAAuB7C,IAAAA,cAUxC8C,WAAAA,CAAYlC,GACRmC,MAAMnC,GAAOoC,EAAA,uBAgBCC,GACVA,EApFU,QAuFPC,KAAKC,IAAIF,KACnBD,EAAA,yBAEkB,CAACI,EAAeC,IACxBH,KAAKI,KAAKF,EAAQC,KAC5BL,EAAA,qBAEc,KACX,MAAM,WAACO,EAAU,YAAEC,GAAeC,KAAKC,OACjC,SAACC,EAAQ,YAAEC,EAAW,WAAEC,EAAU,aAAEC,EAAY,WAAEC,GAAcN,KAAK7C,MAErEoD,EAAOP,KAAKO,KAAKC,QACjBC,EAAcT,KAAKU,eAAeP,GAElCQ,EAAWJ,EAAMK,aAAeL,EAAMM,aAAeJ,IACxCF,EAAMO,UAAYH,IAElBZ,GAAgBD,GAC/BE,KAAKe,SAAS,CAACjB,YAAY,IACvBkB,UAOI,SANMd,IAENF,KAAKe,SAAS,CACVjB,YAAY,IAGG,IAAfM,EAIA,YAHAJ,KAAKe,SAAS,CACVhB,aAAa,IAKrB,MAAMkB,EAAgBjB,KAAKkB,iBAAiBd,EAAYC,GAEpDC,IAAeW,GACfjB,KAAKe,SAAS,CACVhB,aAAa,GAErB,GAEZ,IACHR,EAAA,4BAEsB4B,IAASnB,KAAKoB,aAlId,MAmEnBpB,KAAKC,MAAQ,CACTH,YAAY,EACZC,aAAa,GAEjBC,KAAKO,KAAOhE,IAAAA,WAChB,CAEA8E,iBAAAA,GAA0B,IAAAC,EACL,QAAjBA,EAAAtB,KAAKO,KAAKC,eAAO,IAAAc,GAAjBA,EAAmBC,iBAAiB,SAAUvB,KAAKwB,qBACvD,CAEAC,oBAAAA,GAA6B,IAAAC,EACR,QAAjBA,EAAA1B,KAAKO,KAAKC,eAAO,IAAAkB,GAAjBA,EAAmBC,oBAAoB,SAAU3B,KAAKwB,qBAC1D,CAoDAI,MAAAA,GACI,MAAM,SAACC,EAAQ,iBAAEC,EAAgB,WAAEC,EAAU,YAAEC,GAAehC,KAAK7C,OAC7D,YAAC4C,EAAW,WAAED,GAAcE,KAAKC,MACjCgC,GAAclC,GAAeD,EACnC,OACIvD,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,OACIJ,UAAS,mBAAA+F,OAAqBH,GAC9BI,IAAKnC,KAAKO,MAETsB,EACAI,GACG1F,IAAAA,cAAC6F,EAAAA,EAAa,CACVC,MAAOL,EACPM,QAAQ,OAGdL,GAAcH,GAIhC,EACHvC,EAnGoBH,EAAc,eAGT,CAClBe,YA5Dc,IA6Dd2B,iBAAkB,GAClBC,WAAY,GACZC,YAAa,CAAC,I,mGCjEP,SAASO,EAAapF,GACjC,MAAM,cAACd,IAAiBC,EAAAA,EAAAA,WACxB,OACIC,IAAAA,cAAA,OAAUY,EACNZ,IAAAA,cAAA,OACIiG,MAAM,OACNC,OAAO,OACPC,QAAQ,YACRL,MAAOA,EACPM,KAAK,MACL,aAAYtG,EAAc,CAACM,GAAI,qBAAsBE,eAAgB,eAErEN,IAAAA,cAAA,KAAGqG,UAAU,yDACTrG,IAAAA,cAAA,QAAMsG,EAAE,oVAK5B,CAEA,MAAMR,EAAuB,CACzBS,SAAU,UACVC,SAAU,UACVC,eAAgB,QAChBC,iBAAkB,S,0BCVtB,MAAMC,EAAiBjH,IAMV,IANW,KACpBkH,EAAI,YACJC,EAAW,QACXC,EAAO,mBACPC,EAAkB,oBAClBC,GACItH,EACJ,MAAMuH,GAAOlH,EAAAA,EAAAA,WAEPmH,GAAkBC,EAAAA,EAAAA,cAAaC,IACjCA,EAAEC,iBACFR,EAAYD,EAAK,GAClB,CAACC,EAAaD,IAgBjB,IAAIU,EAEAA,EADAR,EAEI9G,IAAAA,cAAA,QACIJ,UAAU,gDACVS,MAAO4G,EAAKnH,cAAc,CAACM,GAAI,wBAAyBE,eAAgB,mBAK5EN,IAAAA,cAAA,QACIJ,UAAU,4CACVS,MAAO4G,EAAKnH,cAAc,CAACM,GAAI,wBAAyBE,eAAgB,qBAKpF,MAAMiH,EAAWX,EAAKY,mBAAqBT,IAAyBH,EAAKY,mBAAqBR,EAE9F,OACIhH,IAAAA,cAAA,OAAKJ,UAAU,mBAjCVgH,EAAKhE,YAKN5C,IAAAA,cAACyH,EAAAA,EAAW,CACRpH,MAAOuG,EAAKhE,aAEZ5C,IAAAA,cAACgG,EAAY,CAACpG,UAAU,qBAPrB,KAkCPI,IAAAA,cAAA,KACI0H,KAAK,IACLtH,GAAIuH,EAAAA,GAAmBf,EAAKgB,cAC5B/H,QAAS0H,EAAUL,OAAkBW,EACrCjI,UAAW2H,EAAU,GAAK,YAE1BvH,IAAAA,cAAA,QAAMJ,UAAU,yBAAyBgH,EAAKgB,eAC5ChB,EAAKY,mBACHxH,IAAAA,cAAA,KACIJ,UAAU,mBACVS,MAAO4G,EAAKnH,cAAc,CAACM,GAAI,2BAA4BE,eAAgB,mBAElFiH,GAAWD,GAEd,EAEZX,EAAAnG,UAAA,CAxEEqG,YAAWpG,IAAAA,KAAAqH,WACXhB,QAAOrG,IAAAA,KAAAqH,WACPf,mBAAkBtG,IAAAA,KAAAqH,WAClBd,oBAAmBvG,IAAAA,KAAAqH,YAuEvB,QAAe9H,IAAAA,KAAW2G,G,yZCpBX,MAAMoB,UAAmB/H,IAAAA,cACpC8C,WAAAA,CAAYlC,GACRmC,MAAMnC,GAAOoC,EAAA,uBA4BAyB,UACb,MAAM,YAACuD,GAAevE,KAAKC,OACrB,QAACuE,GAAWxE,KAAK7C,MAEjBsH,QAAiBD,EAAQE,SAASH,EAvElB,IAuE+C,GAGhEE,EAASE,OAAWF,EAASE,iBAAiBC,OAC/C5E,KAAKe,UAAU8D,IAAS,CAEhBN,YAAaM,EAAUN,YAAc,KAIjD,IACHhF,EAAA,wBAEiByB,UACd,MAAM,iBAAC8D,GAAoB9E,KAAK7C,MAChC6C,KAAKe,SAAS,CAACgE,cAAe5B,EAAKxG,KAEnC,MAAM,KAACqI,EAAI,MAAEL,SAAe3E,KAAK7C,MAAMqH,QAAQS,cAAc9B,EAAKxG,GAAIqD,KAAK7C,MAAM+H,eACjF,GAAIF,QAA+BZ,IAAvBpE,KAAK7C,MAAMuB,QACnBsB,KAAK7C,MAAMuB,QAAQyG,KAAK,IAADjD,OAAKiB,EAAKiC,KAAI,cAAAlD,OAAamD,EAAAA,GAAUC,uBACzD,GAAIX,EAAO,CACd,IAAIY,EAAWZ,EAAMrC,QA3FO,qCA6FxBqC,EAAMa,kBAEFD,OADqBnB,IAArBU,GAAkCA,EAAiBW,SAASJ,EAAAA,GAAUK,0BAElEnJ,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,+CACHE,eAAgB,6GAChB8I,OAAQ,CACJC,EAAIC,GACAtJ,IAAAA,cAACE,EAAAA,KAAI,CAACC,GAAG,yCACJmJ,MAQjBtJ,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,qCACHE,eAAe,kEAM/BmD,KAAKe,SAAS,CACV4D,MAAOY,EACPR,cAAe,IAEvB,KACHxF,EAAA,0BAEoBoE,IACjBA,EAAEC,kBACFkC,EAAAA,EAAAA,IAAW,cAAe,iBAC1BC,EAAAA,EAAAA,IAAuB,SAAS,IACnCxG,EAAA,mBAEaoE,IACVA,EAAEC,iBAEF5D,KAAKe,SAAS,CACV4D,MAAO,MACT,IAhGF3E,KAAKC,MAAQ,CACT8E,cAAe,GACfJ,MAAO,KACPqB,gBAAgB,EAChBzB,YAAa,EACb0B,qBAAsB,GAE9B,CAEA,+BAAOC,CAAyB/I,EAAc8C,GAC1C,OAAI9C,EAAMgJ,cAAcC,SAAWnG,EAAMgG,qBAAqBG,OACnD,CACHH,qBAAsB9I,EAAMgJ,cAAcE,MAAM,EArDlC,GAqDsDpG,EAAMsE,cAG3E,IACX,CAEAlD,iBAAAA,IACIyE,EAAAA,EAAAA,IAAW,SAAU,qBAAsB,CAACQ,OAAQtG,KAAK7C,MAAM+H,gBAC/DlF,KAAKuG,sBAC+BnC,IAAhCpE,KAAK7C,MAAM2H,kBACX9E,KAAK7C,MAAMqH,QAAQgC,kBAAkBxG,KAAK7C,MAAM2H,iBAAiB2B,MAAM,KAE/E,CA2EA7E,MAAAA,GACI,MAAM,YAAC2C,EAAW,qBAAE0B,GAAwBjG,KAAKC,OAC3C,mBACFyG,EAAkB,gBAClBC,EAAe,sBACf1H,EAAqB,eACrB2H,EAAc,SACd1H,EAAQ,eACR2H,EAAc,mBACdvD,EAAkB,oBAClBC,EAAmB,gBACnBuD,EAAe,QACfC,EAAO,YACPC,EACA5J,aACIwB,OACIC,OAAQoI,KAGhBjH,KAAK7C,MAGH+J,EAAuBH,IAAYC,GADfC,GAAmB,EAG7C,IAAIE,EACJ,GAAInH,KAAKC,MAAM8E,cACXoC,EAAc5K,IAAAA,cAAC6F,EAAAA,EAAa,WACzB,GAAIpC,KAAKC,MAAM0E,MAClBwC,EACI5K,IAAAA,cAAA,OAAKJ,UAAU,mBACXI,IAAAA,cAAA,OAAKJ,UAAW,wBACZI,IAAAA,cAAA,OAAKJ,UAAU,iBAAiB6D,KAAKC,MAAM0E,cAIpD,GAAI+B,EACPS,EACI5K,IAAAA,cAAA,OAAKJ,UAAU,mBACXI,IAAAA,cAAA,OAAKJ,UAAW,wBACZI,IAAAA,cAAA,OAAKJ,UAAU,iBACXI,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,qCACHE,eAAe,yFAMhC,CACH,IAAIuK,EAA4B,GAChCnB,EAAqBoB,SAASC,KACrBA,EAAavD,mBAAqBT,IAAyBgE,EAAavD,mBAAqBR,IAC9F6D,EAAqBjC,KACjB5I,IAAAA,cAAC2G,EAAc,CACXqE,IAAK,QAAUD,EAAalC,KAC5BjC,KAAMmE,EACNlE,YAAapD,KAAKyD,gBAClBJ,QAASrD,KAAKC,MAAM8E,gBAAkBuC,EAAa3K,GACnD2G,mBAAoBA,EACpBC,oBAAqBA,IAGjC,IAGgC,IAAhC6D,EAAqBhB,SAAiBS,GAAkBF,GACxDS,EACI7K,IAAAA,cAAA,OAAKJ,UAAU,uBACXI,IAAAA,cAAA,WACK2K,EACG3K,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,4BACHE,eAAe,iFAGnBN,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,sCACHE,eAAe,wGAMI,IAAhCuK,EAAqBhB,SAC5BgB,EACI7K,IAAAA,cAAA,OAAKJ,UAAU,uBACXI,IAAAA,cAAA,WACIA,IAAAA,cAACiL,EAAAA,EAAoB,CAACC,YAAa,CAACC,EAAAA,GAAYC,cAC5CpL,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,sCACHE,eAAe,uGAGvBN,IAAAA,cAACiL,EAAAA,EAAoB,CACjBC,YAAa,CAACC,EAAAA,GAAYC,aAC1BC,QAAQ,GAERrL,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,4BACHE,eAAe,qFAQvCsK,EACI5K,IAAAA,cAAA,OACII,GAAG,yBACHR,UAAU,mBAEVI,IAAAA,cAAA,OAAKJ,UAAU,0BACXI,IAAAA,cAAA,UACIA,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,wBACHE,eAAe,0BAGvBN,IAAAA,cAACsL,EAAAA,EAAmB,OAExBtL,IAAAA,cAAC6C,EAAc,CACXc,SAAUF,KAAKuG,eACfxE,WAAW,kBACX3B,WAAY0G,EACZzG,aAzQM,GA0QNF,YAAa,IACbG,WAAYiE,EACZvC,YAAa,CAAC8F,QAAS,MAAOrF,OAAQ,SAErC2E,GAIjB,CAEA,MAAMW,GAAcb,GAChB3K,IAAAA,cAACiL,EAAAA,EAAoB,CAACC,YAAa,CAACC,EAAAA,GAAYC,cAC5CpL,IAAAA,cAAA,OACIJ,UAAU,gBACVkG,MAAO,CAAC2F,UAAW,UAEnBzL,IAAAA,cAACE,EAAAA,KAAI,CACDE,GAAG,oBACHD,GAAG,eACHN,QAASA,KAAM0J,EAAAA,EAAAA,IAAW,cAAe,qBACzC3J,UAAU,qBAEVI,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,mBACHE,eAAe,qBAOnC,IAAIoL,EAoBAC,EAsBJ,OAzCKC,EAAAA,OACDF,EACI1L,IAAAA,cAACiL,EAAAA,EAAoB,CAACC,YAAa,CAACC,EAAAA,GAAYU,gBAC5C7L,IAAAA,cAAA,OAAKJ,UAAU,kBACXI,IAAAA,cAACE,EAAAA,KAAI,CACDC,GAAG,iBACHP,UAAU,oBACVC,QAASA,KAAM0J,EAAAA,EAAAA,IAAW,cAAe,yBAEzCvJ,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,6BACHE,eAAe,6BAUnCqL,EADAlI,KAAKC,MAAM0E,MACIpI,IAAAA,cAACP,EAAAA,EAAU,CAACI,QAAS4D,KAAKqI,aAClCzB,EACQrK,IAAAA,cAACP,EAAAA,EAAU,MAGtBO,IAAAA,cAAA,OAAKJ,UAAU,iBACXI,IAAAA,cAAA,KACI0H,KAAK,IACLtH,GAAG,SACHP,QAAS4D,KAAKsI,mBAEd/L,IAAAA,cAACgM,EAAAA,EAAU,MACXhM,IAAAA,cAACO,EAAAA,iBAAgB,CACbH,GAAG,oBACHE,eAAe,aAO/BN,IAAAA,cAAA,WACIA,IAAAA,cAACiM,EAAAA,QAAe,MACfN,EACD3L,IAAAA,cAAA,OAAKJ,UAAU,aACXI,IAAAA,cAAA,OACIJ,UAAW,iDAEXI,IAAAA,cAAA,OACIkM,IAAK,mBACLtM,UAAU,mBACVuM,IAAKC,IAETpM,IAAAA,cAACyC,EAAAA,EAAsB,CACnBC,sBAAuBA,EACvBC,SAAUA,IAEbiI,EACAY,EACAE,IAKrB,ECzUJ,SAAeW,EAAAA,EAAAA,SACXC,EAAAA,YACAC,EAAAA,EAAAA,UAxCJ,SAAyB7I,GACrB,MAAM8I,GAASC,EAAAA,EAAAA,IAAU/I,GACnBgJ,GAAcC,EAAAA,EAAAA,IAAejJ,GAC7BkJ,EAAoB7L,OAAOqI,QAAOyD,EAAAA,EAAAA,IAAmBnJ,IACrDoJ,GAAUC,EAAAA,EAAAA,IAAWrJ,GAErBsJ,GAAeC,EAAAA,EAAAA,IAAwBvJ,GACvC8G,GAAU0C,EAAAA,EAAAA,IAAeJ,GACzBrC,EAA8C,UAAhCuC,aAAY,EAAZA,EAAcG,eAElC,MAAO,CACHxE,cAAe+D,EAAYtM,GAC3BmI,iBAAkBmE,EAAYU,OAAS,GACvCjD,oBAAoBkD,EAAAA,EAAAA,GAAQX,EAAYU,OACxC1K,sBAAuB8J,EAAOc,sBAC9BjD,eAAgBuC,GAAqBA,EAAkB/C,OAAS,EAChED,eAAe2D,EAAAA,EAAAA,IAAuB7J,EAAOgJ,EAAYc,QACzD7K,SAAU6J,EAAOiB,SACjBnD,gBAAgBoD,EAAAA,EAAAA,IAAsBhK,EAAO,CAACiK,WAAYxC,EAAAA,GAAYC,cACtEhB,iBAAiBsD,EAAAA,EAAAA,IAAsBhK,EAAO,CAACiK,WAAYxC,EAAAA,GAAYU,gBACvE9E,oBAAoB2G,EAAAA,EAAAA,IAAsBhK,EAAO,CAACiK,WAAYxC,EAAAA,GAAYyC,oBAC1E5G,qBAAqB0G,EAAAA,EAAAA,IAAsBhK,EAAO,CAACiK,WAAYxC,EAAAA,GAAY0C,qBAC3EtD,gBAAiB7G,EAAMoK,SAASzL,MAAM0L,YAAc,EACpDvD,UACAC,cAER,IAEA,SAA4BuD,GACxB,MAAO,CACH/F,SAASgG,EAAAA,EAAAA,oBAAmB,CACxB9F,SAAQ,KACR8B,kBAAiB,KACjBvB,cAAaA,EAAAA,IACdsF,GAEX,IAKIE,EAAAA,EAHJ,CAIEnG,E,qEChEa,SAASiE,IACpB,MAAM,cAAClM,IAAiBC,EAAAA,EAAAA,WACxB,OACIC,IAAAA,cAAA,KACIJ,UAAU,yBACVS,MAAOP,EAAc,CAACM,GAAI,uBAAwBE,eAAgB,iBAG9E,C","sources":["webpack://mattermost-webapp/./src/components/common/back_button.tsx","webpack://mattermost-webapp/./src/components/common/hocs/cloud/with_use_get_usage_deltas.tsx","webpack://mattermost-webapp/./src/components/common/hooks/useGetUsageDeltas.ts","webpack://mattermost-webapp/./src/components/common/site_name_and_description.tsx","webpack://mattermost-webapp/./src/components/common/infinite_scroll.tsx","webpack://mattermost-webapp/./src/components/widgets/icons/team_info_icon.tsx","webpack://mattermost-webapp/./src/components/select_team/components/select_team_item.tsx","webpack://mattermost-webapp/./src/components/select_team/select_team.tsx","webpack://mattermost-webapp/./src/components/select_team/index.ts","webpack://mattermost-webapp/./src/components/widgets/icons/fa_logout_icon.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {Link} from 'react-router-dom';\n\ntype Props = {\n\n    /**\n     * URL to return to\n     */\n    url: string;\n\n    className?: string;\n\n    /**\n     * onClick handler when user clicks back button\n     */\n    onClick?: React.EventHandler<React.MouseEvent>;\n}\n\nconst BackButton = ({url, className, onClick}: Props): JSX.Element => {\n    const {formatMessage} = useIntl();\n\n    return (\n        <div className={classNames('signup-header', className)}>\n            <Link\n                data-testid='back_button'\n                onClick={onClick}\n                to={url}\n            >\n                <span\n                    id='back_button_icon'\n                    className='fa fa-1x fa-angle-left'\n                    title={formatMessage({id: 'generic_icons.back', defaultMessage: 'Back Icon'})}\n                />\n                <FormattedMessage\n                    id='web.header.back'\n                    defaultMessage='Back'\n                />\n            </Link>\n        </div>\n    );\n};\nBackButton.defaultProps = {\n    url: '/',\n};\n\nexport default BackButton;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {ComponentType} from 'react';\n\nimport useGetUsageDeltas from 'components/common/hooks/useGetUsageDeltas';\n\nfunction withUseGetUsageDelta<T>(WrappedComponent: ComponentType<T>) {\n    return (props: T) => {\n        const usageDeltas = useGetUsageDeltas();\n\n        return (\n            <WrappedComponent\n                usageDeltas={usageDeltas}\n                {...props}\n            />\n        );\n    };\n}\n\nexport default withUseGetUsageDelta;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useMemo} from 'react';\n\nimport type {CloudUsage} from '@mattermost/types/cloud';\n\nimport useGetLimits from './useGetLimits';\nimport useGetUsage from './useGetUsage';\n\n// Returns an object of type CloudUsage with the values being the delta between the limit, and the actual usage of this installation.\n// A value < 0 means that they are NOT over the limit. A value > 0 means they've exceeded that limit\n// 2 teams used, minus 1 team limit = value > 0, limit exceeded\n// 10MB files used, minus 1000MB limit = value < 0, limit not exceeded.\n// etc.\n// withBackupValue will set the limit arbitrarily high in the event that the limit isn't set\nexport const withBackupValue = (maybeLimit: number | undefined, limitsLoaded: boolean) => (limitsLoaded ? (maybeLimit ?? Number.MAX_VALUE) : Number.MAX_VALUE);\n\nexport default function useGetUsageDeltas(): CloudUsage {\n    const usage = useGetUsage();\n    const [limits, limitsLoaded] = useGetLimits();\n\n    const usageDelta = useMemo(() => {\n        return (\n            {\n                files: {\n                    totalStorage: usage.files.totalStorage - withBackupValue(limits.files?.total_storage, limitsLoaded),\n                    totalStorageLoaded: usage.files.totalStorageLoaded,\n                },\n                messages: {\n                    history: usage.messages.history - withBackupValue(limits.messages?.history, limitsLoaded),\n                    historyLoaded: usage.messages.historyLoaded,\n                },\n                teams: {\n                    active: usage.teams.active - withBackupValue(limits.teams?.active, limitsLoaded),\n\n                    // cloudArchived doesn't count against usage, but we pass the value along for convenience\n                    cloudArchived: usage.teams.cloudArchived,\n                    teamsLoaded: usage.teams.teamsLoaded,\n                },\n            }\n        );\n    }, [usage, limits, limitsLoaded]);\n\n    return usageDelta;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\n\ntype Props = {\n    customDescriptionText?: string;\n    siteName: string | undefined;\n};\nconst SiteNameAndDescription = ({customDescriptionText, siteName = 'Mattermost'}: Props) => {\n    const description = customDescriptionText || (\n        <FormattedMessage\n            id='web.root.signup_info'\n            defaultMessage='All team communication in one place, searchable and accessible anywhere'\n        />\n    );\n\n    return (\n        <>\n            <h1 id='site_name'>{siteName}</h1>\n            <h3\n                id='site_description'\n                className='color--light'\n            >\n                {description}\n            </h3>\n        </>\n    );\n};\n\nexport default React.memo(SiteNameAndDescription);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport debounce from 'lodash/debounce';\nimport React from 'react';\nimport type {CSSProperties} from 'react';\n\nimport LoadingScreen from 'components/loading_screen';\n\nconst SCROLL_BUFFER = 100;\nconst DEBOUNCE_WAIT_TIME = 200;\n\ntype Props = {\n    children: React.ReactNode;\n\n    /**\n     * Function that is called to load more items\n     */\n    callBack: () => void;\n\n    /**\n     * Message to display when all the data has been scrolled through\n     */\n    endOfDataMessage?: string;\n\n    /**\n     * A wrapper class to define styling of the infinite scroll\n     */\n    styleClass?: string;\n\n    /**\n     * A number that determines how far the scroll is near the bottom before\n     * loading more items. The bigger this value the more items will be loaded\n     * much earlier as you scroll to the bottom.\n     */\n    bufferValue: number;\n\n    /**\n     * The total number of items to be scrolled through\n     */\n    totalItems: number;\n\n    /**\n     * The number of items to load in a single fetch\n     */\n    itemsPerPage: number;\n\n    /**\n     * The current page that has been scrolled to\n     */\n    pageNumber: number;\n\n    /**\n     * Optional style object that's passed on to the underlying loader\n     * component\n     */\n\n    loaderStyle?: CSSProperties;\n};\n\ntype State = {\n    isFetching: boolean;\n    isEndofData: boolean;\n};\n\nexport default class InfiniteScroll extends React.PureComponent<Props, State> {\n    node: React.RefObject<HTMLDivElement>;\n\n    static defaultProps = {\n        bufferValue: SCROLL_BUFFER,\n        endOfDataMessage: '',\n        styleClass: '',\n        loaderStyle: {},\n    };\n\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            isFetching: false,\n            isEndofData: false,\n        };\n        this.node = React.createRef();\n    }\n\n    componentDidMount(): void {\n        this.node.current?.addEventListener('scroll', this.debounceHandleScroll);\n    }\n\n    componentWillUnmount(): void {\n        this.node.current?.removeEventListener('scroll', this.debounceHandleScroll);\n    }\n\n    validateBuffer = (buffer: number): number => {\n        if (buffer < SCROLL_BUFFER) {\n            return SCROLL_BUFFER;\n        }\n        return Math.abs(buffer);\n    };\n\n    getAmountOfPages = (total: number, freq: number): number => {\n        return Math.ceil(total / freq);\n    };\n\n    handleScroll = (): void => {\n        const {isFetching, isEndofData} = this.state;\n        const {callBack, bufferValue, totalItems, itemsPerPage, pageNumber} = this.props;\n\n        const node = this.node.current;\n        const validBuffer = this.validateBuffer(bufferValue);\n\n        const toScroll = node!.scrollHeight - node!.clientHeight - validBuffer;\n        const nearBottom = node!.scrollTop > toScroll;\n\n        if (nearBottom && !isEndofData && !isFetching) {\n            this.setState({isFetching: true},\n                async () => {\n                    await callBack();\n\n                    this.setState({\n                        isFetching: false,\n                    });\n\n                    if (totalItems === 0) {\n                        this.setState({\n                            isEndofData: true,\n                        });\n                        return;\n                    }\n\n                    const amountOfPages = this.getAmountOfPages(totalItems, itemsPerPage);\n\n                    if (pageNumber === amountOfPages) {\n                        this.setState({\n                            isEndofData: true,\n                        });\n                    }\n                });\n        }\n    };\n\n    debounceHandleScroll = debounce(this.handleScroll, DEBOUNCE_WAIT_TIME);\n\n    render(): React.ReactNode {\n        const {children, endOfDataMessage, styleClass, loaderStyle} = this.props;\n        const {isEndofData, isFetching} = this.state;\n        const showLoader = !isEndofData && isFetching; // show loader if fetching and end of data is not reached.\n        return (\n            <>\n                <div\n                    className={`infinite-scroll ${styleClass}`}\n                    ref={this.node}\n                >\n                    {children}\n                    {showLoader && (\n                        <LoadingScreen\n                            style={loaderStyle}\n                            message=' '\n                        />\n                    )}\n                    {!showLoader && endOfDataMessage}\n                </div>\n            </>\n        );\n    }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {CSSProperties} from 'react';\nimport {useIntl} from 'react-intl';\n\nexport default function TeamInfoIcon(props: React.HTMLAttributes<HTMLSpanElement>) {\n    const {formatMessage} = useIntl();\n    return (\n        <span {...props}>\n            <svg\n                width='100%'\n                height='100%'\n                viewBox='0 0 20 20'\n                style={style}\n                role='img'\n                aria-label={formatMessage({id: 'generic_icons.info', defaultMessage: 'Info Icon'})}\n            >\n                <g transform='matrix(1.17647,0,0,1.17647,-1.55431e-15,-1.00573e-14)'>\n                    <path d='M8.5,0C3.797,0 0,3.797 0,8.5C0,13.203 3.797,17 8.5,17C13.203,17 17,13.203 17,8.5C17,3.797 13.203,0 8.5,0ZM10,8.5C10,7.672 9.328,7 8.5,7C7.672,7 7,7.672 7,8.5L7,12.45C7,13.278 7.672,13.95 8.5,13.95C9.328,13.95 10,13.278 10,12.45L10,8.5ZM8.5,3C9.328,3 10,3.672 10,4.5C10,5.328 9.328,6 8.5,6C7.672,6 7,5.328 7,4.5C7,3.672 7.672,3 8.5,3Z'/>\n                </g>\n            </svg>\n        </span>\n    );\n}\n\nconst style: CSSProperties = {\n    fillRule: 'evenodd',\n    clipRule: 'evenodd',\n    strokeLinejoin: 'round',\n    strokeMiterlimit: 1.41421,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {Team} from '@mattermost/types/teams';\n\nimport TeamInfoIcon from 'components/widgets/icons/team_info_icon';\nimport WithTooltip from 'components/with_tooltip';\n\nimport * as Utils from 'utils/utils';\n\ninterface Props {\n    team: Team;\n    onTeamClick: (team: Team) => void;\n    loading: boolean;\n    canJoinPublicTeams: boolean;\n    canJoinPrivateTeams: boolean;\n}\n\nconst SelectTeamItem = ({\n    team,\n    onTeamClick,\n    loading,\n    canJoinPublicTeams,\n    canJoinPrivateTeams,\n}: Props) => {\n    const intl = useIntl();\n\n    const handleTeamClick = useCallback((e: React.MouseEvent) => {\n        e.preventDefault();\n        onTeamClick(team);\n    }, [onTeamClick, team]);\n\n    const renderDescriptionTooltip = (): React.ReactNode => {\n        if (!team.description) {\n            return null;\n        }\n\n        return (\n            <WithTooltip\n                title={team.description}\n            >\n                <TeamInfoIcon className='icon icon--info'/>\n            </WithTooltip>\n        );\n    };\n\n    let icon;\n    if (loading) {\n        icon = (\n            <span\n                className='fa fa-refresh fa-spin right signup-team__icon'\n                title={intl.formatMessage({id: 'generic_icons.loading', defaultMessage: 'Loading Icon'})}\n            />\n        );\n    } else {\n        icon = (\n            <span\n                className='fa fa-angle-right right signup-team__icon'\n                title={intl.formatMessage({id: 'select_team.join.icon', defaultMessage: 'Join Team Icon'})}\n            />\n        );\n    }\n\n    const canJoin = (team.allow_open_invite && canJoinPublicTeams) || (!team.allow_open_invite && canJoinPrivateTeams);\n\n    return (\n        <div className='signup-team-dir'>\n            {renderDescriptionTooltip()}\n            <a\n                href='#'\n                id={Utils.createSafeId(team.display_name)}\n                onClick={canJoin ? handleTeamClick : undefined}\n                className={canJoin ? '' : 'disabled'}\n            >\n                <span className='signup-team-dir__name'>{team.display_name}</span>\n                {!team.allow_open_invite &&\n                    <i\n                        className='fa fa-lock light'\n                        title={intl.formatMessage({id: 'select_team.private.icon', defaultMessage: 'Private team'})}\n                    />}\n                {canJoin && icon}\n            </a>\n        </div>\n    );\n};\n\nexport default React.memo(SelectTeamItem);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {ReactNode, MouseEvent} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {Link} from 'react-router-dom';\n\nimport type {CloudUsage} from '@mattermost/types/cloud';\nimport type {Team} from '@mattermost/types/teams';\n\nimport {Permissions} from 'mattermost-redux/constants';\n\nimport {emitUserLoggedOutEvent} from 'actions/global_actions';\nimport {trackEvent} from 'actions/telemetry_actions.jsx';\n\nimport AnnouncementBar from 'components/announcement_bar';\nimport BackButton from 'components/common/back_button';\nimport InfiniteScroll from 'components/common/infinite_scroll';\nimport SiteNameAndDescription from 'components/common/site_name_and_description';\nimport LoadingScreen from 'components/loading_screen';\nimport LearnAboutTeamsLink from 'components/main_menu/learn_about_teams_link';\nimport SystemPermissionGate from 'components/permissions_gates/system_permission_gate';\nimport LogoutIcon from 'components/widgets/icons/fa_logout_icon';\n\nimport logoImage from 'images/logo.png';\nimport Constants from 'utils/constants';\nimport * as UserAgent from 'utils/user_agent';\n\nimport SelectTeamItem from './components/select_team_item';\nimport './select_team.scss';\n\nexport const TEAMS_PER_PAGE = 30;\nconst TEAM_MEMBERSHIP_DENIAL_ERROR_ID = 'api.team.add_members.user_denied';\n\ntype Actions = {\n    getTeams: (page?: number, perPage?: number, includeTotalCount?: boolean) => any;\n    loadRolesIfNeeded: (roles: Iterable<string>) => any;\n    addUserToTeam: (teamId: string, userId?: string) => any;\n}\n\ntype Props = {\n    currentUserId: string;\n    currentUserRoles: string;\n    currentUserIsGuest?: boolean;\n    customDescriptionText?: string;\n    isMemberOfTeam: boolean;\n    listableTeams: Team[];\n    siteName?: string;\n    canCreateTeams: boolean;\n    canManageSystem: boolean;\n    canJoinPublicTeams: boolean;\n    canJoinPrivateTeams: boolean;\n    history?: any;\n    actions: Actions;\n    totalTeamsCount: number;\n    isCloud: boolean;\n    isFreeTrial: boolean;\n    usageDeltas: CloudUsage;\n};\n\ntype State = {\n    loadingTeamId?: string;\n    error: any;\n    endofTeamsData: boolean;\n    currentPage: number;\n    currentListableTeams: Team[];\n}\n\nexport default class SelectTeam extends React.PureComponent<Props, State> {\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            loadingTeamId: '',\n            error: null,\n            endofTeamsData: false,\n            currentPage: 0,\n            currentListableTeams: [],\n        };\n    }\n\n    static getDerivedStateFromProps(props: Props, state: State) {\n        if (props.listableTeams.length !== state.currentListableTeams.length) {\n            return {\n                currentListableTeams: props.listableTeams.slice(0, TEAMS_PER_PAGE * state.currentPage),\n            };\n        }\n        return null;\n    }\n\n    componentDidMount() {\n        trackEvent('signup', 'signup_select_team', {userId: this.props.currentUserId});\n        this.fetchMoreTeams();\n        if (this.props.currentUserRoles !== undefined) {\n            this.props.actions.loadRolesIfNeeded(this.props.currentUserRoles.split(' '));\n        }\n    }\n\n    fetchMoreTeams = async () => {\n        const {currentPage} = this.state;\n        const {actions} = this.props;\n\n        const response = await actions.getTeams(currentPage, TEAMS_PER_PAGE, true);\n\n        // We don't want to increase the page number if no data came back previously\n        if (!response.error && !(response.error instanceof Error)) {\n            this.setState((prevState) => (\n                {\n                    currentPage: prevState.currentPage + 1,\n                }\n            ),\n            );\n        }\n    };\n\n    handleTeamClick = async (team: Team) => {\n        const {currentUserRoles} = this.props;\n        this.setState({loadingTeamId: team.id});\n\n        const {data, error} = await this.props.actions.addUserToTeam(team.id, this.props.currentUserId);\n        if (data && this.props.history !== undefined) {\n            this.props.history.push(`/${team.name}/channels/${Constants.DEFAULT_CHANNEL}`);\n        } else if (error) {\n            let errorMsg = error.message;\n\n            if (error.server_error_id === TEAM_MEMBERSHIP_DENIAL_ERROR_ID) {\n                if (currentUserRoles !== undefined && currentUserRoles.includes(Constants.PERMISSIONS_SYSTEM_ADMIN)) {\n                    errorMsg = (\n                        <FormattedMessage\n                            id='join_team_group_constrained_denied_adminText'\n                            defaultMessage={'You need to be a member of a linked group to join this team. You can add a group to this team <a>here</a>.'}\n                            values={{\n                                a: (chunks: string) => (\n                                    <Link to='/admin_console/user_management/groups'>\n                                        {chunks}\n                                    </Link>\n                                ),\n                            }}\n                        />\n                    );\n                } else {\n                    errorMsg = (\n                        <FormattedMessage\n                            id='join_team_group_constrained_denied'\n                            defaultMessage='You need to be a member of a linked group to join this team.'\n                        />\n                    );\n                }\n            }\n\n            this.setState({\n                error: errorMsg,\n                loadingTeamId: '',\n            });\n        }\n    };\n\n    handleLogoutClick = (e: MouseEvent): void => {\n        e.preventDefault();\n        trackEvent('select_team', 'click_logout');\n        emitUserLoggedOutEvent('/login');\n    };\n\n    clearError = (e: MouseEvent): void => {\n        e.preventDefault();\n\n        this.setState({\n            error: null,\n        });\n    };\n\n    render(): ReactNode {\n        const {currentPage, currentListableTeams} = this.state;\n        const {\n            currentUserIsGuest,\n            canManageSystem,\n            customDescriptionText,\n            isMemberOfTeam,\n            siteName,\n            canCreateTeams,\n            canJoinPublicTeams,\n            canJoinPrivateTeams,\n            totalTeamsCount,\n            isCloud,\n            isFreeTrial,\n            usageDeltas: {\n                teams: {\n                    active: usageDeltaTeams,\n                },\n            },\n        } = this.props;\n\n        const teamsLimitReached = usageDeltaTeams >= 0;\n        const createTeamRestricted = isCloud && !isFreeTrial && teamsLimitReached;\n\n        let openContent;\n        if (this.state.loadingTeamId) {\n            openContent = <LoadingScreen/>;\n        } else if (this.state.error) {\n            openContent = (\n                <div className='signup__content'>\n                    <div className={'form-group has-error'}>\n                        <div className='control-label'>{this.state.error}</div>\n                    </div>\n                </div>\n            );\n        } else if (currentUserIsGuest) {\n            openContent = (\n                <div className='signup__content'>\n                    <div className={'form-group has-error'}>\n                        <div className='control-label'>\n                            <FormattedMessage\n                                id='signup_team.guest_without_channels'\n                                defaultMessage='Your guest account has no channels assigned. Please contact an administrator.'\n                            />\n                        </div>\n                    </div>\n                </div>\n            );\n        } else {\n            let joinableTeamContents: any = [];\n            currentListableTeams.forEach((listableTeam) => {\n                if ((listableTeam.allow_open_invite && canJoinPublicTeams) || (!listableTeam.allow_open_invite && canJoinPrivateTeams)) {\n                    joinableTeamContents.push(\n                        <SelectTeamItem\n                            key={'team_' + listableTeam.name}\n                            team={listableTeam}\n                            onTeamClick={this.handleTeamClick}\n                            loading={this.state.loadingTeamId === listableTeam.id}\n                            canJoinPublicTeams={canJoinPublicTeams}\n                            canJoinPrivateTeams={canJoinPrivateTeams}\n                        />,\n                    );\n                }\n            });\n\n            if (joinableTeamContents.length === 0 && (canCreateTeams || canManageSystem)) {\n                joinableTeamContents = (\n                    <div className='signup-team-dir-err'>\n                        <div>\n                            {createTeamRestricted ? (\n                                <FormattedMessage\n                                    id='signup_team.no_open_teams'\n                                    defaultMessage='No teams are available to join. Please ask your administrator for an invite.'\n                                />\n                            ) : (\n                                <FormattedMessage\n                                    id='signup_team.no_open_teams_canCreate'\n                                    defaultMessage='No teams are available to join. Please create a new team or ask your administrator for an invite.'\n                                />\n                            )}\n                        </div>\n                    </div>\n                );\n            } else if (joinableTeamContents.length === 0) {\n                joinableTeamContents = (\n                    <div className='signup-team-dir-err'>\n                        <div>\n                            <SystemPermissionGate permissions={[Permissions.CREATE_TEAM]}>\n                                <FormattedMessage\n                                    id='signup_team.no_open_teams_canCreate'\n                                    defaultMessage='No teams are available to join. Please create a new team or ask your administrator for an invite.'\n                                />\n                            </SystemPermissionGate>\n                            <SystemPermissionGate\n                                permissions={[Permissions.CREATE_TEAM]}\n                                invert={true}\n                            >\n                                <FormattedMessage\n                                    id='signup_team.no_open_teams'\n                                    defaultMessage='No teams are available to join. Please ask your administrator for an invite.'\n                                />\n                            </SystemPermissionGate>\n                        </div>\n                    </div>\n                );\n            }\n\n            openContent = (\n                <div\n                    id='teamsYouCanJoinContent'\n                    className='signup__content'\n                >\n                    <div className='SelectTeam__sub-header'>\n                        <h4>\n                            <FormattedMessage\n                                id='signup_team.join_open'\n                                defaultMessage='Teams you can join: '\n                            />\n                        </h4>\n                        <LearnAboutTeamsLink/>\n                    </div>\n                    <InfiniteScroll\n                        callBack={this.fetchMoreTeams}\n                        styleClass='signup-team-all'\n                        totalItems={totalTeamsCount}\n                        itemsPerPage={TEAMS_PER_PAGE}\n                        bufferValue={280}\n                        pageNumber={currentPage}\n                        loaderStyle={{padding: '0px', height: '40px'}}\n                    >\n                        {joinableTeamContents}\n                    </InfiniteScroll>\n                </div>\n            );\n        }\n\n        const teamSignUp = !createTeamRestricted && (\n            <SystemPermissionGate permissions={[Permissions.CREATE_TEAM]}>\n                <div\n                    className='margin--extra'\n                    style={{marginTop: '0.5em'}}\n                >\n                    <Link\n                        id='createNewTeamLink'\n                        to='/create_team'\n                        onClick={() => trackEvent('select_team', 'click_create_team')}\n                        className='signup-team-login'\n                    >\n                        <FormattedMessage\n                            id='login.createTeam'\n                            defaultMessage='Create a team'\n                        />\n                    </Link>\n                </div>\n            </SystemPermissionGate>\n        );\n\n        let adminConsoleLink;\n        if (!UserAgent.isMobileApp()) {\n            adminConsoleLink = (\n                <SystemPermissionGate permissions={[Permissions.MANAGE_SYSTEM]}>\n                    <div className='mt-8 hidden-xs'>\n                        <Link\n                            to='/admin_console'\n                            className='signup-team-login'\n                            onClick={() => trackEvent('select_team', 'click_system_console')}\n                        >\n                            <FormattedMessage\n                                id='signup_team_system_console'\n                                defaultMessage='Go to System Console'\n                            />\n                        </Link>\n                    </div>\n                </SystemPermissionGate>\n            );\n        }\n\n        let headerButton;\n        if (this.state.error) {\n            headerButton = <BackButton onClick={this.clearError}/>;\n        } else if (isMemberOfTeam) {\n            headerButton = <BackButton/>;\n        } else {\n            headerButton = (\n                <div className='signup-header'>\n                    <a\n                        href='#'\n                        id='logout'\n                        onClick={this.handleLogoutClick}\n                    >\n                        <LogoutIcon/>\n                        <FormattedMessage\n                            id='web.header.logout'\n                            defaultMessage='Logout'\n                        />\n                    </a>\n                </div>\n            );\n        }\n        return (\n            <div>\n                <AnnouncementBar/>\n                {headerButton}\n                <div className='col-sm-12'>\n                    <div\n                        className={'select-team__container signup-team__container'}\n                    >\n                        <img\n                            alt={'signup team logo'}\n                            className='signup-team-logo'\n                            src={logoImage}\n                        />\n                        <SiteNameAndDescription\n                            customDescriptionText={customDescriptionText}\n                            siteName={siteName}\n                        />\n                        {openContent}\n                        {teamSignUp}\n                        {adminConsoleLink}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {withRouter} from 'react-router-dom';\nimport {bindActionCreators, compose} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {loadRolesIfNeeded} from 'mattermost-redux/actions/roles';\nimport {getTeams} from 'mattermost-redux/actions/teams';\nimport {Permissions} from 'mattermost-redux/constants';\nimport {getCloudSubscription as selectCloudSubscription} from 'mattermost-redux/selectors/entities/cloud';\nimport {getConfig, getLicense} from 'mattermost-redux/selectors/entities/general';\nimport {haveISystemPermission} from 'mattermost-redux/selectors/entities/roles';\nimport {getSortedListableTeams, getTeamMemberships} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\nimport {isGuest} from 'mattermost-redux/utils/user_utils';\n\nimport {addUserToTeam} from 'actions/team_actions';\n\nimport withUseGetUsageDelta from 'components/common/hocs/cloud/with_use_get_usage_deltas';\n\nimport {isCloudLicense} from 'utils/license_utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport SelectTeam from './select_team';\n\nfunction mapStateToProps(state: GlobalState) {\n    const config = getConfig(state);\n    const currentUser = getCurrentUser(state);\n    const myTeamMemberships = Object.values(getTeamMemberships(state));\n    const license = getLicense(state);\n\n    const subscription = selectCloudSubscription(state);\n    const isCloud = isCloudLicense(license);\n    const isFreeTrial = subscription?.is_free_trial === 'true';\n\n    return {\n        currentUserId: currentUser.id,\n        currentUserRoles: currentUser.roles || '',\n        currentUserIsGuest: isGuest(currentUser.roles),\n        customDescriptionText: config.CustomDescriptionText,\n        isMemberOfTeam: myTeamMemberships && myTeamMemberships.length > 0,\n        listableTeams: getSortedListableTeams(state, currentUser.locale),\n        siteName: config.SiteName,\n        canCreateTeams: haveISystemPermission(state, {permission: Permissions.CREATE_TEAM}),\n        canManageSystem: haveISystemPermission(state, {permission: Permissions.MANAGE_SYSTEM}),\n        canJoinPublicTeams: haveISystemPermission(state, {permission: Permissions.JOIN_PUBLIC_TEAMS}),\n        canJoinPrivateTeams: haveISystemPermission(state, {permission: Permissions.JOIN_PRIVATE_TEAMS}),\n        totalTeamsCount: state.entities.teams.totalCount || 0,\n        isCloud,\n        isFreeTrial,\n    };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n    return {\n        actions: bindActionCreators({\n            getTeams,\n            loadRolesIfNeeded,\n            addUserToTeam,\n        }, dispatch),\n    };\n}\n\nexport default compose(\n    withRouter,\n    connect(mapStateToProps, mapDispatchToProps),\n    withUseGetUsageDelta,\n)(SelectTeam) as any;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nexport default function LogoutIcon() {\n    const {formatMessage} = useIntl();\n    return (\n        <i\n            className='fa fa-1x fa-angle-left'\n            title={formatMessage({id: 'generic_icons.logout', defaultMessage: 'Logout Icon'})}\n        />\n    );\n}\n"],"names":["BackButton","_ref","url","className","onClick","formatMessage","useIntl","React","classNames","Link","to","id","title","defaultMessage","FormattedMessage","propTypes","_pt","defaultProps","WrappedComponent","props","usageDeltas","useGetUsageDeltas","Object","assign","withBackupValue","maybeLimit","limitsLoaded","Number","MAX_VALUE","usage","useGetUsage","limits","useGetLimits","useMemo","_limits$files","_limits$messages","_limits$teams","files","totalStorage","total_storage","totalStorageLoaded","messages","history","historyLoaded","teams","active","cloudArchived","teamsLoaded","SiteNameAndDescription","customDescriptionText","siteName","description","InfiniteScroll","constructor","super","_defineProperty","buffer","Math","abs","total","freq","ceil","isFetching","isEndofData","this","state","callBack","bufferValue","totalItems","itemsPerPage","pageNumber","node","current","validBuffer","validateBuffer","toScroll","scrollHeight","clientHeight","scrollTop","setState","async","amountOfPages","getAmountOfPages","debounce","handleScroll","componentDidMount","_this$node$current","addEventListener","debounceHandleScroll","componentWillUnmount","_this$node$current2","removeEventListener","render","children","endOfDataMessage","styleClass","loaderStyle","showLoader","concat","ref","LoadingScreen","style","message","TeamInfoIcon","width","height","viewBox","role","transform","d","fillRule","clipRule","strokeLinejoin","strokeMiterlimit","SelectTeamItem","team","onTeamClick","loading","canJoinPublicTeams","canJoinPrivateTeams","intl","handleTeamClick","useCallback","e","preventDefault","icon","canJoin","allow_open_invite","WithTooltip","href","Utils","display_name","undefined","isRequired","SelectTeam","currentPage","actions","response","getTeams","error","Error","prevState","currentUserRoles","loadingTeamId","data","addUserToTeam","currentUserId","push","name","Constants","DEFAULT_CHANNEL","errorMsg","server_error_id","includes","PERMISSIONS_SYSTEM_ADMIN","values","a","chunks","trackEvent","emitUserLoggedOutEvent","endofTeamsData","currentListableTeams","getDerivedStateFromProps","listableTeams","length","slice","userId","fetchMoreTeams","loadRolesIfNeeded","split","currentUserIsGuest","canManageSystem","isMemberOfTeam","canCreateTeams","totalTeamsCount","isCloud","isFreeTrial","usageDeltaTeams","createTeamRestricted","openContent","joinableTeamContents","forEach","listableTeam","key","SystemPermissionGate","permissions","Permissions","CREATE_TEAM","invert","LearnAboutTeamsLink","padding","teamSignUp","marginTop","adminConsoleLink","headerButton","UserAgent","MANAGE_SYSTEM","clearError","handleLogoutClick","LogoutIcon","AnnouncementBar","alt","src","logoImage","compose","withRouter","connect","config","getConfig","currentUser","getCurrentUser","myTeamMemberships","getTeamMemberships","license","getLicense","subscription","selectCloudSubscription","isCloudLicense","is_free_trial","roles","isGuest","CustomDescriptionText","getSortedListableTeams","locale","SiteName","haveISystemPermission","permission","JOIN_PUBLIC_TEAMS","JOIN_PRIVATE_TEAMS","entities","totalCount","dispatch","bindActionCreators","withUseGetUsageDelta"],"sourceRoot":""}

VaKeR 2022