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.
- package/LICENSE +21 -0
- package/dist/index.html +2 -2
- package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js +2 -0
- package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.gz +0 -0
- package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.map +1 -0
- package/dist/js/334.dba054251a3e485f3ea9.chunk.js +2 -0
- package/dist/js/334.dba054251a3e485f3ea9.chunk.js.gz +0 -0
- package/dist/js/334.dba054251a3e485f3ea9.chunk.js.map +1 -0
- package/dist/js/424.44413ba27808d4072f7f.chunk.js +2 -0
- package/dist/js/424.44413ba27808d4072f7f.chunk.js.gz +0 -0
- package/dist/js/424.44413ba27808d4072f7f.chunk.js.map +1 -0
- package/dist/js/{668.ca79db34c1e147bd25d0.chunk.js → 668.2579506f7fa8bed8a452.chunk.js} +2 -2
- package/dist/js/668.2579506f7fa8bed8a452.chunk.js.gz +0 -0
- package/dist/js/668.2579506f7fa8bed8a452.chunk.js.map +1 -0
- package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js +2 -0
- package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.gz +0 -0
- package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.map +1 -0
- package/dist/js/{702.dd4be667774bce5de14f.chunk.js → 702.d36d38b2be52ab51c0a9.chunk.js} +1 -1
- package/dist/js/702.d36d38b2be52ab51c0a9.chunk.js.gz +0 -0
- package/dist/js/{702.dd4be667774bce5de14f.chunk.js.map → 702.d36d38b2be52ab51c0a9.chunk.js.map} +1 -1
- package/dist/js/760.83634ca054e04ff6c7e2.chunk.js +3 -0
- package/dist/js/{760.5448a03d335f92bedb53.chunk.js.LICENSE.txt → 760.83634ca054e04ff6c7e2.chunk.js.LICENSE.txt} +0 -0
- package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.gz +0 -0
- package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.map +1 -0
- package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js +2 -0
- package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.gz +0 -0
- package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.map +1 -0
- package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js +2 -0
- package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.gz +0 -0
- package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.map +1 -0
- package/dist/js/files.51c49d6a2825cbc64879.chunk.js +2 -0
- package/dist/js/files.51c49d6a2825cbc64879.chunk.js.gz +0 -0
- package/dist/js/files.51c49d6a2825cbc64879.chunk.js.map +1 -0
- package/dist/js/home.895154334c98dbe0f183.chunk.js +3 -0
- package/dist/js/{home.727a64f6586ed95a66bb.chunk.js.LICENSE.txt → home.895154334c98dbe0f183.chunk.js.LICENSE.txt} +0 -0
- package/dist/js/home.895154334c98dbe0f183.chunk.js.gz +0 -0
- package/dist/js/home.895154334c98dbe0f183.chunk.js.map +1 -0
- package/dist/js/hubs.42526e43270139eb1849.chunk.js +2 -0
- package/dist/js/hubs.42526e43270139eb1849.chunk.js.gz +0 -0
- package/dist/js/hubs.42526e43270139eb1849.chunk.js.map +1 -0
- package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js → ca.ed09d3a3d4bcca929ba1.chunk.js} +0 -0
- package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js.gz → ca.ed09d3a3d4bcca929ba1.chunk.js.gz} +0 -0
- package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js → da.6f60a77e9ef082dd3bf4.chunk.js} +0 -0
- package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js.gz → da.6f60a77e9ef082dd3bf4.chunk.js.gz} +0 -0
- package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js → de.3b7d3665460384259e82.chunk.js} +0 -0
- package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js.gz → de.3b7d3665460384259e82.chunk.js.gz} +0 -0
- package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js → el.598573d2a5ed18804fe0.chunk.js} +0 -0
- package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js.gz → el.598573d2a5ed18804fe0.chunk.js.gz} +0 -0
- package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js → en.f0fe75dca201449e5e47.chunk.js} +0 -0
- package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js.gz → en.f0fe75dca201449e5e47.chunk.js.gz} +0 -0
- package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js +1 -0
- package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js.gz +0 -0
- package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js → eu.7734fc077f26418d6b32.chunk.js} +0 -0
- package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js.gz → eu.7734fc077f26418d6b32.chunk.js.gz} +0 -0
- package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js → fi.d1f8a5f4048236243b0f.chunk.js} +0 -0
- package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js.gz → fi.d1f8a5f4048236243b0f.chunk.js.gz} +0 -0
- package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js +1 -0
- package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js.gz +0 -0
- package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js → hu.d0d2c38a03a3b38c2bc5.chunk.js} +0 -0
- package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js.gz → hu.d0d2c38a03a3b38c2bc5.chunk.js.gz} +0 -0
- package/dist/js/locales/{it.63acad3d71352720e323.chunk.js → it.0c911d75c50ea83190ad.chunk.js} +0 -0
- package/dist/js/locales/{it.63acad3d71352720e323.chunk.js.gz → it.0c911d75c50ea83190ad.chunk.js.gz} +0 -0
- package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js → nl.36d288d75b3d3cbabf11.chunk.js} +0 -0
- package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js.gz → nl.36d288d75b3d3cbabf11.chunk.js.gz} +0 -0
- package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js → no.8f2f465d5f785650175d.chunk.js} +0 -0
- package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js.gz → no.8f2f465d5f785650175d.chunk.js.gz} +0 -0
- package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js → pl.06e51d7d7b09ba14714d.chunk.js} +0 -0
- package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js.gz → pl.06e51d7d7b09ba14714d.chunk.js.gz} +0 -0
- package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js → pt-br.9d19d92899e8c0917c66.chunk.js} +0 -0
- package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js.gz → pt-br.9d19d92899e8c0917c66.chunk.js.gz} +0 -0
- package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js → pt.4390db3955db29b0e7dd.chunk.js} +0 -0
- package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js.gz → pt.4390db3955db29b0e7dd.chunk.js.gz} +0 -0
- package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js → ro.705fcd327263fcf419bf.chunk.js} +0 -0
- package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js.gz → ro.705fcd327263fcf419bf.chunk.js.gz} +0 -0
- package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js → ru.8ab7e1c0d9eee7aa7afb.chunk.js} +0 -0
- package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js.gz → ru.8ab7e1c0d9eee7aa7afb.chunk.js.gz} +0 -0
- package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js → sv.be546e605910932db11f.chunk.js} +0 -0
- package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js.gz → sv.be546e605910932db11f.chunk.js.gz} +0 -0
- package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js → tr.25a0d0f19e007e2febc9.chunk.js} +0 -0
- package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js.gz → tr.25a0d0f19e007e2febc9.chunk.js.gz} +0 -0
- package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js +1 -0
- package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js.gz +0 -0
- package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js → zh_CN.4b75674e4815a965ccea.chunk.js} +0 -0
- package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js.gz → zh_CN.4b75674e4815a965ccea.chunk.js.gz} +0 -0
- package/dist/js/main.51b1144fdbc0a681eb6c.entry.js +3 -0
- package/dist/js/{main.c01c26460331633a96e2.entry.js.LICENSE.txt → main.51b1144fdbc0a681eb6c.entry.js.LICENSE.txt} +0 -0
- package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.gz +0 -0
- package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.map +1 -0
- package/dist/js/messages.6f74e67a600c48f367ad.chunk.js +2 -0
- package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.gz +0 -0
- package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.map +1 -0
- package/dist/js/queue.82a405ba14b60974cb0f.chunk.js +2 -0
- package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.gz +0 -0
- package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.map +1 -0
- package/dist/js/search.af59b1b20b4d7194457b.chunk.js +2 -0
- package/dist/js/search.af59b1b20b4d7194457b.chunk.js.gz +0 -0
- package/dist/js/search.af59b1b20b4d7194457b.chunk.js.map +1 -0
- package/dist/js/settings.b543eade40a723e95c77.chunk.js +2 -0
- package/dist/js/settings.b543eade40a723e95c77.chunk.js.gz +0 -0
- package/dist/js/settings.b543eade40a723e95c77.chunk.js.map +1 -0
- package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js +2 -0
- package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.gz +0 -0
- package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.map +1 -0
- package/dist/js/{system-log.45dba574bcb91efd176c.chunk.js → system-log.b9763d1c0f5cf5966f21.chunk.js} +2 -2
- package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.gz +0 -0
- package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.map +1 -0
- package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js +2 -0
- package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.gz +0 -0
- package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.map +1 -0
- package/dist/sw.js +1 -1
- package/dist/sw.js.gz +0 -0
- package/package.json +65 -64
- package/dist/js/285.744e520b1611ce9c52a5.chunk.js +0 -2
- package/dist/js/285.744e520b1611ce9c52a5.chunk.js.gz +0 -0
- package/dist/js/285.744e520b1611ce9c52a5.chunk.js.map +0 -1
- package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js +0 -2
- package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.gz +0 -0
- package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.map +0 -1
- package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js +0 -2
- package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.gz +0 -0
- package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.map +0 -1
- package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.gz +0 -0
- package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.map +0 -1
- package/dist/js/69.779bd39a66fa5ea5248b.chunk.js +0 -2
- package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.gz +0 -0
- package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.map +0 -1
- package/dist/js/702.dd4be667774bce5de14f.chunk.js.gz +0 -0
- package/dist/js/760.5448a03d335f92bedb53.chunk.js +0 -3
- package/dist/js/760.5448a03d335f92bedb53.chunk.js.gz +0 -0
- package/dist/js/760.5448a03d335f92bedb53.chunk.js.map +0 -1
- package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js +0 -2
- package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.gz +0 -0
- package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.map +0 -1
- package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js +0 -2
- package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.gz +0 -0
- package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.map +0 -1
- package/dist/js/files.bb297a4f890216386a57.chunk.js +0 -2
- package/dist/js/files.bb297a4f890216386a57.chunk.js.gz +0 -0
- package/dist/js/files.bb297a4f890216386a57.chunk.js.map +0 -1
- package/dist/js/home.727a64f6586ed95a66bb.chunk.js +0 -3
- package/dist/js/home.727a64f6586ed95a66bb.chunk.js.gz +0 -0
- package/dist/js/home.727a64f6586ed95a66bb.chunk.js.map +0 -1
- package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js +0 -2
- package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.gz +0 -0
- package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.map +0 -1
- package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js +0 -1
- package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js.gz +0 -0
- package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js +0 -1
- package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js.gz +0 -0
- package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js +0 -1
- package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js.gz +0 -0
- package/dist/js/main.c01c26460331633a96e2.entry.js +0 -3
- package/dist/js/main.c01c26460331633a96e2.entry.js.gz +0 -0
- package/dist/js/main.c01c26460331633a96e2.entry.js.map +0 -1
- package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js +0 -2
- package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.gz +0 -0
- package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.map +0 -1
- package/dist/js/queue.0e532f2a56e464d1626b.chunk.js +0 -2
- package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.gz +0 -0
- package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.map +0 -1
- package/dist/js/search.ef2d64870dc65f549d8c.chunk.js +0 -2
- package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.gz +0 -0
- package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.map +0 -1
- package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js +0 -2
- package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.gz +0 -0
- package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.map +0 -1
- package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js +0 -2
- package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.gz +0 -0
- package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.map +0 -1
- package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.gz +0 -0
- package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.map +0 -1
- package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js +0 -2
- package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.gz +0 -0
- package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[557],{75696:(e,t,o)=>{o.d(t,{Z:()=>a});var i=o(94015),r=o.n(i),s=o(23645),n=o.n(s)()(r());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,o)=>{o.d(t,{Z:()=>l});var i=o(518),r=o(4047),s=o(48117),n=o(76249),a=o(32347);const c={refresh:{displayName:"Refresh all",access:n.PS.SETTINGS_EDIT,icon:s.Z.REFRESH_COLORED,handler:()=>i.Z.post(r.Z.REFRESH_URL)}},l={moduleId:a.jv.SHARE,actions:c}},82633:(e,t,o)=>{o.d(t,{Z:()=>r});const i="share_profiles",r={MODULE_URL:i,PROFILES_URL:i,PROFILE_ADDED:"share_profile_added",PROFILE_UPDATED:"share_profile_updated",PROFILE_REMOVED:"share_profile_removed",HIDDEN_PROFILE_ID:1}},37354:(e,t,o)=>{o.d(t,{Z:()=>s});var i=o(85893),r=o(67294);function s(e,t=60){class o extends r.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,i.jsx)(e,Object.assign({},this.props),void 0)}}return o}},75426:(e,t,o)=>{o.d(t,{D:()=>a,Z:()=>c});var i=o(96486),r=o(82633),s=o(42090),n=o(2445);const a=e=>({id:e.id,name:e.str}),c=function(e,t,o,a=!0){return(0,s.Z)(e,(0,i.merge)(o,{urls:{profiles:r.Z.PROFILES_URL},dataConverters:{profiles:(e,{t:o})=>e.filter((e=>t||e.id!==r.Z.HIDDEN_PROFILE_ID)).map((e=>((e,t)=>{let o=e.str;return a&&e.id!==r.Z.HIDDEN_PROFILE_ID&&(o+=` (${(0,n.BU)(e.size,t)})`),Object.assign(Object.assign({},e),{str:o})})(e,o)))},onSocketConnected:(e,{refetchData:t})=>{e(r.Z.MODULE_URL,r.Z.PROFILE_ADDED,(()=>t())),e(r.Z.MODULE_URL,r.Z.PROFILE_UPDATED,(()=>t())),e(r.Z.MODULE_URL,r.Z.PROFILE_REMOVED,(()=>t()))}}))}},24646:(e,t,o)=>{o.r(t),o.d(t,{default:()=>ye});var i=o(85893),r=o(67294),s=o(29416),n=o(518),a=o(20097);const c="share_roots",l=c;var d=o(48117),h=o(76249),p=o(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)}},v={create:{moduleId:p.jv.SHARE,subId:"root",actions:u},edit:{moduleId:p.jv.SHARE,subId:"root",actions:m}};var f=o(10293),E=o.n(f),y=o(93836);const _=E().createStore({_viewName:"share_root_view",_apiUrl:"share_roots",mixins:[(0,y.Z)("path")]});var Z=o(78230),R=o(68126),O=o(35108),S=o(28427),g=o(4047),I=o(92245),D=o(75426),j=o(27695),x=o(95887),T=o(9781),w=o(43496),b=o(91894),A=o(61692),L=o(93379),C=o.n(L),P=o(7795),N=o.n(P),F=o(90569),U=o.n(F),H=o(3565),k=o.n(H),G=o(19216),M=o.n(G),$=o(44589),K=o.n($),z=o(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=o(18603),V=o(89116);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 r.Component{constructor(e){super(e),this.isNew=()=>!this.props.rootEntry,this.onFieldChanged=(e,t,o)=>{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,o)=>{"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:o}=e,r=function(e,t){var o={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(o[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(o[i[r]]=e[i[r]])}return o}(e,["rootEntry","shareT"]),s=o.translate(this.isNew()?"Add share directory":"Edit share directory");return(0,i.jsxs)(S.Z,Object.assign({className:"share-directory",title:s,onApprove:this.save,closable:!1,icon:d.Z.FOLDER},r,{children:[(0,i.jsx)(j.Z,{title:o.translate("Hashing information"),icon:d.Z.INFO,description:(0,i.jsx)(V.c,Object.assign({i18nKey:o.toI18nKey("hashingInformationDesc")},{children:(0,i.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."},void 0)}),void 0)},void 0),(0,i.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},void 0)]}),void 0)}}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=o(1059),Q=o(99005),ee=o(98374),te=o(16630),oe=o(8717),ie=o(26793);const re=(0,r.memo)((e=>{const{t}=(0,ie.$)(),o={str:(0,oe.Iu)("All profiles",t,"table.filter"),id:null},[s,n]=(0,r.useState)(o),a=t=>{e.onFilterUpdated(t.id),n(t)};return(0,i.jsx)(J.Z,Object.assign({className:"top right pointing",caption:s.str,triggerIcon:"filter",button:!0},{children:(0,i.jsx)(Q.Z,Object.assign({caption:(0,oe.Iu)("Filter by profile",t,"table.filter"),icon:d.Z.FILTER},{children:[o,...e.profiles].map((e=>((e,t,o)=>(0,i.jsx)(ee.Z,Object.assign({active:o.id===e.id,onClick:()=>t(e)},{children:e.str}),e.id))(e,a,s)))}),void 0)}),void 0)})),se=(0,D.Z)((0,te.Z)(re,"profiles"),!1);var ne=o(47021),ae=o(37354),ce=o(2445),le=o(54883),de=o(74225),he=o(89519),pe=o(35936);const ue=(0,ae.Z)((({rowDataGetter:e,cellData:t,t:o})=>{const r=e().status;return r.id!==h.MH.NORMAL?(0,i.jsxs)("div",Object.assign({style:{display:"flex"}},{children:[(0,i.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)),o)}},void 0),(0,i.jsx)(le.Z,{size:"small",inline:!0,text:r.str},void 0)]}),void 0):(0,i.jsxs)("div",{children:[(0,i.jsx)(pe.Z,{icon:d.Z.REFRESH_COLORED,size:"large",onClick:()=>(0,he.h9)((()=>(0,de._L)([e().path])),o)},void 0),0===t?(0,oe.Iu)("Unknown",o,p.jv.SHARE):(0,ce.SY)(t)]},void 0)}));var me=o(66883),ve=o(91768),fe=o(4333);class Ee extends r.Component{constructor(){super(...arguments),this.shareT=(0,oe.HY)(this.props.t,p.jv.SHARE)}render(){const{translate:e}=this.shareT,t=me.Z.hasAccess(h.PS.SETTINGS_EDIT);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(Z.Z,Object.assign({store:_,customFilter:se,footerData:(0,i.jsx)(ne.PC,Object.assign({className:"top left pointing",caption:e("Actions..."),actions:v.create,header:e("Share actions"),triggerIcon:"chevron up",ids:["create"],button:!0},{children:(0,i.jsx)(ne.PC,{actions:s.Z,ids:["refresh"]},void 0)}),void 0),moduleId:s.Z.moduleId},{children:[(0,i.jsx)(O.Column,{name:"Path",width:200,columnKey:"path",cell:(0,i.jsx)(R.Nq,{actions:v.edit,remoteMenuId:fe.Z.SHARE_ROOT},void 0),flexGrow:10},void 0),(0,i.jsx)(O.Column,{name:"Size",width:60,columnKey:"size",cell:(0,i.jsx)(R.Eh,{},void 0),flexGrow:2},void 0),(0,i.jsx)(O.Column,{name:"Content",width:150,columnKey:"type",hideWidth:1e3},void 0),(0,i.jsx)(O.Column,{name:"Virtual name",width:120,columnKey:"virtual_name",flexGrow:5},void 0),(0,i.jsx)(O.Column,{name:"Profiles",width:65,columnKey:"profiles"},void 0),(0,i.jsx)(O.Column,{name:"Last refreshed",width:80,flexGrow:3,columnKey:"last_refresh_time",cell:t?(0,i.jsx)(ue,{},void 0):(0,i.jsx)(R.Ks,{},void 0)},void 0)]}),void 0),(0,i.jsx)(X,{shareT:this.shareT},void 0)]},void 0)}}Ee.displayName="Share";const ye=(0,ve.Z)()(Ee)},34698:(e,t,o)=>{o.d(t,{S:()=>n,b:()=>a});var i=o(66883),r=o(37576),s=function(e,t,o,i){return new(o||(o=Promise))((function(r,s){function n(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(n,a)}c((i=i.apply(e,t||[])).next())}))};const n=e=>s(void 0,void 0,void 0,(function*(){try{return(yield(0,r.r)(`${getBasePath()}temp`,{method:"POST",headers:{"X-Authorization":i.Z.authToken,Authorization:i.Z.authToken},body:e})).headers.get("Location")}catch(e){throw e}})),a=(e,t,o)=>s(void 0,void 0,void 0,(function*(){try{const s=yield(0,r.r)((e=>`${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(e)}`)(e),Object.assign({headers:{"X-Authorization":i.Z.authToken,"Cache-Control":"no-store, must-revalidate, max-age=0"}},o));return(yield t)?s.json():s.text()}catch(t){throw console.error(`CORS HTTP request failed (${e})`,t),t}}))},74225:(e,t,o)=>{o.d(t,{Pd:()=>a,_L:()=>c,u4:()=>l,Ki:()=>d});var i=o(4047),r=o(518),s=o(34698),n=o(76249);const a=(e,t,o)=>{return n=void 0,a=void 0,l=function*(){try{const n=yield(0,s.S)(e);return yield r.Z.post(i.Z.TEMP_SHARES_URL,{name:e.name,file_id:n,hub_url:t,cid:o})}catch(e){throw e}},new((c=void 0)||(c=Promise))((function(e,t){function o(e){try{r(l.next(e))}catch(e){t(e)}}function i(e){try{r(l.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof c?r:new c((function(e){e(r)}))).then(o,i)}r((l=l.apply(n,a||[])).next())}));var n,a,c,l},c=e=>r.Z.post(i.Z.REFRESH_PATHS_URL,{paths:e,priority:n.VL.MANUAL}),l=e=>r.Z.post(i.Z.REFRESH_VIRTUAL_URL,{path:e}),d=e=>r.Z.delete(`${i.Z.REFRESH_TASKS_URL}/${e}`)}}]);
|
|
2
|
-
//# sourceMappingURL=share.c0cdc71a867839f5c8b3.chunk.js.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/share.c0cdc71a867839f5c8b3.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/cssWithMappingToString.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":""}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/system-log.45dba574bcb91efd176c.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,mBAAkB,IAMxE,SAACI,EAAA,EAAW,CACVC,UAAU,SACVN,SAAWA,EACXO,sBAAwBC,EAAA,EACxBP,EAAIA,QAAC,IAhBA,SAACQ,EAAA,EAAM,CAACC,MAAO,QAAU,mBAAoBT,EAAG,mBAAkB,G,0BCI7E,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,WAAI,SACX,IAGN,gBAAKmB,UAAU,uBAAgB,IAC/B,8BAAKA,UAAU,6BAA2B,WACxC,SAAC,EAAgB,CACfN,SAAWA,EACXC,EAAIA,QAAC,UACL,WACE,UACF,MAIZ,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/cssWithMappingToString.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":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[182],{62824:(e,s,n)=>{n.d(s,{Z:()=>a});var t=n(94015),r=n.n(t),o=n(23645),i=n.n(o)()(r());i.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 a=i},49133:(e,s,n)=>{n.d(s,{Z:()=>d});var t=n(1087),r=n(518),o=n(48117),i=n(76249),a=n(32347),c=n(60160);const l={search:{access:i.PS.SEARCH,displayName:"Search (foreground)",icon:o.Z.SEARCH,handler:({data:e,location:s})=>c.Z.search(e,s)},searchFileAlternates:{access:i.PS.QUEUE_EDIT,displayName:"Search for alternates",icon:o.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:i.PS.QUEUE_EDIT,icon:o.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:a.jv.QUEUE,actions:l}},68325:(e,s,n)=>{n.d(s,{Z:()=>f});var t=n(85893),r=n(45697),o=n.n(r),i=n(67294),a=n(27835),c=n(32347),l=n(89116),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"}},v=({info:e,encryption:s})=>(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{children:s.str},void 0),(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}),void 0)}),void 0)]},void 0);class h extends i.PureComponent{constructor(){super(...arguments),this.getChildren=()=>{const{encryption:e}=this.props,s=p(e);return(0,t.jsx)(v,{info:s,encryption:e},void 0)}}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},void 0);const r=p(e);return(0,t.jsx)(a.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},void 0),settings:{boundary:n}},{children:this.getChildren}),void 0)}}h.propTypes={encryption:o().object,boundary:o().string,alwaysVisible:o().bool};const f=h},43231:(e,s,n)=>{n.d(s,{Z:()=>l});var t=n(85893),r=n(45697),o=n.n(r),i=(n(67294),n(94184)),a=n.n(i);const c=({className:e,percent:s,caption:n})=>(0,t.jsxs)("div",Object.assign({className:a()("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"},void 0)}),void 0),!!n&&(0,t.jsx)("div",Object.assign({className:"label"},{children:n}),void 0)]}),void 0);c.propTypes={percent:o().number.isRequired,caption:o().node.isRequired,className:o().string};const l=c},57745:(e,s,n)=>{n.r(s),n.d(s,{default:()=>le});var t=n(85893),r=n(67294),o=n(10293),i=n.n(o),a=n(23406),c=n(93836);const l=i().createStore({_viewName:"transfer_view",_apiUrl:a.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},void 0)}),void 0);class v 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},void 0)},void 0):null}}const h=v;var f=n(94184),g=n.n(f),j=n(43231),y=n(68325),E=n(54883),x=n(76249);const N=(e,s)=>{const n=e.id;return g()({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},void 0);if(e.id===x.lK.FAILED)return(0,t.jsx)("span",Object.assign({className:"error"},{children:e.str}),void 0);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)(y.Z,{encryption:n.encryption},void 0),r]}),void 0)),(0,t.jsx)(j.Z,{className:N(e,n),caption:r,percent:100*n.bytes_transferred/n.size},void 0)};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===a.s.FINISHED,T={force:{displayName:"Force connect",access:x.PS.TRANSFERS,icon:R.Z.REFRESH_COLORED,filter:I,handler:({data:e})=>w.Z.post(`${a.Z.TRANSFERS_URL}/${e.id}/force`)},disconnect:{displayName:"Disconnect",access:x.PS.TRANSFERS,icon:R.Z.DISCONNECT,handler:({data:e})=>w.Z.post(`${a.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"},void 0),e.nicks]}),void 0);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},void 0),remoteMenuId:L.Z.HINTED_USER},{children:(0,t.jsx)(K.B2,{itemData:s,actions:_,remoteMenuId:L.Z.TRANSFER},void 0)}),void 0)}}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 oe=n(91768),ie=n(8717);const ae=({cellData:e})=>(0,t.jsx)("span",Object.assign({className:"plain flags cell"},{children:e.join("")}),void 0);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,ie.Iu)("No active transfers",e,C.jv.TRANSFERS),icon:R.Z.TRANSFERS_PLAIN},void 0)}}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,{},void 0)},void 0),(0,t.jsx)(q.Column,{name:"Name",width:150,flexGrow:4,columnKey:"name",cell:(0,t.jsx)(h,{},void 0)},void 0),(0,t.jsx)(q.Column,{name:"Segment",width:65,columnKey:"size",cell:(0,t.jsx)(M.Eh,{},void 0),renderCondition:this.isPositive,flexGrow:1},void 0),(0,t.jsx)(q.Column,{name:"Status",width:140,flexGrow:4,columnKey:"status",cell:(0,t.jsx)(S,{},void 0)},void 0),(0,t.jsx)(q.Column,{name:"Time left",width:50,columnKey:"seconds_left",renderCondition:this.isRunning,cell:(0,t.jsx)(M.VL,{},void 0)},void 0),(0,t.jsx)(q.Column,{name:"Speed",width:50,columnKey:"speed",cell:(0,t.jsx)(M.LV,{},void 0),renderCondition:this.isRunning,flexGrow:1},void 0),(0,t.jsx)(q.Column,{name:"Flags",width:50,columnKey:"flags",cell:(0,t.jsx)(ae,{},void 0),renderCondition:this.isRunning,flexGrow:1,hideWidth:800},void 0),(0,t.jsx)(q.Column,{name:"IP",width:120,columnKey:"ip",flexGrow:1,cell:(0,t.jsx)(M.fI,{},void 0),hideWidth:1e3},void 0)]}),void 0)}}ce.displayName="Transfers";const le=(0,oe.Z)()(ce)}}]);
|
|
2
|
-
//# sourceMappingURL=transfers.4ed15c9e5e62fe968fbc.chunk.js.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/transfers.4ed15c9e5e62fe968fbc.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/cssWithMappingToString.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":""}
|