airdcpp-webui 2.11.2-beta.2 → 2.11.3-beta.2

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 (174) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.html +2 -2
  3. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js +2 -0
  4. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.gz +0 -0
  5. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.map +1 -0
  6. package/dist/js/334.dba054251a3e485f3ea9.chunk.js +2 -0
  7. package/dist/js/334.dba054251a3e485f3ea9.chunk.js.gz +0 -0
  8. package/dist/js/334.dba054251a3e485f3ea9.chunk.js.map +1 -0
  9. package/dist/js/424.44413ba27808d4072f7f.chunk.js +2 -0
  10. package/dist/js/424.44413ba27808d4072f7f.chunk.js.gz +0 -0
  11. package/dist/js/424.44413ba27808d4072f7f.chunk.js.map +1 -0
  12. package/dist/js/{668.ca79db34c1e147bd25d0.chunk.js → 668.2579506f7fa8bed8a452.chunk.js} +2 -2
  13. package/dist/js/668.2579506f7fa8bed8a452.chunk.js.gz +0 -0
  14. package/dist/js/668.2579506f7fa8bed8a452.chunk.js.map +1 -0
  15. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js +2 -0
  16. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.gz +0 -0
  17. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.map +1 -0
  18. package/dist/js/{702.dd4be667774bce5de14f.chunk.js → 702.d36d38b2be52ab51c0a9.chunk.js} +1 -1
  19. package/dist/js/702.d36d38b2be52ab51c0a9.chunk.js.gz +0 -0
  20. package/dist/js/{702.dd4be667774bce5de14f.chunk.js.map → 702.d36d38b2be52ab51c0a9.chunk.js.map} +1 -1
  21. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js +3 -0
  22. package/dist/js/{760.5448a03d335f92bedb53.chunk.js.LICENSE.txt → 760.83634ca054e04ff6c7e2.chunk.js.LICENSE.txt} +0 -0
  23. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.gz +0 -0
  24. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.map +1 -0
  25. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js +2 -0
  26. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.gz +0 -0
  27. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.map +1 -0
  28. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js +2 -0
  29. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.gz +0 -0
  30. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.map +1 -0
  31. package/dist/js/files.51c49d6a2825cbc64879.chunk.js +2 -0
  32. package/dist/js/files.51c49d6a2825cbc64879.chunk.js.gz +0 -0
  33. package/dist/js/files.51c49d6a2825cbc64879.chunk.js.map +1 -0
  34. package/dist/js/home.895154334c98dbe0f183.chunk.js +3 -0
  35. package/dist/js/{home.727a64f6586ed95a66bb.chunk.js.LICENSE.txt → home.895154334c98dbe0f183.chunk.js.LICENSE.txt} +0 -0
  36. package/dist/js/home.895154334c98dbe0f183.chunk.js.gz +0 -0
  37. package/dist/js/home.895154334c98dbe0f183.chunk.js.map +1 -0
  38. package/dist/js/hubs.42526e43270139eb1849.chunk.js +2 -0
  39. package/dist/js/hubs.42526e43270139eb1849.chunk.js.gz +0 -0
  40. package/dist/js/hubs.42526e43270139eb1849.chunk.js.map +1 -0
  41. package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js → ca.ed09d3a3d4bcca929ba1.chunk.js} +0 -0
  42. package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js.gz → ca.ed09d3a3d4bcca929ba1.chunk.js.gz} +0 -0
  43. package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js → da.6f60a77e9ef082dd3bf4.chunk.js} +0 -0
  44. package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js.gz → da.6f60a77e9ef082dd3bf4.chunk.js.gz} +0 -0
  45. package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js → de.3b7d3665460384259e82.chunk.js} +0 -0
  46. package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js.gz → de.3b7d3665460384259e82.chunk.js.gz} +0 -0
  47. package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js → el.598573d2a5ed18804fe0.chunk.js} +0 -0
  48. package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js.gz → el.598573d2a5ed18804fe0.chunk.js.gz} +0 -0
  49. package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js → en.f0fe75dca201449e5e47.chunk.js} +0 -0
  50. package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js.gz → en.f0fe75dca201449e5e47.chunk.js.gz} +0 -0
  51. package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js +1 -0
  52. package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js.gz +0 -0
  53. package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js → eu.7734fc077f26418d6b32.chunk.js} +0 -0
  54. package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js.gz → eu.7734fc077f26418d6b32.chunk.js.gz} +0 -0
  55. package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js → fi.d1f8a5f4048236243b0f.chunk.js} +0 -0
  56. package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js.gz → fi.d1f8a5f4048236243b0f.chunk.js.gz} +0 -0
  57. package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js +1 -0
  58. package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js.gz +0 -0
  59. package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js → hu.d0d2c38a03a3b38c2bc5.chunk.js} +0 -0
  60. package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js.gz → hu.d0d2c38a03a3b38c2bc5.chunk.js.gz} +0 -0
  61. package/dist/js/locales/{it.63acad3d71352720e323.chunk.js → it.0c911d75c50ea83190ad.chunk.js} +0 -0
  62. package/dist/js/locales/{it.63acad3d71352720e323.chunk.js.gz → it.0c911d75c50ea83190ad.chunk.js.gz} +0 -0
  63. package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js → nl.36d288d75b3d3cbabf11.chunk.js} +0 -0
  64. package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js.gz → nl.36d288d75b3d3cbabf11.chunk.js.gz} +0 -0
  65. package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js → no.8f2f465d5f785650175d.chunk.js} +0 -0
  66. package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js.gz → no.8f2f465d5f785650175d.chunk.js.gz} +0 -0
  67. package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js → pl.06e51d7d7b09ba14714d.chunk.js} +0 -0
  68. package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js.gz → pl.06e51d7d7b09ba14714d.chunk.js.gz} +0 -0
  69. package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js → pt-br.9d19d92899e8c0917c66.chunk.js} +0 -0
  70. package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js.gz → pt-br.9d19d92899e8c0917c66.chunk.js.gz} +0 -0
  71. package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js → pt.4390db3955db29b0e7dd.chunk.js} +0 -0
  72. package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js.gz → pt.4390db3955db29b0e7dd.chunk.js.gz} +0 -0
  73. package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js → ro.705fcd327263fcf419bf.chunk.js} +0 -0
  74. package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js.gz → ro.705fcd327263fcf419bf.chunk.js.gz} +0 -0
  75. package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js → ru.8ab7e1c0d9eee7aa7afb.chunk.js} +0 -0
  76. package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js.gz → ru.8ab7e1c0d9eee7aa7afb.chunk.js.gz} +0 -0
  77. package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js → sv.be546e605910932db11f.chunk.js} +0 -0
  78. package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js.gz → sv.be546e605910932db11f.chunk.js.gz} +0 -0
  79. package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js → tr.25a0d0f19e007e2febc9.chunk.js} +0 -0
  80. package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js.gz → tr.25a0d0f19e007e2febc9.chunk.js.gz} +0 -0
  81. package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js +1 -0
  82. package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js.gz +0 -0
  83. package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js → zh_CN.4b75674e4815a965ccea.chunk.js} +0 -0
  84. package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js.gz → zh_CN.4b75674e4815a965ccea.chunk.js.gz} +0 -0
  85. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js +3 -0
  86. package/dist/js/{main.c01c26460331633a96e2.entry.js.LICENSE.txt → main.51b1144fdbc0a681eb6c.entry.js.LICENSE.txt} +0 -0
  87. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.gz +0 -0
  88. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.map +1 -0
  89. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js +2 -0
  90. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.gz +0 -0
  91. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.map +1 -0
  92. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js +2 -0
  93. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.gz +0 -0
  94. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.map +1 -0
  95. package/dist/js/search.af59b1b20b4d7194457b.chunk.js +2 -0
  96. package/dist/js/search.af59b1b20b4d7194457b.chunk.js.gz +0 -0
  97. package/dist/js/search.af59b1b20b4d7194457b.chunk.js.map +1 -0
  98. package/dist/js/settings.b543eade40a723e95c77.chunk.js +2 -0
  99. package/dist/js/settings.b543eade40a723e95c77.chunk.js.gz +0 -0
  100. package/dist/js/settings.b543eade40a723e95c77.chunk.js.map +1 -0
  101. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js +2 -0
  102. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.gz +0 -0
  103. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.map +1 -0
  104. package/dist/js/{system-log.45dba574bcb91efd176c.chunk.js → system-log.b9763d1c0f5cf5966f21.chunk.js} +2 -2
  105. package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.gz +0 -0
  106. package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.map +1 -0
  107. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js +2 -0
  108. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.gz +0 -0
  109. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.map +1 -0
  110. package/dist/sw.js +1 -1
  111. package/dist/sw.js.gz +0 -0
  112. package/package.json +65 -64
  113. package/dist/js/285.744e520b1611ce9c52a5.chunk.js +0 -2
  114. package/dist/js/285.744e520b1611ce9c52a5.chunk.js.gz +0 -0
  115. package/dist/js/285.744e520b1611ce9c52a5.chunk.js.map +0 -1
  116. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js +0 -2
  117. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.gz +0 -0
  118. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.map +0 -1
  119. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js +0 -2
  120. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.gz +0 -0
  121. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.map +0 -1
  122. package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.gz +0 -0
  123. package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.map +0 -1
  124. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js +0 -2
  125. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.gz +0 -0
  126. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.map +0 -1
  127. package/dist/js/702.dd4be667774bce5de14f.chunk.js.gz +0 -0
  128. package/dist/js/760.5448a03d335f92bedb53.chunk.js +0 -3
  129. package/dist/js/760.5448a03d335f92bedb53.chunk.js.gz +0 -0
  130. package/dist/js/760.5448a03d335f92bedb53.chunk.js.map +0 -1
  131. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js +0 -2
  132. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.gz +0 -0
  133. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.map +0 -1
  134. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js +0 -2
  135. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.gz +0 -0
  136. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.map +0 -1
  137. package/dist/js/files.bb297a4f890216386a57.chunk.js +0 -2
  138. package/dist/js/files.bb297a4f890216386a57.chunk.js.gz +0 -0
  139. package/dist/js/files.bb297a4f890216386a57.chunk.js.map +0 -1
  140. package/dist/js/home.727a64f6586ed95a66bb.chunk.js +0 -3
  141. package/dist/js/home.727a64f6586ed95a66bb.chunk.js.gz +0 -0
  142. package/dist/js/home.727a64f6586ed95a66bb.chunk.js.map +0 -1
  143. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js +0 -2
  144. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.gz +0 -0
  145. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.map +0 -1
  146. package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js +0 -1
  147. package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js.gz +0 -0
  148. package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js +0 -1
  149. package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js.gz +0 -0
  150. package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js +0 -1
  151. package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js.gz +0 -0
  152. package/dist/js/main.c01c26460331633a96e2.entry.js +0 -3
  153. package/dist/js/main.c01c26460331633a96e2.entry.js.gz +0 -0
  154. package/dist/js/main.c01c26460331633a96e2.entry.js.map +0 -1
  155. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js +0 -2
  156. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.gz +0 -0
  157. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.map +0 -1
  158. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js +0 -2
  159. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.gz +0 -0
  160. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.map +0 -1
  161. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js +0 -2
  162. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.gz +0 -0
  163. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.map +0 -1
  164. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js +0 -2
  165. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.gz +0 -0
  166. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.map +0 -1
  167. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js +0 -2
  168. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.gz +0 -0
  169. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.map +0 -1
  170. package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.gz +0 -0
  171. package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.map +0 -1
  172. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js +0 -2
  173. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.gz +0 -0
  174. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[557],{75696:(e,t,r)=>{r.d(t,{Z:()=>a});var o=r(87537),i=r.n(o),s=r(23645),n=r.n(s)()(i());n.push([e.id,".share-directory .Select {\r\n margin-bottom: 0px;\r\n}","",{version:3,sources:["webpack://./src/routes/Share/style.css"],names:[],mappings:"AAAA;EACE,kBAAkB;AACpB",sourcesContent:[".share-directory .Select {\r\n margin-bottom: 0px;\r\n}"],sourceRoot:""}]);const a=n},29416:(e,t,r)=>{r.d(t,{Z:()=>l});var o=r(518),i=r(4047),s=r(48117),n=r(76249),a=r(32347);const c={refresh:{displayName:"Refresh all",access:n.PS.SETTINGS_EDIT,icon:s.Z.REFRESH_COLORED,handler:()=>o.Z.post(i.Z.REFRESH_URL)}},l={moduleId:a.jv.SHARE,actions:c}},82633:(e,t,r)=>{r.d(t,{Z:()=>i});const o="share_profiles",i={MODULE_URL:o,PROFILES_URL:o,PROFILE_ADDED:"share_profile_added",PROFILE_UPDATED:"share_profile_updated",PROFILE_REMOVED:"share_profile_removed",HIDDEN_PROFILE_ID:1}},37354:(e,t,r)=>{r.d(t,{Z:()=>s});var o=r(85893),i=r(67294);function s(e,t=60){class r extends i.Component{constructor(){super(...arguments),this.scheduleComponentRefresh=()=>{this.redrawTimeout=window.setTimeout((()=>{this.forceUpdate(),this.scheduleComponentRefresh()}),1e3*t)}}componentDidMount(){this.scheduleComponentRefresh()}componentWillUnmount(){clearTimeout(this.redrawTimeout)}render(){return(0,o.jsx)(e,Object.assign({},this.props))}}return r}},75426:(e,t,r)=>{r.d(t,{D:()=>a,Z:()=>c});var o=r(96486),i=r(82633),s=r(42090),n=r(2445);const a=e=>({id:e.id,name:e.str}),c=function(e,t,r,a=!0){return(0,s.Z)(e,(0,o.merge)(r,{urls:{profiles:i.Z.PROFILES_URL},dataConverters:{profiles:(e,{t:r})=>e.filter((e=>t||e.id!==i.Z.HIDDEN_PROFILE_ID)).map((e=>((e,t)=>{let r=e.str;return a&&e.id!==i.Z.HIDDEN_PROFILE_ID&&(r+=` (${(0,n.BU)(e.size,t)})`),Object.assign(Object.assign({},e),{str:r})})(e,r)))},onSocketConnected:(e,{refetchData:t})=>{e(i.Z.MODULE_URL,i.Z.PROFILE_ADDED,(()=>t())),e(i.Z.MODULE_URL,i.Z.PROFILE_UPDATED,(()=>t())),e(i.Z.MODULE_URL,i.Z.PROFILE_REMOVED,(()=>t()))}}))}},24646:(e,t,r)=>{r.r(t),r.d(t,{default:()=>ve});var o=r(85893),i=r(67294),s=r(29416),n=r(518),a=r(20097);const c="share_roots",l=c;var d=r(48117),h=r(76249),p=r(32347);const u={create:{displayName:"Add directory",access:h.PS.SETTINGS_EDIT,icon:d.Z.CREATE,handler:({location:e})=>{a.Z.push(`${e.pathname}/directories`)}}},m={edit:{displayName:"Edit directory",access:h.PS.SETTINGS_EDIT,icon:d.Z.EDIT,handler:({data:e,location:t})=>{a.Z.push(`${t.pathname}/directories/${e.id}`)}},remove:{displayName:"Remove directory",access:h.PS.SETTINGS_EDIT,icon:d.Z.REMOVE,confirmation:{content:"Are you sure that you want to remove the directory {{item.virtual_name}} from share? It will be removed from all share profiles.",approveCaption:"Remove directory",rejectCaption:"Don't remove"},handler:({data:e})=>n.Z.delete("share_roots/"+e.id)}},f={create:{moduleId:p.jv.SHARE,subId:"root",actions:u},edit:{moduleId:p.jv.SHARE,subId:"root",actions:m}};var E=r(10293),y=r.n(E),v=r(93836);const _=y().createStore({_viewName:"share_root_view",_apiUrl:"share_roots",mixins:[(0,v.Z)("path")]});var Z=r(78230),R=r(68126),O=r(35108),S=r(28427),g=r(4047),I=r(92245),D=r(75426),j=r(27695),x=r(95887),T=r(9781),w=r(43496),b=r(91894),A=r(61692),L=r(93379),C=r.n(L),P=r(7795),N=r.n(P),F=r(90569),U=r.n(F),H=r(3565),k=r.n(H),G=r(19216),M=r.n(G),$=r(44589),K=r.n($),z=r(75696),B={};B.styleTagTransform=K(),B.setAttributes=k(),B.insert=U().bind(null,"head"),B.domAPI=N(),B.insertStyleElement=M(),C()(z.Z,B),z.Z&&z.Z.locals&&z.Z.locals;var Y=r(18603),V=r(85444);const W=[{key:"path",title:"Path",type:h.Y2.DIRECTORY_PATH},{key:"virtual_name",title:"Virtual name",type:h.Y2.STRING,help:"Directories with identical virtual names will be merged in filelist"},{key:"profiles",type:h.Y2.LIST,item_type:h.Y2.NUMBER,title:"Share profiles",help:"New share profiles can be created from application settings"},{key:"incoming",title:"Incoming",type:h.Y2.BOOLEAN}];class q extends i.Component{constructor(e){super(e),this.isNew=()=>!this.props.rootEntry,this.onFieldChanged=(e,t,r)=>{if(-1!==e.indexOf("path")){const e={virtual_name:t.path?(0,T.HD)(t.path):void 0};return Promise.resolve(e)}return null},this.save=()=>this.form.save(),this.onSave=e=>this.isNew()?n.Z.post(l,e):n.Z.patch(`share_roots/${this.props.rootEntry.id}`,e),this.onFieldSetting=(e,t,r)=>{"path"===e?(t.disabled=!this.isNew(),t.config=Object.assign({}||t.config,{historyId:b.Z.LOCATION_DOWNLOAD})):"virtual_name"===e&&(t.factory=x.ZP.form.Textbox,t.template=A.Lt,t.config={suggestionGetter:()=>this.props.virtualNames})},this.fieldDefinitions=(0,Y.rv)(W,e.shareT);const t=this.fieldDefinitions.find((e=>"profiles"===e.key));Object.assign(t,{options:e.profiles.map(D.D),default_value:[e.profiles.find((e=>e.default)).id]})}render(){const e=this.props,{rootEntry:t,shareT:r}=e,i=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(r[o[i]]=e[o[i]])}return r}(e,["rootEntry","shareT"]),s=r.translate(this.isNew()?"Add share directory":"Edit share directory");return(0,o.jsxs)(S.Z,Object.assign({className:"share-directory",title:s,onApprove:this.save,closable:!1,icon:d.Z.FOLDER},i,{children:[(0,o.jsx)(j.Z,{title:r.translate("Hashing information"),icon:d.Z.INFO,description:(0,o.jsx)(V.c,Object.assign({i18nKey:r.toI18nKey("hashingInformationDesc")},{children:(0,o.jsx)("p",{children:"New files will appear in share only after they have finished hashing (the client has calculated checksums for them). Information about hashing progress will be posted to the event log."})}))}),(0,o.jsx)(w.Z,{ref:e=>this.form=e,fieldDefinitions:this.fieldDefinitions,onFieldChanged:this.onFieldChanged,onFieldSetting:this.onFieldSetting,onSave:this.onSave,value:t,location:this.props.location})]}))}}q.displayName="ShareDirectoryDialog";const X=(0,I.ZP)((0,D.Z)(q,!1,{urls:{virtualNames:g.Z.GROUPED_ROOTS_GET_URL,rootEntry:({match:e},t)=>e.params.directoryId?t.get(`share_roots/${e.params.directoryId}`):Promise.resolve(void 0)},dataConverters:{virtualNames:e=>e.map((e=>e.name),[])}}),"directories/:directoryId([0-9A-Z]{39})?");var J=r(1059),Q=r(99005),ee=r(98374),te=r(16630),re=r(8717),oe=r(26793);const ie=(0,i.memo)((e=>{const{t}=(0,oe.$)(),r={str:(0,re.Iu)("All profiles",t,"table.filter"),id:null},[s,n]=(0,i.useState)(r),a=t=>{e.onFilterUpdated(t.id),n(t)};return(0,o.jsx)(J.Z,Object.assign({className:"top right pointing",caption:s.str,triggerIcon:"filter",button:!0},{children:(0,o.jsx)(Q.Z,Object.assign({caption:(0,re.Iu)("Filter by profile",t,"table.filter"),icon:d.Z.FILTER},{children:[r,...e.profiles].map((e=>((e,t,r)=>(0,o.jsx)(ee.Z,Object.assign({active:r.id===e.id,onClick:()=>t(e)},{children:e.str}),e.id))(e,a,s)))}))}))})),se=(0,D.Z)((0,te.Z)(ie,"profiles"),!1);var ne=r(47021),ae=r(37354),ce=r(2445),le=r(54883),de=r(74225),he=r(89519),pe=r(35936);const ue=(0,ae.Z)((({rowDataGetter:e,cellData:t,t:r})=>{const i=e().status;return i.id!==h.MH.NORMAL?(0,o.jsxs)("div",Object.assign({style:{display:"flex"}},{children:[(0,o.jsx)(pe.Z,{icon:d.Z.CANCEL,color:"red",size:"large",onClick:()=>{const t=e().status.refresh_task_id;t&&(0,he.h9)((()=>(0,de.Ki)(t)),r)}}),(0,o.jsx)(le.Z,{size:"small",inline:!0,text:i.str})]})):(0,o.jsxs)("div",{children:[(0,o.jsx)(pe.Z,{icon:d.Z.REFRESH_COLORED,size:"large",onClick:()=>(0,he.h9)((()=>(0,de._L)([e().path])),r)}),0===t?(0,re.Iu)("Unknown",r,p.jv.SHARE):(0,ce.SY)(t)]})}));var me=r(66883),fe=r(91768),Ee=r(4333);class ye extends i.Component{constructor(){super(...arguments),this.shareT=(0,re.HY)(this.props.t,p.jv.SHARE)}render(){const{translate:e}=this.shareT,t=me.Z.hasAccess(h.PS.SETTINGS_EDIT);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(Z.Z,Object.assign({store:_,customFilter:se,footerData:(0,o.jsx)(ne.PC,Object.assign({className:"top left pointing",caption:e("Actions..."),actions:f.create,header:e("Share actions"),triggerIcon:"chevron up",ids:["create"],button:!0},{children:(0,o.jsx)(ne.PC,{actions:s.Z,ids:["refresh"]})})),moduleId:s.Z.moduleId},{children:[(0,o.jsx)(O.Column,{name:"Path",width:200,columnKey:"path",cell:(0,o.jsx)(R.Nq,{actions:f.edit,remoteMenuId:Ee.Z.SHARE_ROOT}),flexGrow:10}),(0,o.jsx)(O.Column,{name:"Size",width:60,columnKey:"size",cell:(0,o.jsx)(R.Eh,{}),flexGrow:2}),(0,o.jsx)(O.Column,{name:"Content",width:150,columnKey:"type",hideWidth:1e3}),(0,o.jsx)(O.Column,{name:"Virtual name",width:120,columnKey:"virtual_name",flexGrow:5}),(0,o.jsx)(O.Column,{name:"Profiles",width:65,columnKey:"profiles"}),(0,o.jsx)(O.Column,{name:"Last refreshed",width:80,flexGrow:3,columnKey:"last_refresh_time",cell:t?(0,o.jsx)(ue,{}):(0,o.jsx)(R.Ks,{})})]})),(0,o.jsx)(X,{shareT:this.shareT})]})}}ye.displayName="Share";const ve=(0,fe.Z)()(ye)},34698:(e,t,r)=>{r.d(t,{S:()=>n,b:()=>a});var o=r(66883),i=r(37576),s=function(e,t,r,o){return new(r||(r=Promise))((function(i,s){function n(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,a)}c((o=o.apply(e,t||[])).next())}))};const n=e=>s(void 0,void 0,void 0,(function*(){try{return(yield(0,i.r)(`${getBasePath()}temp`,{method:"POST",headers:{"X-Authorization":o.Z.authToken,Authorization:o.Z.authToken},body:e})).headers.get("Location")}catch(e){throw e}})),a=(e,t,r)=>s(void 0,void 0,void 0,(function*(){try{const s=yield(0,i.r)((e=>`${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(e)}`)(e),Object.assign({headers:{"X-Authorization":o.Z.authToken,"Cache-Control":"no-store, must-revalidate, max-age=0"}},r));return(yield t)?s.json():s.text()}catch(t){throw console.error(`CORS HTTP request failed (${e})`,t),t}}))},74225:(e,t,r)=>{r.d(t,{Ki:()=>d,Pd:()=>a,_L:()=>c,u4:()=>l});var o=r(4047),i=r(518),s=r(34698),n=r(76249);const a=(e,t,r)=>{return n=void 0,a=void 0,l=function*(){try{const n=yield(0,s.S)(e);return yield i.Z.post(o.Z.TEMP_SHARES_URL,{name:e.name,file_id:n,hub_url:t,cid:r})}catch(e){throw e}},new((c=void 0)||(c=Promise))((function(e,t){function r(e){try{i(l.next(e))}catch(e){t(e)}}function o(e){try{i(l.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof c?i:new c((function(e){e(i)}))).then(r,o)}i((l=l.apply(n,a||[])).next())}));var n,a,c,l},c=e=>i.Z.post(o.Z.REFRESH_PATHS_URL,{paths:e,priority:n.VL.MANUAL}),l=e=>i.Z.post(o.Z.REFRESH_VIRTUAL_URL,{path:e}),d=e=>i.Z.delete(`${o.Z.REFRESH_TASKS_URL}/${e}`)}}]);
