airdcpp-webui 2.12.0-beta.3 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/.eslintrc.js +61 -61
  2. package/dist/index.html +1 -1
  3. package/dist/js/285.f568d215104be4fb06eb.chunk.js +2 -0
  4. package/dist/js/285.f568d215104be4fb06eb.chunk.js.gz +0 -0
  5. package/dist/js/285.f568d215104be4fb06eb.chunk.js.map +1 -0
  6. package/dist/js/317.54d6dded7430f84fd4a7.chunk.js +2 -0
  7. package/dist/js/317.54d6dded7430f84fd4a7.chunk.js.gz +0 -0
  8. package/dist/js/317.54d6dded7430f84fd4a7.chunk.js.map +1 -0
  9. package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js +2 -0
  10. package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js.gz +0 -0
  11. package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js.map +1 -0
  12. package/dist/js/668.0d2ed46d1147385f6482.chunk.js +2 -0
  13. package/dist/js/668.0d2ed46d1147385f6482.chunk.js.gz +0 -0
  14. package/dist/js/668.0d2ed46d1147385f6482.chunk.js.map +1 -0
  15. package/dist/js/69.00e5adf1f76437e343f2.chunk.js +2 -0
  16. package/dist/js/69.00e5adf1f76437e343f2.chunk.js.gz +0 -0
  17. package/dist/js/69.00e5adf1f76437e343f2.chunk.js.map +1 -0
  18. package/dist/js/{702.2a6693aead40337b625c.chunk.js → 702.87b71d34ebd167d76c3b.chunk.js} +1 -1
  19. package/dist/js/702.87b71d34ebd167d76c3b.chunk.js.gz +0 -0
  20. package/dist/js/{702.2a6693aead40337b625c.chunk.js.map → 702.87b71d34ebd167d76c3b.chunk.js.map} +1 -1
  21. package/dist/js/{760.774900fa62b9e66b5ff7.chunk.js → 760.1679cba4f653d07819f3.chunk.js} +3 -3
  22. package/dist/js/760.1679cba4f653d07819f3.chunk.js.gz +0 -0
  23. package/dist/js/760.1679cba4f653d07819f3.chunk.js.map +1 -0
  24. package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js +2 -0
  25. package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js.gz +0 -0
  26. package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js.map +1 -0
  27. package/dist/js/filelists.799bae07549950c8bdce.chunk.js +2 -0
  28. package/dist/js/filelists.799bae07549950c8bdce.chunk.js.gz +0 -0
  29. package/dist/js/filelists.799bae07549950c8bdce.chunk.js.map +1 -0
  30. package/dist/js/files.c723dabab26e48d06683.chunk.js +2 -0
  31. package/dist/js/files.c723dabab26e48d06683.chunk.js.gz +0 -0
  32. package/dist/js/files.c723dabab26e48d06683.chunk.js.map +1 -0
  33. package/dist/js/home.1bfba76cdbb2fc7194dc.chunk.js +3 -0
  34. package/dist/js/home.1bfba76cdbb2fc7194dc.chunk.js.gz +0 -0
  35. package/dist/js/{home.7b6595492d6f4a0507e5.chunk.js.map → home.1bfba76cdbb2fc7194dc.chunk.js.map} +1 -1
  36. package/dist/js/hubs.99a089268648607f734d.chunk.js +2 -0
  37. package/dist/js/hubs.99a089268648607f734d.chunk.js.gz +0 -0
  38. package/dist/js/hubs.99a089268648607f734d.chunk.js.map +1 -0
  39. package/dist/js/main.560335911ba879ef8877.entry.js +3 -0
  40. package/dist/js/{main.01d94b76f3ff04c0ccd0.entry.js.LICENSE.txt → main.560335911ba879ef8877.entry.js.LICENSE.txt} +2 -16
  41. package/dist/js/main.560335911ba879ef8877.entry.js.gz +0 -0
  42. package/dist/js/main.560335911ba879ef8877.entry.js.map +1 -0
  43. package/dist/js/messages.1fff9c30585362386309.chunk.js +2 -0
  44. package/dist/js/messages.1fff9c30585362386309.chunk.js.gz +0 -0
  45. package/dist/js/messages.1fff9c30585362386309.chunk.js.map +1 -0
  46. package/dist/js/queue.822b774c6541212741c2.chunk.js +2 -0
  47. package/dist/js/queue.822b774c6541212741c2.chunk.js.gz +0 -0
  48. package/dist/js/queue.822b774c6541212741c2.chunk.js.map +1 -0
  49. package/dist/js/search.6a9813389fd4fec46997.chunk.js +2 -0
  50. package/dist/js/search.6a9813389fd4fec46997.chunk.js.gz +0 -0
  51. package/dist/js/search.6a9813389fd4fec46997.chunk.js.map +1 -0
  52. package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js +2 -0
  53. package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js.gz +0 -0
  54. package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js.map +1 -0
  55. package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js +2 -0
  56. package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js.gz +0 -0
  57. package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js.map +1 -0
  58. package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js +2 -0
  59. package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js.gz +0 -0
  60. package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js.map +1 -0
  61. package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js +2 -0
  62. package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js.gz +0 -0
  63. package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js.map +1 -0
  64. package/dist/sw.js +1 -1
  65. package/dist/sw.js.gz +0 -0
  66. package/dist/sw.js.map +1 -1
  67. package/jest.config.js +18 -18
  68. package/package.json +1 -1
  69. package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js +0 -2
  70. package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js.gz +0 -0
  71. package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js.map +0 -1
  72. package/dist/js/317.97fabbc4a91be88219d3.chunk.js +0 -2
  73. package/dist/js/317.97fabbc4a91be88219d3.chunk.js.gz +0 -0
  74. package/dist/js/317.97fabbc4a91be88219d3.chunk.js.map +0 -1
  75. package/dist/js/424.5cc8383701bc3226c5ff.chunk.js +0 -2
  76. package/dist/js/424.5cc8383701bc3226c5ff.chunk.js.gz +0 -0
  77. package/dist/js/424.5cc8383701bc3226c5ff.chunk.js.map +0 -1
  78. package/dist/js/668.294ae7e2a9db78b421b0.chunk.js +0 -2
  79. package/dist/js/668.294ae7e2a9db78b421b0.chunk.js.gz +0 -0
  80. package/dist/js/668.294ae7e2a9db78b421b0.chunk.js.map +0 -1
  81. package/dist/js/69.3e693915ecfb45fce6ea.chunk.js +0 -2
  82. package/dist/js/69.3e693915ecfb45fce6ea.chunk.js.gz +0 -0
  83. package/dist/js/69.3e693915ecfb45fce6ea.chunk.js.map +0 -1
  84. package/dist/js/702.2a6693aead40337b625c.chunk.js.gz +0 -0
  85. package/dist/js/760.774900fa62b9e66b5ff7.chunk.js.gz +0 -0
  86. package/dist/js/760.774900fa62b9e66b5ff7.chunk.js.map +0 -1
  87. package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js +0 -2
  88. package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js.gz +0 -0
  89. package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js.map +0 -1
  90. package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js +0 -2
  91. package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js.gz +0 -0
  92. package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js.map +0 -1
  93. package/dist/js/files.c17b77223a4f8de80f1b.chunk.js +0 -2
  94. package/dist/js/files.c17b77223a4f8de80f1b.chunk.js.gz +0 -0
  95. package/dist/js/files.c17b77223a4f8de80f1b.chunk.js.map +0 -1
  96. package/dist/js/home.7b6595492d6f4a0507e5.chunk.js +0 -3
  97. package/dist/js/home.7b6595492d6f4a0507e5.chunk.js.gz +0 -0
  98. package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js +0 -2
  99. package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js.gz +0 -0
  100. package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js.map +0 -1
  101. package/dist/js/locales/en-webui-main-missing-json.0a7b6ea1f0a5eeaa5735.chunk.js +0 -1
  102. package/dist/js/locales/en-webui-main-missing-json.0a7b6ea1f0a5eeaa5735.chunk.js.gz +0 -0
  103. package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js +0 -3
  104. package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js.gz +0 -0
  105. package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js.map +0 -1
  106. package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js +0 -2
  107. package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js.gz +0 -0
  108. package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js.map +0 -1
  109. package/dist/js/queue.20fe8967cbdac914688a.chunk.js +0 -2
  110. package/dist/js/queue.20fe8967cbdac914688a.chunk.js.gz +0 -0
  111. package/dist/js/queue.20fe8967cbdac914688a.chunk.js.map +0 -1
  112. package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js +0 -2
  113. package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js.gz +0 -0
  114. package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js.map +0 -1
  115. package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js +0 -2
  116. package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js.gz +0 -0
  117. package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js.map +0 -1
  118. package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js +0 -2
  119. package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js.gz +0 -0
  120. package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js.map +0 -1
  121. package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js +0 -2
  122. package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js.gz +0 -0
  123. package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js.map +0 -1
  124. package/dist/js/transfers.5fbe0929649dc0893737.chunk.js +0 -2
  125. package/dist/js/transfers.5fbe0929649dc0893737.chunk.js.gz +0 -0
  126. package/dist/js/transfers.5fbe0929649dc0893737.chunk.js.map +0 -1
  127. package/package - Copy.json +0 -156
  128. /package/dist/js/{760.774900fa62b9e66b5ff7.chunk.js.LICENSE.txt → 760.1679cba4f653d07819f3.chunk.js.LICENSE.txt} +0 -0
  129. /package/dist/js/{home.7b6595492d6f4a0507e5.chunk.js.LICENSE.txt → home.1bfba76cdbb2fc7194dc.chunk.js.LICENSE.txt} +0 -0
  130. /package/dist/js/locales/{ca-webui-main-json.6c149a10d6e263315d7f.chunk.js → ca-webui-main-json.e4a9ae36d6beb98c0057.chunk.js} +0 -0
  131. /package/dist/js/locales/{ca-webui-main-json.6c149a10d6e263315d7f.chunk.js.gz → ca-webui-main-json.e4a9ae36d6beb98c0057.chunk.js.gz} +0 -0
  132. /package/dist/js/locales/{da-webui-main-json.0ceb448ebe8d59d24573.chunk.js → da-webui-main-json.a08bb8db90fc33844135.chunk.js} +0 -0
  133. /package/dist/js/locales/{da-webui-main-json.0ceb448ebe8d59d24573.chunk.js.gz → da-webui-main-json.a08bb8db90fc33844135.chunk.js.gz} +0 -0
  134. /package/dist/js/locales/{de-webui-main-json.5f98884f26442cd6079a.chunk.js → de-webui-main-json.6763aab78d26033bc160.chunk.js} +0 -0
  135. /package/dist/js/locales/{de-webui-main-json.5f98884f26442cd6079a.chunk.js.gz → de-webui-main-json.6763aab78d26033bc160.chunk.js.gz} +0 -0
  136. /package/dist/js/locales/{el-webui-main-json.9b9f976001b216a51d60.chunk.js → el-webui-main-json.33c629aa295c990b6816.chunk.js} +0 -0
  137. /package/dist/js/locales/{el-webui-main-json.9b9f976001b216a51d60.chunk.js.gz → el-webui-main-json.33c629aa295c990b6816.chunk.js.gz} +0 -0
  138. /package/dist/js/locales/{en-webui-main-json.d1845c8535d9a1be9ef6.chunk.js → en-webui-main-json.ae2216f8443c16155761.chunk.js} +0 -0
  139. /package/dist/js/locales/{en-webui-main-json.d1845c8535d9a1be9ef6.chunk.js.gz → en-webui-main-json.ae2216f8443c16155761.chunk.js.gz} +0 -0
  140. /package/dist/js/locales/{es-webui-main-json.c0a7f4edfd71f660b005.chunk.js → es-webui-main-json.cef003aeaf6a8669aa55.chunk.js} +0 -0
  141. /package/dist/js/locales/{es-webui-main-json.c0a7f4edfd71f660b005.chunk.js.gz → es-webui-main-json.cef003aeaf6a8669aa55.chunk.js.gz} +0 -0
  142. /package/dist/js/locales/{eu-webui-main-json.eb0383952c8ab4fb9f36.chunk.js → eu-webui-main-json.f390f35c92cc5e80723e.chunk.js} +0 -0
  143. /package/dist/js/locales/{eu-webui-main-json.eb0383952c8ab4fb9f36.chunk.js.gz → eu-webui-main-json.f390f35c92cc5e80723e.chunk.js.gz} +0 -0
  144. /package/dist/js/locales/{fi-webui-main-json.f9ff02a0b28a5fd85a5d.chunk.js → fi-webui-main-json.2c0e54d1e586d6d4cdf4.chunk.js} +0 -0
  145. /package/dist/js/locales/{fi-webui-main-json.f9ff02a0b28a5fd85a5d.chunk.js.gz → fi-webui-main-json.2c0e54d1e586d6d4cdf4.chunk.js.gz} +0 -0
  146. /package/dist/js/locales/{fr-webui-main-json.53bc9323af23410d639f.chunk.js → fr-webui-main-json.eb58b9782b184c5bd0e7.chunk.js} +0 -0
  147. /package/dist/js/locales/{fr-webui-main-json.53bc9323af23410d639f.chunk.js.gz → fr-webui-main-json.eb58b9782b184c5bd0e7.chunk.js.gz} +0 -0
  148. /package/dist/js/locales/{hu-webui-main-json.c63e9fcc09558b4fe41e.chunk.js → hu-webui-main-json.6a8b4be95cd392319f00.chunk.js} +0 -0
  149. /package/dist/js/locales/{hu-webui-main-json.c63e9fcc09558b4fe41e.chunk.js.gz → hu-webui-main-json.6a8b4be95cd392319f00.chunk.js.gz} +0 -0
  150. /package/dist/js/locales/{it-webui-main-json.59aad6c34cdff2085157.chunk.js → it-webui-main-json.ace514cb8dbf846f7bb2.chunk.js} +0 -0
  151. /package/dist/js/locales/{it-webui-main-json.59aad6c34cdff2085157.chunk.js.gz → it-webui-main-json.ace514cb8dbf846f7bb2.chunk.js.gz} +0 -0
  152. /package/dist/js/locales/{nl-webui-main-json.f4e1772f9d507c339583.chunk.js → nl-webui-main-json.99f14f67e7f7f523f435.chunk.js} +0 -0
  153. /package/dist/js/locales/{nl-webui-main-json.f4e1772f9d507c339583.chunk.js.gz → nl-webui-main-json.99f14f67e7f7f523f435.chunk.js.gz} +0 -0
  154. /package/dist/js/locales/{no-webui-main-json.7637dd19134c84061d14.chunk.js → no-webui-main-json.14d6b98f5aeac4ae328e.chunk.js} +0 -0
  155. /package/dist/js/locales/{no-webui-main-json.7637dd19134c84061d14.chunk.js.gz → no-webui-main-json.14d6b98f5aeac4ae328e.chunk.js.gz} +0 -0
  156. /package/dist/js/locales/{pl-webui-main-json.10a0a30720b516cefda5.chunk.js → pl-webui-main-json.df98b2ed00d38e386747.chunk.js} +0 -0
  157. /package/dist/js/locales/{pl-webui-main-json.10a0a30720b516cefda5.chunk.js.gz → pl-webui-main-json.df98b2ed00d38e386747.chunk.js.gz} +0 -0
  158. /package/dist/js/locales/{pt-br-webui-main-json.cc946648a521c27b5a79.chunk.js → pt-br-webui-main-json.b06c253e99d8eb8a971d.chunk.js} +0 -0
  159. /package/dist/js/locales/{pt-br-webui-main-json.cc946648a521c27b5a79.chunk.js.gz → pt-br-webui-main-json.b06c253e99d8eb8a971d.chunk.js.gz} +0 -0
  160. /package/dist/js/locales/{pt-webui-main-json.5bed5158082678ceb16b.chunk.js → pt-webui-main-json.5278c6a5afa09777b453.chunk.js} +0 -0
  161. /package/dist/js/locales/{pt-webui-main-json.5bed5158082678ceb16b.chunk.js.gz → pt-webui-main-json.5278c6a5afa09777b453.chunk.js.gz} +0 -0
  162. /package/dist/js/locales/{ro-webui-main-json.d68cbb01175c7f6e2b53.chunk.js → ro-webui-main-json.24ab9a55725a9fc18299.chunk.js} +0 -0
  163. /package/dist/js/locales/{ro-webui-main-json.d68cbb01175c7f6e2b53.chunk.js.gz → ro-webui-main-json.24ab9a55725a9fc18299.chunk.js.gz} +0 -0
  164. /package/dist/js/locales/{ru-webui-main-json.c399c20411213c872e7b.chunk.js → ru-webui-main-json.e9ab289b5a1b70abdccf.chunk.js} +0 -0
  165. /package/dist/js/locales/{ru-webui-main-json.c399c20411213c872e7b.chunk.js.gz → ru-webui-main-json.e9ab289b5a1b70abdccf.chunk.js.gz} +0 -0
  166. /package/dist/js/locales/{sv-webui-main-json.bc915cd441a54413b67c.chunk.js → sv-webui-main-json.9ad571819cde0158829a.chunk.js} +0 -0
  167. /package/dist/js/locales/{sv-webui-main-json.bc915cd441a54413b67c.chunk.js.gz → sv-webui-main-json.9ad571819cde0158829a.chunk.js.gz} +0 -0
  168. /package/dist/js/locales/{tr-webui-main-json.a8c83f88e88d42ffca40.chunk.js → tr-webui-main-json.68bb926adc13e8952b47.chunk.js} +0 -0
  169. /package/dist/js/locales/{tr-webui-main-json.a8c83f88e88d42ffca40.chunk.js.gz → tr-webui-main-json.68bb926adc13e8952b47.chunk.js.gz} +0 -0
  170. /package/dist/js/locales/{uk_UA-webui-main-json.cbc43c57307c9f8134a6.chunk.js → uk_UA-webui-main-json.f4098f3ea96407bf804e.chunk.js} +0 -0
  171. /package/dist/js/locales/{uk_UA-webui-main-json.cbc43c57307c9f8134a6.chunk.js.gz → uk_UA-webui-main-json.f4098f3ea96407bf804e.chunk.js.gz} +0 -0
  172. /package/dist/js/locales/{zh_CN-webui-main-json.b963220181e25b6e6fcd.chunk.js → zh_CN-webui-main-json.6250a926eeea9fda0697.chunk.js} +0 -0
  173. /package/dist/js/locales/{zh_CN-webui-main-json.b963220181e25b6e6fcd.chunk.js.gz → zh_CN-webui-main-json.6250a926eeea9fda0697.chunk.js.gz} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[364],{80803:(e,s,t)=>{t.d(s,{Z:()=>r});var n=t(87537),o=t.n(n),i=t(23645),a=t.n(i)()(o());a.push([e.id,".hub-action-prompt {\n flex-direction: column;\n align-items: flex-start !important;\n}\n\n.hub-action-prompt .header {\n margin: 0 0 1rem !important;\n}\n\n.hub-action-prompt .password.prompt .help {\n margin-top: 10px;\n}\n\n.hub-action-prompt .redirect.prompt {\n max-width: 100%;\n overflow: hidden;\n}\n\n.hub.session .virtual-table,\n.hub.session .offline-message,\n.hub.session .loader-wrapper {\n flex: 1;\n margin-top: 5px;\n}\n\n.hub.session .cell-wrapper.tag,\n.hub.session .cell-wrapper.nick,\n.hub.session .cell-wrapper.description,\n.hub.session .cell-wrapper.share_size {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.hub.session .cell-wrapper.nick.op {\n color: steelblue;\n}\n.hub.session .session-footer .actions-wrapper > a,\n.hub.session .session-footer .actions-wrapper > div {\n /* Don't cut the shadow */\n padding-left: 1px;\n padding-bottom: 1px;\n}\n\n.hub.session .session-footer .userlist-button label {\n color: grey;\n font-size: small;\n}\n\n.hub.session .session-footer .actions-wrapper .dropdown {\n margin-left: 10px;\n}\n","",{version:3,sources:["webpack://./src/routes/Sidebar/routes/Hubs/style.css"],names:[],mappings:"AAAA;EACE,sBAAsB;EACtB,kCAAkC;AACpC;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;;;EAGE,OAAO;EACP,eAAe;AACjB;;AAEA;;;;EAIE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;AACA;;EAEE,yBAAyB;EACzB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB",sourcesContent:[".hub-action-prompt {\n flex-direction: column;\n align-items: flex-start !important;\n}\n\n.hub-action-prompt .header {\n margin: 0 0 1rem !important;\n}\n\n.hub-action-prompt .password.prompt .help {\n margin-top: 10px;\n}\n\n.hub-action-prompt .redirect.prompt {\n max-width: 100%;\n overflow: hidden;\n}\n\n.hub.session .virtual-table,\n.hub.session .offline-message,\n.hub.session .loader-wrapper {\n flex: 1;\n margin-top: 5px;\n}\n\n.hub.session .cell-wrapper.tag,\n.hub.session .cell-wrapper.nick,\n.hub.session .cell-wrapper.description,\n.hub.session .cell-wrapper.share_size {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.hub.session .cell-wrapper.nick.op {\n color: steelblue;\n}\n.hub.session .session-footer .actions-wrapper > a,\n.hub.session .session-footer .actions-wrapper > div {\n /* Don't cut the shadow */\n padding-left: 1px;\n padding-bottom: 1px;\n}\n\n.hub.session .session-footer .userlist-button label {\n color: grey;\n font-size: small;\n}\n\n.hub.session .session-footer .actions-wrapper .dropdown {\n margin-left: 10px;\n}\n"],sourceRoot:""}]);const r=a},48005:(e,s,t)=>{t.d(s,{Z:()=>a});var n=t(85893),o=(t(67294),t(35936)),i=t(55019);const a=e=>{var{hub:s}=e,t=function(e,s){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&s.indexOf(n)<0&&(t[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)s.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(t[n[o]]=e[n[o]])}return t}(e,["hub"]);return(0,n.jsx)(o.Z,Object.assign({},t,{icon:(0,i.iU)(s.connect_state.id)+" sitemap"}))}},6659:(e,s,t)=>{t.r(s),t.d(s,{default:()=>De});var n=t(85893),o=t(67294),i=t(64935),a=t(10907),r=t(93281),c=t(21222),l=t(518),p=t(50566),h=t(38982),d=t(48117),u=t(76249),m=t(32347);const S={reconnect:{displayName:"Reconnect",access:u.PS.HUBS_EDIT,icon:d.Z.REFRESH_COLORED,handler:({data:e})=>l.Z.post(`${c.Z.SESSIONS_URL}/${e.id}/reconnect`)},favorite:{access:u.PS.HUBS_EDIT,displayName:"Add to favorites",icon:d.Z.FAVORITE,filter:e=>!e.favorite_hub,handler:({data:e})=>l.Z.post(`${c.Z.SESSIONS_URL}/${e.id}/favorite`),notifications:{onSuccess:"The hub {{item.identity.name}} was added in favorites"}},toggleChatNotify:{access:u.PS.HUBS_EDIT,displayName:"Use chat notification",handler:({data:e})=>l.Z.patch(`${c.Z.SESSIONS_URL}/${e.id}`,{use_main_chat_notify:!e.settings.use_main_chat_notify}),checked:e=>e.settings.use_main_chat_notify},toggleShowJoins:{access:u.PS.HUBS_EDIT,displayName:"Show joins/parts",handler:({data:e})=>l.Z.patch(`${c.Z.SESSIONS_URL}/${e.id}`,{show_joins:!e.settings.show_joins}),checked:e=>e.settings.show_joins}},A=(0,h.Z)((0,p.Z)(S,c.Z.SESSIONS_URL,u.PS.HUBS_EDIT),c.Z.SESSIONS_URL,u.PS.HUBS_EDIT),b={moduleId:m.jv.HUBS,actions:A};var g=t(16119),w=t(55019),x=t(10293),E=t.n(x),f=t(41143),j=t.n(f),_=t(14936),C=t(94897),Z=t(46614);const y=E().createStore({scroll:(0,Z.$)(),onSocketConnected(e){j()(!this.hasMessages(),"No existing hub messages should exist on socket connect"),j()(!this.hasInitializedSessions(),"No initialized hub sessions should exist on socket connect"),e(c.Z.MODULE_URL,c.Z.HUB_MESSAGE,this._onChatMessage),e(c.Z.MODULE_URL,c.Z.HUB_STATUS_MESSAGE,this._onStatusMessage),e(c.Z.MODULE_URL,c.Z.SESSION_UPDATED,this._onSessionUpdated),e(c.Z.MODULE_URL,c.Z.SESSION_REMOVED,this._onSessionRemoved)}}),O=(0,_.Z)(y,g.Z,C.Z.HUBS_VIEW);var U=t(10606),N=t(70516),v=t(40479),I=t(45697),B=t.n(I),T=t(93836);const R=E().createStore({_viewName:"hub_user_view",_apiUrl:c.Z.SESSIONS_URL,_sessionStore:r.Z,mixins:[(0,T.Z)("nick")]});var L=t(35108),D=t(78230),H=t(68126),G=t(84613),P=t(27695),k=t(54883),$=t(4333);const F=({cellData:e,rowDataGetter:s,session:t})=>(0,n.jsx)(G.cG,{text:e,user:s(),userIcon:!0,remoteMenuId:$.Z.HUB_USER,entityId:t.id});class M extends o.Component{constructor(){super(...arguments),this.rowClassNameGetter=e=>e.flags.join(" "),this.emptyRowsNodeGetter=()=>{const{session:e,sessionT:s}=this.props,t=e.connect_state.id;if(t===u.XF.DISCONNECTED||t===u.XF.REDIRECT)return(0,n.jsx)("div",Object.assign({className:"offline-message"},{children:(0,n.jsx)(P.Z,{className:"offline",title:s.translate("Not connected to the hub"),icon:d.Z.OFFLINE})}));const o=s.translate(t!==u.XF.CONNECTED?"Connecting":"Loading userlist");return(0,n.jsx)("div",Object.assign({className:"loader-wrapper"},{children:(0,n.jsx)(k.Z,{text:o})}))}}render(){const{session:e}=this.props;return(0,n.jsxs)(D.Z,Object.assign({store:R,entityId:e.id,sessionStore:r.Z,rowClassNameGetter:this.rowClassNameGetter,emptyRowsNodeGetter:this.emptyRowsNodeGetter,moduleId:m.jv.HUBS},{children:[(0,n.jsx)(L.Column,{name:"Nick",width:170,columnKey:"nick",flexGrow:8,cell:(0,n.jsx)(F,{session:e})}),(0,n.jsx)(L.Column,{name:"Share size",width:85,columnKey:"share_size",cell:(0,n.jsx)(H.Eh,{}),flexGrow:1}),(0,n.jsx)(L.Column,{name:"Description",width:100,columnKey:"description",flexGrow:1}),(0,n.jsx)(L.Column,{name:"Tag",width:150,columnKey:"tag",flexGrow:2}),(0,n.jsx)(L.Column,{name:"Upload speed",width:80,columnKey:"upload_speed",cell:(0,n.jsx)(H.$A,{}),flexGrow:2}),(0,n.jsx)(L.Column,{name:"Download speed",width:80,columnKey:"download_speed",cell:(0,n.jsx)(H.$A,{}),flexGrow:2}),(0,n.jsx)(L.Column,{name:"IP (v4)",width:120,columnKey:"ip4",flexGrow:3,cell:(0,n.jsx)(H.fI,{})}),(0,n.jsx)(L.Column,{name:"IP (v6)",width:120,columnKey:"ip6",flexGrow:3,cell:(0,n.jsx)(H.fI,{})}),(0,n.jsx)(L.Column,{name:"Files",width:70,columnKey:"file_count",flexGrow:3})]}))}}M.propTypes={session:B().object};const K=M;var z=t(2445),V=t(88998),X=t(68325),J=t(11485),W=t(54080);const q=(0,J.i)((e=>{const[s,t]=(0,o.useState)({share_size:0,user_count:0});(0,o.useEffect)((()=>{l.Z.get(`${c.Z.SESSIONS_URL}/${e.session.id}/counts`).then(t).catch((e=>console.error("Failed to fetch hub counts",e.message)));const s=c.Z.SESSIONS_URL;return e.addSocketListener(s,c.Z.SESSION_COUNTS_UPDATED,(e=>t(e)),e.session.id),()=>e.removeSocketListeners(e)}),[e.session]);const i=(0,o.useContext)(W.c),{userlistToggle:a,session:r,sessionT:p}=e,{user_count:h,share_size:d}=s,u=(0,z.BU)(h>0?d/h:0,p.plainT);return(0,n.jsxs)(V.C,{children:[(0,n.jsx)(V.o,{text:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(X.Z,{encryption:r.encryption}),p.t("xUsers",{defaultValue:"{{count}} user",defaultValue_plural:"{{count}} users",count:h,replace:{count:h}})]})}),!(0,U.wd)(i)&&(0,n.jsx)(V.o,{text:p.t("sharePerUser",{defaultValue:"{{total}} ({{average}}/user)",replace:{total:(0,z.BU)(d,p.plainT),average:u}})}),(0,n.jsx)("div",Object.assign({className:"actions-wrapper"},{children:(0,n.jsxs)("div",Object.assign({className:"actions"},{children:[a,(0,n.jsx)(G.PC,{className:"top left pointing",actions:b,ids:["toggleChatNotify","toggleShowJoins"],header:p.translate("Notification settings"),itemData:r,triggerIcon:r.settings.use_main_chat_notify||r.settings.show_joins?"yellow bell":"bell"})]}))}))]})}),(({session:e})=>!!r.Z.getSession(e.id)));var Q=t(78217),Y=t(84807),ee=t(66883),se=t(35936),te=t(91072),ne=t(94076);(0,ne.yE)(c.Z.SESSIONS_URL),(0,ne.c8)(c.Z.SESSIONS_URL),(0,ne._b)(c.Z.SESSIONS_URL),(0,ne.pJ)(c.Z.SESSIONS_URL);var oe=t(89519);const ie=({icon:e,title:s,content:t})=>ee.Z.hasAccess(u.PS.HUBS_EDIT)?(0,n.jsxs)("div",Object.assign({className:"ui icon message hub-action-prompt"},{children:[(0,n.jsxs)("h3",Object.assign({className:"ui header"},{children:[(0,n.jsx)(se.Z,{icon:e}),(0,n.jsx)("div",Object.assign({className:"content"},{children:s}))]})),t]})):null,ae=({hub:e,sessionT:s})=>(0,n.jsxs)("div",Object.assign({className:"password prompt"},{children:[(0,n.jsx)(Q.Z,{placeholder:s.translate("Password"),caption:s.translate("Submit"),icon:d.Z.CONNECT,handleAction:t=>(0,oe.h9)((()=>((e,s)=>l.Z.post(`${c.Z.SESSIONS_URL}/${e.id}/password`,{password:s}))(e,t)),s.plainT)}),(0,n.jsx)("div",Object.assign({className:"help"},{children:(0,n.jsx)(te.cC,Object.assign({i18nKey:s.toI18nKey("passwordPromptHelp")},{children:"This usually means that there's a registered account associated with your nick. If you don't remember having a registered account in this hub, there may be someone else using the same nick."}))}))]})),re=({hub:e,sessionT:s})=>(0,n.jsx)(Y.Z,{className:"redirect prompt",icon:d.Z.CONNECT,onClick:t=>(0,oe.h9)((()=>(e=>l.Z.post(`${c.Z.SESSIONS_URL}/${e.id}/redirect`))(e)),s.plainT),caption:s.t("acceptRedirect",{defaultValue:"Accept redirect to {{url}}",replace:{url:e.connect_state.data.hub_url}})});var ce=t(93379),le=t.n(ce),pe=t(7795),he=t.n(pe),de=t(90569),ue=t.n(de),me=t(3565),Se=t.n(me),Ae=t(19216),be=t.n(Ae),ge=t(44589),we=t.n(ge),xe=t(80803),Ee={};Ee.styleTagTransform=we(),Ee.setAttributes=Se(),Ee.insert=ue().bind(null,"head"),Ee.domAPI=he(),Ee.insertStyleElement=be(),le()(xe.Z,Ee),xe.Z&&xe.Z.locals&&xe.Z.locals;var fe=t(74225);const je=e=>`view_userlist_${e.session.id}`,_e=e=>(0,U.TG)(je(e),!1);class Ce extends o.Component{constructor(){super(...arguments),this.state={showList:_e(this.props)},this.toggleListState=()=>{this.setState({showList:!this.state.showList})},this.getMessage=()=>{const{session:e,sessionT:s}=this.props,t=e.connect_state.id;return t===u.XF.PASSWORD?(0,n.jsx)(ie,{title:s.translate("Password required"),icon:d.Z.LOCK,content:(0,n.jsx)(ae,{hub:e,sessionT:s})}):t===u.XF.REDIRECT?(0,n.jsx)(ie,{title:s.translate("Redirect requested"),icon:d.Z.REDIRECT,content:(0,n.jsx)(re,{hub:e,sessionT:s})}):null},this.onClickUsers=()=>{this.toggleListState(),(0,U.nG)(je(this.props),this.state.showList)},this.handleFileUpload=e=>{const{hub_url:s}=this.props.session;return(0,fe.Pd)(e,s,void 0)}}componentDidUpdate(e){e.session.id!==this.props.session.id&&this.state.showList!==_e(this.props)&&this.toggleListState()}render(){const{session:e,sessionApi:s,sessionT:t,uiActions:o}=this.props,{showList:i}=this.state,a=(0,n.jsx)(N.Z,{className:"userlist-button",type:"toggle",caption:t.translate("User list"),onChange:this.onClickUsers,checked:i});return(0,n.jsxs)("div",Object.assign({className:"hub chat session"},{children:[this.getMessage(),i?(0,n.jsx)(K,{session:e,sessionT:t}):(0,n.jsx)(v.Z,{messageStore:O,chatApi:g.Z,sessionApi:s,chatActions:o,chatAccess:u.PS.HUBS_SEND,session:e,handleFileUpload:this.handleFileUpload,highlightRemoteMenuId:$.Z.HUB_MESSAGE_HIGHLIGHT}),(0,n.jsx)(q,{userlistToggle:a,session:e,sessionT:t})]}))}}Ce.displayName="HubSession";const Ze=Ce;var ye=t(61283),Oe=t(3267),Ue=t(73727),Ne=t(15479);class ve extends o.Component{constructor(){super(...arguments),this.handleConnect=e=>{g.Z.createSession(this.props.location,e,r.Z)},this.hasSession=e=>r.Z.getSessionByUrl(e.hub_url),this.recentHubRender=e=>(0,n.jsx)("a",Object.assign({onClick:s=>this.handleConnect(e.hub_url)},{children:e.name}))}render(){const{sessionT:e}=this.props;return(0,n.jsxs)("div",Object.assign({className:"hub session new"},{children:[(0,n.jsx)(ye.Z,{submitHandler:this.handleConnect,button:(0,n.jsx)(Y.Z,{icon:d.Z.CONNECT,caption:e.translate("Connect")})}),(0,n.jsx)(P.Z,{description:(0,n.jsx)(te.cC,{i18nKey:e.toI18nKey("favoriteHubsHint"),defaults:"Tip: visit the <url>Favorite hubs</url> page to connect using custom settings",components:{url:(0,n.jsx)(Ue.rU,{to:"/favorite-hubs"})}})}),(0,n.jsx)(Oe.Z,{entryType:Ne.WJ.HUB,hasSession:this.hasSession,entryTitleRenderer:this.recentHubRender,entryIcon:"sitemap"})]}))}}const Ie=ve;var Be=t(48005),Te=t(93101),Re=t(8717);const Le={itemNameGetter:e=>e.identity.name,itemStatusGetter:e=>(0,w.iU)(e.connect_state.id),itemHeaderDescriptionGetter:e=>(0,n.jsx)(i.lB,{text:e.identity.description,emojify:!0}),itemHeaderIconGetter:e=>(0,n.jsx)(Be.Z,{hub:e})},De=(0,Te.J)((e=>{const{match:s,t}=e,o=function(e,s){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&s.indexOf(n)<0&&(t[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)s.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(t[n[o]]=e[n[o]])}return t}(e,["match","t"]);return(0,n.jsx)(a.Z,Object.assign({activeId:(i=s.params,i.id?parseInt(i.id):null),baseUrl:"hubs",newCaption:t((0,Re.zS)("new",m.jv.HUBS),"Connect"),newDescription:t((0,Re.zS)("newDesc",m.jv.HUBS),"Connect to a new hub"),newIcon:d.Z.HUBS_PLAIN,editAccess:u.PS.HUBS_EDIT,uiActions:b,actionIds:["reconnect","clear","favorite"],sessionApi:g.Z,sessionItemLayout:Ze,newLayout:Ie,t,unreadInfoStore:r.Z},Le,o));var i}),r.Z)}}]);
