airdcpp-webui 2.12.0-beta.3 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +61 -61
- package/dist/index.html +1 -1
- package/dist/js/285.f568d215104be4fb06eb.chunk.js +2 -0
- package/dist/js/285.f568d215104be4fb06eb.chunk.js.gz +0 -0
- package/dist/js/285.f568d215104be4fb06eb.chunk.js.map +1 -0
- package/dist/js/317.54d6dded7430f84fd4a7.chunk.js +2 -0
- package/dist/js/317.54d6dded7430f84fd4a7.chunk.js.gz +0 -0
- package/dist/js/317.54d6dded7430f84fd4a7.chunk.js.map +1 -0
- package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js +2 -0
- package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js.gz +0 -0
- package/dist/js/424.b9b775d50fbed2ec85ca.chunk.js.map +1 -0
- package/dist/js/668.0d2ed46d1147385f6482.chunk.js +2 -0
- package/dist/js/668.0d2ed46d1147385f6482.chunk.js.gz +0 -0
- package/dist/js/668.0d2ed46d1147385f6482.chunk.js.map +1 -0
- package/dist/js/69.00e5adf1f76437e343f2.chunk.js +2 -0
- package/dist/js/69.00e5adf1f76437e343f2.chunk.js.gz +0 -0
- package/dist/js/69.00e5adf1f76437e343f2.chunk.js.map +1 -0
- package/dist/js/{702.2a6693aead40337b625c.chunk.js → 702.87b71d34ebd167d76c3b.chunk.js} +1 -1
- package/dist/js/702.87b71d34ebd167d76c3b.chunk.js.gz +0 -0
- package/dist/js/{702.2a6693aead40337b625c.chunk.js.map → 702.87b71d34ebd167d76c3b.chunk.js.map} +1 -1
- package/dist/js/{760.774900fa62b9e66b5ff7.chunk.js → 760.1679cba4f653d07819f3.chunk.js} +3 -3
- package/dist/js/760.1679cba4f653d07819f3.chunk.js.gz +0 -0
- package/dist/js/760.1679cba4f653d07819f3.chunk.js.map +1 -0
- package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js +2 -0
- package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js.gz +0 -0
- package/dist/js/favorite-hubs.9c69b40155edc72e69bb.chunk.js.map +1 -0
- package/dist/js/filelists.799bae07549950c8bdce.chunk.js +2 -0
- package/dist/js/filelists.799bae07549950c8bdce.chunk.js.gz +0 -0
- package/dist/js/filelists.799bae07549950c8bdce.chunk.js.map +1 -0
- package/dist/js/files.c723dabab26e48d06683.chunk.js +2 -0
- package/dist/js/files.c723dabab26e48d06683.chunk.js.gz +0 -0
- package/dist/js/files.c723dabab26e48d06683.chunk.js.map +1 -0
- package/dist/js/home.1bfba76cdbb2fc7194dc.chunk.js +3 -0
- package/dist/js/home.1bfba76cdbb2fc7194dc.chunk.js.gz +0 -0
- package/dist/js/{home.7b6595492d6f4a0507e5.chunk.js.map → home.1bfba76cdbb2fc7194dc.chunk.js.map} +1 -1
- package/dist/js/hubs.99a089268648607f734d.chunk.js +2 -0
- package/dist/js/hubs.99a089268648607f734d.chunk.js.gz +0 -0
- package/dist/js/hubs.99a089268648607f734d.chunk.js.map +1 -0
- package/dist/js/main.560335911ba879ef8877.entry.js +3 -0
- package/dist/js/{main.01d94b76f3ff04c0ccd0.entry.js.LICENSE.txt → main.560335911ba879ef8877.entry.js.LICENSE.txt} +2 -16
- package/dist/js/main.560335911ba879ef8877.entry.js.gz +0 -0
- package/dist/js/main.560335911ba879ef8877.entry.js.map +1 -0
- package/dist/js/messages.1fff9c30585362386309.chunk.js +2 -0
- package/dist/js/messages.1fff9c30585362386309.chunk.js.gz +0 -0
- package/dist/js/messages.1fff9c30585362386309.chunk.js.map +1 -0
- package/dist/js/queue.822b774c6541212741c2.chunk.js +2 -0
- package/dist/js/queue.822b774c6541212741c2.chunk.js.gz +0 -0
- package/dist/js/queue.822b774c6541212741c2.chunk.js.map +1 -0
- package/dist/js/search.6a9813389fd4fec46997.chunk.js +2 -0
- package/dist/js/search.6a9813389fd4fec46997.chunk.js.gz +0 -0
- package/dist/js/search.6a9813389fd4fec46997.chunk.js.map +1 -0
- package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js +2 -0
- package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js.gz +0 -0
- package/dist/js/settings.809f0f5d0b8ca408ae54.chunk.js.map +1 -0
- package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js +2 -0
- package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js.gz +0 -0
- package/dist/js/share.d66035dc828b2f3c8bb0.chunk.js.map +1 -0
- package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js +2 -0
- package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js.gz +0 -0
- package/dist/js/system-log.b6bc274d7fb71714ca24.chunk.js.map +1 -0
- package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js +2 -0
- package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js.gz +0 -0
- package/dist/js/transfers.8d1840e604ad0e4c0c15.chunk.js.map +1 -0
- package/dist/sw.js +1 -1
- package/dist/sw.js.gz +0 -0
- package/dist/sw.js.map +1 -1
- package/jest.config.js +18 -18
- package/package.json +1 -1
- package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js +0 -2
- package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js.gz +0 -0
- package/dist/js/285.4cfd5122e0b82af77eb1.chunk.js.map +0 -1
- package/dist/js/317.97fabbc4a91be88219d3.chunk.js +0 -2
- package/dist/js/317.97fabbc4a91be88219d3.chunk.js.gz +0 -0
- package/dist/js/317.97fabbc4a91be88219d3.chunk.js.map +0 -1
- package/dist/js/424.5cc8383701bc3226c5ff.chunk.js +0 -2
- package/dist/js/424.5cc8383701bc3226c5ff.chunk.js.gz +0 -0
- package/dist/js/424.5cc8383701bc3226c5ff.chunk.js.map +0 -1
- package/dist/js/668.294ae7e2a9db78b421b0.chunk.js +0 -2
- package/dist/js/668.294ae7e2a9db78b421b0.chunk.js.gz +0 -0
- package/dist/js/668.294ae7e2a9db78b421b0.chunk.js.map +0 -1
- package/dist/js/69.3e693915ecfb45fce6ea.chunk.js +0 -2
- package/dist/js/69.3e693915ecfb45fce6ea.chunk.js.gz +0 -0
- package/dist/js/69.3e693915ecfb45fce6ea.chunk.js.map +0 -1
- package/dist/js/702.2a6693aead40337b625c.chunk.js.gz +0 -0
- package/dist/js/760.774900fa62b9e66b5ff7.chunk.js.gz +0 -0
- package/dist/js/760.774900fa62b9e66b5ff7.chunk.js.map +0 -1
- package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js +0 -2
- package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js.gz +0 -0
- package/dist/js/favorite-hubs.ddb9d9755d235cae74ad.chunk.js.map +0 -1
- package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js +0 -2
- package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js.gz +0 -0
- package/dist/js/filelists.938ca2c1834d7e4b5f31.chunk.js.map +0 -1
- package/dist/js/files.c17b77223a4f8de80f1b.chunk.js +0 -2
- package/dist/js/files.c17b77223a4f8de80f1b.chunk.js.gz +0 -0
- package/dist/js/files.c17b77223a4f8de80f1b.chunk.js.map +0 -1
- package/dist/js/home.7b6595492d6f4a0507e5.chunk.js +0 -3
- package/dist/js/home.7b6595492d6f4a0507e5.chunk.js.gz +0 -0
- package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js +0 -2
- package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js.gz +0 -0
- package/dist/js/hubs.2dbce9b35aa07bab9189.chunk.js.map +0 -1
- package/dist/js/locales/en-webui-main-missing-json.0a7b6ea1f0a5eeaa5735.chunk.js +0 -1
- package/dist/js/locales/en-webui-main-missing-json.0a7b6ea1f0a5eeaa5735.chunk.js.gz +0 -0
- package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js +0 -3
- package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js.gz +0 -0
- package/dist/js/main.01d94b76f3ff04c0ccd0.entry.js.map +0 -1
- package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js +0 -2
- package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js.gz +0 -0
- package/dist/js/messages.a761c7b81ebb0be1c6b9.chunk.js.map +0 -1
- package/dist/js/queue.20fe8967cbdac914688a.chunk.js +0 -2
- package/dist/js/queue.20fe8967cbdac914688a.chunk.js.gz +0 -0
- package/dist/js/queue.20fe8967cbdac914688a.chunk.js.map +0 -1
- package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js +0 -2
- package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js.gz +0 -0
- package/dist/js/search.62d97eef6ffbc4438ca7.chunk.js.map +0 -1
- package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js +0 -2
- package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js.gz +0 -0
- package/dist/js/settings.b9a77fec5bd9bf0f744c.chunk.js.map +0 -1
- package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js +0 -2
- package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js.gz +0 -0
- package/dist/js/share.3f04c8697ad367c0ecf6.chunk.js.map +0 -1
- package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js +0 -2
- package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js.gz +0 -0
- package/dist/js/system-log.9ccbd9a5982afcb71dfa.chunk.js.map +0 -1
- package/dist/js/transfers.5fbe0929649dc0893737.chunk.js +0 -2
- package/dist/js/transfers.5fbe0929649dc0893737.chunk.js.gz +0 -0
- package/dist/js/transfers.5fbe0929649dc0893737.chunk.js.map +0 -1
- package/package - Copy.json +0 -156
- /package/dist/js/{760.774900fa62b9e66b5ff7.chunk.js.LICENSE.txt → 760.1679cba4f653d07819f3.chunk.js.LICENSE.txt} +0 -0
- /package/dist/js/{home.7b6595492d6f4a0507e5.chunk.js.LICENSE.txt → home.1bfba76cdbb2fc7194dc.chunk.js.LICENSE.txt} +0 -0
- /package/dist/js/locales/{ca-webui-main-json.6c149a10d6e263315d7f.chunk.js → ca-webui-main-json.e4a9ae36d6beb98c0057.chunk.js} +0 -0
- /package/dist/js/locales/{ca-webui-main-json.6c149a10d6e263315d7f.chunk.js.gz → ca-webui-main-json.e4a9ae36d6beb98c0057.chunk.js.gz} +0 -0
- /package/dist/js/locales/{da-webui-main-json.0ceb448ebe8d59d24573.chunk.js → da-webui-main-json.a08bb8db90fc33844135.chunk.js} +0 -0
- /package/dist/js/locales/{da-webui-main-json.0ceb448ebe8d59d24573.chunk.js.gz → da-webui-main-json.a08bb8db90fc33844135.chunk.js.gz} +0 -0
- /package/dist/js/locales/{de-webui-main-json.5f98884f26442cd6079a.chunk.js → de-webui-main-json.6763aab78d26033bc160.chunk.js} +0 -0
- /package/dist/js/locales/{de-webui-main-json.5f98884f26442cd6079a.chunk.js.gz → de-webui-main-json.6763aab78d26033bc160.chunk.js.gz} +0 -0
- /package/dist/js/locales/{el-webui-main-json.9b9f976001b216a51d60.chunk.js → el-webui-main-json.33c629aa295c990b6816.chunk.js} +0 -0
- /package/dist/js/locales/{el-webui-main-json.9b9f976001b216a51d60.chunk.js.gz → el-webui-main-json.33c629aa295c990b6816.chunk.js.gz} +0 -0
- /package/dist/js/locales/{en-webui-main-json.d1845c8535d9a1be9ef6.chunk.js → en-webui-main-json.ae2216f8443c16155761.chunk.js} +0 -0
- /package/dist/js/locales/{en-webui-main-json.d1845c8535d9a1be9ef6.chunk.js.gz → en-webui-main-json.ae2216f8443c16155761.chunk.js.gz} +0 -0
- /package/dist/js/locales/{es-webui-main-json.c0a7f4edfd71f660b005.chunk.js → es-webui-main-json.cef003aeaf6a8669aa55.chunk.js} +0 -0
- /package/dist/js/locales/{es-webui-main-json.c0a7f4edfd71f660b005.chunk.js.gz → es-webui-main-json.cef003aeaf6a8669aa55.chunk.js.gz} +0 -0
- /package/dist/js/locales/{eu-webui-main-json.eb0383952c8ab4fb9f36.chunk.js → eu-webui-main-json.f390f35c92cc5e80723e.chunk.js} +0 -0
- /package/dist/js/locales/{eu-webui-main-json.eb0383952c8ab4fb9f36.chunk.js.gz → eu-webui-main-json.f390f35c92cc5e80723e.chunk.js.gz} +0 -0
- /package/dist/js/locales/{fi-webui-main-json.f9ff02a0b28a5fd85a5d.chunk.js → fi-webui-main-json.2c0e54d1e586d6d4cdf4.chunk.js} +0 -0
- /package/dist/js/locales/{fi-webui-main-json.f9ff02a0b28a5fd85a5d.chunk.js.gz → fi-webui-main-json.2c0e54d1e586d6d4cdf4.chunk.js.gz} +0 -0
- /package/dist/js/locales/{fr-webui-main-json.53bc9323af23410d639f.chunk.js → fr-webui-main-json.eb58b9782b184c5bd0e7.chunk.js} +0 -0
- /package/dist/js/locales/{fr-webui-main-json.53bc9323af23410d639f.chunk.js.gz → fr-webui-main-json.eb58b9782b184c5bd0e7.chunk.js.gz} +0 -0
- /package/dist/js/locales/{hu-webui-main-json.c63e9fcc09558b4fe41e.chunk.js → hu-webui-main-json.6a8b4be95cd392319f00.chunk.js} +0 -0
- /package/dist/js/locales/{hu-webui-main-json.c63e9fcc09558b4fe41e.chunk.js.gz → hu-webui-main-json.6a8b4be95cd392319f00.chunk.js.gz} +0 -0
- /package/dist/js/locales/{it-webui-main-json.59aad6c34cdff2085157.chunk.js → it-webui-main-json.ace514cb8dbf846f7bb2.chunk.js} +0 -0
- /package/dist/js/locales/{it-webui-main-json.59aad6c34cdff2085157.chunk.js.gz → it-webui-main-json.ace514cb8dbf846f7bb2.chunk.js.gz} +0 -0
- /package/dist/js/locales/{nl-webui-main-json.f4e1772f9d507c339583.chunk.js → nl-webui-main-json.99f14f67e7f7f523f435.chunk.js} +0 -0
- /package/dist/js/locales/{nl-webui-main-json.f4e1772f9d507c339583.chunk.js.gz → nl-webui-main-json.99f14f67e7f7f523f435.chunk.js.gz} +0 -0
- /package/dist/js/locales/{no-webui-main-json.7637dd19134c84061d14.chunk.js → no-webui-main-json.14d6b98f5aeac4ae328e.chunk.js} +0 -0
- /package/dist/js/locales/{no-webui-main-json.7637dd19134c84061d14.chunk.js.gz → no-webui-main-json.14d6b98f5aeac4ae328e.chunk.js.gz} +0 -0
- /package/dist/js/locales/{pl-webui-main-json.10a0a30720b516cefda5.chunk.js → pl-webui-main-json.df98b2ed00d38e386747.chunk.js} +0 -0
- /package/dist/js/locales/{pl-webui-main-json.10a0a30720b516cefda5.chunk.js.gz → pl-webui-main-json.df98b2ed00d38e386747.chunk.js.gz} +0 -0
- /package/dist/js/locales/{pt-br-webui-main-json.cc946648a521c27b5a79.chunk.js → pt-br-webui-main-json.b06c253e99d8eb8a971d.chunk.js} +0 -0
- /package/dist/js/locales/{pt-br-webui-main-json.cc946648a521c27b5a79.chunk.js.gz → pt-br-webui-main-json.b06c253e99d8eb8a971d.chunk.js.gz} +0 -0
- /package/dist/js/locales/{pt-webui-main-json.5bed5158082678ceb16b.chunk.js → pt-webui-main-json.5278c6a5afa09777b453.chunk.js} +0 -0
- /package/dist/js/locales/{pt-webui-main-json.5bed5158082678ceb16b.chunk.js.gz → pt-webui-main-json.5278c6a5afa09777b453.chunk.js.gz} +0 -0
- /package/dist/js/locales/{ro-webui-main-json.d68cbb01175c7f6e2b53.chunk.js → ro-webui-main-json.24ab9a55725a9fc18299.chunk.js} +0 -0
- /package/dist/js/locales/{ro-webui-main-json.d68cbb01175c7f6e2b53.chunk.js.gz → ro-webui-main-json.24ab9a55725a9fc18299.chunk.js.gz} +0 -0
- /package/dist/js/locales/{ru-webui-main-json.c399c20411213c872e7b.chunk.js → ru-webui-main-json.e9ab289b5a1b70abdccf.chunk.js} +0 -0
- /package/dist/js/locales/{ru-webui-main-json.c399c20411213c872e7b.chunk.js.gz → ru-webui-main-json.e9ab289b5a1b70abdccf.chunk.js.gz} +0 -0
- /package/dist/js/locales/{sv-webui-main-json.bc915cd441a54413b67c.chunk.js → sv-webui-main-json.9ad571819cde0158829a.chunk.js} +0 -0
- /package/dist/js/locales/{sv-webui-main-json.bc915cd441a54413b67c.chunk.js.gz → sv-webui-main-json.9ad571819cde0158829a.chunk.js.gz} +0 -0
- /package/dist/js/locales/{tr-webui-main-json.a8c83f88e88d42ffca40.chunk.js → tr-webui-main-json.68bb926adc13e8952b47.chunk.js} +0 -0
- /package/dist/js/locales/{tr-webui-main-json.a8c83f88e88d42ffca40.chunk.js.gz → tr-webui-main-json.68bb926adc13e8952b47.chunk.js.gz} +0 -0
- /package/dist/js/locales/{uk_UA-webui-main-json.cbc43c57307c9f8134a6.chunk.js → uk_UA-webui-main-json.f4098f3ea96407bf804e.chunk.js} +0 -0
- /package/dist/js/locales/{uk_UA-webui-main-json.cbc43c57307c9f8134a6.chunk.js.gz → uk_UA-webui-main-json.f4098f3ea96407bf804e.chunk.js.gz} +0 -0
- /package/dist/js/locales/{zh_CN-webui-main-json.b963220181e25b6e6fcd.chunk.js → zh_CN-webui-main-json.6250a926eeea9fda0697.chunk.js} +0 -0
- /package/dist/js/locales/{zh_CN-webui-main-json.b963220181e25b6e6fcd.chunk.js.gz → zh_CN-webui-main-json.6250a926eeea9fda0697.chunk.js.gz} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[158],{60725:(e,s,n)=>{n.d(s,{Z:()=>o});var t=n(87537),i=n.n(t),c=n(23645),a=n.n(c)()(i());a.push([e.id,".ccpm-state {\n display: flex;\n}\n\n.ccpm-state > i {\n align-self: center;\n}\n","",{version:3,sources:["webpack://./src/routes/Sidebar/routes/Messages/style.css"],names:[],mappings:"AAAA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;AACpB",sourcesContent:[".ccpm-state {\n display: flex;\n}\n\n.ccpm-state > i {\n align-self: center;\n}\n"],sourceRoot:""}]);const o=a},203:(e,s,n)=>{n.d(s,{Z:()=>r});var t=n(85893),i=n(55019),c=n(84613),a=n(54578),o=n(4333);function r(e){return{itemNameGetter:e=>e.user.nicks,itemStatusGetter(e){const{flags:s}=e.user;return(0,i.zg)(s)},itemHeaderDescriptionGetter:e=>e.user.hub_names,itemHeaderIconGetter:e=>(0,t.jsx)(a.Z,{flags:e.user.flags}),itemHeaderTitleGetter(s,n,i){const{user:a}=s;return(0,t.jsx)(c.Ie,Object.assign({user:a,ids:e,remoteMenuId:o.Z.HINTED_USER},{children:i}))}}}},30916:(e,s,n)=>{n.r(s),n.d(s,{default:()=>re});var t=n(85893),i=n(67294),c=n(10907),a=n(203),o=n(40279),r=n(14695),l=n(518),d=n(48117),u=n(50566),p=n(38982),S=n(76249),h=n(32347);const E={connectCCPM:{displayName:"Connect",access:S.PS.PRIVATE_CHAT_EDIT,icon:d.Z.PLAY,handler:({data:e})=>l.Z.post(`${r.Z.SESSIONS_URL}/${e.id}/ccpm`),filter:e=>e.ccpm_state.id===S.ZY.DISCONNECTED},disconnectCCPM:{access:S.PS.PRIVATE_CHAT_EDIT,displayName:"Disconnect",icon:d.Z.REMOVE,handler:({data:e})=>l.Z.delete(`${r.Z.SESSIONS_URL}/${e.id}/ccpm`),filter:e=>e.ccpm_state.id===S.ZY.CONNECTED}},A=(0,p.Z)((0,u.Z)(E,r.Z.SESSIONS_URL,S.PS.PRIVATE_CHAT_EDIT),r.Z.SESSIONS_URL,S.PS.PRIVATE_CHAT_EDIT),m={moduleId:h.jv.MESSAGES,actions:A};var C=n(6654),Z=n(3267),I=n(15479),T=n(53335);const _=e=>o.Z.getSession(e.user.cid);class g extends i.Component{constructor(){super(...arguments),this.handleSubmit=e=>{C.Z.createSession(this.props.location,e,o.Z)},this.recentUserRender=e=>(0,t.jsx)("a",Object.assign({onClick:s=>this.handleSubmit(e.user)},{children:e.user.nicks}))}render(){const{sessionT:e}=this.props;return(0,t.jsxs)("div",Object.assign({className:"private chat session new"},{children:[(0,t.jsx)(T.v,{onChange:this.handleSubmit,offlineMessage:e.t("offlineMessage","You must to be connected to at least one hub in order to send private messages"),isClearable:!1,autoFocus:!0}),(0,t.jsx)(Z.Z,{entryType:I.WJ.PRIVATE_CHAT,hasSession:_,entryTitleRenderer:this.recentUserRender,entryIcon:d.Z.MESSAGES_PLAIN})]}))}}const b=g;var f=n(40479),N=n(88998),v=n(54883),O=n(84613),P=n(68325);const y=(e,s)=>{const{translate:n}=s;switch(e){case S.ZY.CONNECTED:return n("Direct encrypted channel established");case S.ZY.CONNECTING:return(0,t.jsx)(v.Z,{size:"mini",inline:!0,text:n("Establishing connection...")});case S.ZY.DISCONNECTED:return n("Direct encrypted channel available");default:return null}},j=({session:e,sessionT:s})=>{const{flags:n}=e.user;if(!n.includes("ccpm"))return null;const i=e.ccpm_state.id;return i===S.ZY.DISCONNECTED&&n.includes("offline")?null:(0,t.jsx)(N.C,{children:(0,t.jsxs)("div",Object.assign({className:"ccpm-state"},{children:[(0,t.jsx)(P.Z,{encryption:e.ccpm_state.encryption,alwaysVisible:!0,boundary:".session-container"}),(0,t.jsx)(O.PC,{caption:y(i,s),actions:m,ids:["disconnectCCPM","connectCCPM"],itemData:e})]}))})};var D=n(10293),x=n.n(D),R=n(41143),M=n.n(R),w=n(14936),H=n(94897),U=n(46614);const G=x().createStore({scroll:(0,U.$)(),onSocketConnected(e){M()(!this.hasMessages(),"No existing private messages should exist on socket connect"),M()(!this.hasInitializedSessions(),"No initialized private message sessions should exist on socket connect");const s=r.Z.MODULE_URL;e(s,r.Z.MESSAGE,this._onChatMessage),e(s,r.Z.STATUS,this._onStatusMessage),e(s,r.Z.SESSION_REMOVED,this._onSessionRemoved),e(s,r.Z.SESSION_UPDATED,this._onSessionUpdated)}}),k=(0,w.Z)(G,C.Z,H.Z.PRIVATE_CHAT_VIEW);var V=n(74225),L=n(4333);class Y extends i.Component{constructor(){super(...arguments),this.handleFileUpload=e=>{const{cid:s,hub_url:n,flags:t}=this.props.session.user,i=!t.includes("nmdc")&&!t.includes("bot");return(0,V.Pd)(e,n,i?s:void 0)}}render(){const{session:e,sessionApi:s,sessionT:n,uiActions:i}=this.props;return(0,t.jsxs)("div",Object.assign({className:"private chat session"},{children:[(0,t.jsx)(f.Z,{chatAccess:S.PS.PRIVATE_CHAT_SEND,chatActions:i,chatApi:C.Z,sessionApi:s,messageStore:k,session:e,handleFileUpload:this.handleFileUpload,highlightRemoteMenuId:L.Z.PRIVATE_CHAT_MESSAGE_HIGHLIGHT}),(0,t.jsx)(j,{session:e,sessionT:n})]}))}}Y.displayName="PrivateChatSession";const z=Y;var $=n(93379),F=n.n($),B=n(7795),J=n.n(B),W=n(90569),q=n.n(W),K=n(3565),Q=n.n(K),X=n(19216),ee=n.n(X),se=n(44589),ne=n.n(se),te=n(60725),ie={};ie.styleTagTransform=ne(),ie.setAttributes=Q(),ie.insert=q().bind(null,"head"),ie.domAPI=J(),ie.insertStyleElement=ee(),F()(te.Z,ie),te.Z&&te.Z.locals&&te.Z.locals;var ce=n(93101),ae=n(8717);const oe=["clear"],re=(0,ce.J)((e=>{const{match:s,t:n}=e,i=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 i=0;for(t=Object.getOwnPropertySymbols(e);i<t.length;i++)s.indexOf(t[i])<0&&Object.prototype.propertyIsEnumerable.call(e,t[i])&&(n[t[i]]=e[t[i]])}return n}(e,["match","t"]);return(0,t.jsx)(c.Z,Object.assign({activeId:s.params.id,baseUrl:"messages",newCaption:n((0,ae.zS)("new",h.jv.MESSAGES),"New session"),newDescription:n((0,ae.zS)("newDesc",h.jv.MESSAGES),"Open a new private chat session"),newIcon:d.Z.MESSAGES_PLAIN,unreadInfoStore:o.Z,editAccess:S.PS.PRIVATE_CHAT_EDIT,uiActions:m,sessionApi:C.Z,actionIds:oe,sessionItemLayout:z,newLayout:b,t:n},(0,a.Z)(["browse","ignore","unignore"]),i))}),o.Z)}}]);
|
|
2
|
-
//# sourceMappingURL=messages.a761c7b81ebb0be1c6b9.chunk.js.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/messages.a761c7b81ebb0be1c6b9.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/style.css","webpack://airdcpp-webui/./src/routes/Sidebar/decorators/UserItemHandlerDecorator.tsx","webpack://airdcpp-webui/./src/actions/ui/PrivateChatActions.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/components/MessageNew.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/components/MessageFooter.tsx","webpack://airdcpp-webui/./src/stores/PrivateChatMessageStore.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/components/PrivateChatSession.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/style.css?55a2","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Messages/components/Messages.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ccpm-state {\\n display: flex;\\n}\\n\\n.ccpm-state > i {\\n align-self: center;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/routes/Messages/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;AACpB\",\"sourcesContent\":[\".ccpm-state {\\n display: flex;\\n}\\n\\n.ccpm-state > i {\\n align-self: center;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { userOnlineStatusToColor } from 'utils/TypeConvert';\nimport { UserMenu } from 'components/action-menu';\nimport UserIcon from 'components/icon/UserIcon';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport MenuConstants from 'constants/MenuConstants';\n\ninterface UserSessionBase {\n user: API.HintedUser;\n}\n\nexport default function <SessionT extends UI.SessionItemBase & UserSessionBase>(\n itemMenuIds: string[]\n) {\n const UserItemHandlerDecorator: UI.SessionInfoGetter<SessionT> = {\n itemNameGetter(session) {\n return session.user.nicks;\n },\n\n itemStatusGetter(session) {\n const { flags } = session.user;\n return userOnlineStatusToColor(flags);\n },\n\n itemHeaderDescriptionGetter(session) {\n return session.user.hub_names;\n },\n\n itemHeaderIconGetter(session) {\n return <UserIcon flags={session.user.flags} />;\n },\n\n itemHeaderTitleGetter(session, location, actionMenu) {\n const { user } = session;\n return (\n <UserMenu user={user} ids={itemMenuIds} remoteMenuId={MenuConstants.HINTED_USER}>\n {actionMenu}\n </UserMenu>\n );\n },\n };\n\n return UserItemHandlerDecorator;\n}\n","import PrivateChatConstants from 'constants/PrivateChatConstants';\nimport SocketService from 'services/SocketService';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport ChatActionDecorator from './decorators/ChatActionDecorator';\nimport SessionActionDecorator from './decorators/SessionActionDecorator';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst handleConnectCCPM: UI.ActionHandler<API.PrivateChat> = ({ data: session }) => {\n return SocketService.post(`${PrivateChatConstants.SESSIONS_URL}/${session.id}/ccpm`);\n};\n\nconst handleDisconnectCCPM: UI.ActionHandler<API.PrivateChat> = ({ data: session }) => {\n return SocketService.delete(`${PrivateChatConstants.SESSIONS_URL}/${session.id}/ccpm`);\n};\n\nconst ccpmConnected = (data: API.PrivateChat) =>\n data.ccpm_state.id === API.CCPMStateEnum.CONNECTED;\nconst ccpmDisconnected = (data: API.PrivateChat) =>\n data.ccpm_state.id === API.CCPMStateEnum.DISCONNECTED;\n\nconst PrivateChatActions: UI.ActionListType<API.PrivateChat> = {\n connectCCPM: {\n displayName: 'Connect',\n access: API.AccessEnum.PRIVATE_CHAT_EDIT,\n icon: IconConstants.PLAY,\n handler: handleConnectCCPM,\n filter: ccpmDisconnected,\n },\n disconnectCCPM: {\n access: API.AccessEnum.PRIVATE_CHAT_EDIT,\n displayName: 'Disconnect',\n icon: IconConstants.REMOVE,\n handler: handleDisconnectCCPM,\n filter: ccpmConnected,\n },\n};\n\nconst PrivateChatActionsDecorated = SessionActionDecorator(\n ChatActionDecorator(\n PrivateChatActions,\n PrivateChatConstants.SESSIONS_URL,\n API.AccessEnum.PRIVATE_CHAT_EDIT\n ),\n PrivateChatConstants.SESSIONS_URL,\n API.AccessEnum.PRIVATE_CHAT_EDIT\n);\n\nexport default {\n moduleId: UI.Modules.MESSAGES,\n actions: PrivateChatActionsDecorated,\n};\n","import { Component } from 'react';\n\nimport RecentLayout from 'routes/Sidebar/components/RecentLayout';\n\nimport PrivateChatActions from 'actions/reflux/PrivateChatActions';\nimport PrivateChatSessionStore from 'stores/PrivateChatSessionStore';\n\nimport { HistoryEntryEnum } from 'constants/HistoryConstants';\n\nimport * as API from 'types/api';\n\nimport { NewSessionLayoutProps } from 'routes/Sidebar/components/SessionLayout';\nimport IconConstants from 'constants/IconConstants';\nimport { UserSelectField } from 'components/select';\n\nconst hasSession = (entry: API.HistoryItem) => {\n return PrivateChatSessionStore.getSession(entry.user!.cid);\n};\n\nclass MessageNew extends Component<NewSessionLayoutProps> {\n handleSubmit = (user: API.HintedUser) => {\n PrivateChatActions.createSession(this.props.location, user, PrivateChatSessionStore);\n };\n\n recentUserRender = (entry: API.HistoryItem) => {\n return <a onClick={(_) => this.handleSubmit(entry.user!)}>{entry.user!.nicks}</a>;\n };\n\n render() {\n const { sessionT } = this.props;\n return (\n <div className=\"private chat session new\">\n <UserSelectField\n onChange={this.handleSubmit}\n offlineMessage={sessionT.t<string>(\n 'offlineMessage',\n 'You must to be connected to at least one hub in order to send private messages'\n )}\n isClearable={false}\n autoFocus={true}\n />\n <RecentLayout\n entryType={HistoryEntryEnum.PRIVATE_CHAT}\n hasSession={hasSession}\n entryTitleRenderer={this.recentUserRender}\n entryIcon={IconConstants.MESSAGES_PLAIN}\n />\n </div>\n );\n }\n}\n\nexport default MessageNew;\n","import * as React from 'react';\n\nimport PrivateChatActions from 'actions/ui/PrivateChatActions';\n\nimport { SessionFooter } from 'routes/Sidebar/components/SessionFooter';\nimport Loader from 'components/semantic/Loader';\nimport { ActionMenu } from 'components/action-menu';\nimport EncryptionState from 'components/EncryptionState';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst getCaption = (state: API.CCPMStateEnum, sessionT: UI.ModuleTranslator) => {\n const { translate } = sessionT;\n switch (state) {\n case API.CCPMStateEnum.CONNECTED:\n return translate('Direct encrypted channel established');\n case API.CCPMStateEnum.CONNECTING:\n return (\n <Loader\n size=\"mini\"\n inline={true}\n text={translate('Establishing connection...')}\n />\n );\n case API.CCPMStateEnum.DISCONNECTED:\n return translate('Direct encrypted channel available');\n default:\n return null;\n }\n};\n\ninterface CCPMStateProps {\n session: API.PrivateChat;\n sessionT: UI.ModuleTranslator;\n}\n\nconst CCPMState: React.FC<CCPMStateProps> = ({ session, sessionT }) => {\n const { flags } = session.user;\n if (!flags.includes('ccpm')) {\n return null;\n }\n\n const state = session.ccpm_state.id;\n if (state === API.CCPMStateEnum.DISCONNECTED && flags.includes('offline')) {\n return null;\n }\n\n return (\n <SessionFooter>\n <div className=\"ccpm-state\">\n <EncryptionState\n encryption={session.ccpm_state.encryption}\n alwaysVisible={true}\n boundary=\".session-container\"\n />\n <ActionMenu\n caption={getCaption(state, sessionT)}\n actions={PrivateChatActions}\n ids={['disconnectCCPM', 'connectCCPM']}\n itemData={session}\n />\n </div>\n </SessionFooter>\n );\n};\n\nexport default CCPMState;\n","//@ts-ignore\nimport Reflux from 'reflux';\nimport invariant from 'invariant';\n\nimport PrivateChatConstants from 'constants/PrivateChatConstants';\nimport PrivateChatActions from 'actions/reflux/PrivateChatActions';\n\nimport MessageStoreDecorator from './decorators/MessageStoreDecorator';\n\nimport AccessConstants from 'constants/AccessConstants';\nimport { AddSocketListener } from 'decorators/SocketSubscriptionDecorator';\nimport { SessionScrollPositionKeeper } from './helpers/SessionScrollPositionKeeper';\n\nconst PrivateChatMessageStore = Reflux.createStore({\n scroll: SessionScrollPositionKeeper(),\n\n onSocketConnected(addSocketListener: AddSocketListener) {\n invariant(\n !this.hasMessages(),\n 'No existing private messages should exist on socket connect'\n );\n invariant(\n !this.hasInitializedSessions(),\n 'No initialized private message sessions should exist on socket connect'\n );\n\n const url = PrivateChatConstants.MODULE_URL;\n addSocketListener(url, PrivateChatConstants.MESSAGE, this._onChatMessage);\n addSocketListener(url, PrivateChatConstants.STATUS, this._onStatusMessage);\n\n addSocketListener(url, PrivateChatConstants.SESSION_REMOVED, this._onSessionRemoved);\n addSocketListener(url, PrivateChatConstants.SESSION_UPDATED, this._onSessionUpdated);\n },\n});\n\nexport default MessageStoreDecorator(\n PrivateChatMessageStore,\n PrivateChatActions,\n AccessConstants.PRIVATE_CHAT_VIEW\n);\n","import { Component } from 'react';\n\nimport ChatLayout, {\n ChatAPI,\n ChatActionList,\n} from 'routes/Sidebar/components/chat/ChatLayout';\nimport MessageFooter from 'routes/Sidebar/routes/Messages/components/MessageFooter';\n\nimport PrivateChatMessageStore from 'stores/PrivateChatMessageStore';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { SessionChildProps } from 'routes/Sidebar/components/SessionLayout';\nimport { shareTempFile } from 'services/api/ShareApi';\nimport PrivateChatActions from 'actions/reflux/PrivateChatActions';\nimport MenuConstants from 'constants/MenuConstants';\n\ntype PrivateChatSessionProps = SessionChildProps<\n API.PrivateChat,\n UI.EmptyObject,\n ChatActionList\n>;\n\nclass PrivateChatSession extends Component<PrivateChatSessionProps> {\n static displayName = 'PrivateChatSession';\n\n handleFileUpload = (file: File) => {\n const { cid, hub_url, flags } = this.props.session.user;\n\n const isPrivate = !flags.includes('nmdc') && !flags.includes('bot');\n return shareTempFile(file, hub_url, isPrivate ? cid : undefined);\n };\n\n render() {\n const { session, sessionApi, sessionT, uiActions } = this.props;\n return (\n <div className=\"private chat session\">\n <ChatLayout\n chatAccess={API.AccessEnum.PRIVATE_CHAT_SEND}\n chatActions={uiActions}\n chatApi={PrivateChatActions as ChatAPI}\n sessionApi={sessionApi}\n messageStore={PrivateChatMessageStore}\n session={session}\n handleFileUpload={this.handleFileUpload}\n highlightRemoteMenuId={MenuConstants.PRIVATE_CHAT_MESSAGE_HIGHLIGHT}\n />\n\n <MessageFooter session={session} sessionT={sessionT} />\n </div>\n );\n }\n}\n\nexport default PrivateChatSession;\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';\n\nimport SessionLayout from 'routes/Sidebar/components/SessionLayout';\nimport UserItemHandlerDecorator from 'routes/Sidebar/decorators/UserItemHandlerDecorator';\n\nimport PrivateChatSessionStore from 'stores/PrivateChatSessionStore';\nimport PrivateChatUIActions from 'actions/ui/PrivateChatActions';\nimport PrivateChatAPIActions from 'actions/reflux/PrivateChatActions';\n\nimport MessageNew from 'routes/Sidebar/routes/Messages/components/MessageNew';\nimport PrivateChatSession from 'routes/Sidebar/routes/Messages/components/PrivateChatSession';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport '../style.css';\nimport {\n SessionProviderDecoratorChildProps,\n SessionProviderDecorator,\n} from 'routes/Sidebar/decorators/SessionProviderDecorator';\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport IconConstants from 'constants/IconConstants';\n\nconst sessionActions = ['clear'];\n\nconst Messages: React.FC<SessionProviderDecoratorChildProps<API.PrivateChat>> = (\n props\n) => {\n const { match, t, ...other } = props;\n return (\n <SessionLayout\n activeId={match.params.id}\n baseUrl=\"messages\"\n newCaption={t(toI18nKey('new', UI.Modules.MESSAGES), 'New session')}\n newDescription={t(\n toI18nKey('newDesc', UI.Modules.MESSAGES),\n 'Open a new private chat session'\n )}\n newIcon={IconConstants.MESSAGES_PLAIN}\n unreadInfoStore={PrivateChatSessionStore}\n editAccess={API.AccessEnum.PRIVATE_CHAT_EDIT}\n uiActions={PrivateChatUIActions}\n sessionApi={PrivateChatAPIActions as UI.SessionActions<API.PrivateChat>}\n actionIds={sessionActions}\n sessionItemLayout={PrivateChatSession}\n newLayout={MessageNew}\n t={t}\n {...UserItemHandlerDecorator(['browse', 'ignore', 'unignore'])}\n {...other}\n />\n );\n};\n\nexport default SessionProviderDecorator(Messages, PrivateChatSessionStore);\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","itemMenuIds","itemNameGetter","session","user","nicks","itemStatusGetter","flags","itemHeaderDescriptionGetter","hub_names","itemHeaderIconGetter","itemHeaderTitleGetter","location","actionMenu","ids","remoteMenuId","PrivateChatActions","connectCCPM","displayName","access","icon","IconConstants","handler","data","SocketService","PrivateChatConstants","filter","ccpm_state","disconnectCCPM","PrivateChatActionsDecorated","SessionActionDecorator","ChatActionDecorator","moduleId","actions","hasSession","entry","PrivateChatSessionStore","cid","MessageNew","Component","handleSubmit","this","props","recentUserRender","onClick","_","render","sessionT","className","onChange","offlineMessage","t","isClearable","autoFocus","RecentLayout","entryType","entryTitleRenderer","entryIcon","getCaption","state","translate","Loader","size","inline","text","includes","SessionFooter","EncryptionState","encryption","alwaysVisible","boundary","caption","itemData","PrivateChatMessageStore","scroll","SessionScrollPositionKeeper","onSocketConnected","addSocketListener","hasMessages","hasInitializedSessions","url","_onChatMessage","_onStatusMessage","_onSessionRemoved","_onSessionUpdated","MessageStoreDecorator","AccessConstants","PrivateChatSession","handleFileUpload","file","hub_url","isPrivate","undefined","sessionApi","uiActions","ChatLayout","chatAccess","chatActions","chatApi","messageStore","highlightRemoteMenuId","MenuConstants","MessageFooter","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","sessionActions","SessionProviderDecorator","match","other","SessionLayout","activeId","params","baseUrl","newCaption","newDescription","newIcon","unreadInfoStore","editAccess","actionIds","sessionItemLayout","newLayout","UserItemHandlerDecorator"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[618],{24751:(e,s,t)=>{t.d(s,{Z:()=>a});var n=t(87537),i=t.n(n),o=t(23645),r=t.n(o)()(i());r.push([e.id,".status .error {\n color: red;\n}\n\n@media only screen and (min-width: 767px) {\n .source.modal td {\n max-width: 250px;\n }\n\n /* Can't be applied to dropdown cells */\n .source.modal td:not(.user) {\n overflow-x: hidden;\n }\n}\n","",{version:3,sources:["webpack://./src/routes/Queue/style.css"],names:[],mappings:"AAAA;EACE,UAAU;AACZ;;AAEA;EACE;IACE,gBAAgB;EAClB;;EAEA,uCAAuC;EACvC;IACE,kBAAkB;EACpB;AACF",sourcesContent:[".status .error {\n color: red;\n}\n\n@media only screen and (min-width: 767px) {\n .source.modal td {\n max-width: 250px;\n }\n\n /* Can't be applied to dropdown cells */\n .source.modal td:not(.user) {\n overflow-x: hidden;\n }\n}\n"],sourceRoot:""}]);const a=r},80218:(e,s,t)=>{t.d(s,{Z:()=>l});var n=t(1087),i=t(518),o=t(48117),r=t(76249),a=t(32347);const d=e=>i.Z.post(n.Z.BUNDLES_URL+"/priority",{priority:e}),c={removeCompleted:{access:r.PS.QUEUE_EDIT,displayName:"Remove completed bundles",icon:o.Z.REMOVE,handler:()=>i.Z.post(n.Z.BUNDLES_URL+"/remove_completed"),notifications:{onSuccess:"{{result.count}} completed bundles were removed"}},divider:null,pause:{displayName:"Pause all bundles",access:r.PS.QUEUE_EDIT,icon:o.Z.PAUSE,handler:()=>d(r.gg.PAUSED_FORCED)},resume:{displayName:"Resume all bundles",access:r.PS.QUEUE_EDIT,icon:o.Z.PLAY,handler:()=>d(r.gg.DEFAULT)}},l={moduleId:a.jv.QUEUE,actions:c}},49133:(e,s,t)=>{t.d(s,{Z:()=>l});var n=t(1087),i=t(518),o=t(48117),r=t(76249),a=t(32347),d=t(60160);const c={search:{access:r.PS.SEARCH,displayName:"Search (foreground)",icon:o.Z.SEARCH,handler:({data:e,location:s})=>d.Z.search(e,s)},searchFileAlternates:{access:r.PS.QUEUE_EDIT,displayName:"Search for alternates",icon:o.Z.SEARCH_ALTERNATES,filter:e=>0===e.time_finished,handler:({data:e})=>i.Z.post(`${n.Z.FILES_URL}/${e.id}/search`),notifications:{onSuccess:"File {{item.name}} was searched for alternates"}},removeFile:{displayName:"Remove",access:r.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)=>i.Z.post(`${n.Z.FILES_URL}/${e.id}/remove`,{remove_finished:s}),notifications:{onSuccess:"File {{item.name}} was removed from queue"}}},l={moduleId:a.jv.QUEUE,actions:c}},43231:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(85893),i=t(45697),o=t.n(i),r=(t(67294),t(94184)),a=t.n(r);const d=({className:e,percent:s,caption:t})=>(0,n.jsxs)("div",Object.assign({className:a()("ui progress",e,{indeterminate:void 0===s}),"data-percent":s},{children:[(0,n.jsx)("div",Object.assign({className:"bar",style:{transitionDuration:"300ms",width:void 0===s?void 0:s+"%",minWidth:"0px"}},{children:(0,n.jsx)("div",{className:"progress"})})),!!t&&(0,n.jsx)("div",Object.assign({className:"label"},{children:t}))]}));d.propTypes={percent:o().number.isRequired,caption:o().node.isRequired,className:o().string};const c=d},67635:(e,s,t)=>{t.r(s),t.d(s,{default:()=>Ne});var n=t(85893),i=t(67294),o=t(35108),r=t(80218),a=t(1087),d=t(518),c=t(20097),l=t(48117),u=t(76249),m=t(32347),h=t(60160);const p=e=>e.status.id===a.s.COMPLETION_VALIDATION_ERROR,E=e=>0===e.time_finished,j=(e,s)=>d.Z.post(`${a.Z.BUNDLES_URL}/${e.id}/share`,{skip_validation:s}),x={sources:{displayName:"Manage sources...",icon:l.Z.USER,filter:e=>e.sources.total>0&&E(e),handler:({data:e,location:s})=>{c.Z.push(`${s.pathname}/sources/${e.id}`)}},content:{displayName:"Manage files...",icon:l.Z.FILE,filter:e=>"directory"===e.type.id,handler:({data:e,location:s})=>{c.Z.push(`${s.pathname}/content/${e.id}`)}},divider:null,search:{access:u.PS.SEARCH,displayName:"Search (foreground)",icon:l.Z.SEARCH,handler:({data:e,location:s})=>h.Z.search(e,s)},searchBundleAlternates:{access:u.PS.QUEUE_EDIT,displayName:"Search for alternates",icon:l.Z.SEARCH_ALTERNATES,filter:E,handler:({data:e})=>d.Z.post(`${a.Z.BUNDLES_URL}/${e.id}/search`),notifications:{onSuccess:"The bundle {{item.name}} was searched for alternates"}},divider2:null,removeBundle:{displayName:"Remove",access:u.PS.QUEUE_EDIT,icon:l.Z.REMOVE,confirmation:{content:"Are you sure that you want to remove the bundle {{item.name}}?",approveCaption:"Remove bundle",rejectCaption:"Don't remove",checkboxCaption:"Remove finished files"},handler:({data:e},s)=>d.Z.post(`${a.Z.BUNDLES_URL}/${e.id}/remove`,{remove_finished:s})},divider3:null,rescan:{displayName:"Rescan for errors",access:u.PS.QUEUE_EDIT,icon:l.Z.REFRESH_COLORED,filter:p,handler:({data:e})=>j(e,!1)},forceShare:{displayName:"Force in share",access:u.PS.QUEUE_EDIT,icon:l.Z.ERROR,filter:p,handler:({data:e})=>j(e,!0)}},U={moduleId:m.jv.QUEUE,actions:x};var y=t(78230),v=t(45697),b=t.n(v),g=t(18446),C=t.n(g);const f={[u.gg.PAUSED_FORCED]:{str:"Paused (forced)",id:0},[u.gg.PAUSED]:{str:"Paused",id:1},[u.gg.LOWEST]:{str:"Lowest",id:2},[u.gg.LOW]:{str:"Low",id:3},[u.gg.NORMAL]:{str:"Normal",id:4},[u.gg.HIGH]:{str:"High",id:5},[u.gg.HIGHEST]:{str:"Highest",id:6}};var Z=t(9453),S=t(66883),A=t(8717),w=t(89519),R=t(40051),N=t(95345);class _ extends i.Component{constructor(){super(...arguments),this.setPriority=e=>{const{item:s,prioAction:t,t:n}=this.props;return(0,w.h9)((()=>t(s,e)),n)},this.setAutoPriority=()=>{this.setPriority(u.gg.DEFAULT)},this.getPriorityListItem=(e,s)=>{const t=this.props.item.priority.id;return{id:e.id.toString(),item:{active:t===e.id,onClick:()=>{this.setPriority(e.id)},children:(0,A.Iu)(e.str,s,m.jv.QUEUE)}}},this.getChildren=e=>{const{t:s}=this.props,t=Object.keys(f).map(Number).map((e=>this.getPriorityListItem(f[e],s)));return t.push({id:"divider"}),t.push({id:"auto",item:{active:this.props.itemPrio.auto,onClick:()=>{this.setPriority(u.gg.DEFAULT)},children:(0,A.Iu)("Auto",s,m.jv.QUEUE)}}),(0,N.E)(t,e)}}shouldComponentUpdate(e){return!C()(e.item.priority,this.props.item.priority)}render(){const{itemPrio:e,t:s}=this.props;let t=(0,A.Iu)(f[e.id].str,s,m.jv.QUEUE);return e.auto&&(t+=` (${(0,A.Iu)("Auto",s,m.jv.QUEUE).toLocaleLowerCase()})`),S.Z.hasAccess(u.PS.QUEUE_EDIT)?(0,n.jsx)(Z.Z,Object.assign({caption:t,className:"priority-menu"},{children:this.getChildren})):(0,n.jsx)(R.H,{caption:t})}}_.propTypes={itemPrio:b().object.isRequired,item:b().object.isRequired,prioAction:b().func.isRequired};const D=_;var L=t(94184),I=t.n(L),O=t(43231);const P=(e,s)=>{if(e.completed)return"success";const t=e.id;return I()({grey:(!t||t===u.gT.QUEUED)&&0===s.speed},{blue:(!t||t===u.gT.QUEUED)&&s.speed>0})},T=({cellData:e,rowDataGetter:s})=>{if(e.failed)return(0,n.jsx)("span",Object.assign({className:"error"},{children:e.str}));const t=s();return(0,n.jsx)(O.Z,{className:P(e,t),caption:e.str,percent:100*t.downloaded_bytes/t.size})};var Q=t(10293),B=t.n(Q),$=t(93836);const q=B().createStore({_viewName:"queue_bundle_view",_apiUrl:a.Z.MODULE_URL,mixins:[(0,$.Z)("name")]});var F=t(28427),H=t(92245),K=t(20368),k=t(49133);const G=B().createStore({_viewName:"queue_file_view",_apiUrl:a.Z.MODULE_URL,mixins:[(0,$.Z)("name")]});var M=t(68126),V=t(93379),z=t.n(V),W=t(7795),Y=t.n(W),X=t(90569),J=t.n(X),ee=t(3565),se=t.n(ee),te=t(19216),ne=t.n(te),ie=t(44589),oe=t.n(ie),re=t(24751),ae={};ae.styleTagTransform=oe(),ae.setAttributes=se(),ae.insert=J().bind(null,"head"),ae.domAPI=Y(),ae.insertStyleElement=ne(),z()(re.Z,ae),re.Z&&re.Z.locals&&re.Z.locals;var de=t(19072),ce=t(4333);const le=({cellData:e,rowDataGetter:s,t})=>(0,n.jsx)(D,{itemPrio:e,item:s(),prioAction:de.YU,t});class ue extends i.Component{constructor(){super(...arguments),this.isActive=(e,s)=>!s.status.downloaded,this.isRunning=(e,s)=>s.speed>0}render(){return(0,n.jsxs)(y.Z,Object.assign({store:G,sourceFilter:{pattern:this.props.bundle.id,method:u.V3.EXACT,property:"bundle"},moduleId:k.Z.moduleId},{children:[(0,n.jsx)(o.Column,{name:"Name",width:200,flexGrow:20,columnKey:"name",cell:(0,n.jsx)(M.Nq,{actions:k.Z,remoteMenuId:ce.Z.QUEUE_FILE})}),(0,n.jsx)(o.Column,{name:"Size",width:70,columnKey:"size",cell:(0,n.jsx)(M.Eh,{}),flexGrow:1}),(0,n.jsx)(o.Column,{name:"Status",width:120,columnKey:"status",cell:(0,n.jsx)(T,{})}),(0,n.jsx)(o.Column,{name:"Sources",width:65,columnKey:"sources",renderCondition:this.isActive}),(0,n.jsx)(o.Column,{name:"Time left",width:50,columnKey:"seconds_left",renderCondition:this.isRunning,cell:(0,n.jsx)(M.VL,{})}),(0,n.jsx)(o.Column,{name:"Speed",width:55,columnKey:"speed",cell:(0,n.jsx)(M.LV,{}),renderCondition:this.isRunning}),(0,n.jsx)(o.Column,{name:"Priority",width:80,columnKey:"priority",renderCondition:this.isActive,cell:(0,n.jsx)(le,{}),flexGrow:1})]}))}}const me=ue;var he=t(42090);class pe extends i.Component{render(){const e=this.props,{bundle:s}=e,t=function(e,s){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&s.indexOf(n)<0&&(t[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)s.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(t[n[i]]=e[n[i]])}return t}(e,["bundle"]);return(0,n.jsx)(F.Z,Object.assign({className:"source",title:s.name,subHeader:s.target,closable:!0,icon:(0,n.jsx)(K.Z,{typeInfo:s.type}),fullHeight:!0},t,{children:(0,n.jsx)(me,{bundle:s})}))}}pe.displayName="BundleFileDialog";const Ee=(0,H.ZP)((0,he.Z)(pe,{urls:{bundle:({match:e},s)=>s.get(`${a.Z.BUNDLES_URL}/${e.params.bundleId}`)}}),"content/:bundleId"),je={removeBundleSource:{access:u.PS.QUEUE_EDIT,displayName:"Remove source",icon:l.Z.REMOVE,handler:({data:e})=>{const{source:s,bundle:t}=e;return d.Z.delete(`${a.Z.BUNDLES_URL}/${t.id}/sources/${s.user.cid}`)}}},xe={moduleId:m.jv.QUEUE,subId:"bundleSource",actions:je};var Ue=t(2445),ye=t(84613),ve=t(90195);const be=({source:e,bundle:s,t})=>(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",Object.assign({className:"user dropdown"},{children:(0,n.jsx)(ye.Ie,Object.assign({userIcon:!0,user:e.user,ids:ve.D,contextElement:".source.modal",remoteMenuId:ce.Z.HINTED_USER},{children:(0,n.jsx)(ye.PC,{actions:xe,itemData:{source:e,bundle:s}})}))})),(0,n.jsx)("td",Object.assign({className:"hubs"},{children:e.user.hub_names})),(0,n.jsx)("td",Object.assign({className:"speed"},{children:e.last_speed>0&&(0,Ue.CY)(e.last_speed,t)})),(0,n.jsx)("td",Object.assign({className:"files"},{children:e.files})),(0,n.jsx)("td",Object.assign({className:"size"},{children:(0,Ue.BU)(e.size,t)}))]}),ge=(e,s)=>e.user.nicks.localeCompare(s.user.nicks),Ce=(0,he.Z)((({sources:e,bundle:s,queueT:t})=>{const{translate:i}=t;return(0,n.jsxs)("div",Object.assign({className:"sources"},{children:[(0,n.jsx)("h2",{children:i("Sources")}),(0,n.jsxs)("table",Object.assign({className:"ui striped table"},{children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:i("User")}),(0,n.jsx)("th",{children:i("Hubs")}),(0,n.jsx)("th",{children:i("Last known speed")}),(0,n.jsx)("th",{children:i("Files")}),(0,n.jsx)("th",{children:i("Size")})]})}),(0,n.jsx)("tbody",{children:e.sort(ge).map((e=>(0,n.jsx)(be,{source:e,bundle:s,t:t.plainT},e.user.cid)))})]}))]}))}),{urls:{sources:({bundle:e},s)=>s.get(`${a.Z.BUNDLES_URL}/${e.id}/sources`)},onSocketConnected:(e,{refetchData:s,props:t})=>{e(a.Z.MODULE_URL,a.Z.BUNDLE_SOURCES,(e=>{e.id===t.bundle.id&&s()}))}});class fe extends i.Component{render(){const{bundle:e,queueT:s}=this.props;return(0,n.jsx)(F.Z,Object.assign({className:"source",title:e.name,subHeader:e.target,closable:!0,icon:(0,n.jsx)(K.Z,{typeInfo:e.type}),fullHeight:!0},this.props,{children:(0,n.jsx)(Ce,{bundle:e,queueT:s})}))}}fe.displayName="SourceDialog";const Ze=(0,H.ZP)((0,he.Z)(fe,{urls:{bundle:({match:e},s)=>s.get(`${a.Z.BUNDLES_URL}/${e.params.bundleId}`)}}),"sources/:bundleId");var Se=t(27695),Ae=t(91072);const we=({cellData:e,rowDataGetter:s,t})=>(0,n.jsx)(D,{itemPrio:e,item:s(),prioAction:de.aR,t});class Re extends i.Component{constructor(){super(...arguments),this.isActive=(e,s)=>!s.status.downloaded,this.isDownloaded=(e,s)=>s.status.downloaded,this.isRunning=(e,s)=>s.speed>0,this.emptyRowsNodeGetter=()=>{const{t:e}=this.queueT;return(0,n.jsx)(Se.Z,{title:e("queueEmpty","The queue is empty"),icon:l.Z.FILE,description:e("queueEmptyDesc","New items can be queued from search or filelists")})},this.queueT=(0,A.HY)(this.props.t,m.jv.QUEUE)}render(){const{translate:e}=this.queueT;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(y.Z,Object.assign({emptyRowsNodeGetter:this.emptyRowsNodeGetter,store:q,footerData:(0,n.jsx)(ye.PC,{className:"top left pointing",caption:e("Actions..."),actions:r.Z,header:e("Queue actions"),triggerIcon:"chevron up",button:!0}),moduleId:r.Z.moduleId},{children:[(0,n.jsx)(o.Column,{name:"Name",width:200,flexGrow:4,columnKey:"name",cell:(0,n.jsx)(M.Nq,{actions:U,remoteMenuId:ce.Z.QUEUE_BUNDLE,ids:["content","sources","divider","search","searchBundleAlternates","divider","removeBundle","divider","rescan","forceShare"]})}),(0,n.jsx)(o.Column,{name:"Size",width:60,columnKey:"size",cell:(0,n.jsx)(M.Eh,{}),flexGrow:1}),(0,n.jsx)(o.Column,{name:"Type/content",width:150,columnKey:"type",hideWidth:1e3,cell:(0,n.jsx)(M.DS,{actions:U,actionId:"content"})}),(0,n.jsx)(o.Column,{name:"Status",width:120,flexGrow:3,columnKey:"status",cell:(0,n.jsx)(T,{})}),(0,n.jsx)(o.Column,{name:"Sources",width:60,columnKey:"sources",renderCondition:this.isActive,flexGrow:1,cell:(0,n.jsx)(M.DS,{actions:U,actionId:"sources"})}),(0,n.jsx)(o.Column,{name:"Time left",width:50,columnKey:"seconds_left",renderCondition:this.isRunning,cell:(0,n.jsx)(M.VL,{})}),(0,n.jsx)(o.Column,{name:"Speed",width:50,columnKey:"speed",cell:(0,n.jsx)(M.LV,{}),renderCondition:this.isRunning,flexGrow:1}),(0,n.jsx)(o.Column,{name:"Priority",width:80,columnKey:"priority",renderCondition:this.isActive,cell:(0,n.jsx)(we,{}),flexGrow:1}),(0,n.jsx)(o.Column,{name:"Added",width:100,columnKey:"time_added",cell:(0,n.jsx)(M.Ks,{}),hideWidth:1400}),(0,n.jsx)(o.Column,{name:"Finished",width:100,columnKey:"time_finished",cell:(0,n.jsx)(M.Ks,{}),renderCondition:this.isDownloaded,hideWidth:1200})]})),(0,n.jsx)(Ze,{queueT:this.queueT}),(0,n.jsx)(Ee,{})]})}}Re.displayName="Queue";const Ne=(0,Ae.Zh)()(Re)}}]);
|
|
2
|
-
//# sourceMappingURL=queue.20fe8967cbdac914688a.chunk.js.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/queue.20fe8967cbdac914688a.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Queue/style.css","webpack://airdcpp-webui/./src/actions/ui/QueueActions.ts","webpack://airdcpp-webui/./src/actions/ui/QueueFileActions.ts","webpack://airdcpp-webui/./src/components/semantic/Progress.tsx","webpack://airdcpp-webui/./src/actions/ui/QueueBundleActions.ts","webpack://airdcpp-webui/./src/constants/PriorityConstants.ts","webpack://airdcpp-webui/./src/routes/Queue/components/PriorityMenu.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/StatusCell.tsx","webpack://airdcpp-webui/./src/stores/QueueBundleViewStore.js","webpack://airdcpp-webui/./src/stores/QueueFileViewStore.js","webpack://airdcpp-webui/./src/routes/Queue/style.css?62bc","webpack://airdcpp-webui/./src/routes/Queue/components/BundleFileTable.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/BundleFileDialog.tsx","webpack://airdcpp-webui/./src/actions/ui/QueueBundleSourceActions.ts","webpack://airdcpp-webui/./src/routes/Queue/components/BundleSourceTable.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/BundleSourceDialog.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/Queue.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".status .error {\\n color: red;\\n}\\n\\n@media only screen and (min-width: 767px) {\\n .source.modal td {\\n max-width: 250px;\\n }\\n\\n /* Can't be applied to dropdown cells */\\n .source.modal td:not(.user) {\\n overflow-x: hidden;\\n }\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Queue/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,UAAU;AACZ;;AAEA;EACE;IACE,gBAAgB;EAClB;;EAEA,uCAAuC;EACvC;IACE,kBAAkB;EACpB;AACF\",\"sourcesContent\":[\".status .error {\\n color: red;\\n}\\n\\n@media only screen and (min-width: 767px) {\\n .source.modal td {\\n max-width: 250px;\\n }\\n\\n /* Can't be applied to dropdown cells */\\n .source.modal td:not(.user) {\\n overflow-x: hidden;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import QueueConstants from 'constants/QueueConstants';\nimport SocketService from 'services/SocketService';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst setBundlePriorities = (prio: API.QueuePriorityEnum) => {\n return SocketService.post(QueueConstants.BUNDLES_URL + '/priority', {\n priority: prio,\n });\n};\n\nconst handlePause = () => {\n return setBundlePriorities(API.QueuePriorityEnum.PAUSED_FORCED);\n};\n\nconst handleResume = () => {\n return setBundlePriorities(API.QueuePriorityEnum.DEFAULT);\n};\n\nconst handleRemoveCompleted = () => {\n return SocketService.post(QueueConstants.BUNDLES_URL + '/remove_completed');\n};\n\nconst QueueActions: UI.ActionListType<null> = {\n removeCompleted: {\n access: API.AccessEnum.QUEUE_EDIT,\n displayName: 'Remove completed bundles',\n icon: IconConstants.REMOVE,\n handler: handleRemoveCompleted,\n notifications: {\n onSuccess: '{{result.count}} completed bundles were removed',\n },\n },\n divider: null,\n pause: {\n displayName: 'Pause all bundles',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.PAUSE,\n handler: handlePause,\n },\n resume: {\n displayName: 'Resume all bundles',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.PLAY,\n handler: handleResume,\n },\n};\n\nexport default {\n moduleId: UI.Modules.QUEUE,\n actions: QueueActions,\n};\n","import QueueConstants from 'constants/QueueConstants';\nimport SocketService from 'services/SocketService';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport SearchActions from 'actions/reflux/SearchActions';\n\nconst itemNotFinished = (item: API.QueueFile) => item.time_finished === 0;\n\nconst handleSearch: UI.ActionHandler<API.QueueFile> = ({ data: itemInfo, location }) => {\n return SearchActions.search(itemInfo, location);\n};\n\nconst handleRemoveFile: UI.ActionHandler<API.QueueFile> = (\n { data: file },\n removeFinished: boolean\n) => {\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/remove`, {\n remove_finished: removeFinished,\n });\n};\n\nconst handleSearchFileAlternates: UI.ActionHandler<API.QueueFile> = ({ data: file }) => {\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/search`);\n};\n\nconst QueueFileActions: UI.ActionListType<API.QueueFile> = {\n search: {\n access: API.AccessEnum.SEARCH,\n displayName: 'Search (foreground)',\n icon: IconConstants.SEARCH,\n handler: handleSearch,\n },\n searchFileAlternates: {\n access: API.AccessEnum.QUEUE_EDIT,\n displayName: 'Search for alternates',\n icon: IconConstants.SEARCH_ALTERNATES,\n filter: itemNotFinished,\n handler: handleSearchFileAlternates,\n notifications: {\n onSuccess: 'File {{item.name}} was searched for alternates',\n },\n },\n removeFile: {\n displayName: 'Remove',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.REMOVE,\n confirmation: {\n content: 'Are you sure that you want to remove the file {{item.name}}?',\n approveCaption: 'Remove file',\n rejectCaption: `Don't remove`,\n checkboxCaption: 'Remove on disk',\n },\n handler: handleRemoveFile,\n notifications: {\n onSuccess: 'File {{item.name}} was removed from queue',\n },\n },\n};\n\nexport default {\n moduleId: UI.Modules.QUEUE,\n //subId: 'file',\n actions: QueueFileActions,\n} as UI.ModuleActions<API.QueueFile>;\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nexport interface ProgressProps {\n caption?: React.ReactNode;\n className?: string | null;\n percent?: number;\n}\n\nconst Progress: React.FC<ProgressProps> = ({ className, percent, caption }) => (\n <div\n className={classNames('ui progress', className, {\n indeterminate: percent === undefined,\n })}\n data-percent={percent}\n >\n <div\n className=\"bar\"\n style={{\n transitionDuration: 300 + 'ms',\n width: percent === undefined ? undefined : percent + '%',\n minWidth: '0px',\n }}\n >\n <div className=\"progress\" />\n </div>\n {!!caption && <div className=\"label\">{caption}</div>}\n </div>\n);\n\nProgress.propTypes = {\n percent: PropTypes.number.isRequired,\n caption: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nexport default Progress;\n","import { default as QueueConstants, StatusEnum } from 'constants/QueueConstants';\nimport SocketService from 'services/SocketService';\nimport History from 'utils/History';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport SearchActions from 'actions/reflux/SearchActions';\n\nconst bundleValidationFailed = (bundle: API.QueueBundle) =>\n bundle.status.id === StatusEnum.COMPLETION_VALIDATION_ERROR;\nconst itemNotFinished = (bundle: API.QueueBundle) => bundle.time_finished === 0;\nconst isDirectoryBundle = (bundle: API.QueueBundle) => bundle.type.id === 'directory';\nconst hasSources = (bundle: API.QueueBundle) =>\n bundle.sources.total > 0 && itemNotFinished(bundle);\n\nconst shareBundle = (bundle: API.QueueBundle, skipValidation: boolean) => {\n return SocketService.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/share`, {\n skip_validation: skipValidation,\n });\n};\n\nconst handleRescan: UI.ActionHandler<API.QueueBundle> = ({ data: bundle }) => {\n return shareBundle(bundle, false);\n};\n\nconst handleForceShare: UI.ActionHandler<API.QueueBundle> = ({ data: bundle }) => {\n return shareBundle(bundle, true);\n};\n\nconst handleRemoveBundle: UI.ActionHandler<API.QueueBundle> = (\n { data: bundle },\n removeFinished\n) => {\n return SocketService.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/remove`, {\n remove_finished: removeFinished,\n });\n};\n\nconst handleSearch: UI.ActionHandler<API.QueueBundle> = ({\n data: itemInfo,\n location,\n}) => {\n return SearchActions.search(itemInfo, location);\n};\n\nconst handleSearchBundleAlternates: UI.ActionHandler<API.QueueBundle> = ({\n data: bundle,\n}) => {\n return SocketService.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/search`);\n};\n\nconst handleSources: UI.ActionHandler<API.QueueBundle> = ({ data, location }) => {\n History.push(`${location.pathname}/sources/${data.id}`);\n};\n\nconst handleContent: UI.ActionHandler<API.QueueBundle> = ({ data, location }) => {\n History.push(`${location.pathname}/content/${data.id}`);\n};\n\nconst QueueBundleActions: UI.ActionListType<API.QueueBundle> = {\n sources: {\n displayName: 'Manage sources...',\n icon: IconConstants.USER,\n filter: hasSources,\n handler: handleSources,\n },\n content: {\n displayName: 'Manage files...',\n icon: IconConstants.FILE,\n filter: isDirectoryBundle,\n handler: handleContent,\n },\n divider: null,\n search: {\n access: API.AccessEnum.SEARCH,\n displayName: 'Search (foreground)',\n icon: IconConstants.SEARCH,\n handler: handleSearch,\n },\n searchBundleAlternates: {\n access: API.AccessEnum.QUEUE_EDIT,\n displayName: 'Search for alternates',\n icon: IconConstants.SEARCH_ALTERNATES,\n filter: itemNotFinished,\n handler: handleSearchBundleAlternates,\n notifications: {\n onSuccess: 'The bundle {{item.name}} was searched for alternates',\n },\n },\n divider2: null,\n removeBundle: {\n displayName: 'Remove',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.REMOVE,\n confirmation: {\n content: 'Are you sure that you want to remove the bundle {{item.name}}?',\n approveCaption: 'Remove bundle',\n rejectCaption: `Don't remove`,\n checkboxCaption: 'Remove finished files',\n },\n handler: handleRemoveBundle,\n },\n divider3: null,\n rescan: {\n displayName: 'Rescan for errors',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.REFRESH_COLORED,\n filter: bundleValidationFailed,\n handler: handleRescan,\n },\n forceShare: {\n displayName: 'Force in share',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.ERROR,\n filter: bundleValidationFailed,\n handler: handleForceShare,\n },\n};\n\nexport default {\n moduleId: UI.Modules.QUEUE,\n //subId: 'bundle',\n actions: QueueBundleActions,\n} as UI.ModuleActions<API.QueueBundle>;\n","import { QueuePriorityEnum } from 'types/api';\n\nexport const PriorityEnum = {\n [QueuePriorityEnum.PAUSED_FORCED]: { str: 'Paused (forced)', id: 0 },\n [QueuePriorityEnum.PAUSED]: { str: 'Paused', id: 1 },\n [QueuePriorityEnum.LOWEST]: { str: 'Lowest', id: 2 },\n [QueuePriorityEnum.LOW]: { str: 'Low', id: 3 },\n [QueuePriorityEnum.NORMAL]: { str: 'Normal', id: 4 },\n [QueuePriorityEnum.HIGH]: { str: 'High', id: 5 },\n [QueuePriorityEnum.HIGHEST]: { str: 'Highest', id: 6 },\n};\n","import PropTypes from 'prop-types';\r\nimport { Component } from 'react';\r\nimport isEqual from 'lodash/isEqual';\r\n\r\nimport { PriorityEnum } from 'constants/PriorityConstants';\r\n\r\nimport TableDropdown, { DropdownCloseHandler } from 'components/semantic/TableDropdown';\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 { translate } from 'utils/TranslationUtils';\r\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\r\nimport { EmptyDropdownCaption } from 'components/semantic/EmptyDropdown';\r\nimport { buildMenu } from 'components/action-menu/builder/slidingMenuBuilder';\r\n\r\ninterface PriorityMenuProps {\r\n itemPrio: API.QueuePriority;\r\n item: API.QueueItemBase;\r\n prioAction: (item: API.QueueItemBase, priority: API.QueuePriorityEnum) => Promise<any>;\r\n t: UI.TranslateF;\r\n}\r\n\r\nclass PriorityMenu extends Component<PriorityMenuProps> {\r\n static propTypes = {\r\n /**\r\n * Priority object\r\n */\r\n itemPrio: PropTypes.object.isRequired,\r\n\r\n /**\r\n * Item with priority properties\r\n */\r\n item: PropTypes.object.isRequired,\r\n\r\n prioAction: PropTypes.func.isRequired,\r\n };\r\n\r\n setPriority = (priorityId: API.QueuePriorityEnum) => {\r\n const { item, prioAction, t } = this.props;\r\n return runBackgroundSocketAction(() => prioAction(item, priorityId), t);\r\n };\r\n\r\n setAutoPriority = () => {\r\n this.setPriority(API.QueuePriorityEnum.DEFAULT);\r\n };\r\n\r\n shouldComponentUpdate(nextProps: PriorityMenuProps) {\r\n return !isEqual(nextProps.item.priority, this.props.item.priority);\r\n }\r\n\r\n getPriorityListItem = (\r\n priority: Omit<API.QueuePriority, 'auto'>,\r\n t: UI.TranslateF\r\n ): UI.ActionMenuItem => {\r\n const currentPrio = this.props.item.priority.id;\r\n return {\r\n id: priority.id.toString(),\r\n item: {\r\n active: currentPrio === priority.id,\r\n onClick: () => {\r\n this.setPriority(priority.id);\r\n },\r\n children: translate(priority.str, t, UI.Modules.QUEUE),\r\n },\r\n };\r\n };\r\n\r\n getChildren = (onClose: DropdownCloseHandler) => {\r\n const { t } = this.props;\r\n\r\n const children = Object.keys(PriorityEnum)\r\n .map(Number)\r\n .map((prioKey) =>\r\n this.getPriorityListItem(PriorityEnum[prioKey as keyof typeof PriorityEnum], t)\r\n );\r\n\r\n children.push({ id: 'divider' });\r\n children.push({\r\n id: 'auto',\r\n item: {\r\n active: this.props.itemPrio.auto,\r\n onClick: () => {\r\n this.setPriority(API.QueuePriorityEnum.DEFAULT);\r\n },\r\n children: translate('Auto', t, UI.Modules.QUEUE),\r\n },\r\n });\r\n\r\n return buildMenu(children, onClose);\r\n };\r\n\r\n render() {\r\n const { itemPrio, t } = this.props;\r\n let caption = translate(\r\n PriorityEnum[itemPrio.id as keyof typeof PriorityEnum].str,\r\n t,\r\n UI.Modules.QUEUE\r\n );\r\n if (itemPrio.auto) {\r\n caption += ` (${translate('Auto', t, UI.Modules.QUEUE).toLocaleLowerCase()})`;\r\n }\r\n\r\n if (!LoginStore.hasAccess(API.AccessEnum.QUEUE_EDIT)) {\r\n return <EmptyDropdownCaption caption={caption} />;\r\n }\r\n\r\n return (\r\n <TableDropdown caption={caption} className=\"priority-menu\">\r\n {this.getChildren}\r\n </TableDropdown>\r\n );\r\n }\r\n}\r\n\r\nexport default PriorityMenu;\r\n","import * as React from 'react';\nimport classNames from 'classnames';\n\nimport Progress from 'components/semantic/Progress';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\n\nconst getStatusClass = (cellData: API.QueueBundleStatus, rowData: API.QueueBundle) => {\n if (cellData.completed) {\n return 'success';\n }\n\n const statusId = cellData.id;\n return classNames(\n {\n grey:\n (!statusId || statusId === API.QueueBundleStatusEnum.QUEUED) &&\n rowData.speed === 0,\n },\n {\n blue:\n (!statusId || statusId === API.QueueBundleStatusEnum.QUEUED) && rowData.speed > 0,\n }\n );\n};\n\nconst StatusCell: React.FC<\n RowWrapperCellChildProps<API.QueueBundleStatus, API.QueueBundle>\n> = ({ cellData, rowDataGetter }) => {\n if (cellData!.failed) {\n // There isn't much space for other information\n return <span className=\"error\">{cellData!.str}</span>;\n }\n\n const rowData = rowDataGetter!();\n return (\n <Progress\n className={getStatusClass(cellData!, rowData)}\n caption={cellData!.str}\n percent={(rowData.downloaded_bytes * 100) / rowData.size}\n />\n );\n};\n\nexport default StatusCell;\n","import Reflux from 'reflux';\n\nimport QueueConstants from 'constants/QueueConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'queue_bundle_view',\n _apiUrl: QueueConstants.MODULE_URL,\n mixins: [ViewStoreMixin('name')],\n});\n","import Reflux from 'reflux';\n\nimport QueueConstants from 'constants/QueueConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'queue_file_view',\n _apiUrl: QueueConstants.MODULE_URL,\n mixins: [ViewStoreMixin('name')],\n});\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';\nimport { Column } from 'fixed-data-table-2';\n\nimport QueueFileUIActions from 'actions/ui/QueueFileActions';\n\nimport VirtualTable from 'components/table/VirtualTable';\n\nimport PriorityMenu from 'routes/Queue/components/PriorityMenu';\nimport StatusCell from 'routes/Queue/components/StatusCell';\n\nimport QueueFileViewStore from 'stores/QueueFileViewStore';\n\nimport {\n FileActionCell,\n SizeCell,\n SpeedCell,\n AbbreviatedDurationCell,\n} from 'components/table/Cell';\n\nimport '../style.css';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport { setFilePriority } from 'services/api/QueueApi';\nimport MenuConstants from 'constants/MenuConstants';\n\nconst PriorityCell: React.FC<\n RowWrapperCellChildProps<API.QueuePriority, API.QueueBundle>\n> = ({ cellData, rowDataGetter, t }) => (\n <PriorityMenu\n itemPrio={cellData!}\n item={rowDataGetter!()}\n prioAction={setFilePriority}\n t={t!}\n />\n);\n\ninterface BundleFileTableProps {\n bundle: API.QueueBundle;\n}\n\nclass BundleFileTable extends React.Component<BundleFileTableProps> {\n isActive = (cellData: any, rowData: API.QueueFile) => {\n return !rowData.status.downloaded;\n };\n\n isRunning = (cellData: any, rowData: API.QueueFile) => {\n return rowData.speed > 0;\n };\n\n render() {\n return (\n <VirtualTable\n store={QueueFileViewStore}\n sourceFilter={{\n pattern: this.props.bundle.id,\n method: API.FilterMethod.EXACT,\n property: 'bundle',\n }}\n moduleId={QueueFileUIActions.moduleId}\n >\n <Column\n name=\"Name\"\n width={200}\n flexGrow={20}\n columnKey=\"name\"\n cell={\n <FileActionCell\n actions={QueueFileUIActions}\n remoteMenuId={MenuConstants.QUEUE_FILE}\n />\n }\n />\n <Column\n name=\"Size\"\n width={70}\n columnKey=\"size\"\n cell={<SizeCell />}\n flexGrow={1}\n />\n <Column name=\"Status\" width={120} columnKey=\"status\" cell={<StatusCell />} />\n <Column\n name=\"Sources\"\n width={65}\n columnKey=\"sources\"\n renderCondition={this.isActive}\n />\n <Column\n name=\"Time left\"\n width={50}\n columnKey=\"seconds_left\"\n renderCondition={this.isRunning}\n cell={<AbbreviatedDurationCell />}\n />\n <Column\n name=\"Speed\"\n width={55}\n columnKey=\"speed\"\n cell={<SpeedCell />}\n renderCondition={this.isRunning}\n />\n <Column\n name=\"Priority\"\n width={80}\n columnKey=\"priority\"\n renderCondition={this.isActive}\n cell={<PriorityCell />}\n flexGrow={1}\n />\n </VirtualTable>\n );\n }\n}\n\nexport default BundleFileTable;\n","import { Component } from 'react';\nimport Modal from 'components/semantic/Modal';\n\nimport ModalRouteDecorator, {\n ModalRouteDecoratorChildProps,\n} from 'decorators/ModalRouteDecorator';\n\nimport FileIcon from 'components/icon/FileIcon';\nimport BundleFileTable from 'routes/Queue/components/BundleFileTable';\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport QueueConstants from 'constants/QueueConstants';\n\nimport * as API from 'types/api';\n\ninterface BundleFileDialogProps {}\n\ninterface DataProps extends DataProviderDecoratorChildProps {\n bundle: API.QueueBundle;\n}\n\ninterface RouteProps {\n bundleId: string;\n}\n\ntype Props = BundleFileDialogProps &\n DataProps &\n ModalRouteDecoratorChildProps<RouteProps>;\n\nclass BundleFileDialog extends Component<Props> {\n static displayName = 'BundleFileDialog';\n\n render() {\n const { bundle, ...other } = this.props;\n return (\n <Modal\n className=\"source\"\n title={bundle.name}\n subHeader={bundle.target}\n closable={true}\n icon={<FileIcon typeInfo={bundle.type} />}\n fullHeight={true}\n {...other}\n >\n <BundleFileTable bundle={bundle} />\n </Modal>\n );\n }\n}\n\nexport default ModalRouteDecorator<BundleFileDialogProps, RouteProps>(\n DataProviderDecorator<Omit<Props, keyof DataProps>, DataProps>(BundleFileDialog, {\n urls: {\n bundle: ({ match }, socket) =>\n socket.get(`${QueueConstants.BUNDLES_URL}/${match.params.bundleId}`),\n },\n }),\n 'content/:bundleId'\n);\n","import { default as QueueConstants } from 'constants/QueueConstants';\nimport SocketService from 'services/SocketService';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\ninterface ActionBundleSourceData {\n source: API.QueueBundleSource;\n bundle: API.QueueBundle;\n}\n\nconst handleRemoveBundleSource: UI.ActionHandler<ActionBundleSourceData> = ({ data }) => {\n const { source, bundle } = data;\n return SocketService.delete(\n `${QueueConstants.BUNDLES_URL}/${bundle.id}/sources/${source.user.cid}`\n );\n};\n\nconst BundleSourceActions: UI.ActionListType<ActionBundleSourceData> = {\n removeBundleSource: {\n access: API.AccessEnum.QUEUE_EDIT,\n displayName: 'Remove source',\n icon: IconConstants.REMOVE,\n handler: handleRemoveBundleSource,\n },\n};\n\nexport default {\n moduleId: UI.Modules.QUEUE,\n subId: 'bundleSource',\n actions: BundleSourceActions,\n};\n","import * as React from 'react';\n\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\n\nimport QueueBundleSourceActions from 'actions/ui/QueueBundleSourceActions';\nimport QueueConstants from 'constants/QueueConstants';\n\nimport { formatSize, formatSpeed } from 'utils/ValueFormat';\n\nimport { ActionMenu, UserMenu } from 'components/action-menu';\nimport { UserFileActions } from 'actions/ui/UserActions';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport MenuConstants from 'constants/MenuConstants';\n\ninterface SourceProps {\n bundle: API.QueueBundle;\n source: API.QueueBundleSource;\n t: UI.TranslateF;\n}\n\nconst Source: React.FC<SourceProps> = ({ source, bundle, t }) => (\n <tr>\n <td className=\"user dropdown\">\n <UserMenu\n userIcon={true}\n user={source.user}\n ids={UserFileActions}\n contextElement=\".source.modal\"\n remoteMenuId={MenuConstants.HINTED_USER}\n >\n <ActionMenu\n actions={QueueBundleSourceActions}\n //ids={ [ 'removeBundleSource' ]}\n itemData={{\n source,\n bundle,\n }}\n />\n </UserMenu>\n </td>\n <td className=\"hubs\">{source.user.hub_names}</td>\n <td className=\"speed\">\n {source.last_speed > 0 && formatSpeed(source.last_speed, t)}\n </td>\n <td className=\"files\">{source.files}</td>\n <td className=\"size\">{formatSize(source.size, t)}</td>\n </tr>\n);\n\nconst userSort = (a: API.QueueBundleSource, b: API.QueueBundleSource) =>\n a.user.nicks.localeCompare(b.user.nicks);\n\ninterface BundleSourceTableProps {\n bundle: API.QueueBundle;\n queueT: UI.ModuleTranslator;\n}\n\ninterface BundleSourceTableDataProps extends DataProviderDecoratorChildProps {\n sources: API.QueueBundleSource[];\n}\n\nconst BundleSourceTable: React.FC<\n BundleSourceTableProps & BundleSourceTableDataProps\n> = ({ sources, bundle, queueT }) => {\n const { translate } = queueT;\n\n return (\n <div className=\"sources\">\n <h2>{translate('Sources')}</h2>\n <table className=\"ui striped table\">\n <thead>\n <tr>\n <th>{translate('User')}</th>\n <th>{translate('Hubs')}</th>\n <th>{translate('Last known speed')}</th>\n <th>{translate('Files')}</th>\n <th>{translate('Size')}</th>\n </tr>\n </thead>\n <tbody>\n {sources.sort(userSort).map((source) => (\n <Source\n key={source.user.cid}\n source={source}\n bundle={bundle!}\n t={queueT.plainT}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default DataProviderDecorator<BundleSourceTableProps, BundleSourceTableDataProps>(\n BundleSourceTable,\n {\n urls: {\n sources: ({ bundle }, socket) =>\n socket.get(`${QueueConstants.BUNDLES_URL}/${bundle!.id}/sources`),\n },\n onSocketConnected: (addSocketListener, { refetchData, props }) => {\n addSocketListener<API.QueueBundle>(\n QueueConstants.MODULE_URL,\n QueueConstants.BUNDLE_SOURCES,\n (data) => {\n // Avoid flickering when there are many bundles running\n if (data.id === props.bundle!.id) {\n refetchData();\n }\n }\n );\n },\n }\n);\n","import { Component } from 'react';\nimport Modal from 'components/semantic/Modal';\n\nimport ModalRouteDecorator, {\n ModalRouteDecoratorChildProps,\n} from 'decorators/ModalRouteDecorator';\n\nimport FileIcon from 'components/icon/FileIcon';\n\nimport SourceTable from 'routes/Queue/components/BundleSourceTable';\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport QueueConstants from 'constants/QueueConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\ninterface BundleSourceDialogProps {\n queueT: UI.ModuleTranslator;\n}\n\ninterface DataProps extends DataProviderDecoratorChildProps {\n bundle: API.QueueBundle;\n}\n\ninterface RouteProps {\n bundleId: string;\n}\n\ntype Props = BundleSourceDialogProps & ModalRouteDecoratorChildProps<RouteProps>;\n\nclass SourceDialog extends Component<Props & DataProps> {\n static displayName = 'SourceDialog';\n\n render() {\n const { bundle, queueT } = this.props;\n return (\n <Modal\n className=\"source\"\n title={bundle.name}\n subHeader={bundle.target}\n closable={true}\n icon={<FileIcon typeInfo={bundle.type} />}\n fullHeight={true}\n {...this.props}\n >\n <SourceTable bundle={bundle} queueT={queueT} />\n </Modal>\n );\n }\n}\n\nexport default ModalRouteDecorator<BundleSourceDialogProps, RouteProps>(\n DataProviderDecorator<Props, DataProps>(SourceDialog, {\n urls: {\n bundle: ({ match }, socket) =>\n socket.get(`${QueueConstants.BUNDLES_URL}/${match.params.bundleId}`),\n },\n }),\n 'sources/:bundleId'\n);\n","import * as React from 'react';\nimport { Column } from 'fixed-data-table-2';\n\nimport QueueActions from 'actions/ui/QueueActions';\nimport QueueBundleActions from 'actions/ui/QueueBundleActions';\nimport VirtualTable from 'components/table/VirtualTable';\n\nimport PriorityMenu from 'routes/Queue/components/PriorityMenu';\nimport StatusCell from 'routes/Queue/components/StatusCell';\nimport QueueBundleViewStore from 'stores/QueueBundleViewStore';\n\nimport BundleFileDialog from 'routes/Queue/components/BundleFileDialog';\nimport SourceDialog from 'routes/Queue/components/BundleSourceDialog';\n\nimport { ActionMenu } from 'components/action-menu';\nimport Message from 'components/semantic/Message';\n\nimport {\n ActionLinkCell,\n FileActionCell,\n SizeCell,\n SpeedCell,\n AbbreviatedDurationCell,\n DurationCell,\n} from 'components/table/Cell';\n\nimport '../style.css';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { getModuleT } from 'utils/TranslationUtils';\nimport { setBundlePriority } from 'services/api/QueueApi';\nimport IconConstants from 'constants/IconConstants';\nimport MenuConstants from 'constants/MenuConstants';\n\nconst PriorityCell: React.FC<\n RowWrapperCellChildProps<API.QueuePriority, API.QueueBundle>\n> = ({ cellData, rowDataGetter, t }) => (\n <PriorityMenu\n itemPrio={cellData!}\n item={rowDataGetter!()}\n prioAction={setBundlePriority}\n t={t!}\n />\n);\n\nclass Queue extends React.Component<WithTranslation> {\n static displayName = 'Queue';\n\n isActive = (cellData: any, rowData: API.QueueBundle) => {\n return !rowData.status.downloaded;\n };\n\n isDownloaded = (cellData: any, rowData: API.QueueBundle) => {\n return rowData.status.downloaded;\n };\n\n isRunning = (cellData: any, rowData: API.QueueBundle) => {\n return rowData.speed > 0;\n };\n\n emptyRowsNodeGetter = () => {\n const { t } = this.queueT;\n return (\n <Message\n title={t('queueEmpty', 'The queue is empty')}\n icon={IconConstants.FILE}\n description={t<string>(\n 'queueEmptyDesc',\n 'New items can be queued from search or filelists'\n )}\n />\n );\n };\n\n queueT = getModuleT(this.props.t, UI.Modules.QUEUE);\n render() {\n const { translate } = this.queueT;\n return (\n <>\n <VirtualTable\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\n store={QueueBundleViewStore}\n footerData={\n <ActionMenu\n className=\"top left pointing\"\n caption={translate('Actions...')}\n actions={QueueActions}\n header={translate('Queue actions')}\n triggerIcon=\"chevron up\"\n button={true}\n />\n }\n moduleId={QueueActions.moduleId}\n >\n <Column\n name=\"Name\"\n width={200}\n flexGrow={4}\n columnKey=\"name\"\n cell={\n <FileActionCell\n actions={QueueBundleActions}\n remoteMenuId={MenuConstants.QUEUE_BUNDLE}\n ids={[\n 'content',\n 'sources',\n 'divider',\n 'search',\n 'searchBundleAlternates',\n 'divider',\n 'removeBundle',\n 'divider',\n 'rescan',\n 'forceShare',\n ]}\n />\n }\n />\n <Column\n name=\"Size\"\n width={60}\n columnKey=\"size\"\n cell={<SizeCell />}\n flexGrow={1}\n />\n <Column\n name=\"Type/content\"\n width={150}\n columnKey=\"type\"\n hideWidth={1000}\n cell={<ActionLinkCell actions={QueueBundleActions} actionId=\"content\" />}\n />\n <Column\n name=\"Status\"\n width={120}\n flexGrow={3}\n columnKey=\"status\"\n cell={<StatusCell />}\n />\n <Column\n name=\"Sources\"\n width={60}\n columnKey=\"sources\"\n renderCondition={this.isActive}\n flexGrow={1}\n cell={<ActionLinkCell actions={QueueBundleActions} actionId=\"sources\" />}\n />\n <Column\n name=\"Time left\"\n width={50}\n columnKey=\"seconds_left\"\n renderCondition={this.isRunning}\n cell={<AbbreviatedDurationCell />}\n />\n <Column\n name=\"Speed\"\n width={50}\n columnKey=\"speed\"\n cell={<SpeedCell />}\n renderCondition={this.isRunning}\n flexGrow={1}\n />\n <Column\n name=\"Priority\"\n width={80}\n columnKey=\"priority\"\n renderCondition={this.isActive}\n cell={<PriorityCell />}\n flexGrow={1}\n />\n <Column\n name=\"Added\"\n width={100}\n columnKey=\"time_added\"\n cell={<DurationCell />}\n hideWidth={1400}\n />\n <Column\n name=\"Finished\"\n width={100}\n columnKey=\"time_finished\"\n cell={<DurationCell />}\n renderCondition={this.isDownloaded}\n hideWidth={1200}\n />\n </VirtualTable>\n <SourceDialog queueT={this.queueT} />\n <BundleFileDialog />\n </>\n );\n }\n}\n\nexport default withTranslation()(Queue);\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","setBundlePriorities","prio","priority","QueueActions","removeCompleted","access","displayName","icon","handler","notifications","onSuccess","divider","pause","resume","moduleId","actions","QueueFileActions","search","data","itemInfo","location","searchFileAlternates","filter","item","time_finished","file","removeFile","confirmation","content","approveCaption","rejectCaption","checkboxCaption","removeFinished","remove_finished","Progress","className","percent","caption","indeterminate","undefined","style","transitionDuration","width","minWidth","propTypes","bundleValidationFailed","bundle","status","itemNotFinished","shareBundle","skipValidation","SocketService","QueueConstants","skip_validation","QueueBundleActions","sources","IconConstants","total","History","pathname","type","SearchActions","searchBundleAlternates","divider2","removeBundle","divider3","rescan","forceShare","PriorityEnum","str","PriorityMenu","Component","setPriority","priorityId","prioAction","t","this","props","setAutoPriority","getPriorityListItem","currentPrio","toString","active","onClick","children","getChildren","onClose","Object","keys","map","Number","prioKey","itemPrio","auto","shouldComponentUpdate","nextProps","render","toLocaleLowerCase","LoginStore","TableDropdown","EmptyDropdown","getStatusClass","cellData","rowData","completed","statusId","grey","speed","blue","rowDataGetter","failed","downloaded_bytes","size","_viewName","_apiUrl","mixins","ViewStoreMixin","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","PriorityCell","BundleFileTable","isActive","downloaded","isRunning","VirtualTable","store","QueueFileViewStore","sourceFilter","pattern","method","property","Column","name","flexGrow","columnKey","cell","remoteMenuId","MenuConstants","renderCondition","BundleFileDialog","other","Modal","title","subHeader","target","closable","FileIcon","typeInfo","fullHeight","ModalRouteDecorator","DataProviderDecorator","urls","match","socket","get","params","bundleId","BundleSourceActions","removeBundleSource","source","user","cid","subId","Source","userIcon","ids","contextElement","QueueBundleSourceActions","itemData","hub_names","last_speed","files","userSort","a","b","nicks","localeCompare","queueT","translate","sort","plainT","onSocketConnected","addSocketListener","refetchData","SourceDialog","Queue","isDownloaded","emptyRowsNodeGetter","Message","description","QueueBundleViewStore","footerData","header","triggerIcon","button","hideWidth","actionId"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[464],{48366:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(87537),i=n.n(s),a=n(23645),r=n.n(a)()(i());r.push([e.id,".fileitem.info.segment .dupe-paths .path {\n overflow-x: hidden;\n}\n\n.fileitem.info.segment .download.ui.dropdown {\n max-width: 150px;\n margin-top: 10px;\n}\n\n.fileitem.info.segment .title.column {\n margin-top: auto;\n margin-bottom: auto;\n}\n\n.fileitem.info.segment .value.column {\n word-break: break-all;\n}\n","",{version:3,sources:["webpack://./src/components/file-item-info/style.css"],names:[],mappings:"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB",sourcesContent:[".fileitem.info.segment .dupe-paths .path {\n overflow-x: hidden;\n}\n\n.fileitem.info.segment .download.ui.dropdown {\n max-width: 150px;\n margin-top: 10px;\n}\n\n.fileitem.info.segment .title.column {\n margin-top: auto;\n margin-bottom: auto;\n}\n\n.fileitem.info.segment .value.column {\n word-break: break-all;\n}\n"],sourceRoot:""}]);const o=r},48931:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(87537),i=n.n(s),a=n(23645),r=n.n(a)()(i());r.push([e.id,".search-container {\n width: 100%;\n height: 50px;\n}\n\n#mobile-layout .search-container {\n margin-top: 10px;\n}\n\n.search-container .search-area {\n width: 90%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n}\n\n.search-container .search-area .options.trigger {\n margin-left: 5px;\n}\n\n.search-container .search-area .options.trigger .button {\n padding-left: 15px;\n padding-right: 5px;\n height: 100%;\n}\n\n.search-container .search-area .ui.input.action {\n flex: 1;\n}\n\n.search-area,\n.search-area .react-autosuggest__container,\n.search-container .search-area .ui.input.action {\n flex: 1;\n}\n\n.search-area,\n.search-area input {\n width: 100%;\n}\n\n.search-area button {\n display: inline-block !important;\n}\n\n.search-layout {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.search-layout .virtual-table {\n height: calc(100% - 50px);\n}\n\n@media only screen and (min-width: 767px) {\n .result.modal td {\n max-width: 250px;\n }\n}\n\n.search-options {\n min-width: 300px;\n}\n\n.search-options .field-hub_urls {\n max-height: 180px;\n overflow-y: auto;\n}\n","",{version:3,sources:["webpack://./src/routes/Search/style.css"],names:[],mappings:"AAAA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;AACf;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,YAAY;AACd;;AAEA;EACE,OAAO;AACT;;AAEA;;;EAGE,OAAO;AACT;;AAEA;;EAEE,WAAW;AACb;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB",sourcesContent:[".search-container {\n width: 100%;\n height: 50px;\n}\n\n#mobile-layout .search-container {\n margin-top: 10px;\n}\n\n.search-container .search-area {\n width: 90%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n}\n\n.search-container .search-area .options.trigger {\n margin-left: 5px;\n}\n\n.search-container .search-area .options.trigger .button {\n padding-left: 15px;\n padding-right: 5px;\n height: 100%;\n}\n\n.search-container .search-area .ui.input.action {\n flex: 1;\n}\n\n.search-area,\n.search-area .react-autosuggest__container,\n.search-container .search-area .ui.input.action {\n flex: 1;\n}\n\n.search-area,\n.search-area input {\n width: 100%;\n}\n\n.search-area button {\n display: inline-block !important;\n}\n\n.search-layout {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.search-layout .virtual-table {\n height: calc(100% - 50px);\n}\n\n@media only screen and (min-width: 767px) {\n .result.modal td {\n max-width: 250px;\n }\n}\n\n.search-options {\n min-width: 300px;\n}\n\n.search-options .field-hub_urls {\n max-height: 180px;\n overflow-y: auto;\n}\n"],sourceRoot:""}]);const o=r},28252:(e,t,n)=>{n.d(t,{Y:()=>w});var s=n(85893),i=(n(67294),n(2445)),a=n(84613),r=n(76249),o=n(32347),l=n(91072),c=n(8717),u=n(93379),d=n.n(u),h=n(7795),p=n.n(h),m=n(90569),g=n.n(m),A=n(3565),x=n.n(A),j=n(19216),f=n.n(j),b=n(44589),y=n.n(b),E=n(48366),v={};v.styleTagTransform=y(),v.setAttributes=x(),v.insert=g().bind(null,"head"),v.domAPI=p(),v.insertStyleElement=f(),d()(E.Z,v),E.Z&&E.Z.locals&&E.Z.locals;var S=n(24101);const C={[r.V9.SHARE_PARTIAL]:"Share (partial)",[r.V9.SHARE_FULL]:"Share (full)",[r.V9.QUEUE_PARTIAL]:"Queue (partial)",[r.V9.QUEUE_FULL]:"Queue (full)",[r.V9.FINISHED_PARTIAL]:"Finished (partial)",[r.V9.FINISHED_FULL]:"Finished (full)",[r.V9.SHARE_QUEUE]:"Share and queue"},O=({paths:e})=>(0,s.jsx)("div",Object.assign({className:"dupe-paths"},{children:e.map((e=>(0,s.jsx)("div",Object.assign({className:"path"},{children:e}),e)))})),w=({session:e,fileItem:t,user:n,downloadHandler:r,showPath:u=!0})=>{const{t:d}=(0,l.$G)(),h=e=>(0,c.Iu)(e,d,o.jv.COMMON);return(0,s.jsxs)("div",Object.assign({className:"ui fileitem info segment"},{children:[(0,s.jsxs)(S.rj,Object.assign({columns:"two",stackable:!0},{children:[(0,s.jsx)(S.X2,{title:h("Name"),text:t.name}),(0,s.jsx)(S.X2,{title:h("Type/content"),text:t.type.str}),(0,s.jsx)(S.X2,{title:h("Size"),text:(0,i.BU)(t.size,d,!0)}),(0,s.jsx)(S.X2,{title:h("Last modified"),text:(0,i.SY)(t.time||0)}),"file"===t.type.id&&(0,s.jsx)(S.X2,{title:h("TTH"),text:t.tth}),!!t.dupe&&(0,s.jsx)(S.X2,{title:h("Dupe type"),text:h(C[t.dupe.id])}),!!t.dupe&&(0,s.jsx)(S.X2,{title:h("Dupe paths"),text:(0,s.jsx)(O,{paths:t.dupe.paths})}),u&&(0,s.jsx)(S.X2,{title:h("Path"),text:t.path})]})),(0,s.jsx)(a.Yk,{caption:h("Actions..."),button:!0,user:n,itemInfoGetter:()=>t,downloadHandler:r,contextElement:".ui.modal > .content",session:e})]}))}},48005:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(85893),i=(n(67294),n(35936)),a=n(55019);const r=e=>{var{hub:t}=e,n=function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]])}return n}(e,["hub"]);return(0,s.jsx)(i.Z,Object.assign({},n,{icon:(0,a.iU)(t.connect_state.id)+" sitemap"}))}},14954:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Je});var s=n(85893),i=n(67294),a=n(38423),r=n(20097),o=n(69767),l=n(93379),c=n.n(l),u=n(7795),d=n.n(u),h=n(90569),p=n.n(h),m=n(3565),g=n.n(m),A=n(19216),x=n.n(A),j=n(44589),f=n.n(j),b=n(48931),y={};y.styleTagTransform=f(),y.setAttributes=g(),y.insert=p().bind(null,"head"),y.domAPI=d(),y.insertStyleElement=x(),c()(b.Z,y),b.Z&&b.Z.locals&&b.Z.locals;var E=n(48117),v=n(45241),S=n(77744),C=n(76249),O=n(32347);const w={result:{displayName:"Result details",icon:E.Z.DETAILS,handler:({data:e,location:t})=>{r.Z.push(`${t.pathname}/result/${e.id}`)}},browseContent:{displayName:"Browse content",access:C.PS.FILELISTS_EDIT,icon:E.Z.FILELIST,handler:({data:e,location:t})=>v.Z.createSession(t,e.users.user,S.Z,e.path)}},_={moduleId:O.jv.SEARCH,actions:w};var Z=n(28427),N=n(20368),I=n(62285),T=n(42090),R=n(91780),B=n(2445),U=n(84613),P=n(90195),k=n(91072),D=n(8717),L=n(4333);const H=({result:e,t})=>(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",Object.assign({className:"user dropdown"},{children:(0,s.jsx)(U.Ie,{userIcon:!0,user:e.user,directory:e.path,ids:P.D,contextElement:".ui.modal > .content",remoteMenuId:L.Z.HINTED_USER})})),(0,s.jsx)("td",Object.assign({className:"hubs"},{children:e.user.hub_names})),(0,s.jsx)("td",Object.assign({className:"connection"},{children:(0,B.Nh)(e.connection,t)})),(0,s.jsx)("td",Object.assign({className:"slots"},{children:e.slots.str})),(0,s.jsx)("td",Object.assign({className:"ip"},{children:(0,s.jsx)(R.Z,{item:e.ip})})),(0,s.jsx)("td",Object.assign({className:"path",title:e.path},{children:e.path}))]}),F=(e,t)=>e.user.nicks.localeCompare(t.user.nicks),G=(0,T.Z)((({results:e})=>{const{t}=(0,k.$G)();return(0,s.jsxs)("div",Object.assign({className:"users"},{children:[(0,s.jsx)("h2",{children:t((0,D.zS)("usersCount",O.jv.SEARCH),{defaultValue:"User ({{count}})",defaultValue_plural:"Users ({{count}})",count:e.length})}),(0,s.jsxs)("table",Object.assign({className:"ui striped table"},{children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:(0,D.Iu)("User",t,O.jv.SEARCH)}),(0,s.jsx)("th",{children:(0,D.Iu)("Hubs",t,O.jv.SEARCH)}),(0,s.jsx)("th",Object.assign({style:{width:"70px"}},{children:(0,D.Iu)("Connection",t,O.jv.SEARCH)})),(0,s.jsx)("th",Object.assign({style:{width:"50px"}},{children:(0,D.Iu)("Slots",t,O.jv.SEARCH)})),(0,s.jsx)("th",{children:(0,D.Iu)("IP",t,O.jv.SEARCH)}),(0,s.jsx)("th",{children:(0,D.Iu)("Path",t,O.jv.SEARCH)})]})}),(0,s.jsx)("tbody",{children:e.sort(F).map((e=>(0,s.jsx)(H,{result:e,t},e.user.cid)))})]}))]}))}),{urls:{results:({parentResult:e,instanceId:t},n)=>n.get(`${a.Z.INSTANCES_URL}/${t}/results/${e.id}/children`)}});var $=n(92245),z=n(28252),Y=n(518);const V=(e,t,n,s)=>Y.Z.post(`${a.Z.MODULE_URL}/${s.id}/results/${e.id}/download`,n);class M extends i.Component{constructor(){super(...arguments),this.itemDataGetter=(e,t)=>{const{instance:n}=this.props;return t.get(`${a.Z.INSTANCES_URL}/${n.id}/results/${e}`)}}render(){const{parentResult:e,instance:t}=this.props;return(0,s.jsxs)(Z.Z,Object.assign({className:"result",title:e.name,closable:!0,icon:(0,s.jsx)(N.Z,{typeInfo:e.type}),fullHeight:!0},this.props,{children:[(0,s.jsx)(I.Z,{downloadHandler:V,itemDataGetter:this.itemDataGetter,session:t}),(0,s.jsx)(z.Y,{fileItem:e,downloadHandler:V,user:e.users.user,showPath:!1,session:t}),(0,s.jsx)(G,{parentResult:e,instanceId:t.id})]}))}}M.displayName="ResultDialog";const W=(0,$.ZP)((0,T.Z)(M,{urls:{parentResult:({match:e,instance:t},n)=>n.get(`${a.Z.INSTANCES_URL}/${t.id}/results/${e.params.resultId}`)}}),"result/:resultId");var K=n(10293),X=n.n(K),q=n(93836);const Q=X().createStore({_viewName:"search_view",_apiUrl:a.Z.INSTANCES_URL,mixins:[(0,q.Z)("relevance",!1)]});var J=n(35108),ee=n(78230),te=n(68126),ne=n(55019),se=n(27695);const ie=({count:e,user:t},n)=>e>1?n((0,D.zS)("xUsersNicks",O.jv.SEARCH),{defaultValue:"{{count}} user ({{user.nicks}})",defaultValue_plural:"{{count}} users ({{user.nicks}})",count:e,replace:{count:e,user:t}}):t.nicks,ae=({cellData:e,rowDataGetter:t,t:n})=>(0,s.jsx)(U.cG,Object.assign({text:ie(e,n),user:e.user,directory:t().path,userIcon:"simple",ids:P.D,remoteMenuId:L.Z.HINTED_USER},{children:(0,s.jsx)(U.B2,{actions:_,itemData:t,ids:["result"]})})),re=e=>(e&&e.users,e.users.user),oe=e=>{var{rowDataGetter:t,instance:n}=e,i=function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]])}return n}(e,["rowDataGetter","instance"]);return(0,s.jsx)(te.iK,Object.assign({userGetter:re,rowDataGetter:t,downloadHandler:V,session:n},i,{children:(0,s.jsx)(U.B2,{actions:_,itemData:t,remoteMenuId:L.Z.GROUPED_SEARCH_RESULT,entityId:n.id})}))};class le extends i.Component{constructor(){super(...arguments),this.rowClassNameGetter=e=>(0,ne.r)(e.dupe),this.emptyRowsNodeGetter=()=>{const{running:e,searchString:t,searchT:n}=this.props;return e?null:!!t&&(0,s.jsx)(se.Z,{title:n.t("noResults",{defaultValue:'No results found for "{{searchString}}"',replace:{searchString:t}}),description:(0,s.jsx)(k.cC,Object.assign({i18nKey:n.toI18nKey("noResultsHint")},{children:(0,s.jsxs)("div",Object.assign({className:"ui bulleted list"},{children:[(0,s.jsx)("div",Object.assign({className:"item"},{children:"Ensure that you spelled the words correctly"})),(0,s.jsx)("div",Object.assign({className:"item"},{children:"Use different keywords"})),(0,s.jsx)("div",Object.assign({className:"item"},{children:"You are searching too frequently (hubs often have a minimum search interval)"})),(0,s.jsx)("div",Object.assign({className:"item"},{children:"If you never receive results for common search terms, make sure that your connectivity settings are configured properly"}))]}))}))})},this.itemDataGetter=(e,t)=>{const{instance:n}=this.props;return t.get(`${a.Z.INSTANCES_URL}/${n.id}/results/${e}`)}}render(){const{searchT:e,instance:t}=this.props;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(ee.Z,Object.assign({emptyRowsNodeGetter:this.emptyRowsNodeGetter,rowClassNameGetter:this.rowClassNameGetter,store:Q,textFilterProps:{autoFocus:!1},entityId:t.id,moduleId:_.moduleId},{children:[(0,s.jsx)(J.Column,{name:"Name",width:200,columnKey:"name",flexGrow:8,cell:(0,s.jsx)(oe,{instance:t})}),(0,s.jsx)(J.Column,{name:"Size",width:60,columnKey:"size",cell:(0,s.jsx)(te.Eh,{}),flexGrow:1}),(0,s.jsx)(J.Column,{name:"Type",width:80,columnKey:"type",flexGrow:1,hideWidth:600}),(0,s.jsx)(J.Column,{name:"Relevance",width:60,columnKey:"relevance",cell:(0,s.jsx)(te.uL,{}),flexGrow:1}),(0,s.jsx)(J.Column,{name:"Connection",width:60,columnKey:"connection",cell:(0,s.jsx)(te.$A,{}),flexGrow:2,hideWidth:600}),(0,s.jsx)(J.Column,{name:"Users",width:120,columnKey:"users",flexGrow:3,cell:(0,s.jsx)(ae,{}),hideWidth:600}),(0,s.jsx)(J.Column,{name:"Last modified",width:80,columnKey:"time",cell:(0,s.jsx)(te.Ks,{}),flexGrow:1,hideWidth:800}),(0,s.jsx)(J.Column,{name:"Slots",width:60,columnKey:"slots",flexGrow:1,hideWidth:800})]})),(0,s.jsx)(I.Z,{downloadHandler:V,itemDataGetter:this.itemDataGetter,session:t}),(0,s.jsx)(W,{searchT:e,instance:t})]})}}le.displayName="ResultTable";const ce=le;var ue=n(15479),de=n(26435),he=n(3629),pe=n(89519);const me=(0,T.Z)((e=>{var{submitHandler:t,historyId:n,history:i,refetchData:a}=e,r=function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]])}return n}(e,["submitHandler","historyId","history","refetchData"]);const{t:o}=(0,k.$G)();return(0,s.jsx)(de.Z,Object.assign({},r,{data:i,submitHandler:e=>{return s=void 0,i=void 0,l=function*(){const s=e.trim();yield(0,pe.h9)((()=>(0,he.V)(n,s)),o),a(),t(s)},new((r=void 0)||(r=Promise))((function(e,t){function n(e){try{o(l.next(e))}catch(e){t(e)}}function a(e){try{o(l.throw(e))}catch(e){t(e)}}function o(t){var s;t.done?e(t.value):(s=t.value,s instanceof r?s:new r((function(e){e(s)}))).then(n,a)}o((l=l.apply(s,i||[])).next())}));var s,i,r,l}}))}),{urls:{history:({historyId:e},t)=>t.get(ue.ZP.STRINGS_URL+"/"+e)},loaderText:null});var ge=n(84807),Ae=n(10606),xe=n(18758),je=n(70516),fe=n(18603),be=n(48005),ye=n(35451),Ee=n(35936);const ve=({locals:e,children:t})=>{const{label:n}=e,i=(0,fe.T7)(e.value);return(0,s.jsxs)(ye.ZP,Object.assign({className:"field",defaultActiveIndexes:i?[0]:void 0},{children:[(0,s.jsxs)(ye.il,{children:[(0,s.jsx)(Ee.Z,{icon:E.Z.DROPDOWN}),(0,s.jsx)("span",Object.assign({style:i?{fontWeight:"bold"}:void 0},{children:n}))]}),(0,s.jsx)(ye.vF,{children:t})]}))},Se=({hubs:e,value:t,onChange:n})=>{const i=e.filter((e=>e.connect_state.id===C.XF.CONNECTED)),a=t&&t.length?t:i.map((e=>e.hub_url)),r=()=>{if(1===a.length)return!1};return(0,s.jsx)(s.Fragment,{children:i.map((e=>(0,s.jsx)("div",Object.assign({className:"field"},{children:(0,s.jsx)(je.Z,{caption:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(be.Z,{hub:e}),e.identity.name]}),beforeUnchecked:r,checked:a.includes(e.hub_url),onChange:t=>{const s=(0,fe.Nl)(a,e.hub_url,t);n(s.length===i.length?null:s)},style:{maxWidth:"300px"}})}),e.id)))})},Ce={renderSelect:e=>(0,s.jsx)(ve,Object.assign({locals:e},{children:(0,s.jsx)(Se,{onChange:e.onChange,value:e.value,hubs:e.options})})),renderLabel:e=>null},Oe=xe.ZP.form.Form.templates.select.clone(Ce),we=e=>{const{value:t,unitIndex:n}=(0,B.n2)(e,B.U5,1024);return{value:t,unitIndex:e?n:2}},_e=({inputProps:e,moduleT:t,onChange:n,value:a})=>{const r=we(a),[o,l]=(0,i.useState)(r.value),[c,u]=(0,i.useState)(r.unitIndex),d=()=>{let e=o||0;if(c)for(let t=1;t<=c;t++)e*=1024;return e};return(0,i.useEffect)((()=>{const e=d();e!==a&&n(e)}),[c,o]),(0,i.useEffect)((()=>{const e=d();if(a!==e){const e=we(a);l(e.value),u(e.unitIndex)}}),[a]),(0,s.jsxs)("div",Object.assign({style:{display:"flex"}},{children:[(0,s.jsx)("input",Object.assign({className:"ui input",type:"number"},e,{min:0,value:o||"",onChange:e=>{const t=e.target.value?parseInt(e.target.value):null;l(t||void 0)}})),(0,s.jsx)("select",Object.assign({className:"ui select",style:{maxWidth:"100px"},value:B.U5[c],onChange:e=>{u(e.target.selectedIndex)}},{children:B.U5.map(((e,n)=>(0,s.jsx)("option",Object.assign({value:e},{children:(0,B.Ac)(e,t.plainT)}),e)))}))]}))},Ze={renderInput:e=>(0,s.jsx)(_e,{onChange:e.onChange,value:e.value?parseInt(e.value):0,moduleT:e.context.formT})},Ne=xe.ZP.form.Form.templates.textbox.clone(Ze);var Ie=n(68662),Te=n(98374);const Re=({type:e,size:t="large"})=>{return e.id?(0,s.jsx)(N.Z,{typeInfo:(n=e,"directory"===n.id?{id:"directory",str:"",files:0,directories:0}:{id:"file",str:"",content_type:n.id}),size:t}):(0,s.jsx)(Ee.Z,{icon:E.Z.ANY,size:t});var n},Be=(e,t,n)=>(0,s.jsx)(Te.Z,Object.assign({onClick:()=>t(e.id),icon:(0,s.jsx)(Re,{type:e}),active:n.id===e.id},{children:e.str}),e.id||a.Z.DEFAULT_SEARCH_TYPE),Ue=(0,T.Z)((({searchTypes:e,value:t,onChange:n,moduleT:i})=>{const a=(e=>[{id:null,str:e.translate("Any")},{id:"directory",str:e.translate("Directory")},{id:"file",str:e.translate("File")}])(i),r=e.find((e=>t===e.id))||a.find((e=>t===e.id))||a[0];return(0,s.jsxs)(Ie.Z,Object.assign({selection:!0,caption:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(Re,{type:r,size:""}),r.str]})},{children:[a.map((e=>Be(e,n,r))),(0,s.jsx)("div",{className:"ui divider"},"divider"),e.map((e=>Be(e,n,r)))]}))}),{urls:{searchTypes:a.Z.SEARCH_TYPES_URL}}),Pe={renderSelect:e=>(0,s.jsx)(Ue,{onChange:e.onChange,value:e.value||null,moduleT:e.context.formT})},ke=xe.ZP.form.Form.templates.select.clone(Pe);var De=n(43496);const Le={renderFieldset(e,t){const{label:n}=t,i=function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]])}return n}(t,["label"]);return(0,s.jsx)(ve,Object.assign({locals:t},{children:xe.ZP.form.Form.templates.struct.renderFieldset(e,i)}))},renderLabel:e=>null},He=xe.ZP.form.Form.templates.struct.clone(Le),Fe=[{key:"file_type",title:"File type",type:C.Y2.STRING,optional:!0},{key:"hub_urls",title:"Hubs",type:C.Y2.LIST,item_type:C.Y2.STRING},{key:"size_limits",title:"Size limits",type:C.Y2.STRUCT,optional:!0,definitions:[{key:"min_size",title:"Minimum size",type:C.Y2.NUMBER,optional:!0},{key:"max_size",title:"Maximum size",type:C.Y2.NUMBER,optional:!0}]}];class Ge extends i.PureComponent{constructor(e){super(e),this.onFieldChanged=(e,t,n)=>{const s=(i=t,Object.keys(i).reduce(((e,t)=>{const n=i[t];return(0,fe.T7)(n)&&(e[t]=n),e}),{}));var i;return this.props.onChange(Object.keys(s).length?s:null),null},this.save=()=>this.form.save(),this.onSave=e=>Promise.resolve(),this.onFieldSetting=(e,t,n)=>{"hub_urls"===e?Object.assign(t,{factory:xe.ZP.form.Select,template:Oe,options:this.props.hubs}):"min_size"===e||"max_size"===e?Object.assign(t,{template:Ne}):"excluded"===e?Object.assign(t,{disableOrder:!0}):"file_type"===e?Object.assign(t,{template:ke}):"size_limits"===e&&Object.assign(t,{template:He})},this.definitions=(0,fe.rv)(Fe,e.moduleT)}render(){const{value:e,onChange:t,location:n,moduleT:i}=this.props;return(0,s.jsxs)("div",{children:[(0,s.jsx)(De.Z,{ref:e=>this.form=e,onFieldChanged:this.onFieldChanged,onFieldSetting:this.onFieldSetting,onSave:this.onSave,fieldDefinitions:this.definitions,sourceValue:e,location:n,optionTitleFormatter:e=>e.title,className:"search-options"}),(0,s.jsx)(ge.Z,{caption:i.translate("Reset all"),onClick:()=>t(null),disabled:!e,style:{marginTop:"10px"}})]})}}Ge.displayName="SearchOptionForm";var $e=n(27835),ze=n(21222);const Ye=(0,T.Z)((({moduleT:e,location:t,onChange:n,value:a,hubs:r})=>{const o=e=>{if(e){const t=(e=>Object.keys(e).reduce(((t,n)=>((Array.isArray(e[n])?e[n].length:e[n])&&(t[n]=e[n]),t)),{}))(e);n(Object.keys(t).length?t:null)}else n(null)};(0,i.useEffect)((()=>{if(a&&a.hub_urls&&a.hub_urls.length){const e=a.hub_urls,t=e.filter((e=>r.find((t=>t.hub_url===e))));t.length!==e.length&&o(Object.assign(Object.assign({},a),{hub_urls:t.length?t:null}))}}),[r]);const l=a?Object.keys(a).filter((e=>{const t=a[e];return(0,fe.T7)(t)})).length:null;return(0,s.jsx)($e.Z,Object.assign({triggerClassName:"options",className:"options",trigger:(0,s.jsx)(ge.Z,{caption:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(Ee.Z,{icon:E.Z.OPTIONS}),!!l&&(0,s.jsx)("span",Object.assign({style:{fontWeight:"bold",marginRight:"3px",color:"black"}},{children:`(${l})`})),(0,s.jsx)(Ee.Z,{icon:E.Z.EXPAND})]})}),contentUpdateTrigger:a},{children:n=>(0,s.jsx)(Ge,{moduleT:e,location:t,onChange:o,value:a,hubs:r})}))}),{urls:{hubs:ze.Z.SESSIONS_URL},onSocketConnected:(e,{refetchData:t})=>{e(ze.Z.MODULE_URL,ze.Z.SESSION_CREATED,(()=>t())),e(ze.Z.MODULE_URL,ze.Z.SESSION_UPDATED,(e=>{e.connect_state&&t()})),e(ze.Z.MODULE_URL,ze.Z.SESSION_REMOVED,(()=>t()))},dataConverters:{hubs:e=>e.filter((e=>e.connect_state.id===C.XF.CONNECTED))}}),Ve=({moduleT:e,defaultValue:t,running:n,handleSubmit:a,location:r,defaultOptions:o})=>{const[l,c]=(0,i.useState)(o),u=(0,Ae.wd)();return(0,s.jsx)("div",Object.assign({className:"search-container"},{children:(0,s.jsxs)("div",Object.assign({className:"search-area"},{children:[(0,s.jsx)(me,{historyId:ue.n0.SEARCH,submitHandler:e=>a(e,l||void 0),disabled:n,defaultValue:t,placeholder:e.translate("Enter search string..."),button:(0,s.jsx)(ge.Z,{className:"blue",icon:E.Z.SEARCH,caption:u?void 0:e.translate("Search"),loading:n})}),(0,s.jsx)(Ye,{moduleT:e,location:r,onChange:c,value:l})]}))}))};var Me=n(57136),We=n(66883),Ke=function(e,t,n,s){return new(n||(n=Promise))((function(i,a){function r(e){try{l(s.next(e))}catch(e){a(e)}}function o(e){try{l(s.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,o)}l((s=s.apply(e,t||[])).next())}))};const Xe="search_hubs";class qe extends i.Component{constructor(){super(...arguments),this.state={searchString:"",running:!1},this.checkLocationState=e=>{const{state:t}=e.location;t&&t.searchString&&t.searchString!==this.state.searchString&&(this.search(t.searchString),r.Z.replace({pathname:e.location.pathname}))},this.search=(e,t)=>Ke(this,void 0,void 0,(function*(){var n;console.log("Searching"),clearTimeout(this.searchTimeout),(n=(null==t?void 0:t.hub_urls)||null)&&n.length?(0,Ae.nG)(Xe,n):(0,Ae.BS)(Xe);const s=t||{},{hub_urls:i,size_limits:r}=s,o=function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]])}return n}(s,["hub_urls","size_limits"]);try{const t=yield(l=this.props.instance,c={query:Object.assign(Object.assign({pattern:e},r),o),priority:C.Gu.HIGH,hub_urls:i},Y.Z.post(`${a.Z.INSTANCES_URL}/${l.id}/hub_search`,c));this.onSearchPosted(t),this.setState({searchString:e,running:!0})}catch(e){Me.Z.apiError("Search failed",e)}var l,c})),this.onSearchPosted=e=>{this.searchTimeout=window.setTimeout((()=>{this.setState({running:!1})}),e.queue_time+4e3)},this.parseOptions=()=>{const{query:e}=this.props.instance;return e?{excluded:e.excluded,size_limits:{min_size:e.min_size,max_size:e.max_size},file_type:e.file_type===a.Z.DEFAULT_SEARCH_TYPE||"tth"===e.file_type?null:e.file_type,hub_urls:(0,Ae.TG)(Xe,null)}:null},this.searchT=(0,D.HY)(this.props.t,O.jv.SEARCH)}componentDidMount(){this.checkLocationState(this.props);const{query:e}=this.props.instance;e&&this.setState({searchString:e.pattern})}componentDidUpdate(e){this.checkLocationState(this.props)}render(){const{instance:e,location:t}=this.props,{searchString:n,running:i}=this.state,{t:a}=this.searchT;return(0,s.jsx)(o.Z,Object.assign({offlineMessage:a("searchOffline","You must to be connected to at least one hub in order to perform searches")},{children:(0,s.jsxs)("div",Object.assign({className:"search-layout"},{children:[(0,s.jsx)(Ve,{moduleT:this.searchT,running:i,defaultValue:n,handleSubmit:this.search,location:t,defaultOptions:this.parseOptions()}),(0,s.jsx)(ce,{searchString:n,running:i,searchT:this.searchT,instance:e})]}))}))}}const Qe="webui",Je=(0,T.Z)(qe,{urls:{instance:(e,t)=>Ke(void 0,void 0,void 0,(function*(){const e=(yield t.get(`${a.Z.INSTANCES_URL}`)).find((e=>e.owner===`session:${We.Z.sessionId}:${Qe}`));if(e)return e;const n=(yield t.post(a.Z.INSTANCES_URL,{owner_suffix:Qe,expiration:0})).id;return t.get(`${a.Z.INSTANCES_URL}/${n}`)}))}})}}]);
|
|
2
|
-
//# sourceMappingURL=search.62d97eef6ffbc4438ca7.chunk.js.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/search.62d97eef6ffbc4438ca7.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/components/file-item-info/style.css","webpack://airdcpp-webui/./src/routes/Search/style.css","webpack://airdcpp-webui/./src/components/file-item-info/style.css?a322","webpack://airdcpp-webui/./src/components/file-item-info/FileItemInfoGrid.tsx","webpack://airdcpp-webui/./src/components/icon/HubIcon.tsx","webpack://airdcpp-webui/./src/routes/Search/style.css?d43b","webpack://airdcpp-webui/./src/actions/ui/SearchActions.ts","webpack://airdcpp-webui/./src/routes/Search/components/result-dialog/UserResultTable.tsx","webpack://airdcpp-webui/./src/services/api/SearchApi.ts","webpack://airdcpp-webui/./src/routes/Search/components/result-dialog/ResultDialog.tsx","webpack://airdcpp-webui/./src/stores/SearchViewStore.js","webpack://airdcpp-webui/./src/routes/Search/components/ResultTable.tsx","webpack://airdcpp-webui/./src/components/autosuggest/HistoryInput.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/AccordionField.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/HubSelectField.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/SizeField.tsx","webpack://airdcpp-webui/./src/components/icon/SearchTypeIcon.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/FileTypeField.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/AccordionStructField.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/SearchOptionsForm.tsx","webpack://airdcpp-webui/./src/routes/Search/components/options-panel/SearchOptionsButton.tsx","webpack://airdcpp-webui/./src/routes/Search/components/SearchInput.tsx","webpack://airdcpp-webui/./src/routes/Search/components/Search.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".fileitem.info.segment .dupe-paths .path {\\n overflow-x: hidden;\\n}\\n\\n.fileitem.info.segment .download.ui.dropdown {\\n max-width: 150px;\\n margin-top: 10px;\\n}\\n\\n.fileitem.info.segment .title.column {\\n margin-top: auto;\\n margin-bottom: auto;\\n}\\n\\n.fileitem.info.segment .value.column {\\n word-break: break-all;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/file-item-info/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\".fileitem.info.segment .dupe-paths .path {\\n overflow-x: hidden;\\n}\\n\\n.fileitem.info.segment .download.ui.dropdown {\\n max-width: 150px;\\n margin-top: 10px;\\n}\\n\\n.fileitem.info.segment .title.column {\\n margin-top: auto;\\n margin-bottom: auto;\\n}\\n\\n.fileitem.info.segment .value.column {\\n word-break: break-all;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".search-container {\\n width: 100%;\\n height: 50px;\\n}\\n\\n#mobile-layout .search-container {\\n margin-top: 10px;\\n}\\n\\n.search-container .search-area {\\n width: 90%;\\n max-width: 600px;\\n margin-left: auto;\\n margin-right: auto;\\n display: flex;\\n}\\n\\n.search-container .search-area .options.trigger {\\n margin-left: 5px;\\n}\\n\\n.search-container .search-area .options.trigger .button {\\n padding-left: 15px;\\n padding-right: 5px;\\n height: 100%;\\n}\\n\\n.search-container .search-area .ui.input.action {\\n flex: 1;\\n}\\n\\n.search-area,\\n.search-area .react-autosuggest__container,\\n.search-container .search-area .ui.input.action {\\n flex: 1;\\n}\\n\\n.search-area,\\n.search-area input {\\n width: 100%;\\n}\\n\\n.search-area button {\\n display: inline-block !important;\\n}\\n\\n.search-layout {\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n}\\n\\n.search-layout .virtual-table {\\n height: calc(100% - 50px);\\n}\\n\\n@media only screen and (min-width: 767px) {\\n .result.modal td {\\n max-width: 250px;\\n }\\n}\\n\\n.search-options {\\n min-width: 300px;\\n}\\n\\n.search-options .field-hub_urls {\\n max-height: 180px;\\n overflow-y: auto;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Search/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;AACf;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,YAAY;AACd;;AAEA;EACE,OAAO;AACT;;AAEA;;;EAGE,OAAO;AACT;;AAEA;;EAEE,WAAW;AACb;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB\",\"sourcesContent\":[\".search-container {\\n width: 100%;\\n height: 50px;\\n}\\n\\n#mobile-layout .search-container {\\n margin-top: 10px;\\n}\\n\\n.search-container .search-area {\\n width: 90%;\\n max-width: 600px;\\n margin-left: auto;\\n margin-right: auto;\\n display: flex;\\n}\\n\\n.search-container .search-area .options.trigger {\\n margin-left: 5px;\\n}\\n\\n.search-container .search-area .options.trigger .button {\\n padding-left: 15px;\\n padding-right: 5px;\\n height: 100%;\\n}\\n\\n.search-container .search-area .ui.input.action {\\n flex: 1;\\n}\\n\\n.search-area,\\n.search-area .react-autosuggest__container,\\n.search-container .search-area .ui.input.action {\\n flex: 1;\\n}\\n\\n.search-area,\\n.search-area input {\\n width: 100%;\\n}\\n\\n.search-area button {\\n display: inline-block !important;\\n}\\n\\n.search-layout {\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n}\\n\\n.search-layout .virtual-table {\\n height: calc(100% - 50px);\\n}\\n\\n@media only screen and (min-width: 767px) {\\n .result.modal td {\\n max-width: 250px;\\n }\\n}\\n\\n.search-options {\\n min-width: 300px;\\n}\\n\\n.search-options .field-hub_urls {\\n max-height: 180px;\\n overflow-y: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\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';\n\nimport { formatRelativeTime, formatSize } from 'utils/ValueFormat';\n\nimport { DownloadMenu } from 'components/action-menu';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { useTranslation } from 'react-i18next';\nimport { translate } from 'utils/TranslationUtils';\n\nimport './style.css';\nimport { Row, Grid } from 'components/semantic/Grid';\n\nconst DupeStrings = {\n //[API.DupeEnum.NONE]: 'None',\n [API.DupeEnum.SHARE_PARTIAL]: 'Share (partial)',\n [API.DupeEnum.SHARE_FULL]: 'Share (full)',\n [API.DupeEnum.QUEUE_PARTIAL]: 'Queue (partial)',\n [API.DupeEnum.QUEUE_FULL]: 'Queue (full)',\n [API.DupeEnum.FINISHED_PARTIAL]: 'Finished (partial)',\n [API.DupeEnum.FINISHED_FULL]: 'Finished (full)',\n [API.DupeEnum.SHARE_QUEUE]: 'Share and queue',\n};\n\nconst DupePaths: React.FC<{ paths: string[] }> = ({ paths }) => (\n <div className=\"dupe-paths\">\n {paths.map((path) => (\n <div key={path} className=\"path\">\n {path}\n </div>\n ))}\n </div>\n);\n\ninterface FileItemInfoGridProps {\n fileItem: UI.DownloadableItemInfo;\n user: API.HintedUser;\n downloadHandler: UI.DownloadHandler<UI.DownloadableItemInfo>;\n showPath?: boolean;\n session: UI.SessionItemBase;\n}\n\nconst FileItemInfoGrid: React.FC<FileItemInfoGridProps> = ({\n session,\n fileItem,\n user,\n downloadHandler,\n showPath = true,\n}) => {\n const { t } = useTranslation();\n const gridT = (text: string) => {\n return translate(text, t, UI.Modules.COMMON);\n };\n\n return (\n <div className=\"ui fileitem info segment\">\n <Grid columns=\"two\" stackable={true}>\n <Row title={gridT('Name')} text={fileItem.name} />\n <Row title={gridT('Type/content')} text={fileItem.type.str} />\n <Row title={gridT('Size')} text={formatSize(fileItem.size, t, true)} />\n <Row\n title={gridT('Last modified')}\n text={formatRelativeTime(fileItem.time || 0)}\n />\n {fileItem.type.id === 'file' && <Row title={gridT('TTH')} text={fileItem.tth} />}\n {!!fileItem.dupe && (\n <Row title={gridT('Dupe type')} text={gridT(DupeStrings[fileItem.dupe.id])} />\n )}\n {!!fileItem.dupe && (\n <Row\n title={gridT('Dupe paths')}\n text={<DupePaths paths={fileItem.dupe.paths} />}\n />\n )}\n {showPath && <Row title={gridT('Path')} text={fileItem.path} />}\n </Grid>\n\n <DownloadMenu\n caption={gridT('Actions...')}\n button={true}\n user={user}\n itemInfoGetter={() => fileItem}\n downloadHandler={downloadHandler}\n contextElement=\".ui.modal > .content\"\n session={session}\n />\n </div>\n );\n};\n\nexport { FileItemInfoGrid };\n","//import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport Icon, { IconProps } from 'components/semantic/Icon';\nimport { hubOnlineStatusToColor } from 'utils/TypeConvert';\n\nimport * as API from 'types/api';\n\ninterface HubIconProps extends IconProps {\n hub: API.Hub;\n}\n\nconst HubIcon: React.FC<HubIconProps> = ({ hub, ...other }) => (\n <Icon {...other} icon={hubOnlineStatusToColor(hub.connect_state.id) + ' sitemap'} />\n);\n\n/*HubIcon.propTypes = {\n // Hub object\n hub: PropTypes.object.isRequired,\n};*/\n\nexport default HubIcon;\n","\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 History from 'utils/History';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport FilelistSessionActions from 'actions/reflux/FilelistSessionActions';\nimport FilelistSessionStore from 'stores/FilelistSessionStore';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst handleBrowseContent: UI.ActionHandler<API.GroupedSearchResult> = ({\n data,\n location,\n}) => {\n return FilelistSessionActions.createSession(\n location,\n data.users.user,\n FilelistSessionStore,\n data.path\n );\n};\n\nconst handleResult: UI.ActionHandler<API.GroupedSearchResult> = ({ data, location }) => {\n History.push(`${location.pathname}/result/${data.id}`);\n};\n\nconst SearchActions: UI.ActionListType<API.GroupedSearchResult> = {\n result: {\n displayName: 'Result details',\n icon: IconConstants.DETAILS,\n handler: handleResult,\n },\n browseContent: {\n displayName: 'Browse content',\n access: API.AccessEnum.FILELISTS_EDIT,\n icon: IconConstants.FILELIST,\n handler: handleBrowseContent,\n },\n};\n\nexport default {\n moduleId: UI.Modules.SEARCH,\n actions: SearchActions,\n};\n","import * as React from 'react';\n\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport FormattedIp from 'components/format/FormattedIp';\nimport { formatConnection } from 'utils/ValueFormat';\n\nimport SearchConstants from 'constants/SearchConstants';\n\nimport { UserMenu } from 'components/action-menu';\nimport { UserFileActions } from 'actions/ui/UserActions';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { useTranslation } from 'react-i18next';\nimport { translate, toI18nKey } from 'utils/TranslationUtils';\nimport MenuConstants from 'constants/MenuConstants';\n\ninterface UserResultProps {\n result: API.ChildSearchResult;\n t: UI.TranslateF;\n}\n\nconst UserResult: React.FC<UserResultProps> = ({ result, t }) => (\n <tr>\n <td className=\"user dropdown\">\n <UserMenu\n userIcon={true}\n user={result.user}\n directory={result.path}\n ids={UserFileActions}\n contextElement=\".ui.modal > .content\"\n remoteMenuId={MenuConstants.HINTED_USER}\n />\n </td>\n <td className=\"hubs\">{result.user.hub_names}</td>\n <td className=\"connection\">{formatConnection(result.connection, t)}</td>\n <td className=\"slots\">{result.slots.str}</td>\n <td className=\"ip\">\n <FormattedIp item={result.ip} />\n </td>\n <td className=\"path\" title={result.path}>\n {result.path}\n </td>\n </tr>\n);\n\nconst resultSort = (a: API.ChildSearchResult, b: API.ChildSearchResult) =>\n a.user.nicks.localeCompare(b.user.nicks);\n\ninterface UserResultTableProps {\n parentResult: API.GroupedSearchResult;\n instanceId: number;\n}\n\ninterface UserResultTableDataProps extends DataProviderDecoratorChildProps {\n results: API.ChildSearchResult[];\n}\n\nconst UserResultTable: React.FC<UserResultTableProps & UserResultTableDataProps> = ({\n results,\n}) => {\n const { t } = useTranslation();\n return (\n <div className=\"users\">\n <h2>\n {t(toI18nKey('usersCount', UI.Modules.SEARCH), {\n defaultValue: 'User ({{count}})',\n defaultValue_plural: 'Users ({{count}})',\n count: results.length,\n })}\n </h2>\n <table className=\"ui striped table\">\n <thead>\n <tr>\n <th>{translate('User', t, UI.Modules.SEARCH)}</th>\n <th>{translate('Hubs', t, UI.Modules.SEARCH)}</th>\n <th style={{ width: '70px' }}>\n {translate('Connection', t, UI.Modules.SEARCH)}\n </th>\n <th style={{ width: '50px' }}>{translate('Slots', t, UI.Modules.SEARCH)}</th>\n <th>{translate('IP', t, UI.Modules.SEARCH)}</th>\n <th>{translate('Path', t, UI.Modules.SEARCH)}</th>\n </tr>\n </thead>\n <tbody>\n {results.sort(resultSort).map((result) => (\n <UserResult key={result.user.cid} result={result} t={t} />\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default DataProviderDecorator<UserResultTableProps, UserResultTableDataProps>(\n UserResultTable,\n {\n urls: {\n results: ({ parentResult, instanceId }, socket) =>\n socket.get(\n `${SearchConstants.INSTANCES_URL}/${instanceId}/results/${parentResult.id}/children`\n ),\n },\n }\n);\n","import SearchConstants from 'constants/SearchConstants';\nimport SocketService from 'services/SocketService';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nexport const searchDownloadHandler: UI.DownloadHandler<API.GroupedSearchResult> = (\n itemInfo,\n user,\n downloadData,\n instance\n) => {\n return SocketService.post(\n `${SearchConstants.MODULE_URL}/${instance!.id}/results/${itemInfo.id}/download`,\n downloadData\n );\n};\n\ninterface SearchData {\n query: Pick<API.SearchQuery, 'pattern'> & Partial<Omit<API.SearchQuery, 'pattern'>>;\n hub_urls: string[] | undefined | null;\n priority: API.PriorityEnum;\n}\n\nexport const search = (instance: API.SearchInstance, data: SearchData) => {\n return SocketService.post<API.SearchResponse>(\n `${SearchConstants.INSTANCES_URL}/${instance.id}/hub_search`,\n data\n );\n};\n","import { Component } from 'react';\nimport Modal from 'components/semantic/Modal';\n\nimport FileIcon from 'components/icon/FileIcon';\n\nimport DownloadDialog from 'components/download/DownloadDialog';\n\nimport UserResultTable from './UserResultTable';\n\nimport ModalRouteDecorator, {\n ModalRouteDecoratorChildProps,\n} from 'decorators/ModalRouteDecorator';\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport SearchConstants from 'constants/SearchConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { FileItemInfoGrid } from 'components/file-item-info';\nimport { searchDownloadHandler } from 'services/api/SearchApi';\n\ninterface ResultDialogProps {\n searchT: UI.ModuleTranslator;\n instance: API.SearchInstance;\n}\n\ninterface DataProps extends DataProviderDecoratorChildProps {\n parentResult: API.GroupedSearchResult;\n}\n\ninterface RouteProps {\n resultId: string;\n}\n\ntype Props = ResultDialogProps & ModalRouteDecoratorChildProps<RouteProps>;\n\nclass ResultDialog extends Component<Props & DataProps> {\n static displayName = 'ResultDialog';\n\n itemDataGetter: UI.DownloadItemDataGetter<API.GroupedSearchResult> = (\n itemId,\n socket\n ) => {\n const { instance } = this.props;\n return socket.get(\n `${SearchConstants.INSTANCES_URL}/${instance.id}/results/${itemId}`\n );\n };\n\n render() {\n const { parentResult, instance } = this.props;\n return (\n <Modal\n className=\"result\"\n title={parentResult.name}\n closable={true}\n icon={<FileIcon typeInfo={parentResult.type} />}\n fullHeight={true}\n {...this.props}\n >\n <DownloadDialog\n downloadHandler={searchDownloadHandler}\n itemDataGetter={this.itemDataGetter}\n session={instance}\n />\n <FileItemInfoGrid\n fileItem={parentResult}\n downloadHandler={searchDownloadHandler}\n user={parentResult.users.user}\n showPath={false}\n session={instance}\n />\n <UserResultTable parentResult={parentResult} instanceId={instance.id} />\n </Modal>\n );\n }\n}\n\nconst Decorated = ModalRouteDecorator<ResultDialogProps, RouteProps>(\n DataProviderDecorator<Props, DataProps>(ResultDialog, {\n urls: {\n parentResult: ({ match, instance }, socket) =>\n socket.get(\n `${SearchConstants.INSTANCES_URL}/${instance.id}/results/${match.params.resultId}`\n ),\n },\n }),\n 'result/:resultId'\n);\n\nexport { Decorated as ResultDialog };\n","import Reflux from 'reflux';\n\nimport SearchConstants from 'constants/SearchConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'search_view',\n _apiUrl: SearchConstants.INSTANCES_URL,\n mixins: [ViewStoreMixin('relevance', false)],\n});\n","import * as React from 'react';\n\nimport SearchActions from 'actions/ui/SearchActions';\n\nimport { ResultDialog } from './result-dialog';\n\nimport SearchViewStore from 'stores/SearchViewStore';\n\nimport { Column } from 'fixed-data-table-2';\nimport VirtualTable from 'components/table/VirtualTable';\nimport {\n SizeCell,\n DurationCell,\n ConnectionCell,\n FileDownloadCell,\n DecimalCell,\n} from 'components/table/Cell';\nimport { TableActionMenu, TableUserMenu } from 'components/action-menu';\n\nimport { dupeToStringType } from 'utils/TypeConvert';\nimport { UserFileActions } from 'actions/ui/UserActions';\nimport Message from 'components/semantic/Message';\n\nimport DownloadDialog from 'components/download/DownloadDialog';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { Trans } from 'react-i18next';\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport { searchDownloadHandler } from 'services/api/SearchApi';\nimport IconConstants from 'constants/IconConstants';\nimport MenuConstants from 'constants/MenuConstants';\nimport SearchConstants from 'constants/SearchConstants';\n\nconst getUserCaption = ({ count, user }: API.SearchResultUserInfo, t: UI.TranslateF) => {\n if (count > 1) {\n return t(toI18nKey('xUsersNicks', UI.Modules.SEARCH), {\n defaultValue: `{{count}} user ({{user.nicks}})`,\n defaultValue_plural: `{{count}} users ({{user.nicks}})`,\n count,\n replace: {\n count,\n user,\n },\n });\n }\n\n return user.nicks;\n};\n\nconst UserCell: React.FC<\n RowWrapperCellChildProps<API.SearchResultUserInfo, API.GroupedSearchResult>\n> = ({ cellData, rowDataGetter, t }) => (\n <TableUserMenu\n text={getUserCaption(cellData!, t!)}\n user={cellData!.user}\n directory={rowDataGetter!().path}\n userIcon=\"simple\"\n ids={UserFileActions}\n remoteMenuId={MenuConstants.HINTED_USER}\n >\n <TableActionMenu actions={SearchActions} itemData={rowDataGetter} ids={['result']} />\n </TableUserMenu>\n);\n\nconst resultUserGetter = (rowData: API.GroupedSearchResult) => {\n if (!rowData || !rowData.users) {\n return rowData.users.user;\n }\n\n return rowData.users.user;\n};\n\ninterface NameCellProps\n extends RowWrapperCellChildProps<string, API.GroupedSearchResult> {\n instance: API.SearchInstance;\n}\n\nconst NameCell: React.FC<NameCellProps> = ({ rowDataGetter, instance, ...props }) => (\n <FileDownloadCell\n userGetter={resultUserGetter}\n rowDataGetter={rowDataGetter}\n downloadHandler={searchDownloadHandler}\n session={instance}\n {...props}\n >\n <TableActionMenu\n actions={SearchActions}\n itemData={rowDataGetter}\n remoteMenuId={MenuConstants.GROUPED_SEARCH_RESULT}\n entityId={instance.id}\n />\n </FileDownloadCell>\n);\n\nexport interface ResultTableProps {\n running: boolean;\n searchString: string;\n searchT: UI.ModuleTranslator;\n instance: API.SearchInstance;\n}\n\nclass ResultTable extends React.Component<ResultTableProps> {\n static displayName = 'ResultTable';\n\n rowClassNameGetter = (rowData: API.GroupedSearchResult) => {\n return dupeToStringType(rowData.dupe);\n };\n\n emptyRowsNodeGetter = () => {\n const { running, searchString, searchT } = this.props;\n if (running) {\n return null;\n }\n\n if (!searchString) {\n return (\n process.env.DEMO_MODE === '1' && (\n <Message\n title=\"Demo content available\"\n icon={IconConstants.TIP}\n description={\n 'Use the search string \"demo\" to receive results from the demo share'\n }\n />\n )\n );\n }\n\n return (\n <Message\n title={searchT.t('noResults', {\n defaultValue: `No results found for \"{{searchString}}\"`,\n replace: {\n searchString,\n },\n })}\n description={\n <Trans i18nKey={searchT.toI18nKey('noResultsHint')}>\n <div className=\"ui bulleted list\">\n <div className=\"item\">Ensure that you spelled the words correctly</div>\n <div className=\"item\">Use different keywords</div>\n <div className=\"item\">\n You are searching too frequently (hubs often have a minimum search\n interval)\n </div>\n <div className=\"item\">\n If you never receive results for common search terms, make sure that your\n connectivity settings are configured properly\n </div>\n </div>\n </Trans>\n }\n />\n );\n };\n\n itemDataGetter: UI.DownloadItemDataGetter<API.GroupedSearchResult> = (\n itemId,\n socket\n ) => {\n const { instance } = this.props;\n return socket.get(\n `${SearchConstants.INSTANCES_URL}/${instance.id}/results/${itemId}`\n );\n };\n\n render() {\n const { searchT, instance } = this.props;\n return (\n <>\n <VirtualTable\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\n rowClassNameGetter={this.rowClassNameGetter}\n store={SearchViewStore}\n textFilterProps={{\n autoFocus: false,\n }}\n entityId={instance.id}\n moduleId={SearchActions.moduleId}\n >\n <Column\n name=\"Name\"\n width={200}\n columnKey=\"name\"\n flexGrow={8}\n cell={<NameCell instance={instance} />}\n />\n <Column\n name=\"Size\"\n width={60}\n columnKey=\"size\"\n cell={<SizeCell />}\n flexGrow={1}\n />\n <Column name=\"Type\" width={80} columnKey=\"type\" flexGrow={1} hideWidth={600} />\n <Column\n name=\"Relevance\"\n width={60}\n columnKey=\"relevance\"\n cell={<DecimalCell />}\n flexGrow={1}\n />\n <Column\n name=\"Connection\"\n width={60}\n columnKey=\"connection\"\n cell={<ConnectionCell />}\n flexGrow={2}\n hideWidth={600}\n />\n <Column\n name=\"Users\"\n width={120}\n columnKey=\"users\"\n flexGrow={3}\n cell={<UserCell />}\n hideWidth={600}\n />\n <Column\n name=\"Last modified\"\n width={80}\n columnKey=\"time\"\n cell={<DurationCell />}\n flexGrow={1}\n hideWidth={800}\n />\n <Column\n name=\"Slots\"\n width={60}\n columnKey=\"slots\"\n flexGrow={1}\n hideWidth={800}\n />\n </VirtualTable>\n <DownloadDialog\n downloadHandler={searchDownloadHandler}\n itemDataGetter={this.itemDataGetter}\n session={instance}\n />\n <ResultDialog searchT={searchT} instance={instance} />\n </>\n );\n }\n}\n\nexport default ResultTable;\n","import * as React from 'react';\n\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\n\nimport HistoryConstants from 'constants/HistoryConstants';\n\nimport LocalSuggestField, { LocalSuggestFieldProps } from './LocalSuggestField';\nimport { addHistory } from 'services/api/HistoryApi';\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\nimport { useTranslation } from 'react-i18next';\n\nexport interface HistoryInputProps\n extends Omit<LocalSuggestFieldProps, 'data' | 'submitHandler'> {\n historyId: string;\n submitHandler: (text: string) => void;\n}\n\ninterface HistoryInputDataProps extends DataProviderDecoratorChildProps {\n history: string[];\n}\n\nconst HistoryInput: React.FC<HistoryInputProps & HistoryInputDataProps> = ({\n submitHandler,\n historyId,\n history,\n refetchData,\n ...other\n}) => {\n const { t } = useTranslation();\n const handleSubmit = async (value: string) => {\n const text = value.trim();\n await runBackgroundSocketAction(() => addHistory(historyId, text), t);\n\n refetchData();\n submitHandler(text);\n };\n\n return <LocalSuggestField {...other} data={history} submitHandler={handleSubmit} />;\n};\n\nexport default DataProviderDecorator<HistoryInputProps, HistoryInputDataProps>(\n HistoryInput,\n {\n urls: {\n history: ({ historyId }, socket) =>\n socket.get(HistoryConstants.STRINGS_URL + '/' + historyId),\n },\n loaderText: null,\n }\n);\n","import * as React from 'react';\n\nimport * as UI from 'types/ui';\n\nimport Accordion, {\n AccordionContent,\n AccordionTitle,\n} from 'components/semantic/Accordion';\nimport IconConstants from 'constants/IconConstants';\nimport Icon from 'components/semantic/Icon';\nimport { isValueSet } from 'utils/FormUtils';\n\ntype FormAccordionProps = React.PropsWithChildren<{\n locals: UI.FormLocals;\n}>;\n\nexport const FormAccordion: React.FC<FormAccordionProps> = ({ locals, children }) => {\n const { label } = locals;\n const active = isValueSet(locals.value);\n return (\n <Accordion className=\"field\" defaultActiveIndexes={active ? [0] : undefined}>\n <AccordionTitle>\n <Icon icon={IconConstants.DROPDOWN} />\n <span style={active ? { fontWeight: 'bold' } : undefined}>{label}</span>\n </AccordionTitle>\n <AccordionContent>{children}</AccordionContent>\n </Accordion>\n );\n};\n","import * as React from 'react';\nimport t from 'utils/tcomb-form';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport Checkbox from 'components/semantic/Checkbox';\nimport { updateMultiselectValues } from 'utils/FormUtils';\nimport HubIcon from 'components/icon/HubIcon';\nimport { FormAccordion } from './AccordionField';\n\ninterface HubSelectFieldProps {\n value: string[] | null;\n onChange: (hubUrls: string[] | null) => void;\n}\n\ninterface DataProps {\n hubs: API.Hub[];\n}\n\ntype Props = HubSelectFieldProps & DataProps;\n\nconst HubSelectField: React.FC<Props> = ({ hubs, value, onChange }) => {\n const onlineHubs = hubs.filter(\n (hub) => hub.connect_state.id === API.HubConnectStateEnum.CONNECTED\n );\n const selectedUrls =\n !!value && !!value.length ? value : onlineHubs.map((hub) => hub.hub_url);\n\n const beforeUnchecked = () => {\n if (selectedUrls.length === 1) {\n return false;\n }\n\n return;\n };\n\n return (\n <>\n {onlineHubs.map((hub) => (\n <div key={hub.id} className=\"field\">\n <Checkbox\n caption={\n <>\n <HubIcon hub={hub} />\n {hub.identity.name}\n </>\n }\n beforeUnchecked={beforeUnchecked}\n checked={selectedUrls.includes(hub.hub_url)}\n onChange={(checked) => {\n const newValue = updateMultiselectValues(\n selectedUrls,\n hub.hub_url,\n checked\n );\n onChange(newValue.length === onlineHubs.length ? null : newValue);\n }}\n style={{\n maxWidth: '300px',\n }}\n />\n </div>\n ))}\n </>\n );\n};\n\ntype TCombTemplate = {\n renderSelect: (locals: UI.FormLocals<API.Hub, string[]>) => React.ReactNode;\n renderLabel: (locals: UI.FormLocals<API.Hub, string[]>) => React.ReactNode;\n};\n\nconst HubsSelectField: TCombTemplate = {\n renderSelect(locals) {\n return (\n <FormAccordion locals={locals}>\n <HubSelectField\n onChange={locals.onChange}\n value={locals.value}\n hubs={locals.options}\n />\n </FormAccordion>\n );\n },\n renderLabel(locals) {\n return null;\n },\n};\n\nexport default t.form.Form.templates.select.clone(HubsSelectField);\n","import { useState, useEffect } from 'react';\nimport * as React from 'react';\nimport t from 'utils/tcomb-form';\n\nimport * as UI from 'types/ui';\n\nimport { ByteUnits, formatUnit, parseUnit } from 'utils/ValueFormat';\n\ninterface SizeFieldProps {\n moduleT: UI.ModuleTranslator;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n onChange: (size: number | null) => void;\n value: number;\n}\n\ntype Props = SizeFieldProps;\n\nconst DEFAULT_UNIT_INDEX = 2;\n\nconst toFieldValues = (initialValue: number) => {\n const { value, unitIndex } = parseUnit(initialValue, ByteUnits, 1024);\n return {\n value,\n unitIndex: !!initialValue ? unitIndex : DEFAULT_UNIT_INDEX,\n };\n};\n\nconst SizeField: React.FC<Props> = ({ inputProps, moduleT, onChange, value }) => {\n const initialData = toFieldValues(value);\n const [displayValue, setDisplayValue] = useState<number | undefined>(initialData.value);\n const [unitIndex, setUnitIndex] = useState<number>(initialData.unitIndex);\n\n const valueToBytes = () => {\n let ret = displayValue || 0;\n if (!!unitIndex) {\n for (let i = 1; i <= unitIndex; i++) {\n ret *= 1024;\n }\n }\n\n return ret;\n };\n\n // Fire internal changes\n useEffect(() => {\n const newValue = valueToBytes();\n if (newValue !== value) {\n onChange(newValue);\n }\n }, [unitIndex, displayValue]);\n\n // Update fields on external changes\n useEffect(() => {\n const curBytes = valueToBytes();\n if (value !== curBytes) {\n const newData = toFieldValues(value);\n setDisplayValue(newData.value);\n setUnitIndex(newData.unitIndex);\n }\n }, [value]);\n\n return (\n <div style={{ display: 'flex' }}>\n <input\n className=\"ui input\"\n type=\"number\"\n {...inputProps}\n min={0}\n value={displayValue || ''}\n onChange={(evt) => {\n const newValue = !!evt.target.value ? parseInt(evt.target.value) : null;\n if (!!newValue) {\n setDisplayValue(newValue);\n } else {\n setDisplayValue(undefined);\n }\n }}\n />\n <select\n className=\"ui select\"\n style={{ maxWidth: '100px' }}\n value={ByteUnits[unitIndex]}\n onChange={(evt) => {\n setUnitIndex(evt.target.selectedIndex);\n }}\n >\n {ByteUnits.map((unit, index) => (\n <option key={unit} value={unit}>\n {formatUnit(unit, moduleT.plainT)}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\ntype TCombTemplate = {\n renderInput: (locals: UI.FormLocals<any, number>) => React.ReactNode;\n};\n\nconst FileTypeField: TCombTemplate = {\n renderInput(locals) {\n return (\n <SizeField\n onChange={locals.onChange}\n value={!!locals.value ? parseInt(locals.value as any) : 0}\n moduleT={locals.context.formT}\n />\n );\n },\n};\n\nexport default t.form.Form.templates.textbox.clone(FileTypeField);\n","import * as React from 'react';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport FileIcon from 'components/icon/FileIcon';\nimport Icon from 'components/semantic/Icon';\nimport IconConstants from 'constants/IconConstants';\n\nconst searchTypeToFileItem = (searchType: UI.SearchTypeItem): API.FileItemType => {\n if (searchType.id === 'directory') {\n return {\n id: 'directory',\n str: '',\n files: 0,\n directories: 0,\n };\n }\n\n return {\n id: 'file',\n str: '',\n content_type: searchType.id as API.FileContentType,\n };\n};\n\ninterface SearchTypeIconProps {\n type: UI.SearchTypeItem;\n size?: string;\n}\n\nexport const SearchTypeIcon: React.FC<SearchTypeIconProps> = ({\n type,\n size = 'large',\n}) => {\n if (!type.id) {\n return <Icon icon={IconConstants.ANY} size={size} />;\n }\n\n return <FileIcon typeInfo={searchTypeToFileItem(type)} size={size} />;\n};\n","import * as React from 'react';\nimport t from 'utils/tcomb-form';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport SearchConstants from 'constants/SearchConstants';\nimport Dropdown from 'components/semantic/Dropdown';\nimport MenuItemLink from 'components/semantic/MenuItemLink';\nimport { SearchTypeIcon } from 'components/icon/SearchTypeIcon';\n\ntype OnChangeHandler = (value: string | null) => void;\n\ninterface SearchTypeDropdownProps {\n onChange: OnChangeHandler;\n value: string | null;\n moduleT: UI.ModuleTranslator;\n}\n\ninterface DataProps {\n searchTypes: API.SearchType[];\n}\n\nconst getCommonItems = (moduleT: UI.ModuleTranslator): UI.SearchTypeItem[] => [\n {\n id: null,\n str: moduleT.translate('Any'),\n },\n {\n id: 'directory',\n str: moduleT.translate('Directory'),\n },\n {\n id: 'file',\n str: moduleT.translate('File'),\n },\n];\n\nconst typeToMenuItem = (\n type: UI.SearchTypeItem,\n onChange: OnChangeHandler,\n selectedItem: UI.SearchTypeItem\n) => (\n <MenuItemLink\n key={type.id || SearchConstants.DEFAULT_SEARCH_TYPE}\n onClick={() => onChange(type.id)}\n icon={<SearchTypeIcon type={type} />}\n active={selectedItem.id === type.id}\n >\n {type.str}\n </MenuItemLink>\n);\n\ntype Props = SearchTypeDropdownProps & DataProviderDecoratorChildProps & DataProps;\n\nconst SearchTypeDropdown: React.FC<Props> = ({\n searchTypes,\n value,\n onChange,\n moduleT,\n}) => {\n const commonItems = getCommonItems(moduleT);\n const selectedItem =\n searchTypes.find((i) => value === i.id) ||\n commonItems.find((i) => value === i.id) ||\n commonItems[0];\n return (\n <Dropdown\n selection={true}\n caption={\n <>\n <SearchTypeIcon type={selectedItem} size=\"\" />\n {selectedItem.str}\n </>\n }\n >\n {commonItems.map((type) => typeToMenuItem(type, onChange, selectedItem))}\n <div key=\"divider\" className=\"ui divider\" />\n {searchTypes.map((type) => typeToMenuItem(type, onChange, selectedItem))}\n </Dropdown>\n );\n};\n\nconst SearchTypeDropdownDecorated = DataProviderDecorator<\n SearchTypeDropdownProps,\n DataProps\n>(SearchTypeDropdown, {\n urls: {\n searchTypes: SearchConstants.SEARCH_TYPES_URL,\n },\n});\n\ntype TCombTemplate = {\n renderSelect: (locals: UI.FormLocals<any, string>) => React.ReactNode;\n};\n\nconst FileTypeField: TCombTemplate = {\n renderSelect(locals) {\n return (\n <SearchTypeDropdownDecorated\n onChange={locals.onChange}\n value={locals.value || null}\n moduleT={locals.context.formT}\n />\n );\n },\n};\n\nexport default t.form.Form.templates.select.clone(FileTypeField);\n","import * as React from 'react';\nimport t from 'utils/tcomb-form';\n\nimport * as UI from 'types/ui';\n\nimport { FormAccordion } from './AccordionField';\n\ntype TCombTemplate = {\n renderFieldset: (children: React.ReactNode, locals: UI.FormLocals) => React.ReactNode;\n renderLabel: (locals: UI.FormLocals) => React.ReactNode;\n};\n\nconst AccordionStruct: TCombTemplate = {\n renderFieldset(children, locals) {\n const { label, ...childLocals } = locals;\n return (\n <FormAccordion locals={locals}>\n {(t.form.Form.templates.struct as any).renderFieldset(children, childLocals)}\n </FormAccordion>\n );\n },\n renderLabel(locals) {\n return null;\n },\n};\n\nexport default t.form.Form.templates.struct.clone(AccordionStruct);\n","import { PureComponent } from 'react';\nimport t from 'utils/tcomb-form';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport HubSelectField from './HubSelectField';\nimport SizeField from './SizeField';\nimport FileTypeField from './FileTypeField';\n\nimport Form, {\n FormFieldChangeHandler,\n FormSaveHandler,\n FormFieldSettingHandler,\n} from 'components/form/Form';\nimport { isValueSet, translateForm } from 'utils/FormUtils';\nimport { RouteComponentProps } from 'react-router';\nimport Button from 'components/semantic/Button';\nimport AccordionStructField from './AccordionStructField';\n\ninterface Entry extends Pick<API.SearchQuery, 'file_type'>, UI.FormValueMap {\n hub_urls: string[] | null;\n size_limits: null | {\n min_size: number | null;\n max_size: number | null;\n };\n // excluded: string[] | null;\n}\n\nexport interface SearchOptionsFormProps extends Pick<RouteComponentProps, 'location'> {\n moduleT: UI.ModuleTranslator;\n onChange: (value: Entry | null) => void;\n value: Entry | null;\n hubs: API.Hub[];\n}\n\nconst Fields: UI.FormFieldDefinition[] = [\n {\n key: 'file_type',\n title: 'File type',\n type: API.SettingTypeEnum.STRING,\n optional: true,\n },\n {\n key: 'hub_urls',\n title: 'Hubs',\n type: API.SettingTypeEnum.LIST,\n item_type: API.SettingTypeEnum.STRING,\n },\n {\n key: 'size_limits',\n title: 'Size limits',\n type: API.SettingTypeEnum.STRUCT,\n optional: true,\n definitions: [\n {\n key: 'min_size',\n title: 'Minimum size',\n type: API.SettingTypeEnum.NUMBER,\n optional: true,\n },\n {\n key: 'max_size',\n title: 'Maximum size',\n type: API.SettingTypeEnum.NUMBER,\n optional: true,\n },\n ],\n } /*, {\n key: 'excluded',\n title: 'Excluded words',\n type: API.SettingTypeEnum.LIST,\n item_type: API.SettingTypeEnum.STRING,\n optional: true,\n }*/,\n];\n\nconst removeEmptyProperties = (formValue: Entry) => {\n const ret = Object.keys(formValue).reduce((reduced, key) => {\n const value = formValue[key];\n if (isValueSet(value)) {\n reduced[key] = value;\n }\n\n return reduced;\n }, {} as Entry);\n\n return ret;\n};\n\nclass SearchOptionsForm extends PureComponent<SearchOptionsFormProps> {\n static displayName = 'SearchOptionForm';\n\n constructor(props: SearchOptionsFormProps) {\n super(props);\n\n this.definitions = translateForm(Fields, props.moduleT);\n }\n\n definitions: UI.FormFieldDefinition[];\n form: Form<Entry>;\n\n onFieldChanged: FormFieldChangeHandler<Entry> = (id, value, hasChanges) => {\n const ret = removeEmptyProperties(value as Entry);\n this.props.onChange(!!Object.keys(ret).length ? ret : null);\n return null;\n };\n\n save = () => {\n return this.form.save();\n };\n\n onSave: FormSaveHandler<Entry> = (changedFields) => {\n return Promise.resolve();\n };\n\n onFieldSetting: FormFieldSettingHandler<Entry> = (id, fieldOptions, formValue) => {\n if (id === 'hub_urls') {\n Object.assign(fieldOptions, {\n factory: t.form.Select,\n template: HubSelectField,\n options: this.props.hubs,\n });\n } else if (id === 'min_size' || id === 'max_size') {\n Object.assign(fieldOptions, {\n // factory: t.form.List,\n template: SizeField,\n });\n } else if (id === 'excluded') {\n Object.assign(fieldOptions, {\n disableOrder: true,\n });\n } else if (id === 'file_type') {\n Object.assign(fieldOptions, {\n template: FileTypeField,\n });\n } else if (id === 'size_limits') {\n Object.assign(fieldOptions, {\n template: AccordionStructField,\n });\n }\n };\n\n render() {\n const { value, onChange, location, moduleT } = this.props;\n return (\n <div>\n <Form<Entry>\n ref={(c) => (this.form = c!)}\n onFieldChanged={this.onFieldChanged}\n onFieldSetting={this.onFieldSetting}\n onSave={this.onSave}\n fieldDefinitions={this.definitions}\n sourceValue={value} // This gets updated on every change at the moment...\n location={location}\n optionTitleFormatter={(def) => def.title}\n className=\"search-options\"\n />\n <Button\n caption={moduleT.translate('Reset all')}\n onClick={() => onChange(null)}\n disabled={!value}\n style={{\n marginTop: '10px',\n }}\n />\n </div>\n );\n }\n}\n\nexport { SearchOptionsForm, Entry as SearchOptions };\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nimport Button from 'components/semantic/Button';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport Popup from 'components/semantic/Popup';\nimport {\n SearchOptionsForm,\n SearchOptionsFormProps,\n SearchOptions,\n} from './SearchOptionsForm';\nimport IconConstants from 'constants/IconConstants';\nimport Icon from 'components/semantic/Icon';\nimport { RouteComponentProps } from 'react-router';\nimport HubConstants from 'constants/HubConstants';\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport { isValueSet } from 'utils/FormUtils';\n\ninterface SearchOptionsButtonProps\n extends Pick<RouteComponentProps, 'location'>,\n Pick<SearchOptionsFormProps, 'onChange' | 'value'> {\n moduleT: UI.ModuleTranslator;\n}\n\ninterface DataProps {\n hubs: API.Hub[];\n}\n\ntype Props = SearchOptionsButtonProps & DataProviderDecoratorChildProps & DataProps;\n\nconst removeEmptyProperties = (value: SearchOptions) => {\n const ret = Object.keys(value).reduce((reduced, key) => {\n if (Array.isArray(value[key]) ? !!(value[key] as Array<any>).length : !!value[key]) {\n reduced[key] = value[key] as any;\n }\n\n return reduced;\n }, {} as SearchOptions);\n\n return ret;\n};\n\nconst SearchOptionsButton: React.FC<Props> = ({\n moduleT,\n location,\n onChange,\n value,\n hubs,\n}) => {\n const onValueChanged = (newValue: SearchOptions | null) => {\n if (newValue) {\n const ret = removeEmptyProperties(newValue);\n onChange(!!Object.keys(ret).length ? ret : null);\n } else {\n onChange(null);\n }\n };\n\n useEffect(() => {\n // Remove obsolete hubs from the options\n if (!!value && !!value.hub_urls && !!value.hub_urls.length) {\n const selectedUrls = value.hub_urls;\n const selectedUrlsNew = selectedUrls.filter((url) =>\n hubs.find((hub) => hub.hub_url === url)\n );\n if (selectedUrlsNew.length !== selectedUrls.length) {\n onValueChanged({\n ...value,\n hub_urls: !!selectedUrlsNew.length ? selectedUrlsNew : null,\n });\n }\n }\n }, [hubs]);\n\n const filterCount = !value\n ? null\n : Object.keys(value).filter((key) => {\n const curValue = value[key];\n return isValueSet(curValue);\n }).length;\n\n return (\n <Popup\n triggerClassName=\"options\"\n className=\"options\"\n trigger={\n <Button\n caption={\n <>\n <Icon icon={IconConstants.OPTIONS} />\n {!!filterCount && (\n <span\n style={{\n fontWeight: 'bold',\n marginRight: '3px',\n color: 'black',\n }}\n >\n {`(${filterCount})`}\n </span>\n )}\n <Icon icon={IconConstants.EXPAND} />\n </>\n }\n />\n }\n contentUpdateTrigger={value}\n >\n {(hide) => (\n <SearchOptionsForm\n moduleT={moduleT}\n location={location}\n onChange={onValueChanged}\n value={value}\n hubs={hubs}\n />\n )}\n </Popup>\n );\n};\n\nconst SearchOptionsButtonDecorated = DataProviderDecorator<\n SearchOptionsButtonProps,\n DataProps\n>(SearchOptionsButton, {\n urls: {\n hubs: HubConstants.SESSIONS_URL,\n },\n onSocketConnected: (addSocketListener, { refetchData }) => {\n addSocketListener(HubConstants.MODULE_URL, HubConstants.SESSION_CREATED, () =>\n refetchData()\n );\n addSocketListener<Partial<API.Hub>>(\n HubConstants.MODULE_URL,\n HubConstants.SESSION_UPDATED,\n (hub) => {\n if (!!hub.connect_state) {\n refetchData();\n }\n }\n );\n addSocketListener(HubConstants.MODULE_URL, HubConstants.SESSION_REMOVED, () =>\n refetchData()\n );\n },\n dataConverters: {\n hubs: (hubs: API.Hub[]) =>\n hubs.filter((hub) => hub.connect_state.id === API.HubConnectStateEnum.CONNECTED),\n },\n});\n\nexport { SearchOptionsButtonDecorated as SearchOptionsButton };\n","import { useState } from 'react';\nimport * as React from 'react';\n\nimport HistoryInput from 'components/autosuggest/HistoryInput';\nimport { HistoryStringEnum } from 'constants/HistoryConstants';\nimport Button from 'components/semantic/Button';\n\nimport * as UI from 'types/ui';\n\nimport IconConstants from 'constants/IconConstants';\nimport { RouteComponentProps } from 'react-router';\nimport { useMobileLayout } from 'utils/BrowserUtils';\nimport { SearchOptionsButton, SearchOptions } from './options-panel';\n\ninterface SearchInputProps extends Pick<RouteComponentProps, 'location'> {\n running: boolean;\n moduleT: UI.ModuleTranslator;\n defaultValue?: string;\n handleSubmit: (text: string, options?: SearchOptions) => void;\n defaultOptions: SearchOptions | null;\n}\n\nconst SearchInput: React.FC<SearchInputProps> = ({\n moduleT,\n defaultValue,\n running,\n handleSubmit,\n location,\n defaultOptions,\n}) => {\n const [options, setOptions] = useState<SearchOptions | null>(defaultOptions);\n\n const mobile = useMobileLayout();\n return (\n <div className=\"search-container\">\n <div className=\"search-area\">\n <HistoryInput\n historyId={HistoryStringEnum.SEARCH}\n submitHandler={(value) => handleSubmit(value, options || undefined)}\n disabled={running}\n defaultValue={defaultValue}\n placeholder={moduleT.translate('Enter search string...')}\n button={\n <Button\n className=\"blue\"\n icon={IconConstants.SEARCH}\n caption={!mobile ? moduleT.translate('Search') : undefined}\n loading={running}\n />\n }\n />\n <SearchOptionsButton\n moduleT={moduleT}\n location={location}\n onChange={setOptions}\n value={options}\n />\n </div>\n </div>\n );\n};\n\nexport { SearchInput };\n","import { Component } from 'react';\n\nimport SearchConstants from 'constants/SearchConstants';\n\nimport History from 'utils/History';\n\nimport OfflineHubMessageDecorator from 'decorators/OfflineHubMessageDecorator';\n\nimport '../style.css';\nimport ResultTable from 'routes/Search/components/ResultTable';\nimport { RouteComponentProps } from 'react-router-dom';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { WithTranslation } from 'react-i18next';\nimport { getModuleT } from 'utils/TranslationUtils';\nimport { SearchInput } from './SearchInput';\nimport { SearchOptions } from './options-panel';\nimport NotificationActions from 'actions/NotificationActions';\nimport DataProviderDecorator, {\n DataProviderDecoratorChildProps,\n} from 'decorators/DataProviderDecorator';\nimport LoginStore from 'stores/LoginStore';\nimport { search } from 'services/api/SearchApi';\nimport {\n loadSessionProperty,\n removeSessionProperty,\n saveSessionProperty,\n} from 'utils/BrowserUtils';\n\nconst RESULT_WAIT_PERIOD = 4000;\n\ninterface SearchLocationState {\n searchString?: string;\n}\n\ntype SearchProps = RouteComponentProps<UI.EmptyObject, any, SearchLocationState>;\n\ninterface SearchDataProps extends DataProviderDecoratorChildProps, WithTranslation {\n instance: API.SearchInstance;\n}\n\nconst SEARCH_HUBS_KEY = 'search_hubs';\n\nconst loadHubOptions = () => {\n const options = loadSessionProperty<string[] | null>(SEARCH_HUBS_KEY, null);\n return options;\n};\n\nconst saveHubOptions = (hubs: string[] | null) => {\n if (!hubs || !hubs.length) {\n removeSessionProperty(SEARCH_HUBS_KEY);\n } else {\n saveSessionProperty(SEARCH_HUBS_KEY, hubs);\n }\n};\n\nclass Search extends Component<SearchProps & SearchDataProps> {\n state = {\n searchString: '',\n running: false,\n };\n\n searchTimeout: number | undefined;\n\n componentDidMount() {\n this.checkLocationState(this.props);\n\n const { query } = this.props.instance;\n if (!!query) {\n this.setState({\n searchString: query.pattern,\n });\n }\n }\n\n componentDidUpdate(prevProps: SearchProps) {\n this.checkLocationState(this.props);\n }\n\n checkLocationState = (props: SearchProps) => {\n const { state } = props.location;\n if (state && state.searchString && state.searchString !== this.state.searchString) {\n this.search(state.searchString);\n\n // Avoid searching for it again\n History.replace({\n pathname: props.location.pathname,\n });\n }\n };\n\n search = async (searchString: string, options?: SearchOptions) => {\n console.log('Searching');\n\n clearTimeout(this.searchTimeout);\n saveHubOptions(options?.hub_urls || null);\n\n const { hub_urls, size_limits, ...queryOptions } = options || {};\n try {\n const res = await search(this.props.instance, {\n query: {\n pattern: searchString,\n ...size_limits,\n ...queryOptions,\n },\n priority: API.PriorityEnum.HIGH,\n hub_urls,\n });\n\n this.onSearchPosted(res);\n this.setState({\n searchString,\n running: true,\n });\n } catch (error) {\n NotificationActions.apiError('Search failed', error);\n }\n };\n\n onSearchPosted = (data: API.SearchResponse) => {\n this.searchTimeout = window.setTimeout(() => {\n this.setState({\n running: false,\n });\n }, data.queue_time + RESULT_WAIT_PERIOD);\n };\n\n parseOptions = (): SearchOptions | null => {\n const { query } = this.props.instance;\n if (!query) {\n return null;\n }\n\n return {\n excluded: query.excluded,\n size_limits: {\n min_size: query.min_size,\n max_size: query.max_size,\n },\n file_type:\n query.file_type === SearchConstants.DEFAULT_SEARCH_TYPE ||\n query.file_type === 'tth'\n ? null\n : query.file_type,\n hub_urls: loadHubOptions(),\n };\n };\n\n searchT = getModuleT(this.props.t, UI.Modules.SEARCH);\n render() {\n const { instance, location } = this.props;\n const { searchString, running } = this.state;\n const { t } = this.searchT;\n return (\n <OfflineHubMessageDecorator\n offlineMessage={t<string>(\n 'searchOffline',\n 'You must to be connected to at least one hub in order to perform searches'\n )}\n >\n <div className=\"search-layout\">\n <SearchInput\n moduleT={this.searchT}\n running={running}\n defaultValue={searchString}\n handleSubmit={this.search}\n location={location}\n defaultOptions={this.parseOptions()}\n />\n <ResultTable\n searchString={searchString}\n running={running}\n searchT={this.searchT}\n instance={instance}\n />\n </div>\n </OfflineHubMessageDecorator>\n );\n }\n}\n\nconst OWNER_ID_SUFFIX = 'webui';\n\nexport default DataProviderDecorator<SearchProps, SearchDataProps>(Search, {\n urls: {\n instance: async (props, socket) => {\n // Try to use a previously created instance for this session\n const instances = await socket.get<API.SearchInstance[]>(\n `${SearchConstants.INSTANCES_URL}`\n );\n\n const instance = instances.find(\n (i) => i.owner === `session:${LoginStore.sessionId}:${OWNER_ID_SUFFIX}`\n );\n if (!!instance) {\n return instance;\n }\n\n // Create new instance\n const instanceId = (\n await socket.post<{ id: number }>(SearchConstants.INSTANCES_URL, {\n owner_suffix: OWNER_ID_SUFFIX,\n expiration: 0,\n })\n ).id;\n\n return socket.get(`${SearchConstants.INSTANCES_URL}/${instanceId}`);\n },\n },\n});\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","DupeStrings","DupePaths","paths","className","map","path","FileItemInfoGrid","session","fileItem","user","downloadHandler","showPath","t","gridT","text","Grid","columns","stackable","title","name","type","str","size","time","tth","dupe","caption","button","itemInfoGetter","contextElement","hub","other","icon","connect_state","SearchActions","result","displayName","IconConstants","handler","data","location","History","pathname","browseContent","access","FilelistSessionActions","users","FilelistSessionStore","moduleId","actions","UserResult","userIcon","directory","ids","remoteMenuId","MenuConstants","hub_names","connection","slots","FormattedIp","item","ip","resultSort","a","b","nicks","localeCompare","DataProviderDecorator","results","defaultValue","defaultValue_plural","count","length","style","width","sort","cid","urls","parentResult","instanceId","socket","get","SearchConstants","searchDownloadHandler","itemInfo","downloadData","instance","SocketService","ResultDialog","Component","itemDataGetter","itemId","this","props","render","Modal","closable","FileIcon","typeInfo","fullHeight","DownloadDialog","Decorated","ModalRouteDecorator","match","params","resultId","_viewName","_apiUrl","mixins","ViewStoreMixin","getUserCaption","replace","UserCell","cellData","rowDataGetter","itemData","resultUserGetter","rowData","NameCell","userGetter","entityId","ResultTable","rowClassNameGetter","emptyRowsNodeGetter","running","searchString","searchT","Message","description","i18nKey","toI18nKey","VirtualTable","store","SearchViewStore","textFilterProps","autoFocus","Column","columnKey","flexGrow","cell","hideWidth","submitHandler","historyId","history","refetchData","LocalSuggestField","value","trim","HistoryConstants","loaderText","FormAccordion","locals","children","label","active","Accordion","defaultActiveIndexes","undefined","Icon","fontWeight","HubSelectField","hubs","onChange","onlineHubs","filter","selectedUrls","hub_url","beforeUnchecked","Checkbox","HubIcon","identity","checked","includes","newValue","maxWidth","HubsSelectField","renderSelect","renderLabel","toFieldValues","initialValue","unitIndex","SizeField","inputProps","moduleT","initialData","displayValue","setDisplayValue","useState","setUnitIndex","valueToBytes","ret","i","useEffect","curBytes","newData","display","min","evt","target","parseInt","selectedIndex","unit","index","plainT","FileTypeField","renderInput","context","formT","SearchTypeIcon","searchType","files","directories","content_type","typeToMenuItem","selectedItem","MenuItemLink","onClick","SearchTypeDropdownDecorated","searchTypes","commonItems","translate","getCommonItems","find","Dropdown","selection","AccordionStruct","renderFieldset","childLocals","Fields","key","optional","item_type","definitions","SearchOptionsForm","PureComponent","constructor","super","onFieldChanged","hasChanges","formValue","Object","keys","reduce","reduced","save","form","onSave","changedFields","Promise","resolve","onFieldSetting","fieldOptions","assign","factory","template","disableOrder","AccordionStructField","Form","ref","c","fieldDefinitions","sourceValue","optionTitleFormatter","def","Button","disabled","marginTop","SearchOptionsButtonDecorated","onValueChanged","Array","isArray","hub_urls","selectedUrlsNew","url","filterCount","curValue","Popup","triggerClassName","trigger","marginRight","color","contentUpdateTrigger","hide","HubConstants","onSocketConnected","addSocketListener","dataConverters","SearchInput","handleSubmit","defaultOptions","setOptions","mobile","placeholder","loading","SEARCH_HUBS_KEY","Search","state","checkLocationState","search","console","log","clearTimeout","searchTimeout","size_limits","queryOptions","res","query","pattern","priority","onSearchPosted","setState","error","NotificationActions","window","setTimeout","queue_time","parseOptions","excluded","min_size","max_size","file_type","componentDidMount","componentDidUpdate","prevProps","OfflineHubMessageDecorator","offlineMessage","OWNER_ID_SUFFIX","owner","LoginStore","post","owner_suffix","expiration"],"sourceRoot":""}
|