2
+ //# sourceMappingURL=share.f06abf75f7f2a6afc1b3.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/share.f06abf75f7f2a6afc1b3.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Share/style.css","webpack://airdcpp-webui/./src/actions/ui/ShareActions.ts","webpack://airdcpp-webui/./src/constants/ShareProfileConstants.ts","webpack://airdcpp-webui/./src/decorators/RedrawDecorator.tsx","webpack://airdcpp-webui/./src/decorators/ShareProfileDecorator.tsx","webpack://airdcpp-webui/./src/constants/ShareRootConstants.ts","webpack://airdcpp-webui/./src/actions/ui/ShareRootActions.ts","webpack://airdcpp-webui/./src/stores/ShareRootStore.js","webpack://airdcpp-webui/./src/routes/Share/style.css?7048","webpack://airdcpp-webui/./src/routes/Share/components/ShareDirectoryDialog.tsx","webpack://airdcpp-webui/./src/components/table/ShareProfileFilter.tsx","webpack://airdcpp-webui/./src/routes/Share/components/RefreshCell.tsx","webpack://airdcpp-webui/./src/routes/Share/components/Share.tsx","webpack://airdcpp-webui/./src/services/HttpService.ts","webpack://airdcpp-webui/./src/services/api/ShareApi.ts"],"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, \".share-directory .Select {\\r\\n margin-bottom: 0px;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Share/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB\",\"sourcesContent\":[\".share-directory .Select {\\r\\n margin-bottom: 0px;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\nconst handleRefresh = () => {\r\n return SocketService.post(ShareConstants.REFRESH_URL);\r\n};\r\n\r\n\r\nconst ShareActions: UI.ActionListType<undefined> = {\r\n refresh: {\r\n displayName: 'Refresh all',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.REFRESH_COLORED,\r\n handler: handleRefresh,\r\n },\r\n};\r\n\r\nexport default {\r\n moduleId: UI.Modules.SHARE,\r\n actions: ShareActions,\r\n};\r\n\r\n","const MODULE_URL = 'share_profiles';\r\nexport default {\r\n MODULE_URL: MODULE_URL,\r\n PROFILES_URL: MODULE_URL,\r\n\r\n PROFILE_ADDED: 'share_profile_added',\r\n PROFILE_UPDATED: 'share_profile_updated',\r\n PROFILE_REMOVED: 'share_profile_removed',\r\n\r\n HIDDEN_PROFILE_ID: 1\r\n}\r\n;\r\n","import * as React from 'react';\r\n\r\n\r\nexport default function <PropsT>(\r\n Component: React.ComponentType<PropsT>, \r\n redrawIntervalSeconds: number = 60\r\n) {\r\n class RedrawDecorator extends React.Component<PropsT> {\r\n redrawTimeout: number | undefined;\r\n\r\n componentDidMount() {\r\n this.scheduleComponentRefresh();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.redrawTimeout);\r\n }\r\n\r\n scheduleComponentRefresh = () => {\r\n this.redrawTimeout = window.setTimeout(\r\n () => { \r\n this.forceUpdate();\r\n this.scheduleComponentRefresh();\r\n }, \r\n redrawIntervalSeconds * 1000\r\n );\r\n }\r\n\r\n render() {\r\n return <Component {...this.props}/>;\r\n }\r\n }\r\n\r\n return RedrawDecorator;\r\n}\r\n","import * as React from 'react';\r\nimport { merge } from 'lodash';\r\n\r\nimport ShareProfileConstants from 'constants/ShareProfileConstants';\r\n\r\nimport DataProviderDecorator, { \r\n DataProviderDecoratorChildProps, DataProviderDecoratorSettings, DataConverter \r\n} from 'decorators/DataProviderDecorator';\r\n\r\nimport { formatSize } from 'utils/ValueFormat';\r\n\r\nimport * as API from 'types/api';\r\nimport { TFunction } from 'i18next';\r\n\r\n\r\ninterface ShareProfileDecoratorDataProps {\r\n profiles: API.ShareProfile[];\r\n}\r\n\r\nexport const profileToEnumValue = (profile: API.ShareProfile) => {\r\n return {\r\n id: profile.id,\r\n name: profile.str,\r\n };\r\n};\r\n\r\nexport type ShareProfileDecoratorChildProps = DataProviderDecoratorChildProps & ShareProfileDecoratorDataProps;\r\n\r\nconst ShareProfileDecorator = function <PropsT extends object>(\r\n Component: React.ComponentType<PropsT & ShareProfileDecoratorChildProps>, \r\n listHidden: boolean, \r\n dataProviderDecoratorSettings?: DataProviderDecoratorSettings<PropsT, ShareProfileDecoratorDataProps>,\r\n addSize: boolean = true\r\n) {\r\n const convertProfile = (profile: API.ShareProfile, t: TFunction): API.ShareProfile => {\r\n let str = profile.str;\r\n if (addSize && profile.id !== ShareProfileConstants.HIDDEN_PROFILE_ID) {\r\n str += ` (${formatSize(profile.size, t)})`;\r\n }\r\n\r\n return {\r\n ...profile,\r\n str,\r\n };\r\n };\r\n\r\n const convertProfiles: DataConverter<PropsT> = (data: API.ShareProfile[], { t }) => {\r\n const profiles = data\r\n .filter(p => listHidden || p.id !== ShareProfileConstants.HIDDEN_PROFILE_ID)\r\n .map(p => convertProfile(p, t));\r\n\r\n return profiles;\r\n };\r\n\r\n return DataProviderDecorator<PropsT, ShareProfileDecoratorDataProps>(\r\n Component, \r\n merge(dataProviderDecoratorSettings, {\r\n urls: {\r\n profiles: ShareProfileConstants.PROFILES_URL,\r\n },\r\n dataConverters: {\r\n profiles: convertProfiles,\r\n },\r\n onSocketConnected: (addSocketListener, { refetchData }) => {\r\n addSocketListener(ShareProfileConstants.MODULE_URL, ShareProfileConstants.PROFILE_ADDED, () => refetchData());\r\n addSocketListener(ShareProfileConstants.MODULE_URL, ShareProfileConstants.PROFILE_UPDATED, () => refetchData());\r\n addSocketListener(ShareProfileConstants.MODULE_URL, ShareProfileConstants.PROFILE_REMOVED, () => refetchData());\r\n },\r\n } as DataProviderDecoratorSettings<PropsT, ShareProfileDecoratorDataProps>)\r\n );\r\n};\r\n\r\nexport default ShareProfileDecorator;\r\n","const MODULE_URL = 'share_roots';\r\n\r\nexport default {\r\n MODULE_URL: MODULE_URL,\r\n ROOTS_URL: MODULE_URL,\r\n\r\n CREATED: 'share_root_created',\r\n UPDATED: 'share_root_updated',\r\n REMOVED: 'share_root_removed',\r\n}\r\n;\r\n","\r\nimport SocketService from 'services/SocketService';\r\nimport History from 'utils/History';\r\n\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\nconst handleCreate: UI.ActionHandler<void> = ({ location }) => {\r\n History.push(`${location.pathname}/directories`);\r\n};\r\n\r\nconst handleEdit: UI.ActionHandler<API.ShareRootEntry> = (\r\n { data: root, location }\r\n) => {\r\n History.push(`${location.pathname}/directories/${root.id}`);\r\n};\r\n\r\nconst handleRemove: UI.ActionHandler<API.ShareRootEntry> = (\r\n { data: root }\r\n) => {\r\n return SocketService.delete(ShareRootConstants.ROOTS_URL + '/' + root.id);\r\n};\r\n\r\n\r\n\r\nconst ShareRootCreateActions: UI.ActionListType<undefined> = {\r\n create: { \r\n displayName: 'Add directory',\r\n access: API.AccessEnum.SETTINGS_EDIT, \r\n icon: IconConstants.CREATE,\r\n handler: handleCreate,\r\n },\r\n};\r\n\r\nconst ShareRootEditActions: UI.ActionListType<API.ShareRootEntry> = {\r\n edit: { \r\n displayName: 'Edit directory',\r\n access: API.AccessEnum.SETTINGS_EDIT, \r\n icon: IconConstants.EDIT,\r\n handler: handleEdit,\r\n },\r\n remove: { \r\n displayName: 'Remove directory',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n // tslint:disable-next-line:max-line-length\r\n content: 'Are you sure that you want to remove the directory {{item.virtual_name}} from share? It will be removed from all share profiles.',\r\n approveCaption: 'Remove directory',\r\n rejectCaption: `Don't remove`,\r\n },\r\n handler: handleRemove,\r\n },\r\n};\r\n\r\nexport default {\r\n create: {\r\n moduleId: UI.Modules.SHARE,\r\n subId: 'root',\r\n actions: ShareRootCreateActions,\r\n },\r\n edit: {\r\n moduleId: UI.Modules.SHARE,\r\n subId: 'root',\r\n actions: ShareRootEditActions,\r\n }\r\n};\r\n","import Reflux from 'reflux';\r\n\r\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\n\r\n\r\nexport default Reflux.createStore({\r\n _viewName: 'share_root_view',\r\n _apiUrl: ShareRootConstants.MODULE_URL,\r\n mixins: [ ViewStoreMixin('path') ],\r\n});\r\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';\r\nimport Modal from 'components/semantic/Modal';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport ModalRouteDecorator, { ModalRouteDecoratorChildProps } from 'decorators/ModalRouteDecorator';\r\n\r\nimport ShareProfileDecorator, { profileToEnumValue, ShareProfileDecoratorChildProps } from 'decorators/ShareProfileDecorator';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport t from 'utils/tcomb-form';\r\n\r\nimport { getLastDirectory } from 'utils/FileUtils';\r\n\r\nimport Form, { FormSaveHandler, FormFieldSettingHandler, FormFieldChangeHandler } from 'components/form/Form';\r\nimport FilesystemConstants from 'constants/FilesystemConstants';\r\nimport { AutoSuggestField } from 'components/form/fields';\r\n\r\nimport '../style.css';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { ShareRootEntryBase } from 'types/api';\r\nimport { translateForm } from 'utils/FormUtils';\r\nimport { Trans } from 'react-i18next';\r\n\r\n\r\nconst Fields: UI.FormFieldDefinition[] = [\r\n {\r\n key: 'path',\r\n title: 'Path',\r\n type: API.SettingTypeEnum.DIRECTORY_PATH,\r\n },\r\n {\r\n key: 'virtual_name',\r\n title: 'Virtual name',\r\n type: API.SettingTypeEnum.STRING,\r\n help: 'Directories with identical virtual names will be merged in filelist',\r\n },\r\n {\r\n key: 'profiles',\r\n type: API.SettingTypeEnum.LIST,\r\n item_type: API.SettingTypeEnum.NUMBER,\r\n title: 'Share profiles',\r\n help: 'New share profiles can be created from application settings',\r\n }, \r\n {\r\n key: 'incoming',\r\n title: 'Incoming',\r\n type: API.SettingTypeEnum.BOOLEAN,\r\n },\r\n];\r\n\r\nexport interface ShareDirectoryDialogProps {\r\n shareT: UI.ModuleTranslator;\r\n}\r\n\r\nexport interface DataProps extends ShareProfileDecoratorChildProps {\r\n virtualNames: string[];\r\n rootEntry?: API.ShareRootEntryBase;\r\n}\r\n\r\ninterface Entry extends ShareRootEntryBase, UI.FormValueMap {\r\n\r\n}\r\n\r\ninterface RouteProps {\r\n directoryId: string;\r\n}\r\n\r\ntype Props = ShareDirectoryDialogProps & DataProps & \r\n ModalRouteDecoratorChildProps<RouteProps>;\r\n\r\nclass ShareDirectoryDialog extends Component<Props> {\r\n static displayName = 'ShareDirectoryDialog';\r\n\r\n fieldDefinitions: UI.FormFieldDefinition[];\r\n form: Form<Entry>;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.fieldDefinitions = translateForm(Fields, props.shareT);\r\n\r\n // Share profiles shouldn't be translated...\r\n const shareProfileDefinitions = this.fieldDefinitions.find(def => def.key === 'profiles')!;\r\n Object.assign(shareProfileDefinitions, {\r\n options: props.profiles.map(profileToEnumValue),\r\n default_value: [ props.profiles.find(profile => profile.default)!.id ],\r\n });\r\n }\r\n\r\n isNew = () => {\r\n return !this.props.rootEntry;\r\n }\r\n\r\n onFieldChanged: FormFieldChangeHandler<Entry> = (id, value, hasChanges) => {\r\n if (id.indexOf('path') !== -1) {\r\n const mergeFields = { \r\n virtual_name: !!value.path ? getLastDirectory(value.path) : undefined, \r\n };\r\n\r\n return Promise.resolve(mergeFields);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n save = () => {\r\n return this.form.save();\r\n }\r\n\r\n onSave: FormSaveHandler<Entry> = (changedFields) => {\r\n if (this.isNew()) {\r\n return SocketService.post(ShareRootConstants.ROOTS_URL, changedFields);\r\n }\r\n\r\n return SocketService.patch(`${ShareRootConstants.ROOTS_URL}/${this.props.rootEntry!.id}`, changedFields);\r\n }\r\n\r\n onFieldSetting: FormFieldSettingHandler<Entry> = (id, fieldOptions, formValue) => {\r\n if (id === 'path') {\r\n fieldOptions.disabled = !this.isNew();\r\n fieldOptions.config = Object.assign({} || fieldOptions.config, {\r\n historyId: FilesystemConstants.LOCATION_DOWNLOAD,\r\n });\r\n } else if (id === 'virtual_name') {\r\n fieldOptions.factory = t.form.Textbox;\r\n fieldOptions.template = AutoSuggestField;\r\n fieldOptions.config = {\r\n suggestionGetter: () => this.props.virtualNames,\r\n };\r\n\r\n }\r\n }\r\n\r\n render() {\r\n const { rootEntry, shareT, ...other } = this.props;\r\n const title = shareT.translate(this.isNew() ? 'Add share directory' : 'Edit share directory');\r\n return (\r\n <Modal \r\n className=\"share-directory\" \r\n title={ title } \r\n onApprove={ this.save } \r\n closable={ false } \r\n icon={ IconConstants.FOLDER } \r\n { ...other }\r\n >\r\n <Message \r\n title={ shareT.translate('Hashing information') }\r\n icon={ IconConstants.INFO }\r\n description={ \r\n <Trans i18nKey={ shareT.toI18nKey('hashingInformationDesc') }>\r\n <p>\r\n New files will appear in share only after they have finished hashing \r\n (the client has calculated checksums for them). \r\n Information about hashing progress will be posted to the event log.\r\n </p>\r\n </Trans>\r\n }\r\n />\r\n <Form<Entry>\r\n ref={ c => this.form = c! }\r\n fieldDefinitions={ this.fieldDefinitions }\r\n onFieldChanged={ this.onFieldChanged }\r\n onFieldSetting={ this.onFieldSetting }\r\n onSave={ this.onSave }\r\n value={ rootEntry as Entry }\r\n location={ this.props.location }\r\n />\r\n </Modal>\r\n );\r\n }\r\n}\r\n\r\nexport default ModalRouteDecorator<ShareDirectoryDialogProps, RouteProps>(\r\n ShareProfileDecorator<Omit<Props, keyof DataProps>>(ShareDirectoryDialog, false, {\r\n urls: {\r\n virtualNames: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n rootEntry: ({ match }, socket) => {\r\n if (!match.params.directoryId) {\r\n return Promise.resolve(undefined);\r\n }\r\n\r\n return socket.get(`${ShareRootConstants.ROOTS_URL}/${match.params.directoryId}`);\r\n },\r\n },\r\n dataConverters: {\r\n virtualNames: (data: API.GroupedPath[]) => data.map(item => item.name, []),\r\n }\r\n }),\r\n 'directories/:directoryId([0-9A-Z]{39})?'\r\n);","//import PropTypes from 'prop-types';\r\nimport { memo, useState } from 'react';\r\n\r\nimport SectionedDropdown from 'components/semantic/SectionedDropdown';\r\nimport MenuSection from 'components/semantic/MenuSection';\r\nimport MenuItemLink from 'components/semantic/MenuItemLink';\r\n\r\nimport ShareProfileDecorator, { ShareProfileDecoratorChildProps } from 'decorators/ShareProfileDecorator';\r\nimport TableFilterDecorator, { \r\n TableFilterDecoratorChildProps, TableFilterDecoratorProps \r\n} from 'decorators/TableFilterDecorator';\r\n\r\nimport * as API from 'types/api';\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport { useTranslation } from 'react-i18next';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\ninterface ShareProfileItem {\r\n id: null | number;\r\n str: string;\r\n}\r\n\r\nexport interface ShareProfileFilterProps {\r\n\r\n}\r\n\r\ntype Props = \r\n ShareProfileFilterProps & TableFilterDecoratorChildProps & \r\n ShareProfileDecoratorChildProps;\r\n\r\n\r\nconst getDropdownItem = (\r\n profile: ShareProfileItem, \r\n onClick: (p: ShareProfileItem) => void, \r\n selectedProfile: ShareProfileItem\r\n) => {\r\n return (\r\n <MenuItemLink \r\n key={ profile.id as number }\r\n active={ selectedProfile.id === profile.id } \r\n onClick={ () => onClick(profile) }\r\n >\r\n { profile.str }\r\n </MenuItemLink>\r\n );\r\n};\r\n\r\nconst ShareProfileFilter = memo<Props>(props => {\r\n const { t } = useTranslation();\r\n\r\n const defaultItem: ShareProfileItem = { \r\n str: translate('All profiles', t, 'table.filter'), \r\n id: null \r\n };\r\n\r\n const [ selectedProfile, setSelectedProfile ] = useState<ShareProfileItem>(defaultItem);\r\n\r\n const onClick = (profile: API.ShareProfile) => {\r\n props.onFilterUpdated(profile.id);\r\n setSelectedProfile(profile);\r\n };\r\n\r\n return (\r\n <SectionedDropdown \r\n className=\"top right pointing\" \r\n caption={ selectedProfile.str } \r\n triggerIcon=\"filter\" \r\n button={ true }\r\n >\r\n <MenuSection \r\n caption={ translate('Filter by profile', t, 'table.filter') } \r\n icon={ IconConstants.FILTER }\r\n >\r\n { [ defaultItem, ...props.profiles ].map(p => getDropdownItem(p, onClick, selectedProfile)) }\r\n </MenuSection>\r\n </SectionedDropdown>\r\n );\r\n});\r\n\r\nexport default ShareProfileDecorator<ShareProfileFilterProps & TableFilterDecoratorProps>(\r\n TableFilterDecorator<ShareProfileFilterProps & ShareProfileDecoratorChildProps>(\r\n ShareProfileFilter, \r\n 'profiles'\r\n ), \r\n false\r\n);","import * as React from 'react';\r\n\r\nimport RedrawDecorator from 'decorators/RedrawDecorator';\r\nimport { formatRelativeTime } from 'utils/ValueFormat';\r\nimport Loader from 'components/semantic/Loader';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport { abortRefreshTask, refreshPaths } from 'services/api/ShareApi';\r\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\r\nimport Icon from 'components/semantic/Icon';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\ninterface RefreshCellProps extends RowWrapperCellChildProps<number, API.ShareRootEntry> {}\r\n\r\nconst RefreshCell: React.FC<RefreshCellProps> = (\r\n { rowDataGetter, cellData, t }\r\n) => {\r\n const state = rowDataGetter!().status;\r\n if (state.id !== API.ShareRootStatusEnum.NORMAL) {\r\n return (\r\n <div style={{ display: 'flex' }}>\r\n <Icon\r\n icon={ IconConstants.CANCEL }\r\n color=\"red\"\r\n size=\"large\"\r\n onClick={ () => {\r\n const refreshTaskId = rowDataGetter!().status.refresh_task_id;\r\n if (!!refreshTaskId) {\r\n runBackgroundSocketAction(\r\n () => abortRefreshTask(refreshTaskId),\r\n t!\r\n );\r\n }\r\n }}\r\n />\r\n <Loader \r\n size=\"small\" \r\n inline={ true } \r\n text={ state.str }\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div>\r\n <Icon\r\n icon={ IconConstants.REFRESH_COLORED }\r\n size=\"large\"\r\n onClick={ () => \r\n runBackgroundSocketAction(\r\n () => refreshPaths([ rowDataGetter!().path ]),\r\n t!\r\n )\r\n }\r\n />\r\n { cellData === 0 ? translate('Unknown', t!, UI.Modules.SHARE) : formatRelativeTime(cellData!) }\r\n </div>\r\n );\r\n};\r\n\r\nexport default RedrawDecorator(RefreshCell);","import { Component } from 'react';\r\n\r\nimport ShareActions from 'actions/ui/ShareActions';\r\nimport ShareRootActions from 'actions/ui/ShareRootActions';\r\nimport ShareRootStore from 'stores/ShareRootStore';\r\n\r\nimport VirtualTable from 'components/table/VirtualTable';\r\nimport { SizeCell, DurationCell, FileActionCell } from 'components/table/Cell';\r\nimport { Column } from 'fixed-data-table-2';\r\n\r\nimport ShareDirectoryDialog from 'routes/Share/components/ShareDirectoryDialog';\r\nimport ShareProfileFilter from 'components/table/ShareProfileFilter';\r\n\r\nimport { ActionMenu } from 'components/menu';\r\nimport RefreshCell from 'routes/Share/components/RefreshCell';\r\n\r\nimport LoginStore from 'stores/LoginStore';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { getModuleT } from 'utils/TranslationUtils';\r\nimport MenuConstants from 'constants/MenuConstants';\r\n\r\n\r\nclass Share extends Component<WithTranslation> {\r\n static displayName = 'Share';\r\n\r\n shareT = getModuleT(this.props.t, UI.Modules.SHARE);\r\n render() {\r\n const { translate } = this.shareT;\r\n const editAccess = LoginStore.hasAccess(API.AccessEnum.SETTINGS_EDIT);\r\n return (\r\n <>\r\n <VirtualTable\r\n store={ ShareRootStore }\r\n customFilter={ ShareProfileFilter }\r\n footerData={ \r\n <ActionMenu \r\n className=\"top left pointing\"\r\n caption={ translate('Actions...') }\r\n actions={ ShareRootActions.create }\r\n header={ translate('Share actions') }\r\n triggerIcon=\"chevron up\"\r\n ids={ [ 'create' ]}\r\n button={ true }\r\n >\r\n <ActionMenu \r\n actions={ ShareActions }\r\n ids={ [ 'refresh' ]}\r\n />\r\n </ActionMenu>\r\n }\r\n moduleId={ ShareActions.moduleId }\r\n >\r\n <Column\r\n name=\"Path\"\r\n width={200}\r\n columnKey=\"path\"\r\n cell={\r\n <FileActionCell \r\n actions={ ShareRootActions.edit }\r\n remoteMenuId={ MenuConstants.SHARE_ROOT }\r\n /> \r\n }\r\n flexGrow={10}\r\n />\r\n <Column\r\n name=\"Size\"\r\n width={60}\r\n columnKey=\"size\"\r\n cell={ <SizeCell/> }\r\n flexGrow={2}\r\n />\r\n <Column\r\n name=\"Content\"\r\n width={150}\r\n columnKey=\"type\"\r\n hideWidth={1000}\r\n />\r\n <Column\r\n name=\"Virtual name\"\r\n width={120}\r\n columnKey=\"virtual_name\"\r\n flexGrow={5}\r\n //hideWidth={600}\r\n />\r\n <Column\r\n name=\"Profiles\"\r\n width={65}\r\n columnKey=\"profiles\"\r\n />\r\n <Column\r\n name=\"Last refreshed\"\r\n width={80}\r\n flexGrow={3}\r\n columnKey=\"last_refresh_time\"\r\n cell={ editAccess ? <RefreshCell/> : <DurationCell/> }\r\n />\r\n </VirtualTable>\r\n <ShareDirectoryDialog\r\n shareT={ this.shareT }\r\n />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(Share);","import LoginStore from 'stores/LoginStore';\r\nimport { fetchData } from 'utils/HttpUtils';\r\n\r\n\r\nexport const uploadTempFile = async (file: File): Promise<string> => {\r\n try {\r\n const res = await fetchData(`${getBasePath()}temp`, {\r\n method: 'POST',\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n \r\n 'Authorization': LoginStore.authToken,\r\n },\r\n body: file\r\n });\r\n\r\n return res.headers.get('Location')!;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\nconst toCorsSafeUrl = (url: string) => {\r\n const proxyUrl = `${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(url)}`;\r\n return proxyUrl;\r\n};\r\n\r\nexport const fetchCorsSafeData = async (url: string, isJSON: boolean, options?: RequestInit) => {\r\n try {\r\n //console.log(`CORS HTTP request started (${url})`);\r\n\r\n const res = await fetchData(\r\n toCorsSafeUrl(url), \r\n {\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n\r\n // Temp workaround for people upgrading from versions < 2.7.0\r\n // If the new UI was loaded before restarting the app, a cache expiration time of \r\n // one year would have been set for \"Not found\" errors...\r\n 'Cache-Control': 'no-store, must-revalidate, max-age=0'\r\n },\r\n ...options,\r\n }\r\n );\r\n\r\n const data = await isJSON ? res.json() : res.text();\r\n return data;\r\n } catch (e) {\r\n console.error(`CORS HTTP request failed (${url})`, e);\r\n throw e;\r\n }\r\n};\r\n","\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport { uploadTempFile } from '../HttpService';\r\n\r\nimport * as API from 'types/api';\r\n\r\n\r\nexport interface AddTempShareResponse { \r\n magnet: string; \r\n}\r\n\r\nexport const shareTempFile = async (\r\n file: File, hubUrl: string, cid: string | undefined\r\n): Promise<AddTempShareResponse> => {\r\n try {\r\n const fileId = await uploadTempFile(file);\r\n const res = await SocketService.post<AddTempShareResponse>(ShareConstants.TEMP_SHARES_URL, {\r\n name: file.name,\r\n file_id: fileId,\r\n hub_url: hubUrl,\r\n cid,\r\n });\r\n\r\n return res;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\n\r\nexport const refresh = (incoming: boolean) => {\r\n return SocketService.post(ShareConstants.REFRESH_URL, {\r\n incoming,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshPaths = (paths: string[]) => {\r\n return SocketService.post(ShareConstants.REFRESH_PATHS_URL, { \r\n paths,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshVirtual = (path: string) => {\r\n return SocketService.post(ShareConstants.REFRESH_VIRTUAL_URL, { \r\n path,\r\n });\r\n};\r\n\r\nexport const abortRefreshTask = (id: number) => {\r\n return SocketService.delete(`${ShareConstants.REFRESH_TASKS_URL}/${id}`);\r\n};\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","ShareActions","refresh","displayName","access","icon","handler","moduleId","actions","MODULE_URL","PROFILES_URL","PROFILE_ADDED","PROFILE_UPDATED","PROFILE_REMOVED","HIDDEN_PROFILE_ID","Component","redrawIntervalSeconds","RedrawDecorator","scheduleComponentRefresh","this","redrawTimeout","window","setTimeout","forceUpdate","componentDidMount","componentWillUnmount","clearTimeout","render","props","profileToEnumValue","profile","name","str","listHidden","dataProviderDecoratorSettings","addSize","merge","urls","profiles","dataConverters","data","t","filter","p","map","size","convertProfile","onSocketConnected","addSocketListener","refetchData","ShareRootCreateActions","create","IconConstants","location","History","pathname","ShareRootEditActions","edit","root","remove","confirmation","content","approveCaption","rejectCaption","SocketService","ShareRootConstants","subId","_viewName","_apiUrl","mixins","ViewStoreMixin","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","Fields","key","title","type","help","item_type","ShareDirectoryDialog","constructor","super","isNew","rootEntry","onFieldChanged","value","hasChanges","indexOf","mergeFields","virtual_name","path","undefined","Promise","resolve","save","form","onSave","changedFields","onFieldSetting","fieldOptions","formValue","disabled","config","Object","assign","historyId","FilesystemConstants","factory","template","suggestionGetter","virtualNames","fieldDefinitions","shareT","shareProfileDefinitions","find","def","default_value","default","other","translate","Modal","className","onApprove","closable","Message","description","Trans","i18nKey","toI18nKey","Form","ref","c","ModalRouteDecorator","ShareProfileDecorator","ShareConstants","match","socket","params","directoryId","get","item","ShareProfileFilter","memo","useTranslation","defaultItem","selectedProfile","setSelectedProfile","useState","onClick","onFilterUpdated","SectionedDropdown","caption","triggerIcon","button","MenuSection","MenuItemLink","active","getDropdownItem","TableFilterDecorator","rowDataGetter","cellData","state","status","style","display","Icon","color","refreshTaskId","refresh_task_id","Loader","inline","text","Share","editAccess","LoginStore","VirtualTable","store","ShareRootStore","customFilter","footerData","ShareRootActions","header","ids","Column","width","columnKey","cell","remoteMenuId","MenuConstants","flexGrow","hideWidth","withTranslation","uploadTempFile","file","getBasePath","method","headers","body","e","fetchCorsSafeData","url","isJSON","res","origin","encodeURIComponent","toCorsSafeUrl","json","console","error","shareTempFile","hubUrl","cid","fileId","file_id","hub_url","refreshPaths","paths","priority","refreshVirtual","abortRefreshTask"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[255],{4665:(n,r,t)=>{t.d(r,{Z:()=>A});var e=t(94015),s=t.n(e),i=t(23645),o=t.n(i)()(s());o.push([n.id,".simple-layout {\r\n height: 100%;\r\n padding: 20px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n background-color: white;\r\n}\r\n\r\n.simple-layout > div {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.simple-layout .layout-content {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n flex: 1 1 100%;\r\n}\r\n\r\n.simple-layout .layout-content > div {\r\n width: 100%;\r\n}\r\n\r\n.simple-layout .divider.top {\r\n margin-bottom: 0px;\r\n}\r\n\r\n\r\n/* Message layout */\r\n.system-log .message-list {\r\n width: 100%;\r\n margin: 10px 0px !important;\r\n}\r\n\r\n.system-log .status.item i {\r\n float: left;\r\n}\r\n\r\n.system-log .status.item .text {\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n overflow: hidden;\r\n}\r\n\r\n.system-log .status.item .time {\r\n color: gray;\r\n}\r\n\r\n.system-log .status.item .label {\r\n color: gray;\r\n margin-right: 3px;\r\n}","",{version:3,sources:["webpack://./src/routes/Sidebar/routes/Events/style.css"],names:[],mappings:"AAAA;EACE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;;AAGA,mBAAmB;AACnB;EACE,WAAW;EACX,2BAA2B;AAC7B;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,WAAW;EACX,iBAAiB;AACnB",sourcesContent:[".simple-layout {\r\n height: 100%;\r\n padding: 20px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n background-color: white;\r\n}\r\n\r\n.simple-layout > div {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.simple-layout .layout-content {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n flex: 1 1 100%;\r\n}\r\n\r\n.simple-layout .layout-content > div {\r\n width: 100%;\r\n}\r\n\r\n.simple-layout .divider.top {\r\n margin-bottom: 0px;\r\n}\r\n\r\n\r\n/* Message layout */\r\n.system-log .message-list {\r\n width: 100%;\r\n margin: 10px 0px !important;\r\n}\r\n\r\n.system-log .status.item i {\r\n float: left;\r\n}\r\n\r\n.system-log .status.item .text {\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n overflow: hidden;\r\n}\r\n\r\n.system-log .status.item .time {\r\n color: gray;\r\n}\r\n\r\n.system-log .status.item .label {\r\n color: gray;\r\n margin-right: 3px;\r\n}"],sourceRoot:""}]);const A=o},36290:(n,r,t)=>{t.r(r),t.d(r,{default:()=>_});var e=t(85893),s=t(67294),i=t(70923),o=t(61593),A=t(518),a=t(94897),l=t(32347),m=t(48117);const d={clear:{displayName:"Clear",access:a.Z.EVENTS_EDIT,icon:m.Z.CLEAR,handler:()=>A.Z.delete(o.Z.MESSAGES_URL)}},c={moduleId:l.jv.EVENTS,actions:d};var g=t(72582),u=t(91462),E=t(45807),p=t(93379),y=t.n(p),C=t(7795),v=t.n(C),x=t(90569),B=t.n(x),h=t(3565),f=t.n(h),b=t(19216),Z=t.n(b),j=t(44589),w=t.n(j),N=t(4665),k={};k.styleTagTransform=w(),k.setAttributes=f(),k.insert=B().bind(null,"head"),k.domAPI=v(),k.insertStyleElement=Z(),y()(N.Z,k),N.Z&&N.Z.locals&&N.Z.locals;var S=t(54883),W=t(27695),T=t(25334),I=t(8717);const V=({messages:n,t:r})=>n?0===n.length?(0,e.jsx)(W.Z,{description:(0,I.Iu)("No messages to show",r,l.jv.EVENTS)},void 0):(0,e.jsx)(T.Z,{className:"events",messages:n,scrollPositionHandler:g.Z,t:r},void 0):(0,e.jsx)(S.Z,{text:(0,I.Iu)("Loading messages",r,l.jv.EVENTS)},void 0);var O=t(92408),R=t(26793);const _=(0,s.memo)((()=>{(0,s.useEffect)((()=>(i.Z.setActive(!0),i.Z.setRead(),g.Z.isInitialized()||i.Z.fetchMessages(),()=>i.Z.setActive(!1))),[]);const{t:n}=(0,R.$)(),r=(0,O.o)(g.Z);return(0,e.jsx)("div",Object.assign({className:"simple-layout"},{children:(0,e.jsxs)("div",Object.assign({className:"wrapper"},{children:[(0,e.jsx)(u.Z,{icon:m.Z.EVENTS_COLORED,title:(0,I.Iu)("Events",n,l.jv.EVENTS),rightComponent:(0,e.jsx)(E.Z,{actions:c,actionId:"clear",icon:null},void 0)},void 0),(0,e.jsx)("div",{className:"ui divider top"},void 0),(0,e.jsx)("div",Object.assign({className:"layout-content system-log"},{children:(0,e.jsx)(V,{messages:r,t:n},void 0)}),void 0)]}),void 0)}),void 0)}),(()=>!0))}}]);
2
- //# sourceMappingURL=system-log.45dba574bcb91efd176c.chunk.js.map
1
+ "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[255],{4665:(n,r,t)=>{t.d(r,{Z:()=>a});var e=t(87537),s=t.n(e),A=t(23645),i=t.n(A)()(s());i.push([n.id,".simple-layout {\r\n height: 100%;\r\n padding: 20px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n background-color: white;\r\n}\r\n\r\n.simple-layout > div {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.simple-layout .layout-content {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n flex: 1 1 100%;\r\n}\r\n\r\n.simple-layout .layout-content > div {\r\n width: 100%;\r\n}\r\n\r\n.simple-layout .divider.top {\r\n margin-bottom: 0px;\r\n}\r\n\r\n\r\n/* Message layout */\r\n.system-log .message-list {\r\n width: 100%;\r\n margin: 10px 0px !important;\r\n}\r\n\r\n.system-log .status.item i {\r\n float: left;\r\n}\r\n\r\n.system-log .status.item .text {\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n overflow: hidden;\r\n}\r\n\r\n.system-log .status.item .time {\r\n color: gray;\r\n}\r\n\r\n.system-log .status.item .label {\r\n color: gray;\r\n margin-right: 3px;\r\n}","",{version:3,sources:["webpack://./src/routes/Sidebar/routes/Events/style.css"],names:[],mappings:"AAAA;EACE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;;AAGA,mBAAmB;AACnB;EACE,WAAW;EACX,2BAA2B;AAC7B;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,WAAW;EACX,iBAAiB;AACnB",sourcesContent:[".simple-layout {\r\n height: 100%;\r\n padding: 20px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n background-color: white;\r\n}\r\n\r\n.simple-layout > div {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.simple-layout .layout-content {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n flex: 1 1 100%;\r\n}\r\n\r\n.simple-layout .layout-content > div {\r\n width: 100%;\r\n}\r\n\r\n.simple-layout .divider.top {\r\n margin-bottom: 0px;\r\n}\r\n\r\n\r\n/* Message layout */\r\n.system-log .message-list {\r\n width: 100%;\r\n margin: 10px 0px !important;\r\n}\r\n\r\n.system-log .status.item i {\r\n float: left;\r\n}\r\n\r\n.system-log .status.item .text {\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n overflow: hidden;\r\n}\r\n\r\n.system-log .status.item .time {\r\n color: gray;\r\n}\r\n\r\n.system-log .status.item .label {\r\n color: gray;\r\n margin-right: 3px;\r\n}"],sourceRoot:""}]);const a=i},36290:(n,r,t)=>{t.r(r),t.d(r,{default:()=>_});var e=t(85893),s=t(67294),A=t(70923),i=t(61593),a=t(518),o=t(94897),l=t(32347),m=t(48117);const c={clear:{displayName:"Clear",access:o.Z.EVENTS_EDIT,icon:m.Z.CLEAR,handler:()=>a.Z.delete(i.Z.MESSAGES_URL)}},g={moduleId:l.jv.EVENTS,actions:c};var u=t(72582),E=t(91462),d=t(45807),p=t(93379),y=t.n(p),C=t(7795),x=t.n(C),B=t(90569),h=t.n(B),v=t(3565),f=t.n(v),b=t(19216),Z=t.n(b),j=t(44589),w=t.n(j),N=t(4665),k={};k.styleTagTransform=w(),k.setAttributes=f(),k.insert=h().bind(null,"head"),k.domAPI=x(),k.insertStyleElement=Z(),y()(N.Z,k),N.Z&&N.Z.locals&&N.Z.locals;var S=t(54883),W=t(27695),T=t(25334),I=t(8717);const V=({messages:n,t:r})=>n?0===n.length?(0,e.jsx)(W.Z,{description:(0,I.Iu)("No messages to show",r,l.jv.EVENTS)}):(0,e.jsx)(T.Z,{className:"events",messages:n,scrollPositionHandler:u.Z,t:r}):(0,e.jsx)(S.Z,{text:(0,I.Iu)("Loading messages",r,l.jv.EVENTS)});var O=t(92408),R=t(26793);const _=(0,s.memo)((()=>{(0,s.useEffect)((()=>(A.Z.setActive(!0),A.Z.setRead(),u.Z.isInitialized()||A.Z.fetchMessages(),()=>A.Z.setActive(!1))),[]);const{t:n}=(0,R.$)(),r=(0,O.o)(u.Z);return(0,e.jsx)("div",Object.assign({className:"simple-layout"},{children:(0,e.jsxs)("div",Object.assign({className:"wrapper"},{children:[(0,e.jsx)(E.Z,{icon:m.Z.EVENTS_COLORED,title:(0,I.Iu)("Events",n,l.jv.EVENTS),rightComponent:(0,e.jsx)(d.Z,{actions:g,actionId:"clear",icon:null})}),(0,e.jsx)("div",{className:"ui divider top"}),(0,e.jsx)("div",Object.assign({className:"layout-content system-log"},{children:(0,e.jsx)(V,{messages:r,t:n})}))]}))}))}),(()=>!0))}}]);
2
+ //# sourceMappingURL=system-log.b9763d1c0f5cf5966f21.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/system-log.b9763d1c0f5cf5966f21.chunk.js","mappings":"iKAGIA,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,q8BAAs8B,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,0DAA0D,MAAQ,GAAG,SAAW,qYAAqY,eAAiB,CAAC,s8BAAs8B,WAAa,MAEp8E,W,wICCO,MAAM,EAA6C,CACxDC,MAAO,CACLC,YAAa,QACbC,OAAQC,EAAA,cACRC,KAAMC,EAAA,QACNC,QAAS,IACAC,EAAA,SAAqBC,EAAA,kBAMlC,GACEC,SAAU,YACVC,QAAS,G,qKCXPC,EAAU,GAEdA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,W,+CCNlD,MAuBA,EAvBuD,EAAGM,SAAAA,EAAUC,EAAAA,KAC7DD,EAImB,IAApBA,EAASE,QAET,SAACC,EAAA,EAAO,CACNC,aAAc,QAAU,sBAAuBH,EAAG,gBAMtD,SAACI,EAAA,EAAW,CACVC,UAAU,SACVN,SAAWA,EACXO,sBAAwBC,EAAA,EACxBP,EAAIA,KAhBC,SAACQ,EAAA,EAAM,CAACC,MAAO,QAAU,mBAAoBT,EAAG,e,0BCI3D,MA8CA,GA9C4C,IAAAU,OAC1C,MACE,IAAAC,YACE,KACE,eAA0B,GAC1B,cAEKJ,EAAA,mBACH,oBAGK,IAAM,eAA0B,KAEzC,IAGF,MAAM,EAAEP,IAAM,EAAAY,EAAA,KACRb,GAAW,OAA+BQ,EAAA,GAChD,OACE,8BAAKF,UAAU,iBAAe,WAC5B,+BAAKA,UAAU,WAAS,YACtB,SAACQ,EAAA,EAAY,CACX3B,KAAOC,EAAA,iBACP2B,OAAQ,QAAU,SAAUd,EAAG,aAC/Be,gBACE,SAACC,EAAA,EAAY,CACXxB,QAAU,EACVyB,SAAS,QACT/B,KAAO,UAIb,gBAAKmB,UAAU,oBACf,8BAAKA,UAAU,6BAA2B,WACxC,SAAC,EAAgB,CACfN,SAAWA,EACXC,EAAIA,iBAOhB,KAAM","sources":["webpack://airdcpp-webui/./src/routes/Sidebar/routes/Events/style.css","webpack://airdcpp-webui/./src/actions/ui/EventActions.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Events/style.css?eea1","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Events/components/EventMessageView.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Events/components/EventsLayout.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, \".simple-layout {\\r\\n height: 100%;\\r\\n padding: 20px;\\r\\n margin-left: auto;\\r\\n margin-right: auto;\\r\\n background-color: white;\\r\\n}\\r\\n\\r\\n.simple-layout > div {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n height: 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .layout-content {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: auto;\\r\\n flex: 1 1 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .layout-content > div {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .divider.top {\\r\\n margin-bottom: 0px;\\r\\n}\\r\\n\\r\\n\\r\\n/* Message layout */\\r\\n.system-log .message-list {\\r\\n width: 100%;\\r\\n margin: 10px 0px !important;\\r\\n}\\r\\n\\r\\n.system-log .status.item i {\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.system-log .status.item .text {\\r\\n margin-top: 5px;\\r\\n margin-bottom: 10px;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.system-log .status.item .time {\\r\\n color: gray;\\r\\n}\\r\\n\\r\\n.system-log .status.item .label {\\r\\n color: gray;\\r\\n margin-right: 3px;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/routes/Events/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;;AAGA,mBAAmB;AACnB;EACE,WAAW;EACX,2BAA2B;AAC7B;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,WAAW;EACX,iBAAiB;AACnB\",\"sourcesContent\":[\".simple-layout {\\r\\n height: 100%;\\r\\n padding: 20px;\\r\\n margin-left: auto;\\r\\n margin-right: auto;\\r\\n background-color: white;\\r\\n}\\r\\n\\r\\n.simple-layout > div {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n height: 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .layout-content {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: auto;\\r\\n flex: 1 1 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .layout-content > div {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.simple-layout .divider.top {\\r\\n margin-bottom: 0px;\\r\\n}\\r\\n\\r\\n\\r\\n/* Message layout */\\r\\n.system-log .message-list {\\r\\n width: 100%;\\r\\n margin: 10px 0px !important;\\r\\n}\\r\\n\\r\\n.system-log .status.item i {\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.system-log .status.item .text {\\r\\n margin-top: 5px;\\r\\n margin-bottom: 10px;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.system-log .status.item .time {\\r\\n color: gray;\\r\\n}\\r\\n\\r\\n.system-log .status.item .label {\\r\\n color: gray;\\r\\n margin-right: 3px;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import EventConstants from 'constants/EventConstants';\r\nimport SocketService from 'services/SocketService';\r\nimport AccessConstants from 'constants/AccessConstants';\r\n\r\nimport * as UI from 'types/ui';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\nexport const EventActions: UI.ActionListType<undefined> = {\r\n clear: {\r\n displayName: 'Clear',\r\n access: AccessConstants.EVENTS_EDIT,\r\n icon: IconConstants.CLEAR, \r\n handler: () => {\r\n return SocketService.delete(EventConstants.MESSAGES_URL);\r\n }\r\n }\r\n};\r\n\r\n\r\nexport default {\r\n moduleId: UI.Modules.EVENTS,\r\n actions: EventActions,\r\n};\r\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 * as React from 'react';\r\n\r\nimport Loader from 'components/semantic/Loader';\r\n\r\nimport Message from 'components/semantic/Message';\r\nimport MessageView from 'components/messages/MessageView';\r\n\r\nimport '../style.css';\r\n\r\nimport * as UI from 'types/ui';\r\nimport { TFunction } from 'i18next';\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport EventStore from 'stores/EventStore';\r\n\r\n\r\ninterface EventMessagesProps {\r\n messages: UI.MessageListItem[];\r\n t: TFunction;\r\n}\r\n\r\nconst EventMessageView: React.FC<EventMessagesProps> = ({ messages, t }) => {\r\n if (!messages) {\r\n return <Loader text={ translate('Loading messages', t, UI.Modules.EVENTS) }/>;\r\n }\r\n\r\n if (messages.length === 0) {\r\n return (\r\n <Message \r\n description={ translate('No messages to show', t, UI.Modules.EVENTS) }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <MessageView \r\n className=\"events\"\r\n messages={ messages }\r\n scrollPositionHandler={ EventStore }\r\n t={ t }\r\n />\r\n );\r\n};\r\n\r\nexport default EventMessageView;\r\n","import { useEffect, memo } from 'react';\r\nimport * as React from 'react';\r\n\r\nimport EventAPIActions from 'actions/reflux/EventActions';\r\nimport EventUIActions from 'actions/ui/EventActions';\r\n\r\nimport EventStore from 'stores/EventStore';\r\n\r\nimport LayoutHeader from 'components/semantic/LayoutHeader';\r\nimport ActionButton from 'components/ActionButton';\r\n\r\nimport '../style.css';\r\nimport EventMessageView from 'routes/Sidebar/routes/Events/components/EventMessageView';\r\n\r\nimport * as UI from 'types/ui';\r\n\r\nimport { useStore } from 'effects/StoreListenerEffect';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\ninterface SystemLogProps {\r\n\r\n}\r\n\r\nconst SystemLog: React.FC<SystemLogProps> = memo(\r\n () => {\r\n useEffect(\r\n () => {\r\n EventAPIActions.setActive(true);\r\n EventAPIActions.setRead();\r\n \r\n if (!EventStore.isInitialized()) {\r\n EventAPIActions.fetchMessages();\r\n }\r\n\r\n return () => EventAPIActions.setActive(false);\r\n },\r\n []\r\n );\r\n\r\n const { t } = useTranslation();\r\n const messages = useStore<UI.MessageListItem[]>(EventStore);\r\n return (\r\n <div className=\"simple-layout\">\r\n <div className=\"wrapper\">\r\n <LayoutHeader\r\n icon={ IconConstants.EVENTS_COLORED }\r\n title={ translate('Events', t, UI.Modules.EVENTS) }\r\n rightComponent={\r\n <ActionButton \r\n actions={ EventUIActions }\r\n actionId=\"clear\"\r\n icon={ null }\r\n />\r\n }\r\n />\r\n <div className=\"ui divider top\"/>\r\n <div className=\"layout-content system-log\">\r\n <EventMessageView \r\n messages={ messages }\r\n t={ t }\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }, \r\n () => true\r\n);\r\n\r\nexport default SystemLog;\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clear","displayName","access","AccessConstants","icon","IconConstants","handler","SocketService","EventConstants","moduleId","actions","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","messages","t","length","Message","description","MessageView","className","scrollPositionHandler","EventStore","Loader","text","memo","useEffect","useTranslation","LayoutHeader","title","rightComponent","ActionButton","actionId"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[182],{62824:(e,s,n)=>{n.d(s,{Z:()=>i});var t=n(87537),r=n.n(t),a=n(23645),o=n.n(a)()(r());o.push([e.id,".status .error {\r\n color: red;\r\n}\r\n\r\n.transfer.status .target {\r\n word-break: break-all;\r\n}","",{version:3,sources:["webpack://./src/routes/Transfers/style.css"],names:[],mappings:"AAAA;EACE,UAAU;AACZ;;AAEA;EACE,qBAAqB;AACvB",sourcesContent:[".status .error {\r\n color: red;\r\n}\r\n\r\n.transfer.status .target {\r\n word-break: break-all;\r\n}"],sourceRoot:""}]);const i=o},49133:(e,s,n)=>{n.d(s,{Z:()=>d});var t=n(1087),r=n(518),a=n(48117),o=n(76249),i=n(32347),c=n(60160);const l={search:{access:o.PS.SEARCH,displayName:"Search (foreground)",icon:a.Z.SEARCH,handler:({data:e,location:s})=>c.Z.search(e,s)},searchFileAlternates:{access:o.PS.QUEUE_EDIT,displayName:"Search for alternates",icon:a.Z.SEARCH_ALTERNATES,filter:e=>0===e.time_finished,handler:({data:e})=>r.Z.post(`${t.Z.FILES_URL}/${e.id}/search`),notifications:{onSuccess:"File {{item.name}} was searched for alternates"}},removeFile:{displayName:"Remove",access:o.PS.QUEUE_EDIT,icon:a.Z.REMOVE,confirmation:{content:"Are you sure that you want to remove the file {{item.name}}?",approveCaption:"Remove file",rejectCaption:"Don't remove",checkboxCaption:"Remove on disk"},handler:({data:e},s)=>r.Z.post(`${t.Z.FILES_URL}/${e.id}/remove`,{remove_finished:s}),notifications:{onSuccess:"File {{item.name}} was removed from queue"}}},d={moduleId:i.jv.QUEUE,actions:l}},68325:(e,s,n)=>{n.d(s,{Z:()=>g});var t=n(85893),r=n(45697),a=n.n(r),o=n(67294),i=n(27835),c=n(32347),l=n(85444),d=n(8717),u=n(35936),m=n(48117);const p=e=>{const s=e.str.match(/TLSv([\d\.]+)/);return s&&2===s.length&&parseFloat(s[1])<1.2?{iconColor:"orange",messageColor:"red",message:"Outdated cryptographic protocol with known security vulnerabilities",cornerIcon:"orange warning",translationKey:"tlsOutdatedWarning"}:e.trusted?{iconColor:"green",messageColor:"green",message:"Authenticity of the certificate is validated",cornerIcon:"",translationKey:"tlsOk"}:{iconColor:"yellow",messageColor:"orange",message:"Authenticity of the certificate could not be validated",cornerIcon:"blue help",translationKey:"tlsAuthenticityWarning"}},h=({info:e,encryption:s})=>(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{children:s.str}),(0,t.jsx)("p",Object.assign({style:{color:e.messageColor}},{children:(0,t.jsx)(l.c,Object.assign({i18nKey:(0,d.zS)(e.translationKey,c.jv.COMMON)},{children:e.message}))}))]});class f extends o.PureComponent{constructor(){super(...arguments),this.getChildren=()=>{const{encryption:e}=this.props,s=p(e);return(0,t.jsx)(h,{info:s,encryption:e})}}render(){const{encryption:e,alwaysVisible:s,boundary:n}=this.props;if(!e)return!!s&&(0,t.jsx)(u.Z,{color:"grey",icon:m.Z.LOCK});const r=p(e);return(0,t.jsx)(i.Z,Object.assign({triggerClassName:"encryption",className:"basic encryption content",trigger:(0,t.jsx)(u.Z,{color:r.iconColor,icon:m.Z.LOCK,cornerIcon:r.cornerIcon}),settings:{boundary:n}},{children:this.getChildren}))}}f.propTypes={encryption:a().object,boundary:a().string,alwaysVisible:a().bool};const g=f},43231:(e,s,n)=>{n.d(s,{Z:()=>l});var t=n(85893),r=n(45697),a=n.n(r),o=(n(67294),n(94184)),i=n.n(o);const c=({className:e,percent:s,caption:n})=>(0,t.jsxs)("div",Object.assign({className:i()("ui progress",e,{indeterminate:void 0===s}),"data-percent":s},{children:[(0,t.jsx)("div",Object.assign({className:"bar",style:{transitionDuration:"300ms",width:void 0===s?void 0:s+"%",minWidth:"0px"}},{children:(0,t.jsx)("div",{className:"progress"})})),!!n&&(0,t.jsx)("div",Object.assign({className:"label"},{children:n}))]}));c.propTypes={percent:a().number.isRequired,caption:a().node.isRequired,className:a().string};const l=c},57745:(e,s,n)=>{n.r(s),n.d(s,{default:()=>le});var t=n(85893),r=n(67294),a=n(10293),o=n.n(a),i=n(23406),c=n(93836);const l=o().createStore({_viewName:"transfer_view",_apiUrl:i.Z.MODULE_URL,mixins:[(0,c.Z)("user")]});var d=n(27695),u=n(99015),m=n(27835);const p=({cellData:e,rowData:s})=>(0,t.jsx)(m.Z,Object.assign({triggerClassName:"name",className:"basic target",trigger:e},{children:(0,t.jsx)("div",{children:s.target})}));class h extends r.Component{shouldComponentUpdate(e){return e.cellData!==this.props.cellData}render(){const{cellData:e,rowDataGetter:s}=this.props;if(!e)return null;const n=s();return n.type?(0,t.jsx)(u.Z,{typeInfo:n.type,caption:(0,t.jsx)(p,{cellData:e,rowData:n})}):null}}const f=h;var g=n(94184),j=n.n(g),y=n(43231),v=n(68325),E=n(54883),x=n(76249);const N=(e,s)=>{const n=e.id;return j()({grey:n===x.lK.WAITING},{blue:n===x.lK.RUNNING&&s.download},{red:n===x.lK.RUNNING&&!s.download},{green:n===x.lK.FINISHED&&s.download},{brown:n===x.lK.FINISHED&&!s.download},{red:n===x.lK.FAILED})},S=({cellData:e,rowDataGetter:s})=>{if(e.id===x.lK.WAITING)return(0,t.jsx)(E.Z,{size:"small",inline:!0,text:e.str});if(e.id===x.lK.FAILED)return(0,t.jsx)("span",Object.assign({className:"error"},{children:e.str}));const n=s();let r=e.str;return n.encryption&&(r=(0,t.jsxs)("span",Object.assign({className:"transfer status encryption"},{children:[(0,t.jsx)(v.Z,{encryption:n.encryption}),r]}))),(0,t.jsx)(y.Z,{className:N(e,n),caption:r,percent:100*n.bytes_transferred/n.size})};var w=n(518),b=n(1087),R=n(48117),C=n(32347);const Z={removeSource:{displayName:"Remove user from queue",access:x.PS.QUEUE_EDIT,icon:R.Z.REMOVE,handler:({data:e})=>w.Z.delete(`${b.Z.SOURCES_URL}/${e.cid}`),notifications:{onSuccess:"The user {{user.nicks}} was removed from {{result.count}} files"}}},A=(C.jv.QUEUE,Z);var O=n(49133),D=function(e,s){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&s.indexOf(t)<0&&(n[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(t=Object.getOwnPropertySymbols(e);r<t.length;r++)s.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(n[t[r]]=e[t[r]])}return n};const I=e=>e.download,U=e=>e.status.id===i.s.FINISHED,T={force:{displayName:"Force connect",access:x.PS.TRANSFERS,icon:R.Z.REFRESH_COLORED,filter:I,handler:({data:e})=>w.Z.post(`${i.Z.TRANSFERS_URL}/${e.id}/force`)},disconnect:{displayName:"Disconnect",access:x.PS.TRANSFERS,icon:R.Z.DISCONNECT,handler:({data:e})=>w.Z.post(`${i.Z.TRANSFERS_URL}/${e.id}/disconnect`)},divider:null,removeFile:{displayName:"Remove file from queue",access:x.PS.QUEUE_EDIT,icon:R.Z.REMOVE,filter:e=>I(e)&&(e=>!!e.type&&"filelist"===e.type.content_type)(e)&&!U(e),handler:e=>{var{data:s}=e,n=D(e,["data"]);return O.Z.actions.removeFile.handler(Object.assign({data:{id:s.queue_file_id,target:s.target,name:s.name}},n))},notifications:{onSuccess:"File {{item.name}} was removed from queue"}},removeSource:{displayName:"Remove user from queue",access:x.PS.QUEUE_EDIT,icon:R.Z.REMOVE,filter:e=>I(e)&&!U(e),handler:e=>{var{data:s}=e,n=D(e,["data"]);return A.removeSource.handler(Object.assign({data:Object.assign(Object.assign({},s.user),{id:s.user.cid,hub_urls:[s.user.hub_url],flags:s.user.flags})},n))},notifications:{onSuccess:"The user {{item.user.nicks}} was removed from {{result.count}} files"}}},_={moduleId:C.jv.TRANSFERS,actions:T};var F=n(90195),K=n(47021),L=n(4333);const G=({cellData:e,rowData:s})=>(0,t.jsxs)("div",Object.assign({className:"transfer-user"},{children:[(0,t.jsx)("i",{className:(s.download?R.Z.DOWNLOAD:R.Z.UPLOAD)+" large icon"}),e.nicks]}));class P extends r.Component{shouldComponentUpdate(e){return e.cellData!==this.props.cellData}render(){const{cellData:e,rowDataGetter:s}=this.props;return(0,t.jsx)(K.cG,Object.assign({user:e,userIcon:null,ids:F.D,text:(0,t.jsx)(G,{rowData:s(),cellData:e}),remoteMenuId:L.Z.HINTED_USER},{children:(0,t.jsx)(K.B2,{itemData:s,actions:_,remoteMenuId:L.Z.TRANSFER})}))}}const k=P;var q=n(35108),$=n(78230),M=n(68126),H=n(93379),V=n.n(H),W=n(7795),Q=n.n(W),z=n(90569),B=n.n(z),J=n(3565),X=n.n(J),Y=n(19216),ee=n.n(Y),se=n(44589),ne=n.n(se),te=n(62824),re={};re.styleTagTransform=ne(),re.setAttributes=X(),re.insert=B().bind(null,"head"),re.domAPI=Q(),re.insertStyleElement=ee(),V()(te.Z,re),te.Z&&te.Z.locals&&te.Z.locals;var ae=n(91768),oe=n(8717);const ie=({cellData:e})=>(0,t.jsx)("span",Object.assign({className:"plain flags cell"},{children:e.join("")}));class ce extends r.Component{constructor(){super(...arguments),this.isPositive=e=>e>0,this.isRunning=(e,s)=>s.speed>0,this.emptyRowsNodeGetter=()=>{const{t:e}=this.props;return(0,t.jsx)(d.Z,{title:(0,oe.Iu)("No active transfers",e,C.jv.TRANSFERS),icon:R.Z.TRANSFERS_PLAIN})}}render(){return(0,t.jsxs)($.Z,Object.assign({emptyRowsNodeGetter:this.emptyRowsNodeGetter,store:l,moduleId:C.jv.TRANSFERS},{children:[(0,t.jsx)(q.Column,{name:"User",width:150,flexGrow:4,columnKey:"user",cell:(0,t.jsx)(k,{})}),(0,t.jsx)(q.Column,{name:"Name",width:150,flexGrow:4,columnKey:"name",cell:(0,t.jsx)(f,{})}),(0,t.jsx)(q.Column,{name:"Segment",width:65,columnKey:"size",cell:(0,t.jsx)(M.Eh,{}),renderCondition:this.isPositive,flexGrow:1}),(0,t.jsx)(q.Column,{name:"Status",width:140,flexGrow:4,columnKey:"status",cell:(0,t.jsx)(S,{})}),(0,t.jsx)(q.Column,{name:"Time left",width:50,columnKey:"seconds_left",renderCondition:this.isRunning,cell:(0,t.jsx)(M.VL,{})}),(0,t.jsx)(q.Column,{name:"Speed",width:50,columnKey:"speed",cell:(0,t.jsx)(M.LV,{}),renderCondition:this.isRunning,flexGrow:1}),(0,t.jsx)(q.Column,{name:"Flags",width:50,columnKey:"flags",cell:(0,t.jsx)(ie,{}),renderCondition:this.isRunning,flexGrow:1,hideWidth:800}),(0,t.jsx)(q.Column,{name:"IP",width:120,columnKey:"ip",flexGrow:1,cell:(0,t.jsx)(M.fI,{}),hideWidth:1e3})]}))}}ce.displayName="Transfers";const le=(0,ae.Z)()(ce)}}]);
2
+ //# sourceMappingURL=transfers.22e0a37c676d2a0996a8.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/transfers.22e0a37c676d2a0996a8.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Transfers/style.css","webpack://airdcpp-webui/./src/actions/ui/QueueFileActions.ts","webpack://airdcpp-webui/./src/components/EncryptionState.tsx","webpack://airdcpp-webui/./src/components/semantic/Progress.tsx","webpack://airdcpp-webui/./src/stores/TransferStore.js","webpack://airdcpp-webui/./src/routes/Transfers/components/NameCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/components/StatusCell.tsx","webpack://airdcpp-webui/./src/actions/ui/QueueSourceActions.ts","webpack://airdcpp-webui/./src/actions/ui/TransferActions.ts","webpack://airdcpp-webui/./src/routes/Transfers/components/UserCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/style.css?f802","webpack://airdcpp-webui/./src/routes/Transfers/components/Transfers.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, \".status .error {\\r\\n color: red;\\r\\n}\\r\\n\\r\\n.transfer.status .target {\\r\\n word-break: break-all;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Transfers/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,UAAU;AACZ;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\".status .error {\\r\\n color: red;\\r\\n}\\r\\n\\r\\n.transfer.status .target {\\r\\n word-break: break-all;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport SearchActions from 'actions/reflux/SearchActions';\r\n\r\n\r\nconst itemNotFinished = (item: API.QueueFile) => item.time_finished === 0;\r\n\r\n\r\nconst handleSearch: UI.ActionHandler<API.QueueFile> = ({ data: itemInfo, location }) => {\r\n return SearchActions.search(itemInfo, location);\r\n};\r\n\r\nconst handleRemoveFile: UI.ActionHandler<API.QueueFile> = (\r\n { data: file },\r\n removeFinished: boolean\r\n) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/remove`, {\r\n remove_finished: removeFinished,\r\n });\r\n};\r\n\r\nconst handleSearchFileAlternates: UI.ActionHandler<API.QueueFile> = ({ data: file }) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/search`);\r\n};\r\n\r\n\r\n\r\nconst QueueFileActions: UI.ActionListType<API.QueueFile> = {\r\n search: {\r\n access: API.AccessEnum.SEARCH, \r\n displayName: 'Search (foreground)', \r\n icon: IconConstants.SEARCH,\r\n handler: handleSearch,\r\n },\r\n searchFileAlternates: {\r\n access: API.AccessEnum.QUEUE_EDIT, \r\n displayName: 'Search for alternates', \r\n icon: IconConstants.SEARCH_ALTERNATES,\r\n filter: itemNotFinished,\r\n handler: handleSearchFileAlternates,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was searched for alternates',\r\n }\r\n },\r\n removeFile: { \r\n displayName: 'Remove',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the file {{item.name}}?',\r\n approveCaption: 'Remove file',\r\n rejectCaption: `Don't remove`,\r\n checkboxCaption: 'Remove on disk',\r\n },\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n }\r\n },\r\n};\r\n\r\n\r\nexport default {\r\n moduleId: UI.Modules.QUEUE,\r\n //subId: 'file',\r\n actions: QueueFileActions,\r\n} as UI.ModuleActions<API.QueueFile>;\r\n","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\n\r\nimport Popup from 'components/semantic/Popup';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { Trans } from 'react-i18next';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\r\nimport Icon from './semantic/Icon';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\ninterface Info {\r\n iconColor: string;\r\n messageColor: string;\r\n message: string;\r\n cornerIcon: string;\r\n translationKey: string;\r\n}\r\n\r\nconst encryptionToInfo = (encryption: API.EncryptionInfo): Info => {\r\n const tlsVersion = encryption.str.match(/TLSv([\\d\\.]+)/);\r\n if (tlsVersion && tlsVersion.length === 2 && parseFloat(tlsVersion[1]) < 1.2) {\r\n return {\r\n iconColor: 'orange',\r\n messageColor: 'red',\r\n message: 'Outdated cryptographic protocol with known security vulnerabilities',\r\n cornerIcon: 'orange warning',\r\n translationKey: 'tlsOutdatedWarning',\r\n };\r\n }\r\n\r\n if (!encryption.trusted) {\r\n return {\r\n iconColor: 'yellow',\r\n messageColor: 'orange',\r\n message: 'Authenticity of the certificate could not be validated',\r\n cornerIcon: 'blue help',\r\n translationKey: 'tlsAuthenticityWarning',\r\n };\r\n }\r\n\r\n return {\r\n iconColor: 'green',\r\n messageColor: 'green',\r\n message: 'Authenticity of the certificate is validated',\r\n cornerIcon: '',\r\n translationKey: 'tlsOk',\r\n };\r\n};\r\n\r\n\r\ninterface InfoMessageProps {\r\n info: Info;\r\n encryption: API.EncryptionInfo;\r\n}\r\n\r\nconst InfoMessage: React.FC<InfoMessageProps> = ({ info, encryption }) => (\r\n <div>\r\n <p>\r\n { encryption.str }\r\n </p>\r\n <p style={ { color: info.messageColor } }>\r\n <Trans i18nKey={ toI18nKey(info.translationKey, UI.Modules.COMMON) }>\r\n { info.message }\r\n </Trans>\r\n </p>\r\n </div>\r\n);\r\n\r\ninterface EncryptionStateProps extends Partial<Pick<SemanticUI.PopupSettings, 'boundary'>> {\r\n encryption?: API.EncryptionInfo;\r\n alwaysVisible?: boolean;\r\n}\r\n\r\nclass EncryptionState extends React.PureComponent<EncryptionStateProps> {\r\n static propTypes = {\r\n encryption: PropTypes.object,\r\n boundary: PropTypes.string,\r\n\r\n // Show the lock icon even when there is no encryption\r\n alwaysVisible: PropTypes.bool,\r\n };\r\n\r\n getChildren = () => {\r\n const { encryption } = this.props;\r\n\r\n const info = encryptionToInfo(encryption!);\r\n return <InfoMessage info={ info } encryption={ encryption! }/>;\r\n }\r\n\r\n render() {\r\n const { encryption, alwaysVisible, boundary } = this.props;\r\n if (!encryption) {\r\n return !!alwaysVisible && <Icon color=\"grey\" icon={ IconConstants.LOCK }/>;\r\n }\r\n\r\n const info = encryptionToInfo(encryption);\r\n return (\r\n <Popup \r\n triggerClassName=\"encryption\" \r\n className=\"basic encryption content\" \r\n trigger={\r\n <Icon\r\n color={ info.iconColor }\r\n icon={ IconConstants.LOCK }\r\n cornerIcon={ info.cornerIcon }\r\n />\r\n }\r\n settings={ {\r\n boundary,\r\n } as SemanticUI.PopupSettings }\r\n >\r\n { this.getChildren }\r\n </Popup>\r\n );\r\n }\r\n}\r\n\r\nexport default EncryptionState;","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\n\r\nexport interface ProgressProps {\r\n caption?: React.ReactNode;\r\n className?: string | null;\r\n percent?: number;\r\n}\r\n\r\nconst Progress: React.FC<ProgressProps> = ({ className, percent, caption }) => (\r\n <div \r\n className={ classNames(\r\n 'ui progress', \r\n className, \r\n { 'indeterminate': percent === undefined },\r\n ) } \r\n data-percent={ percent }\r\n >\r\n <div \r\n className=\"bar\" \r\n style={{ \r\n transitionDuration: 300 + 'ms',\r\n width: percent === undefined ? undefined : percent + '%',\r\n minWidth: '0px'\r\n }}\r\n >\r\n <div className=\"progress\"/>\r\n </div>\r\n { !!caption && (\r\n <div className=\"label\">\r\n { caption }\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nProgress.propTypes = {\r\n percent: PropTypes.number.isRequired,\r\n caption: PropTypes.node.isRequired,\r\n className: PropTypes.string,\r\n};\r\n\r\nexport default Progress;","import Reflux from 'reflux';\r\n\r\nimport TransferConstants from 'constants/TransferConstants';\r\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\r\n\r\n\r\nexport default Reflux.createStore({\r\n _viewName: 'transfer_view',\r\n _apiUrl: TransferConstants.MODULE_URL,\r\n mixins: [ ViewStoreMixin('user') ],\r\n});\r\n","import * as React from 'react';\r\n\r\nimport FormattedFile from 'components/format/FormattedFile';\r\nimport Popup from 'components/semantic/Popup';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\n\r\n\r\nconst NameCaption: React.FC<RowWrapperCellChildProps<string, API.Transfer>> = ({ cellData, rowData }) => (\r\n <Popup \r\n triggerClassName=\"name\" \r\n className=\"basic target\" \r\n trigger={ cellData }\r\n >\r\n <div>{ rowData!.target }</div>\r\n </Popup>\r\n);\r\n\r\ninterface NameCellProps extends RowWrapperCellChildProps<string, API.Transfer> {\r\n\r\n}\r\n\r\nclass NameCell extends React.Component<NameCellProps> {\r\n shouldComponentUpdate(nextProps: NameCellProps) {\r\n return nextProps.cellData !== this.props.cellData;\r\n }\r\n\r\n render() {\r\n const { cellData, rowDataGetter } = this.props;\r\n if (!cellData) {\r\n return null;\r\n }\r\n\r\n const rowData = rowDataGetter!();\r\n if (!rowData.type) {\r\n return null;\r\n }\r\n\r\n return (\r\n <FormattedFile \r\n typeInfo={ rowData.type }\r\n caption={ <NameCaption cellData={ cellData } rowData={ rowData }/> }\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default NameCell;","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport Progress from 'components/semantic/Progress';\r\n\r\nimport EncryptionState from 'components/EncryptionState';\r\nimport Loader from 'components/semantic/Loader';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\n\r\n\r\nconst getStatusClass = (cellData: API.TransferStatus, rowData: API.Transfer) => {\r\n const statusId = cellData.id;\r\n return classNames(\r\n { 'grey': statusId === API.TransferStatusEnum.WAITING },\r\n { 'blue': statusId === API.TransferStatusEnum.RUNNING && rowData.download },\r\n { 'red': statusId === API.TransferStatusEnum.RUNNING && !rowData.download },\r\n { 'green': statusId === API.TransferStatusEnum.FINISHED && rowData.download },\r\n { 'brown': statusId === API.TransferStatusEnum.FINISHED && !rowData.download },\r\n { 'red': statusId === API.TransferStatusEnum.FAILED },\r\n );\r\n};\r\n\r\ninterface StatusCellProps extends RowWrapperCellChildProps<API.TransferStatus, API.Transfer> {\r\n\r\n}\r\n\r\nconst StatusCell: React.FC<StatusCellProps> = ({ cellData, rowDataGetter }) => {\r\n if (cellData!.id === API.TransferStatusEnum.WAITING) {\r\n return <Loader size=\"small\" inline={ true } text={ cellData!.str }/>;\r\n }\r\n\r\n if (cellData!.id === API.TransferStatusEnum.FAILED) {\r\n return <span className=\"error\">{ cellData!.str }</span>;\r\n }\r\n\r\n const rowData = rowDataGetter!();\r\n let caption: React.ReactNode = cellData!.str;\r\n if (rowData.encryption) {\r\n caption = (\r\n <span className=\"transfer status encryption\">\r\n <EncryptionState encryption={ rowData.encryption }/>\r\n { caption }\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <Progress \r\n className={ getStatusClass(cellData!, rowData) }\r\n caption={ caption }\r\n percent={ (rowData.bytes_transferred * 100) / rowData.size }\r\n />\r\n );\r\n};\r\n\r\nexport default StatusCell;","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\nconst handleRemoveSource: UI.ActionHandler<API.User> = (\r\n { data: user }\r\n) => {\r\n return SocketService.delete(`${QueueConstants.SOURCES_URL}/${user.cid}`);\r\n};\r\n\r\nconst QueueSourceActions: UI.ActionListType<API.User> = {\r\n removeSource: {\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT, \r\n icon: IconConstants.REMOVE,\r\n //filter: removeSource,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{user.nicks}} was removed from {{result.count}} files',\r\n }\r\n },\r\n};\r\n\r\nexport default {\r\n moduleId: UI.Modules.QUEUE,\r\n actions: QueueSourceActions,\r\n};\r\n","\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport QueueSourceActions from 'actions/ui/QueueSourceActions';\r\n\r\nimport QueueFileActions from 'actions/ui/QueueFileActions';\r\n\r\nimport { default as TransferConstants, StatusEnum } from 'constants/TransferConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\nconst isFilelist = (transfer: API.Transfer) => !!transfer.type && \r\n (transfer.type as API.FileType).content_type === 'filelist';\r\nconst isDownload = (transfer: API.Transfer) => transfer.download;\r\nconst isFinished = (transfer: API.Transfer) => transfer.status.id === StatusEnum.FINISHED;\r\nconst removeFile = (transfer: API.Transfer) => isDownload(transfer) && isFilelist(transfer) && !isFinished(transfer);\r\nconst removeSource = (transfer: API.Transfer) => isDownload(transfer) && !isFinished(transfer);\r\n\r\n\r\nconst handleForce: UI.ActionHandler<API.Transfer> = ({ data: transfer }) => {\r\n return SocketService.post(`${TransferConstants.TRANSFERS_URL}/${transfer.id}/force`);\r\n};\r\n\r\nconst handleDisconnect: UI.ActionHandler<API.Transfer> = ({ data: transfer }) => {\r\n return SocketService.post(`${TransferConstants.TRANSFERS_URL}/${transfer.id}/disconnect`);\r\n};\r\n\r\nconst handleRemoveFile: UI.ActionHandler<API.Transfer> = ({ data: transfer, ...other }) => {\r\n return QueueFileActions.actions.removeFile!.handler({\r\n data: {\r\n id: transfer.queue_file_id,\r\n target: transfer.target,\r\n name: transfer.name\r\n } as API.QueueFile,\r\n ...other\r\n });\r\n};\r\n\r\nconst handleRemoveSource: UI.ActionHandler<API.Transfer> = ({ data: transfer, ...other }) => {\r\n return QueueSourceActions.actions.removeSource!.handler({\r\n data: {\r\n ...transfer.user,\r\n id: transfer.user.cid,\r\n hub_urls: [ transfer.user.hub_url ],\r\n flags: transfer.user.flags as API.UserFlag[]\r\n },\r\n ...other\r\n });\r\n};\r\n\r\n\r\n\r\nconst TransferActions: UI.ActionListType<API.Transfer> = {\r\n force: {\r\n displayName: 'Force connect',\r\n access: API.AccessEnum.TRANSFERS,\r\n icon: IconConstants.REFRESH_COLORED,\r\n filter: isDownload,\r\n handler: handleForce,\r\n },\r\n disconnect: {\r\n displayName: 'Disconnect',\r\n access: API.AccessEnum.TRANSFERS, \r\n icon: IconConstants.DISCONNECT,\r\n handler: handleDisconnect,\r\n },\r\n divider: null,\r\n removeFile: { \r\n displayName: 'Remove file from queue',\r\n access: API.AccessEnum.QUEUE_EDIT, \r\n icon: IconConstants.REMOVE,\r\n filter: removeFile,\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n }\r\n },\r\n removeSource: {\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT, \r\n icon: IconConstants.REMOVE,\r\n filter: removeSource,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{item.user.nicks}} was removed from {{result.count}} files',\r\n }\r\n },\r\n};\r\n\r\nexport default {\r\n moduleId: UI.Modules.TRANSFERS,\r\n actions: TransferActions,\r\n};\r\n","import * as React from 'react';\r\n\r\nimport TransferActions from 'actions/ui/TransferActions';\r\nimport { UserFileActions } from 'actions/ui/UserActions';\r\n\r\nimport { TableActionMenu, TableUserMenu } from 'components/menu';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport MenuConstants from 'constants/MenuConstants';\r\n\r\n\r\nconst UserCaption: React.FC<RowWrapperCellChildProps<API.HintedUser, API.Transfer>> = ({ cellData, rowData }) => (\r\n <div className=\"transfer-user\">\r\n <i className={ (rowData!.download ? IconConstants.DOWNLOAD : IconConstants.UPLOAD) + ' large icon' }/>\r\n { cellData!.nicks }\r\n </div>\r\n);\r\n\r\ninterface UserCellProps extends RowWrapperCellChildProps<API.HintedUser, API.Transfer> {\r\n\r\n}\r\n\r\nclass UserCell extends React.Component<UserCellProps> {\r\n shouldComponentUpdate(nextProps: UserCellProps) {\r\n return nextProps.cellData !== this.props.cellData;\r\n }\r\n\r\n render() {\r\n const { cellData, rowDataGetter } = this.props;\r\n return (\r\n <TableUserMenu \r\n user={ cellData! }\r\n userIcon={ null }\r\n ids={ UserFileActions }\r\n text={ <UserCaption rowData={ rowDataGetter!() } cellData={ cellData }/> }\r\n remoteMenuId={ MenuConstants.HINTED_USER }\r\n >\r\n <TableActionMenu \r\n itemData={ rowDataGetter }\r\n actions={ TransferActions }\r\n remoteMenuId={ MenuConstants.TRANSFER }\r\n />\r\n </TableUserMenu>\r\n );\r\n }\r\n}\r\n\r\nexport default UserCell;","\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 * as React from 'react';\r\n\r\nimport TransferStore from 'stores/TransferStore';\r\n\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport NameCell from 'routes/Transfers/components/NameCell';\r\nimport StatusCell from 'routes/Transfers/components/StatusCell';\r\nimport UserCell from 'routes/Transfers/components/UserCell';\r\n\r\nimport { Column } from 'fixed-data-table-2';\r\nimport VirtualTable from 'components/table/VirtualTable';\r\nimport { SizeCell, SpeedCell, AbbreviatedDurationCell, IpCell } from 'components/table/Cell';\r\n\r\nimport '../style.css';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\nconst FlagsCell: React.FC<RowWrapperCellChildProps<string[], API.Transfer>> = ({ cellData }) => (\r\n <span className=\"plain flags cell\">\r\n { cellData!.join('') }\r\n </span>\r\n);\r\n\r\n\r\ninterface TransfersProps extends WithTranslation {\r\n\r\n}\r\n\r\nclass Transfers extends React.Component<TransfersProps> {\r\n static displayName = 'Transfers';\r\n\r\n isPositive = (cellData: number) => {\r\n return cellData > 0;\r\n }\r\n\r\n isRunning = (cellData: any, rowData: API.Transfer) => {\r\n return rowData.speed > 0;\r\n }\r\n\r\n emptyRowsNodeGetter = () => {\r\n const { t } = this.props;\r\n return (\r\n <Message \r\n title={ translate('No active transfers', t, UI.Modules.TRANSFERS) }\r\n icon={ IconConstants.TRANSFERS_PLAIN }\r\n />\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <VirtualTable\r\n emptyRowsNodeGetter={ this.emptyRowsNodeGetter }\r\n store={ TransferStore }\r\n moduleId={ UI.Modules.TRANSFERS }\r\n >\r\n <Column\r\n name=\"User\"\r\n width={150}\r\n flexGrow={4}\r\n columnKey=\"user\"\r\n cell={ <UserCell/> }\r\n />\r\n <Column\r\n name=\"Name\"\r\n width={150}\r\n flexGrow={4}\r\n columnKey=\"name\"\r\n cell={ <NameCell/> }\r\n />\r\n <Column\r\n name=\"Segment\"\r\n width={65}\r\n columnKey=\"size\"\r\n cell={ <SizeCell/> }\r\n renderCondition={ this.isPositive }\r\n flexGrow={1}\r\n />\r\n <Column\r\n name=\"Status\"\r\n width={140}\r\n flexGrow={4}\r\n columnKey=\"status\"\r\n cell={ <StatusCell/> }\r\n />\r\n <Column\r\n name=\"Time left\"\r\n width={50}\r\n columnKey=\"seconds_left\"\r\n renderCondition={ this.isRunning }\r\n cell={ <AbbreviatedDurationCell/> }\r\n />\r\n <Column\r\n name=\"Speed\"\r\n width={50}\r\n columnKey=\"speed\"\r\n cell={ <SpeedCell/> }\r\n renderCondition={ this.isRunning }\r\n flexGrow={1}\r\n />\r\n <Column\r\n name=\"Flags\"\r\n width={50}\r\n columnKey=\"flags\"\r\n cell={ <FlagsCell/> }\r\n renderCondition={ this.isRunning }\r\n flexGrow={1}\r\n hideWidth={800}\r\n />\r\n <Column\r\n name=\"IP\"\r\n width={120}\r\n columnKey=\"ip\"\r\n flexGrow={1}\r\n cell={ <IpCell/> }\r\n hideWidth={1000}\r\n />\r\n </VirtualTable>\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(Transfers);"],"names":["___CSS_LOADER_EXPORT___","push","module","id","QueueFileActions","search","access","displayName","icon","handler","data","itemInfo","location","searchFileAlternates","filter","item","time_finished","file","notifications","onSuccess","removeFile","confirmation","content","approveCaption","rejectCaption","checkboxCaption","removeFinished","remove_finished","moduleId","actions","encryptionToInfo","encryption","tlsVersion","str","match","length","parseFloat","iconColor","messageColor","message","cornerIcon","translationKey","trusted","InfoMessage","info","style","color","i18nKey","EncryptionState","getChildren","this","props","render","alwaysVisible","boundary","triggerClassName","className","trigger","settings","propTypes","Progress","percent","caption","undefined","transitionDuration","width","minWidth","_viewName","_apiUrl","TransferConstants","mixins","ViewStoreMixin","NameCaption","cellData","rowData","Popup","target","NameCell","shouldComponentUpdate","nextProps","rowDataGetter","type","FormattedFile","typeInfo","getStatusClass","statusId","download","Loader","size","inline","text","bytes_transferred","QueueSourceActions","removeSource","IconConstants","user","SocketService","QueueConstants","cid","isDownload","transfer","isFinished","status","TransferActions","force","disconnect","divider","content_type","isFilelist","other","queue_file_id","name","hub_urls","hub_url","flags","UserCaption","nicks","UserCell","userIcon","ids","remoteMenuId","MenuConstants","itemData","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","FlagsCell","join","Transfers","isPositive","isRunning","speed","emptyRowsNodeGetter","t","Message","title","VirtualTable","store","TransferStore","Column","flexGrow","columnKey","cell","renderCondition","hideWidth","withTranslation"],"sourceRoot":""}
package/dist/sw.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{const e=self.location.origin+self.location.pathname.replace("sw.js",""),t=[{'revision':'d13b5e10c56587e7befe72dc8f66cc6a','url':'index.html'},{'revision':null,'url':'js/285.744e520b1611ce9c52a5.chunk.js'},{'revision':null,'url':'js/334.27c2467ccb3a5cb23acf.chunk.js'},{'revision':null,'url':'js/424.83f0cedf9d07b9d54fcb.chunk.js'},{'revision':null,'url':'js/668.ca79db34c1e147bd25d0.chunk.js'},{'revision':null,'url':'js/69.779bd39a66fa5ea5248b.chunk.js'},{'revision':null,'url':'js/702.dd4be667774bce5de14f.chunk.js'},{'revision':null,'url':'js/760.5448a03d335f92bedb53.chunk.js'},{'revision':null,'url':'js/favorite-hubs.82de31826d6a7541ec24.chunk.js'},{'revision':null,'url':'js/filelists.7a9e00969dcca088a27c.chunk.js'},{'revision':null,'url':'js/files.bb297a4f890216386a57.chunk.js'},{'revision':null,'url':'js/home.727a64f6586ed95a66bb.chunk.js'},{'revision':null,'url':'js/hubs.8b51f0869cdfed35644e.chunk.js'},{'revision':null,'url':'js/locales/ca.78b3bea781886ff158b4.chunk.js'},{'revision':null,'url':'js/locales/da.6f097ed425797ab32cb3.chunk.js'},{'revision':null,'url':'js/locales/de.fce9df327aeebd67e9a1.chunk.js'},{'revision':null,'url':'js/locales/el.c325cc8141993f493ad0.chunk.js'},{'revision':null,'url':'js/locales/en.ebb20d0566fd8e7cb3b8.chunk.js'},{'revision':null,'url':'js/locales/es.784f05fd27d172e4ff10.chunk.js'},{'revision':null,'url':'js/locales/eu.13252b0f7f7534b39e34.chunk.js'},{'revision':null,'url':'js/locales/fi.1641c49d1e7154261df8.chunk.js'},{'revision':null,'url':'js/locales/fr.ede93bff1e1571d56404.chunk.js'},{'revision':null,'url':'js/locales/hu.5aa0843ba5ebefad56b2.chunk.js'},{'revision':null,'url':'js/locales/it.63acad3d71352720e323.chunk.js'},{'revision':null,'url':'js/locales/nl.a23ef3d4aff66ca3b215.chunk.js'},{'revision':null,'url':'js/locales/no.da135b9c1614a4616b47.chunk.js'},{'revision':null,'url':'js/locales/pl.36e1b3baf978ef6c184a.chunk.js'},{'revision':null,'url':'js/locales/pt-br.57dff49b32efd65d6825.chunk.js'},{'revision':null,'url':'js/locales/pt.ab93507031a40179f7c7.chunk.js'},{'revision':null,'url':'js/locales/ro.551cd0a17581b2159112.chunk.js'},{'revision':null,'url':'js/locales/ru.cbf29ad6736a21d83bcb.chunk.js'},{'revision':null,'url':'js/locales/sv.d33f4b4be982814b6343.chunk.js'},{'revision':null,'url':'js/locales/tr.88e97bf59131df380c5a.chunk.js'},{'revision':null,'url':'js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js'},{'revision':null,'url':'js/locales/zh_CN.a9edec208d0cfe49d94b.chunk.js'},{'revision':null,'url':'js/main.c01c26460331633a96e2.entry.js'},{'revision':null,'url':'js/messages.cfb23ba34e3a288ca289.chunk.js'},{'revision':null,'url':'js/queue.0e532f2a56e464d1626b.chunk.js'},{'revision':null,'url':'js/search.ef2d64870dc65f549d8c.chunk.js'},{'revision':null,'url':'js/settings.b3fd7918efe3c8bfae88.chunk.js'},{'revision':null,'url':'js/share.c0cdc71a867839f5c8b3.chunk.js'},{'revision':null,'url':'js/system-log.45dba574bcb91efd176c.chunk.js'},{'revision':null,'url':'js/transfers.4ed15c9e5e62fe968fbc.chunk.js'}].map((function(t){return e+t.url})),n="resource-store";function l(e,t){return caches.match(new URL(t)).then((function(t){return t?(console.log("[SW] Return cached",e.request.url),t):(console.log("[SW] Fetch",e.request.url),fetch(e.request))}))}self.addEventListener("install",(e=>{console.log("[SW] Worker installed"),e.waitUntil(caches.open(n).then((e=>e.addAll([...t]))).then((()=>{console.log("[SW] Assets: ",t)})).catch((e=>{throw console.error(e),e})))})),self.addEventListener("activate",(e=>{console.log("[SW] Activate event"),e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>caches.open(e).then((e=>(e=>e.keys().then((n=>Promise.all(n.map(((n,l,s)=>-1!==t.indexOf(n.url)?(console.log(`[SW] Cached asset ${n.url} still exists, skip delete`),null):e.delete(n).then((e=>{console.log(`[SW] Cached asset ${n.url} deleted`,e)}))))))))(e)))))))))})),self.addEventListener("fetch",(t=>{if("GET"===t.request.method){if("navigate"===t.request.mode||t.request.url.startsWith(e)&&-1===t.request.url.indexOf(".",e.length)&&!t.request.url.replace(e,"").match(/^(view)\//)){console.log("[SW] Navigate action, fetch index",t.request.url);const s=e+"index.html";return t.respondWith(new Promise(((e,o)=>{fetch(s).then((l=>{caches.open(n).then((n=>{n.put(new Request(s),l.clone()).then((()=>{console.log("[SW] Index file cached",t.request.url),e(l)}))}))})).catch((n=>{console.log("[SW] Navigate action, failed to fetch index",t.request.url,n),e(l(t,s))}))})))}return t.respondWith(l(t,t.request.url))}}))})();
1
+ (()=>{const e=self.location.origin+self.location.pathname.replace("sw.js",""),t=[{'revision':'d92857dac0225af0da7d7aaed98269eb','url':'index.html'},{'revision':null,'url':'js/285.14157e0f1f25fb9aaecd.chunk.js'},{'revision':null,'url':'js/334.dba054251a3e485f3ea9.chunk.js'},{'revision':null,'url':'js/424.44413ba27808d4072f7f.chunk.js'},{'revision':null,'url':'js/668.2579506f7fa8bed8a452.chunk.js'},{'revision':null,'url':'js/69.7b5fa94bd7c4e6f23ed6.chunk.js'},{'revision':null,'url':'js/702.d36d38b2be52ab51c0a9.chunk.js'},{'revision':null,'url':'js/760.83634ca054e04ff6c7e2.chunk.js'},{'revision':null,'url':'js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js'},{'revision':null,'url':'js/filelists.c550cdaa211edb6f733f.chunk.js'},{'revision':null,'url':'js/files.51c49d6a2825cbc64879.chunk.js'},{'revision':null,'url':'js/home.895154334c98dbe0f183.chunk.js'},{'revision':null,'url':'js/hubs.42526e43270139eb1849.chunk.js'},{'revision':null,'url':'js/locales/ca.ed09d3a3d4bcca929ba1.chunk.js'},{'revision':null,'url':'js/locales/da.6f60a77e9ef082dd3bf4.chunk.js'},{'revision':null,'url':'js/locales/de.3b7d3665460384259e82.chunk.js'},{'revision':null,'url':'js/locales/el.598573d2a5ed18804fe0.chunk.js'},{'revision':null,'url':'js/locales/en.f0fe75dca201449e5e47.chunk.js'},{'revision':null,'url':'js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js'},{'revision':null,'url':'js/locales/eu.7734fc077f26418d6b32.chunk.js'},{'revision':null,'url':'js/locales/fi.d1f8a5f4048236243b0f.chunk.js'},{'revision':null,'url':'js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js'},{'revision':null,'url':'js/locales/hu.d0d2c38a03a3b38c2bc5.chunk.js'},{'revision':null,'url':'js/locales/it.0c911d75c50ea83190ad.chunk.js'},{'revision':null,'url':'js/locales/nl.36d288d75b3d3cbabf11.chunk.js'},{'revision':null,'url':'js/locales/no.8f2f465d5f785650175d.chunk.js'},{'revision':null,'url':'js/locales/pl.06e51d7d7b09ba14714d.chunk.js'},{'revision':null,'url':'js/locales/pt-br.9d19d92899e8c0917c66.chunk.js'},{'revision':null,'url':'js/locales/pt.4390db3955db29b0e7dd.chunk.js'},{'revision':null,'url':'js/locales/ro.705fcd327263fcf419bf.chunk.js'},{'revision':null,'url':'js/locales/ru.8ab7e1c0d9eee7aa7afb.chunk.js'},{'revision':null,'url':'js/locales/sv.be546e605910932db11f.chunk.js'},{'revision':null,'url':'js/locales/tr.25a0d0f19e007e2febc9.chunk.js'},{'revision':null,'url':'js/locales/uk_UA.61073eae675491639925.chunk.js'},{'revision':null,'url':'js/locales/zh_CN.4b75674e4815a965ccea.chunk.js'},{'revision':null,'url':'js/main.51b1144fdbc0a681eb6c.entry.js'},{'revision':null,'url':'js/messages.6f74e67a600c48f367ad.chunk.js'},{'revision':null,'url':'js/queue.82a405ba14b60974cb0f.chunk.js'},{'revision':null,'url':'js/search.af59b1b20b4d7194457b.chunk.js'},{'revision':null,'url':'js/settings.b543eade40a723e95c77.chunk.js'},{'revision':null,'url':'js/share.f06abf75f7f2a6afc1b3.chunk.js'},{'revision':null,'url':'js/system-log.b9763d1c0f5cf5966f21.chunk.js'},{'revision':null,'url':'js/transfers.22e0a37c676d2a0996a8.chunk.js'}].map((function(t){return e+t.url})),n="resource-store";function l(e,t){return caches.match(new URL(t)).then((function(t){return t?(console.log("[SW] Return cached",e.request.url),t):(console.log("[SW] Fetch",e.request.url),fetch(e.request))}))}self.addEventListener("install",(e=>{console.log("[SW] Worker installed"),e.waitUntil(caches.open(n).then((e=>e.addAll([...t]))).then((()=>{console.log("[SW] Assets: ",t)})).catch((e=>{throw console.error(e),e})))})),self.addEventListener("activate",(e=>{console.log("[SW] Activate event"),e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>caches.open(e).then((e=>(e=>e.keys().then((n=>Promise.all(n.map(((n,l,s)=>-1!==t.indexOf(n.url)?(console.log(`[SW] Cached asset ${n.url} still exists, skip delete`),null):e.delete(n).then((e=>{console.log(`[SW] Cached asset ${n.url} deleted`,e)}))))))))(e)))))))))})),self.addEventListener("fetch",(t=>{if("GET"===t.request.method){if("navigate"===t.request.mode||t.request.url.startsWith(e)&&-1===t.request.url.indexOf(".",e.length)&&!t.request.url.replace(e,"").match(/^(view)\//)){console.log("[SW] Navigate action, fetch index",t.request.url);const s=e+"index.html";return t.respondWith(new Promise(((e,o)=>{fetch(s).then((l=>{caches.open(n).then((n=>{n.put(new Request(s),l.clone()).then((()=>{console.log("[SW] Index file cached",t.request.url),e(l)}))}))})).catch((n=>{console.log("[SW] Navigate action, failed to fetch index",t.request.url,n),e(l(t,s))}))})))}return t.respondWith(l(t,t.request.url))}}))})();
2
2
  //# sourceMappingURL=sw.js.map
package/dist/sw.js.gz CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "airdcpp-webui",
3
- "version": "2.11.2-beta.2",
3
+ "version": "2.11.3-beta.2",
4
4
  "description": "AirDC++ Web UI",
5
5
  "license": "MIT",
6
6
  "authors": [
@@ -37,96 +37,97 @@
37
37
  ],
38
38
  "devDependencies": {
39
39
  "@alienfast/i18next-loader": "^1.1.4",
40
- "@babel/core": "^7.15.0",
41
- "@babel/plugin-proposal-class-properties": "^7.14.5",
40
+ "@babel/core": "^7.17.9",
41
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
42
42
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
43
- "@babel/plugin-transform-object-assign": "^7.14.5",
44
- "@babel/plugin-transform-react-display-name": "^7.15.1",
45
- "@babel/preset-env": "^7.15.0",
46
- "@babel/preset-react": "^7.14.5",
47
- "@babel/preset-typescript": "^7.15.0",
43
+ "@babel/plugin-transform-object-assign": "^7.16.7",
44
+ "@babel/plugin-transform-react-display-name": "^7.16.7",
45
+ "@babel/preset-env": "^7.16.11",
46
+ "@babel/preset-react": "^7.16.7",
47
+ "@babel/preset-typescript": "^7.16.7",
48
48
  "@gfx/zopfli": "^1.0.15",
49
- "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
49
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
50
50
  "@types/express": "^4.17.13",
51
- "@types/fixed-data-table-2": "^0.8.5",
51
+ "@types/fixed-data-table-2": "^0.8.7",
52
52
  "@types/he": "^1.1.2",
53
- "@types/invariant": "^2.2.34",
54
- "@types/jest": "^27.0.1",
55
- "@types/jquery": "^3.5.6",
53
+ "@types/invariant": "^2.2.35",
54
+ "@types/jest": "^27.4.1",
55
+ "@types/jquery": "^3.5.14",
56
56
  "@types/linkify-it": "^3.0.2",
57
- "@types/lodash": "^4.14.172",
58
- "@types/node": "^16.7.1",
59
- "@types/prop-types": "^15.7.4",
60
- "@types/react": "^17.0.19",
57
+ "@types/lodash": "^4.14.181",
58
+ "@types/node": "^17.0.23",
59
+ "@types/prop-types": "^15.7.5",
60
+ "@types/react": "^17.0.44",
61
61
  "@types/react-autosuggest": "^10.1.5",
62
- "@types/react-dom": "^17.0.9",
63
- "@types/react-grid-layout": "^1.1.2",
62
+ "@types/react-beautiful-dnd": "^13.1.2",
63
+ "@types/react-dom": "^17.0.15",
64
+ "@types/react-grid-layout": "^1.3.2",
64
65
  "@types/react-linkify": "^1.0.1",
65
- "@types/react-measure": "^2.0.7",
66
- "@types/react-mentions": "^4.1.3",
67
- "@types/react-notification-system": "^0.2.41",
68
- "@types/react-router-dom": "^5.1.8",
69
- "@types/react-select": "^4.0.17",
70
- "@types/react-transition-group": "^4.4.2",
66
+ "@types/react-measure": "^2.0.8",
67
+ "@types/react-mentions": "^4.1.5",
68
+ "@types/react-notification-system": "^0.2.42",
69
+ "@types/react-router-dom": "^5.3.3",
70
+ "@types/react-transition-group": "^4.4.4",
71
71
  "@types/semantic-ui": "^2.2.7",
72
72
  "@types/webpack": "^5.28.0",
73
- "airdcpp-apisocket": "^2.4.3",
73
+ "airdcpp-apisocket": "^2.4.4",
74
74
  "babel-core": "^7.0.0-bridge.0",
75
- "babel-jest": "^27.0.6",
76
- "babel-loader": "^8.2.2",
75
+ "babel-jest": "^27.5.1",
76
+ "babel-loader": "^8.2.4",
77
77
  "babel-plugin-module-resolver": "^4.1.0",
78
78
  "classnames": "^2.3.1",
79
- "compare-versions": "^3.6.0",
80
- "compression-webpack-plugin": "^8.0.1",
79
+ "compare-versions": "^4.1.3",
80
+ "compression-webpack-plugin": "^9.2.0",
81
81
  "cross-env": "^7.0.3",
82
- "css-loader": "^6.2.0",
82
+ "css-loader": "^6.7.1",
83
83
  "escape-string-regexp": "^5.0.0",
84
- "express": "^4.17.1",
85
- "fast-xml-parser": "^3.19.0",
86
- "fixed-data-table-2": "^1.2.0",
84
+ "express": "^4.17.3",
85
+ "fast-xml-parser": "^4.0.7",
86
+ "fixed-data-table-2": "^1.2.6",
87
87
  "fomantic-ui-css": "^2.8.8",
88
- "fork-ts-checker-webpack-plugin": "^6.3.2",
88
+ "fork-ts-checker-webpack-plugin": "^7.2.3",
89
89
  "he": "^1.2.0",
90
- "html-webpack-plugin": "^5.3.2",
90
+ "html-webpack-plugin": "^5.5.0",
91
91
  "http-proxy": "^1.18.1",
92
- "i18next": "^20.4.0",
93
- "i18next-browser-languagedetector": "^6.1.2",
92
+ "i18next": "^21.6.14",
93
+ "i18next-browser-languagedetector": "^6.1.4",
94
94
  "i18next-express-middleware": "^2.0.0",
95
95
  "i18next-node-fs-backend": "^2.1.3",
96
96
  "i18next-xhr-backend": "^3.2.2",
97
97
  "immutability-helper": "^3.1.1",
98
98
  "invariant": "^2.2.4",
99
- "jest": "^27.0.6",
100
- "jest-cli": "^27.0.6",
99
+ "jest": "^27.5.1",
100
+ "jest-cli": "^27.5.1",
101
101
  "jquery": "^3.6.0",
102
102
  "limiter": "^2.1.0",
103
103
  "lodash": "^4.17.21",
104
- "minimist": "^1.2.5",
105
- "moment": "^2.29.1",
104
+ "minimist": "^1.2.6",
105
+ "moment": "^2.29.2",
106
106
  "pondjs": "^0.9.0",
107
107
  "pre-commit": "^1.2.2",
108
108
  "promise": "^8.1.0",
109
- "prop-types": "^15.7.2",
110
- "re-resizable": "^6.9.0",
109
+ "prop-types": "^15.8.1",
110
+ "re-resizable": "^6.9.5",
111
111
  "react": "^17.0.2",
112
112
  "react-autosuggest": "^10.1.0",
113
+ "react-beautiful-dnd": "^13.1.0",
113
114
  "react-circular-progressbar": "^2.0.4",
114
115
  "react-dom": "^17.0.2",
115
- "react-dropzone": "^11.3.4",
116
- "react-easy-emoji": "^1.6.0",
116
+ "react-dropzone": "^12.0.4",
117
+ "react-easy-emoji": "^1.6.1",
117
118
  "react-emojione": "^5.0.1",
118
- "react-grid-layout": "^1.2.5",
119
- "react-i18next": "^11.11.4",
120
- "react-intersection-observer": "^8.32.0",
119
+ "react-grid-layout": "^1.3.4",
120
+ "react-i18next": "^11.16.2",
121
+ "react-intersection-observer": "^8.33.1",
121
122
  "react-linkify": "^1.0.0-alpha",
122
123
  "react-measure": "^2.5.2",
123
- "react-mentions": "^4.3.0",
124
+ "react-mentions": "^4.3.1",
124
125
  "react-notification-system": "^0.4.0",
125
- "react-refresh": "^0.10.0",
126
- "react-refresh-typescript": "^2.0.2",
127
- "react-router": "^5.2.0",
128
- "react-router-dom": "^5.2.0",
129
- "react-select": "^4.3.1",
126
+ "react-refresh": "^0.11.0",
127
+ "react-refresh-typescript": "^2.0.4",
128
+ "react-router": "^5.2.1",
129
+ "react-router-dom": "^5.3.0",
130
+ "react-select": "^5.2.2",
130
131
  "react-timeseries-charts": "^0.16.1",
131
132
  "react-transition-group": "^4.4.2",
132
133
  "redbox-react": "^1.6.0",
@@ -134,21 +135,21 @@
134
135
  "reflux-promise": "^1.0.4",
135
136
  "regenerator-runtime": "^0.13.9",
136
137
  "rimraf": "^3.0.2",
137
- "style-loader": "^3.2.1",
138
+ "style-loader": "^3.3.1",
138
139
  "tcomb-form": "^0.9.21",
139
140
  "tcomb-form-templates-semantic": "^0.1.1",
140
- "ts-jest": "^27.0.5",
141
- "ts-loader": "^9.2.5",
141
+ "ts-jest": "^27.1.4",
142
+ "ts-loader": "^9.2.8",
142
143
  "tslint": "^6.1.3",
143
144
  "tslint-react": "^5.0.0",
144
- "typescript": "^4.3.5",
145
- "webpack": "^5.51.1",
146
- "webpack-cli": "^4.8.0",
147
- "webpack-dev-middleware": "^5.0.0",
148
- "webpack-hot-middleware": "^2.25.0",
145
+ "typescript": "^4.6.3",
146
+ "webpack": "^5.72.0",
147
+ "webpack-cli": "^4.9.2",
148
+ "webpack-dev-middleware": "^5.3.1",
149
+ "webpack-hot-middleware": "^2.25.1",
149
150
  "webpack-visualizer-plugin2": "^1.0.0",
150
151
  "whatwg-fetch": "^3.6.2",
151
- "workbox-webpack-plugin": "^6.2.4"
152
+ "workbox-webpack-plugin": "^6.5.2"
152
153
  },
153
154
  "false": {}
154
155
  }
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[285],{48878:(e,n,a)=>{a.d(n,{Z:()=>r});var o=a(94015),t=a.n(o),s=a(23645),i=a.n(s)()(t());i.push([e.id,".download-dialog .accordion.download-targets {\r\n overflow-y: auto;\r\n}\r\n\r\n.download-dialog .main-content,\r\n.download-dialog .mobile.layout {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.download-dialog .main-content .list {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n}\r\n\r\n.download-dialog .content > div, .download-dialog .ui.grid .column, \r\n.download-dialog .main-content {\r\n height: 100%;\r\n}\r\n\r\n.download-dialog .download-handler {\r\n display: flex;\r\n align-items: baseline;\r\n}\r\n\r\n.download-dialog .disk-info {\r\n color: black;\r\n font-size: 90%;\r\n font-style: italic;\r\n}\r\n\r\n.download-dialog .normal.layout .four.wide.column {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n}\r\n","",{version:3,sources:["webpack://./src/components/download/style.css"],names:[],mappings:"AAAA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;EAEE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC",sourcesContent:[".download-dialog .accordion.download-targets {\r\n overflow-y: auto;\r\n}\r\n\r\n.download-dialog .main-content,\r\n.download-dialog .mobile.layout {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.download-dialog .main-content .list {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n}\r\n\r\n.download-dialog .content > div, .download-dialog .ui.grid .column, \r\n.download-dialog .main-content {\r\n height: 100%;\r\n}\r\n\r\n.download-dialog .download-handler {\r\n display: flex;\r\n align-items: baseline;\r\n}\r\n\r\n.download-dialog .disk-info {\r\n color: black;\r\n font-size: 90%;\r\n font-style: italic;\r\n}\r\n\r\n.download-dialog .normal.layout .four.wide.column {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n}\r\n"],sourceRoot:""}]);const r=i},62285:(e,n,a)=>{a.d(n,{Z:()=>se});var o=a(85893),t=a(67294),s=a(5977),i=a(26793),r=a(4047),d=a(15479),l=a(1251),c=a(91894),h=a(48117),u=a(57136),m=a(66883),v=a(42090),p=a(92245),j=a(28427),g=a(72181),O=a(89519),w=a(8717),f=a(3629),A=a(9781),y=a(10606),b=a(98374),x=a(32347),E=a(27695),N=a(35936),P=a(2445);const C=(e,n)=>e.free_space<=0?e.path:` (${n((0,w.zS)("spaceFree",x.jv.COMMON),{defaultValue:"{{freeSpace}} free",replace:{freeSpace:(0,P.BU)(e.free_space,n)}})})`,I=({pathInfo:e,downloadHandler:n,t:a})=>(0,o.jsxs)("div",Object.assign({className:"item"},{children:[(0,o.jsx)(N.Z,{icon:h.Z.FOLDER},void 0),(0,o.jsx)("div",Object.assign({className:"content"},{children:(0,o.jsxs)("a",Object.assign({onClick:a=>n(e.path)},{children:[e.path,(0,o.jsx)("span",Object.assign({className:"disk-info"},{children:C(e,a)}),void 0)]}),void 0)}),void 0)]}),void 0),Z=(0,v.Z)((({downloadHandler:e,pathInfos:n,t:a})=>(0,o.jsx)("div",Object.assign({className:"ui relaxed list"},{children:n.map((n=>(0,o.jsx)(I,{pathInfo:n,downloadHandler:e,t:a},n.path)))}),void 0)),{urls:{pathInfos:({paths:e},n)=>n.post(c.Z.DISK_INFO_URL,{paths:e})}}),R=e=>0===e.paths.length?(0,o.jsx)(E.Z,{title:(0,w.Iu)("No paths to display",e.t,x.jv.COMMON)},void 0):(0,o.jsx)(Z,Object.assign({},e),void 0);var k=a(45697),B=a.n(k),D=a(35451);class _ extends t.Component{constructor(){super(...arguments),this.formatParent=e=>{const{downloadHandler:n,t:a}=this.props;return(0,o.jsxs)("div",{children:[(0,o.jsxs)("div",Object.assign({className:"title"},{children:[(0,o.jsx)(N.Z,{icon:h.Z.DROPDOWN},void 0),e.name]}),void 0),(0,o.jsx)("div",Object.assign({className:"content"},{children:(0,o.jsx)(R,{paths:e.paths,downloadHandler:n,t:a},void 0)}),void 0)]},e.name)}}render(){const{groupedPaths:e,t:n}=this.props;return 0===e.length?(0,o.jsx)(E.Z,{title:(0,w.Iu)("No paths to display",n,x.jv.COMMON)},void 0):(0,o.jsx)(D.ZP,Object.assign({className:"styled download-targets"},{children:e.map(this.formatParent)}),void 0)}}_.propTypes={downloadHandler:B().func.isRequired,groupedPaths:B().array.isRequired};const S=_;var M=a(68662);const H=(e,n,a)=>n?[...e,(0,o.jsxs)(b.Z,Object.assign({onClick:n},{children:[(0,w.Iu)("Browse",a,x.jv.COMMON),(0,o.jsx)(N.Z,{icon:"external"},void 0)]}),"browse")]:e,T=({menuItems:e,title:n,handleBrowse:a,t,children:s})=>(0,o.jsxs)("div",Object.assign({className:"mobile layout"},{children:[(0,o.jsx)(M.Z,Object.assign({selection:!0,caption:n},{children:H(e,a,t)}),void 0),(0,o.jsx)("div",Object.assign({className:"ui segment main-content"},{children:s}),void 0)]}),void 0);var L=a(84807),U=a(24101);const F=({menuItems:e,title:n,handleBrowse:a,t,children:s})=>(0,o.jsxs)(U.rj,Object.assign({className:"normal layout"},{children:[(0,o.jsxs)("div",Object.assign({className:"four wide column"},{children:[(0,o.jsx)("div",Object.assign({className:"ui vertical fluid tabular menu"},{children:e}),void 0),!!a&&(0,o.jsx)(L.Z,{className:"fluid basic",caption:(0,w.Iu)("Browse",t,x.jv.COMMON),onClick:a,icon:h.Z.OPEN},void 0)]}),void 0),(0,o.jsx)("div",Object.assign({className:"twelve wide stretched column"},{children:(0,o.jsx)("div",Object.assign({className:"ui segment main-content"},{children:s}),void 0)}),void 0)]}),void 0),G=e=>{const{t:n}=(0,i.$)(),[a,s]=(0,t.useState)("history"),r=t.useMemo((()=>{const{historyPaths:n,sharePaths:a,favoritePaths:t,itemInfo:s}=e;return(e=>{const{sharePaths:n,favoritePaths:a,historyPaths:t,dupePaths:s}=e;return[{name:"Previous",key:"history",list:t,component:({downloadHandler:e,t:n})=>(0,o.jsx)(R,{paths:t,downloadHandler:e,t:n},void 0)},{name:"Shared",key:"shared",list:n,component:({downloadHandler:e,t:a})=>(0,o.jsx)(S,{groupedPaths:n,downloadHandler:e,t:a},void 0)},{name:"Favorites",key:"favorites",list:a,component:({downloadHandler:e,t:n})=>(0,o.jsx)(S,{groupedPaths:a,downloadHandler:e,t:n},void 0)},{name:"Dupes",key:"dupes",list:s,component:({downloadHandler:e,t:n})=>(0,o.jsx)(R,{paths:s,downloadHandler:e,t:n},void 0)}]})({historyPaths:n,sharePaths:a,favoritePaths:t,dupePaths:s.dupe?s.dupe.paths.map((e=>(0,A.Il)(e))):[]})}),[]),d=r.find((e=>e.key===a));if(!d)return null;const l=r.map((e=>((e,n,a,t)=>(0,o.jsxs)(b.Z,Object.assign({onClick:()=>a(e.key),active:n===e.key},{children:[t((0,w.zS)(e.key,x.jv.COMMON),e.name),!!e.list&&(0,o.jsx)("div",Object.assign({className:"ui small right label"},{children:e.list.length}),void 0)]}),e.key))(e,a,s,n))),c=(0,y.wd)()?T:F;return(0,o.jsx)(c,Object.assign({menuItems:l,title:d.name,handleBrowse:e.handleBrowse,t:n},{children:(0,o.jsx)(d.component,{t:n,downloadHandler:e.downloadHandler},void 0)}),d.key)};var W=a(76249),$=a(93379),q=a.n($),z=a(7795),Y=a.n(z),V=a(90569),K=a.n(V),X=a(3565),J=a.n(X),Q=a(19216),ee=a.n(Q),ne=a(44589),ae=a.n(ne),oe=a(48878),te={};te.styleTagTransform=ae(),te.setAttributes=J(),te.insert=K().bind(null,"head"),te.domAPI=Y(),te.insertStyleElement=ee(),q()(oe.Z,te),oe.Z&&oe.Z.locals&&oe.Z.locals;const se=(0,p.ZP)((0,v.Z)((e=>{const{t:n}=(0,i.$)(),a=(0,t.useRef)(null),{downloadHandler:r,itemInfo:l,userGetter:v,match:p,session:A,historyPaths:y,favoritePaths:b,sharePaths:E}=e,N=function(e,n){var a={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&n.indexOf(o)<0&&(a[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var t=0;for(o=Object.getOwnPropertySymbols(e);t<o.length;t++)n.indexOf(o[t])<0&&Object.prototype.propertyIsEnumerable.call(e,o[t])&&(a[o[t]]=e[o[t]])}return a}(e,["downloadHandler","itemInfo","userGetter","match","session","historyPaths","favoritePaths","sharePaths"]),P=(o,t)=>{return s=void 0,i=void 0,h=function*(){try{yield r(l,v?v(p.params.downloadItemId,e):void 0,{target_name:t||l.name,target_directory:o,priority:W.gg.DEFAULT},A)}catch(e){u.Z.error({title:n((0,w.zS)("queueingFailed",x.jv.COMMON),{defaultValue:"Failed to queue the item {{item.name}}",replace:{item:l}}),message:e.message})}(0,O.h9)((()=>(0,f.V)(d.n0.DOWNLOAD_DIR,o)),n),a.current&&a.current.hide()},new((c=void 0)||(c=Promise))((function(e,n){function a(e){try{t(h.next(e))}catch(e){n(e)}}function o(e){try{t(h.throw(e))}catch(e){n(e)}}function t(n){var t;n.done?e(n.value):(t=n.value,t instanceof c?t:new c((function(e){e(t)}))).then(a,o)}t((h=h.apply(s,i||[])).next())}));var s,i,c,h},C={subHeader:l.name,title:(0,w.Iu)("Download",n,x.jv.COMMON),icon:h.Z.DOWNLOAD,closable:!1,returnTo:e.returnTo},I=m.Z.hasAccess(W.PS.FILESYSTEM_VIEW);return(0,o.jsxs)(s.rs,{children:[(0,o.jsx)(s.AW,Object.assign({path:`${p.path}/browse`},{children:(0,o.jsx)(g.P,Object.assign({onConfirm:(e,n,a)=>P(n,a),initialPath:(()=>{const e=y.length>0?y[y.length-1]:"";return"directory"===l.type.id?e:e+l.name})(),selectMode:"directory"===l.type.id?x.pC.DIRECTORY:x.pC.FILE,historyId:c.Z.LOCATION_DOWNLOAD,approveCaption:(0,w.Iu)("Download",n,x.jv.COMMON)},C),void 0)}),void 0),(0,o.jsx)(s.AW,Object.assign({path:p.path,exact:!0},{children:(0,o.jsx)(j.Z,Object.assign({ref:a,className:"download-dialog",fullHeight:!0},C,N,{children:(0,o.jsx)(G,{downloadHandler:P,handleBrowse:I?()=>{const{history:n}=e;n.replace(`${p.url}/browse`)}:void 0,historyPaths:y,favoritePaths:b,sharePaths:E,itemInfo:l},void 0)}),void 0)}),void 0)]},void 0)}),{urls:{sharePaths:r.Z.GROUPED_ROOTS_GET_URL,favoritePaths:l.Z.GROUPED_DIRECTORIES_URL,historyPaths:d.ZP.STRINGS_URL+"/"+d.n0.DOWNLOAD_DIR,itemInfo:({match:e,itemDataGetter:n},a)=>n(e.params.downloadItemId,a)}}),"download/:downloadItemId")},24101:(e,n,a)=>{a.d(n,{X2:()=>c,h4:()=>h,rj:()=>u});var o=a(85893),t=(a(67294),a(94184)),s=a.n(t),i=a(89116),r=a(8717),d=a(32347);const l=e=>e||(0,o.jsx)(i.c,Object.assign({i18nKey:(0,r.zS)("na",d.jv.COMMON)},{children:"N/A"}),void 0),c=({title:e,text:n,className:a,titleWidth:t="four",noText:i})=>(0,o.jsxs)("div",Object.assign({className:s()("ui row",a)},{children:[(0,o.jsx)("div",Object.assign({className:s()(i?"sixteen":t,"wide column title")},{children:(0,o.jsx)("div",Object.assign({className:"ui tiny header",style:{overflow:"hidden"}},{children:e}),void 0)}),void 0),!i&&(0,o.jsx)("div",Object.assign({className:"column value"},{children:l(n)}),void 0)]}),void 0),h=({title:e})=>(0,o.jsx)("div",Object.assign({className:"ui row"},{children:(0,o.jsx)("div",Object.assign({className:"sixteen wide column"},{children:(0,o.jsx)("div",Object.assign({className:"ui blue section header"},{children:e}),void 0)}),void 0)}),void 0),u=e=>{var{className:n,children:a,columns:t,stackable:i}=e,r=function(e,n){var a={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&n.indexOf(o)<0&&(a[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var t=0;for(o=Object.getOwnPropertySymbols(e);t<o.length;t++)n.indexOf(o[t])<0&&Object.prototype.propertyIsEnumerable.call(e,o[t])&&(a[o[t]]=e[o[t]])}return a}(e,["className","children","columns","stackable"]);return(0,o.jsx)("div",Object.assign({className:s()("ui grid",{[`${t} column`]:!!t},{stackable:i},n)},r,{children:a}),void 0)}},1251:(e,n,a)=>{a.d(n,{Z:()=>t});const o="favorite_directories",t={MODULE_URL:o,GROUPED_DIRECTORIES_URL:o+"/grouped_paths",DIRECTORIES_URL:o,DIRECTORIES_UPDATED:"favorite_directories_updated"}},3629:(e,n,a)=>{a.d(n,{V:()=>s});var o=a(518),t=a(15479);const s=(e,n)=>o.Z.post(`${t.ZP.STRINGS_URL}/${e}`,{string:n})}}]);
2
- //# sourceMappingURL=285.744e520b1611ce9c52a5.chunk.js.map