2
- //# sourceMappingURL=hubs.2dbce9b35aa07bab9189.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/hubs.2dbce9b35aa07bab9189.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/style.css","webpack://airdcpp-webui/./src/components/icon/HubIcon.tsx","webpack://airdcpp-webui/./src/actions/ui/HubActions.ts","webpack://airdcpp-webui/./src/stores/HubMessageStore.ts","webpack://airdcpp-webui/./src/stores/HubUserViewStore.js","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubUserTable.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubFooter.tsx","webpack://airdcpp-webui/./src/services/api/HubApi.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubPrompt.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/style.css?5587","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubSession.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubNew.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/Hubs.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".hub-action-prompt {\\n flex-direction: column;\\n align-items: flex-start !important;\\n}\\n\\n.hub-action-prompt .header {\\n margin: 0 0 1rem !important;\\n}\\n\\n.hub-action-prompt .password.prompt .help {\\n margin-top: 10px;\\n}\\n\\n.hub-action-prompt .redirect.prompt {\\n max-width: 100%;\\n overflow: hidden;\\n}\\n\\n.hub.session .virtual-table,\\n.hub.session .offline-message,\\n.hub.session .loader-wrapper {\\n flex: 1;\\n margin-top: 5px;\\n}\\n\\n.hub.session .cell-wrapper.tag,\\n.hub.session .cell-wrapper.nick,\\n.hub.session .cell-wrapper.description,\\n.hub.session .cell-wrapper.share_size {\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.hub.session .cell-wrapper.nick.op {\\n color: steelblue;\\n}\\n.hub.session .session-footer .actions-wrapper > a,\\n.hub.session .session-footer .actions-wrapper > div {\\n /* Don't cut the shadow */\\n padding-left: 1px;\\n padding-bottom: 1px;\\n}\\n\\n.hub.session .session-footer .userlist-button label {\\n color: grey;\\n font-size: small;\\n}\\n\\n.hub.session .session-footer .actions-wrapper .dropdown {\\n margin-left: 10px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/routes/Hubs/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,sBAAsB;EACtB,kCAAkC;AACpC;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;;;EAGE,OAAO;EACP,eAAe;AACjB;;AAEA;;;;EAIE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;AACA;;EAEE,yBAAyB;EACzB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB\",\"sourcesContent\":[\".hub-action-prompt {\\n flex-direction: column;\\n align-items: flex-start !important;\\n}\\n\\n.hub-action-prompt .header {\\n margin: 0 0 1rem !important;\\n}\\n\\n.hub-action-prompt .password.prompt .help {\\n margin-top: 10px;\\n}\\n\\n.hub-action-prompt .redirect.prompt {\\n max-width: 100%;\\n overflow: hidden;\\n}\\n\\n.hub.session .virtual-table,\\n.hub.session .offline-message,\\n.hub.session .loader-wrapper {\\n flex: 1;\\n margin-top: 5px;\\n}\\n\\n.hub.session .cell-wrapper.tag,\\n.hub.session .cell-wrapper.nick,\\n.hub.session .cell-wrapper.description,\\n.hub.session .cell-wrapper.share_size {\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.hub.session .cell-wrapper.nick.op {\\n color: steelblue;\\n}\\n.hub.session .session-footer .actions-wrapper > a,\\n.hub.session .session-footer .actions-wrapper > div {\\n /* Don't cut the shadow */\\n padding-left: 1px;\\n padding-bottom: 1px;\\n}\\n\\n.hub.session .session-footer .userlist-button label {\\n color: grey;\\n font-size: small;\\n}\\n\\n.hub.session .session-footer .actions-wrapper .dropdown {\\n margin-left: 10px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","//import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport Icon, { IconProps } from 'components/semantic/Icon';\nimport { hubOnlineStatusToColor } from 'utils/TypeConvert';\n\nimport * as API from 'types/api';\n\ninterface HubIconProps extends IconProps {\n hub: API.Hub;\n}\n\nconst HubIcon: React.FC<HubIconProps> = ({ hub, ...other }) => (\n <Icon {...other} icon={hubOnlineStatusToColor(hub.connect_state.id) + ' sitemap'} />\n);\n\n/*HubIcon.propTypes = {\n // Hub object\n hub: PropTypes.object.isRequired,\n};*/\n\nexport default HubIcon;\n","import HubConstants from 'constants/HubConstants';\nimport SocketService from 'services/SocketService';\n\nimport ChatActionDecorator from './decorators/ChatActionDecorator';\nimport SessionActionDecorator from './decorators/SessionActionDecorator';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst showFav = (hub: API.Hub) => !hub.favorite_hub;\n\nconst handleFavorite: UI.ActionHandler<API.Hub> = ({ data: hub }) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/favorite`);\n};\n\nconst handleToggleChatNotify: UI.ActionHandler<API.Hub> = ({ data: hub }) => {\n return SocketService.patch(`${HubConstants.SESSIONS_URL}/${hub.id}`, {\n use_main_chat_notify: !hub.settings.use_main_chat_notify,\n });\n};\n\nconst handleToggleJoins: UI.ActionHandler<API.Hub> = ({ data: hub }) => {\n return SocketService.patch(`${HubConstants.SESSIONS_URL}/${hub.id}`, {\n show_joins: !hub.settings.show_joins,\n });\n};\n\nconst handleReconnect: UI.ActionHandler<API.Hub> = ({ data: hub }) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/reconnect`);\n};\n\nconst HubActions: UI.ActionListType<API.Hub> = {\n reconnect: {\n displayName: 'Reconnect',\n access: API.AccessEnum.HUBS_EDIT,\n icon: IconConstants.REFRESH_COLORED,\n handler: handleReconnect,\n },\n favorite: {\n access: API.AccessEnum.HUBS_EDIT,\n displayName: 'Add to favorites',\n icon: IconConstants.FAVORITE,\n filter: showFav,\n handler: handleFavorite,\n notifications: {\n onSuccess: 'The hub {{item.identity.name}} was added in favorites',\n },\n },\n toggleChatNotify: {\n access: API.AccessEnum.HUBS_EDIT,\n displayName: 'Use chat notification',\n handler: handleToggleChatNotify,\n checked: (hub) => {\n return hub.settings.use_main_chat_notify;\n },\n },\n toggleShowJoins: {\n access: API.AccessEnum.HUBS_EDIT,\n displayName: 'Show joins/parts',\n handler: handleToggleJoins,\n checked: (hub) => {\n return hub.settings.show_joins;\n },\n },\n};\n\nconst HubActionsDecorated = SessionActionDecorator(\n ChatActionDecorator(HubActions, HubConstants.SESSIONS_URL, API.AccessEnum.HUBS_EDIT),\n HubConstants.SESSIONS_URL,\n API.AccessEnum.HUBS_EDIT\n);\n\nexport default {\n moduleId: UI.Modules.HUBS,\n actions: HubActionsDecorated,\n};\n","//@ts-ignore\nimport Reflux from 'reflux';\nimport invariant from 'invariant';\n\nimport HubConstants from 'constants/HubConstants';\nimport HubActions from 'actions/reflux/HubActions';\n\nimport MessageStoreDecorator from './decorators/MessageStoreDecorator';\n\nimport AccessConstants from 'constants/AccessConstants';\nimport { SessionScrollPositionKeeper } from './helpers/SessionScrollPositionKeeper';\nimport { AddSocketListener } from 'decorators/SocketSubscriptionDecorator';\n\nconst HubMessageStore = Reflux.createStore({\n scroll: SessionScrollPositionKeeper(),\n\n onSocketConnected(addSocketListener: AddSocketListener) {\n invariant(\n !this.hasMessages(),\n 'No existing hub messages should exist on socket connect'\n );\n invariant(\n !this.hasInitializedSessions(),\n 'No initialized hub sessions should exist on socket connect'\n );\n\n addSocketListener(\n HubConstants.MODULE_URL,\n HubConstants.HUB_MESSAGE,\n this._onChatMessage\n );\n addSocketListener(\n HubConstants.MODULE_URL,\n HubConstants.HUB_STATUS_MESSAGE,\n this._onStatusMessage\n );\n\n addSocketListener(\n HubConstants.MODULE_URL,\n HubConstants.SESSION_UPDATED,\n this._onSessionUpdated\n );\n addSocketListener(\n HubConstants.MODULE_URL,\n HubConstants.SESSION_REMOVED,\n this._onSessionRemoved\n );\n },\n});\n\nexport default MessageStoreDecorator(\n HubMessageStore,\n HubActions,\n AccessConstants.HUBS_VIEW\n);\n","import ViewStoreMixin from 'mixins/ViewStoreMixin';\nimport Reflux from 'reflux';\nimport HubConstants from 'constants/HubConstants';\nimport HubSessionStore from './HubSessionStore';\n\nexport default Reflux.createStore({\n _viewName: 'hub_user_view',\n _apiUrl: HubConstants.SESSIONS_URL,\n _sessionStore: HubSessionStore,\n mixins: [ViewStoreMixin('nick')],\n});\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport HubSessionStore from 'stores/HubSessionStore';\nimport HubUserViewStore from 'stores/HubUserViewStore';\n\nimport { Column } from 'fixed-data-table-2';\nimport VirtualTable from 'components/table/VirtualTable';\nimport { SizeCell, ConnectionCell, IpCell } from 'components/table/Cell';\n\nimport { TableUserMenu } from 'components/action-menu';\n\nimport Message from 'components/semantic/Message';\nimport Loader from 'components/semantic/Loader';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport IconConstants from 'constants/IconConstants';\nimport MenuConstants from 'constants/MenuConstants';\n\ninterface NickCellProps extends RowWrapperCellChildProps<string, API.HubUser> {\n session: API.Hub;\n}\n\nconst NickCell: React.FC<NickCellProps> = ({ cellData, rowDataGetter, session }) => (\n <TableUserMenu\n text={cellData}\n user={rowDataGetter!()}\n userIcon={true}\n remoteMenuId={MenuConstants.HUB_USER}\n entityId={session.id}\n />\n);\n\ninterface HubUserTableProps {\n session: API.Hub;\n sessionT: UI.ModuleTranslator;\n}\n\nclass HubUserTable extends React.Component<HubUserTableProps> {\n static propTypes = {\n session: PropTypes.object, // required\n };\n\n rowClassNameGetter = (user: API.HubUser) => {\n return user.flags.join(' ');\n };\n\n emptyRowsNodeGetter = () => {\n const { session, sessionT } = this.props;\n const connectState = session.connect_state.id;\n\n if (\n connectState === API.HubConnectStateEnum.DISCONNECTED ||\n connectState === API.HubConnectStateEnum.REDIRECT\n ) {\n return (\n <div className=\"offline-message\">\n <Message\n className=\"offline\"\n title={sessionT.translate('Not connected to the hub')}\n icon={IconConstants.OFFLINE}\n />\n </div>\n );\n }\n\n const text = sessionT.translate(\n connectState !== API.HubConnectStateEnum.CONNECTED\n ? 'Connecting'\n : 'Loading userlist'\n );\n\n return (\n <div className=\"loader-wrapper\">\n <Loader text={text} />\n </div>\n );\n };\n\n render() {\n const { session } = this.props;\n return (\n <VirtualTable\n store={HubUserViewStore}\n entityId={session.id}\n sessionStore={HubSessionStore}\n rowClassNameGetter={this.rowClassNameGetter}\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\n moduleId={UI.Modules.HUBS}\n >\n <Column\n name=\"Nick\"\n width={170}\n columnKey=\"nick\"\n flexGrow={8}\n cell={<NickCell session={session} />}\n />\n <Column\n name=\"Share size\"\n width={85}\n columnKey=\"share_size\"\n cell={<SizeCell />}\n flexGrow={1}\n />\n <Column name=\"Description\" width={100} columnKey=\"description\" flexGrow={1} />\n <Column name=\"Tag\" width={150} columnKey=\"tag\" flexGrow={2} />\n <Column\n name=\"Upload speed\"\n width={80}\n columnKey=\"upload_speed\"\n cell={<ConnectionCell />}\n flexGrow={2}\n />\n <Column\n name=\"Download speed\"\n width={80}\n columnKey=\"download_speed\"\n cell={<ConnectionCell />}\n flexGrow={2}\n />\n <Column\n name=\"IP (v4)\"\n width={120}\n columnKey=\"ip4\"\n flexGrow={3}\n cell={<IpCell />}\n />\n <Column\n name=\"IP (v6)\"\n width={120}\n columnKey=\"ip6\"\n flexGrow={3}\n cell={<IpCell />}\n />\n <Column name=\"Files\" width={70} columnKey=\"file_count\" flexGrow={3} />\n </VirtualTable>\n );\n }\n}\n\nexport default HubUserTable;\n","//import PropTypes from 'prop-types';\nimport { useEffect, useState, useContext } from 'react';\n\nimport * as React from 'react';\n\nimport HubConstants from 'constants/HubConstants';\nimport SocketService from 'services/SocketService';\nimport HubSessionStore from 'stores/HubSessionStore';\n\nimport { formatSize } from 'utils/ValueFormat';\nimport { SessionFooter, FooterItem } from 'routes/Sidebar/components/SessionFooter';\nimport EncryptionState from 'components/EncryptionState';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { ErrorResponse } from 'airdcpp-apisocket';\nimport {\n SocketSubscriptionDecorator,\n SocketSubscriptionDecoratorChildProps,\n} from 'decorators/SocketSubscriptionDecorator';\nimport { useMobileLayout } from 'utils/BrowserUtils';\nimport { LayoutWidthContext } from 'context/LayoutWidthContext';\nimport { ActionMenu } from 'components/action-menu';\nimport HubActions from 'actions/ui/HubActions';\n\ninterface HubFooterProps {\n session: API.Hub;\n userlistToggle: React.ReactNode;\n sessionT: UI.ModuleTranslator;\n}\n\ntype DataProps = SocketSubscriptionDecoratorChildProps<HubFooterProps>;\nconst HubFooter: React.FC<HubFooterProps & DataProps> = (props) => {\n const [counts, setCounts] = useState<API.HubCounts>({\n share_size: 0,\n user_count: 0,\n });\n\n useEffect(() => {\n // Fetch initial\n SocketService.get<API.HubCounts>(\n `${HubConstants.SESSIONS_URL}/${props.session.id}/counts`\n )\n .then(setCounts)\n .catch((error: ErrorResponse) =>\n console.error('Failed to fetch hub counts', error.message)\n );\n\n // Subscription\n const url = HubConstants.SESSIONS_URL;\n props.addSocketListener(\n url,\n HubConstants.SESSION_COUNTS_UPDATED,\n (data: API.HubCounts) => setCounts(data),\n props.session.id\n );\n\n return () => props.removeSocketListeners(props);\n }, [props.session]);\n\n const layoutWidth = useContext(LayoutWidthContext);\n\n const { userlistToggle, session, sessionT } = props;\n const { user_count: users, share_size: shared } = counts;\n\n const averageShare = formatSize(users > 0 ? shared / users : 0, sessionT.plainT);\n return (\n <SessionFooter>\n <FooterItem\n text={\n <>\n <EncryptionState encryption={session.encryption} />\n {sessionT.t('xUsers', {\n defaultValue: '{{count}} user',\n defaultValue_plural: '{{count}} users',\n count: users,\n replace: {\n count: users,\n },\n })}\n </>\n }\n />\n {!useMobileLayout(layoutWidth) && (\n <FooterItem\n text={sessionT.t('sharePerUser', {\n defaultValue: '{{total}} ({{average}}/user)',\n replace: {\n total: formatSize(shared, sessionT.plainT),\n average: averageShare,\n },\n })}\n />\n )}\n <div className=\"actions-wrapper\">\n <div className=\"actions\">\n {userlistToggle}\n <ActionMenu\n className=\"top left pointing\"\n actions={HubActions}\n ids={['toggleChatNotify', 'toggleShowJoins']}\n header={sessionT.translate('Notification settings')}\n itemData={session}\n triggerIcon={\n session.settings.use_main_chat_notify || session.settings.show_joins\n ? 'yellow bell'\n : 'bell'\n }\n />\n </div>\n </div>\n </SessionFooter>\n );\n};\n\nexport default SocketSubscriptionDecorator(\n HubFooter,\n ({ session }) => !!HubSessionStore.getSession(session.id)\n);\n","import HubConstants from 'constants/HubConstants';\nimport SocketService from 'services/SocketService';\n\nimport * as API from 'types/api';\nimport {\n sendChatMessageDecorator,\n clearMessagesDecorator,\n setReadDecorator,\n fetchMessagesDecorator,\n} from './common/ChatActions';\n//import * as UI from 'types/ui';\n\nexport const sendHubPassword = (hub: API.Hub, password: string) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/password`, {\n password: password,\n });\n};\n\nexport const acceptHubRedirect = (hub: API.Hub) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/redirect`);\n};\n\nexport const sendHubChatMessage = sendChatMessageDecorator(HubConstants.SESSIONS_URL);\nexport const clearHubChatMessages = clearMessagesDecorator(HubConstants.SESSIONS_URL);\nexport const fetchHubChatMessages = fetchMessagesDecorator(HubConstants.SESSIONS_URL);\n\nexport const setHubSessionRead = setReadDecorator(HubConstants.SESSIONS_URL);\n","//import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport ActionInput from 'components/semantic/ActionInput';\nimport Button from 'components/semantic/Button';\n\nimport LoginStore from 'stores/LoginStore';\nimport Icon, { IconType } from 'components/semantic/Icon';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { Trans } from 'react-i18next';\nimport { sendHubPassword, acceptHubRedirect } from 'services/api/HubApi';\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\nimport IconConstants from 'constants/IconConstants';\n\ninterface HubActionPromptProps {\n icon: IconType;\n title: React.ReactNode;\n content: React.ReactNode;\n}\n\n// Main prompt (HUBS_EDIT permission is required for the content to be rendered)\nconst HubActionPrompt: React.FC<HubActionPromptProps> = ({ icon, title, content }) => {\n if (!LoginStore.hasAccess(API.AccessEnum.HUBS_EDIT)) {\n return null;\n }\n\n return (\n <div className=\"ui icon message hub-action-prompt\">\n <h3 className=\"ui header\">\n <Icon icon={icon} />\n <div className=\"content\">{title}</div>\n </h3>\n {content}\n </div>\n );\n};\n\n/*HubActionPrompt.propTypes = {\n // Message title\n title: PropTypes.node.isRequired,\n\n // Children\n content: PropTypes.node.isRequired,\n};*/\n\ninterface PasswordPromptProps {\n hub: API.Hub;\n sessionT: UI.ModuleTranslator;\n}\n\n// Sub prompts\nconst PasswordPrompt: React.FC<PasswordPromptProps> = ({ hub, sessionT }) => (\n <div className=\"password prompt\">\n <ActionInput\n placeholder={sessionT.translate('Password')}\n caption={sessionT.translate('Submit')}\n icon={IconConstants.CONNECT}\n handleAction={(text) =>\n runBackgroundSocketAction(() => sendHubPassword(hub, text), sessionT.plainT)\n }\n />\n <div className=\"help\">\n <Trans i18nKey={sessionT.toI18nKey('passwordPromptHelp')}>\n This usually means that there's a registered account associated with your nick. If\n you don't remember having a registered account in this hub, there may be someone\n else using the same nick.\n </Trans>\n </div>\n </div>\n);\n\ninterface RedirectPromptProps {\n hub: API.Hub;\n sessionT: UI.ModuleTranslator;\n}\n\nconst RedirectPrompt: React.FC<RedirectPromptProps> = ({ hub, sessionT }) => (\n <Button\n className=\"redirect prompt\"\n icon={IconConstants.CONNECT}\n onClick={(_) =>\n runBackgroundSocketAction(() => acceptHubRedirect(hub), sessionT.plainT)\n }\n caption={sessionT.t('acceptRedirect', {\n defaultValue: 'Accept redirect to {{url}}',\n replace: {\n url: hub.connect_state.data!.hub_url,\n },\n })}\n />\n);\n\nexport { RedirectPrompt, PasswordPrompt, HubActionPrompt };\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { Component } from 'react';\n\nimport HubMessageStore from 'stores/HubMessageStore';\n\nimport { loadSessionProperty, saveSessionProperty } from 'utils/BrowserUtils';\nimport Checkbox from 'components/semantic/Checkbox';\n\nimport ChatLayout, {\n ChatAPI,\n ChatActionList,\n} from 'routes/Sidebar/components/chat/ChatLayout';\nimport HubUserTable from 'routes/Sidebar/routes/Hubs/components/HubUserTable';\n\nimport HubFooter from 'routes/Sidebar/routes/Hubs/components/HubFooter';\nimport {\n RedirectPrompt,\n PasswordPrompt,\n HubActionPrompt,\n} from 'routes/Sidebar/routes/Hubs/components/HubPrompt';\n\nimport '../style.css';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { SessionChildProps } from 'routes/Sidebar/components/SessionLayout';\nimport { shareTempFile } from 'services/api/ShareApi';\nimport HubActions from 'actions/reflux/HubActions';\nimport IconConstants from 'constants/IconConstants';\nimport MenuConstants from 'constants/MenuConstants';\n\nconst getStorageKey = (props: HubSessionProps) => {\n return `view_userlist_${props.session.id}`;\n};\n\nconst checkList = (props: HubSessionProps) => {\n return loadSessionProperty(getStorageKey(props), false);\n};\n\ntype HubSessionProps = SessionChildProps<API.Hub, UI.EmptyObject, ChatActionList>;\n\nclass HubSession extends Component<HubSessionProps> {\n static displayName = 'HubSession';\n\n state = {\n showList: checkList(this.props),\n };\n\n componentDidUpdate(prevProps: HubSessionProps) {\n if (\n prevProps.session.id !== this.props.session.id &&\n this.state.showList !== checkList(this.props)\n ) {\n this.toggleListState();\n }\n }\n\n toggleListState = () => {\n this.setState({ showList: !this.state.showList });\n };\n\n getMessage = () => {\n const { session, sessionT } = this.props;\n const connectState = session.connect_state.id;\n\n if (connectState === API.HubConnectStateEnum.PASSWORD) {\n return (\n <HubActionPrompt\n title={sessionT.translate('Password required')}\n icon={IconConstants.LOCK}\n content={<PasswordPrompt hub={session} sessionT={sessionT} />}\n />\n );\n }\n\n if (connectState === API.HubConnectStateEnum.REDIRECT) {\n return (\n <HubActionPrompt\n title={sessionT.translate('Redirect requested')}\n icon={IconConstants.REDIRECT}\n content={<RedirectPrompt hub={session} sessionT={sessionT} />}\n />\n );\n }\n\n return null;\n };\n\n onClickUsers = () => {\n this.toggleListState();\n\n saveSessionProperty(getStorageKey(this.props), this.state.showList);\n };\n\n handleFileUpload = (file: File) => {\n const { hub_url } = this.props.session;\n return shareTempFile(file, hub_url, undefined);\n };\n\n render() {\n const { session, sessionApi, sessionT, uiActions } = this.props;\n const { showList } = this.state;\n\n const checkbox = (\n <Checkbox\n className=\"userlist-button\"\n type=\"toggle\"\n caption={sessionT.translate('User list')}\n onChange={this.onClickUsers}\n checked={showList}\n />\n );\n\n return (\n <div className=\"hub chat session\">\n {this.getMessage()}\n {showList ? (\n <HubUserTable session={session} sessionT={sessionT} />\n ) : (\n <ChatLayout\n messageStore={HubMessageStore}\n chatApi={HubActions as ChatAPI}\n sessionApi={sessionApi}\n chatActions={uiActions}\n chatAccess={API.AccessEnum.HUBS_SEND}\n session={session}\n handleFileUpload={this.handleFileUpload}\n highlightRemoteMenuId={MenuConstants.HUB_MESSAGE_HIGHLIGHT}\n />\n )}\n <HubFooter userlistToggle={checkbox} session={session} sessionT={sessionT} />\n </div>\n );\n }\n}\n\nexport default HubSession;\n","import { Component } from 'react';\n\nimport HubSearchInput from 'components/autosuggest/HubSearchInput';\nimport RecentLayout from 'routes/Sidebar/components/RecentLayout';\n\nimport Message from 'components/semantic/Message';\nimport { Link } from 'react-router-dom';\n\nimport HubActions from 'actions/reflux/HubActions';\nimport HubSessionStore from 'stores/HubSessionStore';\n\nimport { HistoryEntryEnum } from 'constants/HistoryConstants';\n\nimport * as API from 'types/api';\n\nimport { Trans } from 'react-i18next';\nimport { NewSessionLayoutProps } from 'routes/Sidebar/components/SessionLayout';\nimport IconConstants from 'constants/IconConstants';\nimport Button from 'components/semantic/Button';\n\nclass HubNew extends Component<NewSessionLayoutProps> {\n handleConnect = (hubUrl: string) => {\n HubActions.createSession(this.props.location, hubUrl, HubSessionStore);\n };\n\n hasSession = (entry: API.HistoryItem) => {\n return HubSessionStore.getSessionByUrl(entry.hub_url);\n };\n\n recentHubRender = (entry: API.HistoryItem) => {\n return <a onClick={(_) => this.handleConnect(entry.hub_url)}>{entry.name}</a>;\n };\n\n render() {\n const { sessionT } = this.props;\n return (\n <div className=\"hub session new\">\n <HubSearchInput\n submitHandler={this.handleConnect}\n button={\n <Button\n icon={IconConstants.CONNECT}\n caption={sessionT.translate('Connect')}\n />\n }\n />\n <Message\n description={\n <Trans\n i18nKey={sessionT.toI18nKey('favoriteHubsHint')}\n defaults=\"Tip: visit the <url>Favorite hubs</url> page to connect using custom settings\"\n components={{\n url: <Link to=\"/favorite-hubs\" />,\n }}\n />\n }\n />\n <RecentLayout\n entryType={HistoryEntryEnum.HUB}\n hasSession={this.hasSession}\n entryTitleRenderer={this.recentHubRender}\n entryIcon=\"sitemap\"\n />\n </div>\n );\n }\n}\n\nexport default HubNew;\n","import * as React from 'react';\n\nimport { TextDecorator } from 'components/text';\n\nimport SessionLayout from 'routes/Sidebar/components/SessionLayout';\n\nimport HubSessionStore from 'stores/HubSessionStore';\nimport HubUIActions from 'actions/ui/HubActions';\nimport HubAPIActions from 'actions/reflux/HubActions';\n\nimport { hubOnlineStatusToColor } from 'utils/TypeConvert';\n\nimport HubSession from 'routes/Sidebar/routes/Hubs/components/HubSession';\nimport HubNew from 'routes/Sidebar/routes/Hubs/components/HubNew';\nimport HubIcon from 'components/icon/HubIcon';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport {\n SessionProviderDecorator,\n SessionProviderDecoratorChildProps,\n} from 'routes/Sidebar/decorators/SessionProviderDecorator';\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport IconConstants from 'constants/IconConstants';\n\nconst ItemHandler: UI.SessionInfoGetter<API.Hub> = {\n itemNameGetter(session) {\n return session.identity.name;\n },\n\n itemStatusGetter(session) {\n return hubOnlineStatusToColor(session.connect_state.id);\n },\n\n itemHeaderDescriptionGetter(session) {\n return <TextDecorator text={session.identity.description} emojify={true} />;\n },\n\n itemHeaderIconGetter(session) {\n return <HubIcon hub={session} />;\n },\n};\n\nconst parseNumericId = (params: UI.SessionRouteParams) => {\n if (!params.id) {\n return null;\n }\n\n return parseInt(params['id']);\n};\n\n//const hubActions = [ 'reconnect', 'favorite', 'clear' ];\n\nconst Hubs: React.FC<SessionProviderDecoratorChildProps<API.Hub>> = (props) => {\n const { match, t, ...other } = props;\n return (\n <SessionLayout\n activeId={parseNumericId(match.params)}\n baseUrl=\"hubs\"\n newCaption={t(toI18nKey('new', UI.Modules.HUBS), 'Connect')}\n newDescription={t(toI18nKey('newDesc', UI.Modules.HUBS), 'Connect to a new hub')}\n newIcon={IconConstants.HUBS_PLAIN}\n editAccess={API.AccessEnum.HUBS_EDIT}\n uiActions={HubUIActions}\n actionIds={['reconnect', 'clear', 'favorite']}\n sessionApi={HubAPIActions as UI.SessionActions<API.Hub>}\n sessionItemLayout={HubSession}\n newLayout={HubNew}\n t={t}\n unreadInfoStore={HubSessionStore}\n {...ItemHandler}\n {...other}\n />\n );\n};\n\nexport default SessionProviderDecorator(Hubs, HubSessionStore);\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","hub","other","icon","connect_state","HubActions","reconnect","displayName","access","IconConstants","handler","data","SocketService","HubConstants","favorite","filter","favorite_hub","notifications","onSuccess","toggleChatNotify","use_main_chat_notify","settings","checked","toggleShowJoins","show_joins","HubActionsDecorated","SessionActionDecorator","ChatActionDecorator","moduleId","actions","HubMessageStore","scroll","SessionScrollPositionKeeper","onSocketConnected","addSocketListener","this","hasMessages","hasInitializedSessions","_onChatMessage","_onStatusMessage","_onSessionUpdated","_onSessionRemoved","MessageStoreDecorator","AccessConstants","_viewName","_apiUrl","_sessionStore","HubSessionStore","mixins","ViewStoreMixin","NickCell","cellData","rowDataGetter","session","text","user","userIcon","remoteMenuId","MenuConstants","entityId","HubUserTable","rowClassNameGetter","flags","join","emptyRowsNodeGetter","sessionT","props","connectState","className","Message","title","translate","Loader","render","VirtualTable","store","HubUserViewStore","sessionStore","Column","name","width","columnKey","flexGrow","cell","propTypes","SocketSubscriptionDecorator","counts","setCounts","useState","share_size","user_count","useEffect","then","catch","error","console","message","url","removeSocketListeners","layoutWidth","useContext","LayoutWidthContext","userlistToggle","users","shared","averageShare","plainT","SessionFooter","EncryptionState","encryption","t","defaultValue","defaultValue_plural","count","replace","total","average","ids","header","itemData","triggerIcon","HubActionPrompt","content","LoginStore","Icon","PasswordPrompt","ActionInput","placeholder","caption","handleAction","password","sendHubPassword","i18nKey","toI18nKey","RedirectPrompt","Button","onClick","_","acceptHubRedirect","hub_url","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","getStorageKey","checkList","HubSession","Component","state","showList","toggleListState","setState","getMessage","onClickUsers","handleFileUpload","file","undefined","componentDidUpdate","prevProps","sessionApi","uiActions","checkbox","Checkbox","type","onChange","ChatLayout","messageStore","chatApi","chatActions","chatAccess","highlightRemoteMenuId","HubNew","handleConnect","hubUrl","location","hasSession","entry","recentHubRender","HubSearchInput","submitHandler","button","description","defaults","components","to","RecentLayout","entryType","entryTitleRenderer","entryIcon","ItemHandler","itemNameGetter","identity","itemStatusGetter","itemHeaderDescriptionGetter","emojify","itemHeaderIconGetter","HubIcon","SessionProviderDecorator","match","SessionLayout","activeId","params","parseInt","baseUrl","newCaption","newDescription","newIcon","editAccess","actionIds","sessionItemLayout","newLayout","unreadInfoStore"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[946],{80569:e=>{e.exports={}}}]);