airdcpp-webui 2.14.0-beta.11 → 2.14.0-beta.12
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/dist/index.html +1 -1
- package/dist/js/{544.65aa9935aff661f699f2.chunk.js → 544.23c1c02472b86725dbe7.chunk.js} +2 -2
- package/dist/js/544.23c1c02472b86725dbe7.chunk.js.gz +0 -0
- package/dist/js/{544.65aa9935aff661f699f2.chunk.js.map → 544.23c1c02472b86725dbe7.chunk.js.map} +1 -1
- package/dist/js/{550.83271f41ad0cccc6815b.chunk.js → 550.43735d298b0c3e70c6bd.chunk.js} +2 -2
- package/dist/js/550.43735d298b0c3e70c6bd.chunk.js.gz +0 -0
- package/dist/js/{550.83271f41ad0cccc6815b.chunk.js.map → 550.43735d298b0c3e70c6bd.chunk.js.map} +1 -1
- package/dist/js/926.c344692db21ff4746b0d.chunk.js +2 -0
- package/dist/js/926.c344692db21ff4746b0d.chunk.js.gz +0 -0
- package/dist/js/926.c344692db21ff4746b0d.chunk.js.map +1 -0
- package/dist/js/{944.890172ae3c849dfa9e12.chunk.js → 944.c8544fd04f32a2ec3e0b.chunk.js} +2 -2
- package/dist/js/944.c8544fd04f32a2ec3e0b.chunk.js.gz +0 -0
- package/dist/js/944.c8544fd04f32a2ec3e0b.chunk.js.map +1 -0
- package/dist/js/{favorite-hubs.10f837eb1b9982c252aa.chunk.js → favorite-hubs.295f583c2e1befcbbbbb.chunk.js} +2 -2
- package/dist/js/favorite-hubs.295f583c2e1befcbbbbb.chunk.js.gz +0 -0
- package/dist/js/{favorite-hubs.10f837eb1b9982c252aa.chunk.js.map → favorite-hubs.295f583c2e1befcbbbbb.chunk.js.map} +1 -1
- package/dist/js/{filelists.8fe983ba06c08a5c65c2.chunk.js → filelists.f098fc396efc445ef837.chunk.js} +2 -2
- package/dist/js/filelists.f098fc396efc445ef837.chunk.js.gz +0 -0
- package/dist/js/{filelists.8fe983ba06c08a5c65c2.chunk.js.map → filelists.f098fc396efc445ef837.chunk.js.map} +1 -1
- package/dist/js/{files.168b9574438986003ddd.chunk.js → files.64f72b3869667e0d4c7e.chunk.js} +2 -2
- package/dist/js/files.64f72b3869667e0d4c7e.chunk.js.gz +0 -0
- package/dist/js/{files.168b9574438986003ddd.chunk.js.map → files.64f72b3869667e0d4c7e.chunk.js.map} +1 -1
- package/dist/js/{home.2fac0aaf4db41cf0a314.chunk.js → home.e0421a3f337897e900d5.chunk.js} +3 -3
- package/dist/js/home.e0421a3f337897e900d5.chunk.js.gz +0 -0
- package/dist/js/{home.2fac0aaf4db41cf0a314.chunk.js.map → home.e0421a3f337897e900d5.chunk.js.map} +1 -1
- package/dist/js/{hubs.43ca34eee0ef61fc32b2.chunk.js → hubs.82f0f581d104a03d4461.chunk.js} +2 -2
- package/dist/js/hubs.82f0f581d104a03d4461.chunk.js.gz +0 -0
- package/dist/js/{hubs.43ca34eee0ef61fc32b2.chunk.js.map → hubs.82f0f581d104a03d4461.chunk.js.map} +1 -1
- package/dist/js/main.3ce3fdb236c7af795497.entry.js +3 -0
- package/dist/js/{main.cacce80f03c18d3bf7d9.entry.js.LICENSE.txt → main.3ce3fdb236c7af795497.entry.js.LICENSE.txt} +1 -1
- package/dist/js/main.3ce3fdb236c7af795497.entry.js.gz +0 -0
- package/dist/js/{main.cacce80f03c18d3bf7d9.entry.js.map → main.3ce3fdb236c7af795497.entry.js.map} +1 -1
- package/dist/js/queue.2e2c51447eed5f81354d.chunk.js +2 -0
- package/dist/js/queue.2e2c51447eed5f81354d.chunk.js.gz +0 -0
- package/dist/js/queue.2e2c51447eed5f81354d.chunk.js.map +1 -0
- package/dist/js/{search.54d77ceed2d7b5286e96.chunk.js → search.52d677e31d86ea727809.chunk.js} +2 -2
- package/dist/js/search.52d677e31d86ea727809.chunk.js.gz +0 -0
- package/dist/js/{search.54d77ceed2d7b5286e96.chunk.js.map → search.52d677e31d86ea727809.chunk.js.map} +1 -1
- package/dist/js/{settings.e2c30f0541c9eaaa8741.chunk.js → settings.9cd37f4f45fd066e5d40.chunk.js} +2 -2
- package/dist/js/settings.9cd37f4f45fd066e5d40.chunk.js.gz +0 -0
- package/dist/js/settings.9cd37f4f45fd066e5d40.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/package.json +1 -1
- package/dist/js/544.65aa9935aff661f699f2.chunk.js.gz +0 -0
- package/dist/js/550.83271f41ad0cccc6815b.chunk.js.gz +0 -0
- package/dist/js/926.ddc01ea089c248c6a6dd.chunk.js +0 -2
- package/dist/js/926.ddc01ea089c248c6a6dd.chunk.js.gz +0 -0
- package/dist/js/926.ddc01ea089c248c6a6dd.chunk.js.map +0 -1
- package/dist/js/944.890172ae3c849dfa9e12.chunk.js.gz +0 -0
- package/dist/js/944.890172ae3c849dfa9e12.chunk.js.map +0 -1
- package/dist/js/favorite-hubs.10f837eb1b9982c252aa.chunk.js.gz +0 -0
- package/dist/js/filelists.8fe983ba06c08a5c65c2.chunk.js.gz +0 -0
- package/dist/js/files.168b9574438986003ddd.chunk.js.gz +0 -0
- package/dist/js/home.2fac0aaf4db41cf0a314.chunk.js.gz +0 -0
- package/dist/js/hubs.43ca34eee0ef61fc32b2.chunk.js.gz +0 -0
- package/dist/js/locales/zh_CN-GB2312-webui-main-json.c56c6d389b7951c4f74d.chunk.js +0 -1
- package/dist/js/locales/zh_CN-GB2312-webui-main-json.c56c6d389b7951c4f74d.chunk.js.gz +0 -0
- package/dist/js/main.cacce80f03c18d3bf7d9.entry.js +0 -3
- package/dist/js/main.cacce80f03c18d3bf7d9.entry.js.gz +0 -0
- package/dist/js/queue.6ff3192c939acd0170e7.chunk.js +0 -2
- package/dist/js/queue.6ff3192c939acd0170e7.chunk.js.gz +0 -0
- package/dist/js/queue.6ff3192c939acd0170e7.chunk.js.map +0 -1
- package/dist/js/search.54d77ceed2d7b5286e96.chunk.js.gz +0 -0
- package/dist/js/settings.e2c30f0541c9eaaa8741.chunk.js.gz +0 -0
- package/dist/js/settings.e2c30f0541c9eaaa8741.chunk.js.map +0 -1
- /package/dist/js/{home.2fac0aaf4db41cf0a314.chunk.js.LICENSE.txt → home.e0421a3f337897e900d5.chunk.js.LICENSE.txt} +0 -0
package/dist/index.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
{
|
|
17
17
|
// We must inject the main chunk dynamically as well because the final path is not known on compile time
|
|
18
18
|
var script = document.createElement('script');
|
|
19
|
-
script.src = getBasePath() + "js/main.
|
|
19
|
+
script.src = getBasePath() + "js/main.3ce3fdb236c7af795497.entry.js";
|
|
20
20
|
document.body.appendChild(script);
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[544],{20082:(e,n,o)=>{o.d(n,{A:()=>d});var t=o(71354),a=o.n(t),s=o(76314),l=o.n(s)()(a());l.push([e.id,".download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n","",{version:3,sources:["webpack://./src/components/download/style.css"],names:[],mappings:"AAAA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC",sourcesContent:[".download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n"],sourceRoot:""}]);const d=l},53213:(e,n,o)=>{o.d(n,{G:()=>a});var t=o(93226);const a=(e,n,o)=>e.post(`${t.Ay.STRINGS_URL}/${n}`,{string:o})},73070:(e,n,o)=>{o.d(n,{Y9:()=>h,fI:()=>c,xA:()=>m});var t=o(74848),a=(o(96540),o(46942)),s=o.n(a),l=o(32389),d=o(42695),i=o(67749);const r=e=>e||(0,t.jsx)(l.x6,{i18nKey:(0,d.j2)("na",i.KV.COMMON),children:"N/A"}),c=({title:e,text:n,className:o,titleWidth:a="four",noText:l})=>(0,t.jsxs)("div",{className:s()("ui row",o),children:[(0,t.jsx)("div",{className:s()(l?"sixteen":a,"wide column title"),children:(0,t.jsx)("div",{className:"ui tiny header",style:{overflow:"hidden"},children:e})}),!l&&(0,t.jsx)("div",{className:"column value",children:r(n)})]}),h=({title:e})=>(0,t.jsx)("div",{className:"ui row",children:(0,t.jsx)("div",{className:"sixteen wide column",children:(0,t.jsx)("div",{className:"ui blue section header",children:e})})}),m=e=>{var{className:n,children:o,columns:a,stackable:l}=e,d=function(e,n){var o={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(t=Object.getOwnPropertySymbols(e);a<t.length;a++)n.indexOf(t[a])<0&&Object.prototype.propertyIsEnumerable.call(e,t[a])&&(o[t[a]]=e[t[a]])}return o}(e,["className","children","columns","stackable"]);return(0,t.jsx)("div",Object.assign({className:s()("ui grid",{[`${a} column`]:!!a},{stackable:l},n)},d,{children:o}))}},79179:(e,n,o)=>{o.d(n,{A:()=>a});const t="favorite_directories",a={MODULE_URL:t,GROUPED_DIRECTORIES_URL:t+"/grouped_paths",DIRECTORIES_URL:t,DIRECTORIES_UPDATED:"favorite_directories_updated"}},88544:(e,n,o)=>{o.d(n,{A:()=>de});var t=o(74848),a=o(96540),s=o(31290),l=o(32389),d=o(93226),i=o(59315),r=o(4425),c=o(88939),h=o(56484),m=o(65385),u=o(99671),A=o(47603),p=o(36076),f=o(42695),w=o(53213),y=o(33968),x=o(8098),v=o(42191),j=o(79179),O=o(27725),g=o(67749),E=o(32728),b=o(83994),N=o(74416),C=o(50489);const I=(e,n,{formatSize:o})=>e.free_space<=0?e.path:` (${n((0,f.j2)("spaceFree",g.KV.COMMON),{defaultValue:"{{freeSpace}} free",replace:{freeSpace:o(e.free_space)}})})`,P=({pathInfo:e,downloadHandler:n,t:o})=>{const a=(0,N.k)();return(0,t.jsxs)("div",{className:"item",children:[(0,t.jsx)(b.A,{icon:r.A.FOLDER}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(C.A,{onClick:()=>n(e.path),caption:(0,t.jsxs)(t.Fragment,{children:[e.path,(0,t.jsx)("span",{className:"disk-info",children:I(e,o,a)})]})})})]})},B=(0,h.A)(function({downloadHandler:e,pathInfos:n,t:o}){return(0,t.jsx)("div",{className:"ui relaxed list",children:n.map(n=>(0,t.jsx)(P,{pathInfo:n,downloadHandler:e,t:o},n.path))})},{urls:{pathInfos:({paths:e},n)=>n.post(i.A.DISK_INFO_URL,{paths:e})}}),k=e=>0===e.paths.length?(0,t.jsx)(E.A,{title:(0,f.Tl)("No paths to display",e.t,g.KV.COMMON)}):(0,t.jsx)(B,Object.assign({},e));var R=o(78340);class D extends a.Component{constructor(){super(...arguments),this.formatParent=e=>{const{downloadHandler:n,t:o}=this.props;return(0,t.jsxs)(a.Fragment,{children:[(0,t.jsxs)("div",{className:"title",children:[(0,t.jsx)(b.A,{icon:r.A.DROPDOWN}),e.name]}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(k,{paths:e.paths,downloadHandler:n,t:o})})]},e.name)}}render(){const{groupedPaths:e,t:n}=this.props;return 0===e.length?(0,t.jsx)(E.A,{title:(0,f.Tl)("No paths to display",n,g.KV.COMMON)}):(0,t.jsx)(R.Ay,{className:"styled download-targets",children:e.map(this.formatParent)})}}const _=D;var S=o(90425);const M=(e,n,o)=>n?[...e,(0,t.jsxs)(O.A,{onClick:n,children:[(0,f.Tl)("Browse",o,g.KV.COMMON),(0,t.jsx)(b.A,{icon:r.A.BROWSE})]},"browse")]:e,T=({menuItems:e,title:n,handleBrowse:o,t:a,children:s})=>(0,t.jsxs)("div",{className:"mobile layout",children:[(0,t.jsx)(S.A,{selection:!0,caption:n,children:M(e,o,a)}),(0,t.jsx)("div",{className:"ui segment main-content",children:s})]});var H=o(96529),L=o(73070);const V=({menuItems:e,title:n,handleBrowse:o,t:a,children:s})=>(0,t.jsxs)(L.xA,{className:"normal layout",children:[(0,t.jsxs)("div",{className:"four wide column",children:[(0,t.jsx)("div",{className:"ui vertical fluid tabular menu",children:e}),!!o&&(0,t.jsx)(H.A,{className:"fluid basic",caption:(0,f.Tl)("Browse",a,g.KV.COMMON),onClick:o,icon:r.A.BROWSE})]}),(0,t.jsx)("div",{className:"twelve wide stretched column",children:(0,t.jsx)("div",{className:"ui segment main-content",children:s})})]}),U=(0,h.A)(e=>{const{t:n}=(0,l.Bd)(),[o,s]=(0,a.useState)("history"),d=a.useMemo(()=>{const{historyPaths:n,sharePaths:o,favoritePaths:a,itemInfo:s}=e;return(e=>{const{sharePaths:n,favoritePaths:o,historyPaths:a,dupePaths:s}=e;return[{name:"Previous",key:"history",list:a,component:({downloadHandler:e,t:n})=>(0,t.jsx)(k,{paths:a,downloadHandler:e,t:n})},{name:"Shared",key:"shared",list:n,component:({downloadHandler:e,t:o})=>(0,t.jsx)(_,{groupedPaths:n,downloadHandler:e,t:o})},{name:"Favorites",key:"favorites",list:o,component:({downloadHandler:e,t:n})=>(0,t.jsx)(_,{groupedPaths:o,downloadHandler:e,t:n})},{name:"Dupes",key:"dupes",list:s,component:({downloadHandler:e,t:n})=>(0,t.jsx)(k,{paths:s,downloadHandler:e,t:n})}]})({historyPaths:n,sharePaths:o,favoritePaths:a,dupePaths:s.dupe?s.dupe.paths.map(e=>(0,y._6)(e)):[]})},[]),i=d.find(e=>e.key===o);if(!i)return null;const r=d.map(e=>((e,n,o,a)=>(0,t.jsx)(O.A,{onClick:()=>o(e.key),active:n===e.key,children:(0,t.jsxs)(t.Fragment,{children:[a((0,f.j2)(e.key,g.KV.COMMON),e.name),!!e.list&&(0,t.jsx)("div",{className:"ui small label",children:e.list.length})]})},e.key))(e,o,s,n)),c=(0,x.vU)()?T:V;return(0,t.jsx)(c,{menuItems:r,title:i.name,handleBrowse:e.handleBrowse,t:n,children:(0,t.jsx)(i.component,{t:n,downloadHandler:e.downloadHandler})},i.key)},{urls:{sharePaths:v.A.GROUPED_ROOTS_GET_URL,favoritePaths:j.A.GROUPED_DIRECTORIES_URL}});var F=o(86038),K=o(85072),G=o.n(K),W=o(97825),Y=o.n(W),q=o(77659),$=o.n(q),z=o(55056),Z=o.n(z),J=o(10540),Q=o.n(J),X=o(41113),ee=o.n(X),ne=o(20082),oe={};oe.styleTagTransform=ee(),oe.setAttributes=Z(),oe.insert=$().bind(null,"head"),oe.domAPI=Y(),oe.insertStyleElement=Q(),G()(ne.A,oe),ne.A&&ne.A.locals&&ne.A.locals;var te=o(39364),ae=o(48249),se=o(70756),le=function(e,n,o,t){return new(o||(o=Promise))(function(a,s){function l(e){try{i(t.next(e))}catch(e){s(e)}}function d(e){try{i(t.throw(e))}catch(e){s(e)}}function i(e){var n;e.done?a(e.value):(n=e.value,n instanceof o?n:new o(function(e){e(n)})).then(l,d)}i((t=t.apply(e,n||[])).next())})};const de=(0,m.A)((0,h.A)(e=>{const{t:n}=(0,l.Bd)(),o=(0,s.Zp)(),a=(0,te.wV)(),h=(0,ae.F)(),{downloadHandler:m,itemInfo:x,userGetter:v,params:j,sessionItem:O,historyPaths:E,handleClose:b}=e,N=function(e,n){var o={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(t=Object.getOwnPropertySymbols(e);a<t.length;a++)n.indexOf(t[a])<0&&Object.prototype.propertyIsEnumerable.call(e,t[a])&&(o[t[a]]=e[t[a]])}return o}(e,["downloadHandler","itemInfo","userGetter","params","sessionItem","historyPaths","handleClose"]),C=(o,t)=>le(void 0,void 0,void 0,function*(){try{const n={itemInfo:x,user:v?v(j.downloadItemId,e):void 0,entity:O},a={target_name:t||x.name,target_directory:o,priority:F.Fm.DEFAULT};yield m(n,a,h)}catch(e){c.A.error({title:n((0,f.j2)("queueingFailed",g.KV.COMMON),{defaultValue:"Failed to queue the item {{item.name}}",replace:{item:x}}),message:e.message})}(0,p.bd)(()=>(0,w.G)(h,d.n2.DOWNLOAD_DIR,o),n)}),I={subHeader:x.name,title:(0,f.Tl)("Download",n,g.KV.COMMON),icon:r.A.DOWNLOAD,closable:!1},P=(0,se.z)(a,F.US.FILESYSTEM_VIEW);return(0,t.jsxs)(s.BV,{children:[(0,t.jsx)(s.qh,{path:"browse/*",element:(0,t.jsx)(A.d,Object.assign({onConfirm:e=>le(void 0,void 0,void 0,function*(){yield C((0,y.oK)(e),(0,y.WP)(e))}),initialPath:(()=>{const e=E.length>0?E[E.length-1]:"";return"directory"===x.type.id?e:e+x.name})(),selectMode:"directory"===x.type.id?g.bV.DIRECTORY:g.bV.FILE,historyId:i.A.LOCATION_DOWNLOAD,approveCaption:(0,f.Tl)("Download",n,g.KV.COMMON),modalComponent:u.A},I))}),(0,t.jsx)(s.qh,{index:!0,element:(0,t.jsx)(u.A,Object.assign({className:"download-dialog",fullHeight:!0},I,N,{children:(0,t.jsx)(U,{downloadHandler:(e,n)=>le(void 0,void 0,void 0,function*(){yield C(e,n),yield b()}),handleBrowse:P?()=>{o("browse")}:void 0,historyPaths:E,itemInfo:x})}))})]})},{urls:{historyPaths:`${d.Ay.STRINGS_URL}/${d.n2.DOWNLOAD_DIR}`,itemInfo:({params:e,itemDataGetter:n},o)=>n(e.downloadItemId,o)}}),"/download/:downloadItemId")}}]);
|
|
2
|
-
//# sourceMappingURL=544.
|
|
1
|
+
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[544],{20082:(e,n,o)=>{o.d(n,{A:()=>d});var t=o(71354),a=o.n(t),s=o(76314),l=o.n(s)()(a());l.push([e.id,".download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n","",{version:3,sources:["webpack://./src/components/download/style.css"],names:[],mappings:"AAAA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC",sourcesContent:[".download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n"],sourceRoot:""}]);const d=l},53213:(e,n,o)=>{o.d(n,{G:()=>a});var t=o(93226);const a=(e,n,o)=>e.post(`${t.Ay.STRINGS_URL}/${n}`,{string:o})},73070:(e,n,o)=>{o.d(n,{Y9:()=>h,fI:()=>c,xA:()=>m});var t=o(74848),a=(o(96540),o(46942)),s=o.n(a),l=o(32389),d=o(42695),i=o(67749);const r=e=>e||(0,t.jsx)(l.x6,{i18nKey:(0,d.j2)("na",i.KV.COMMON),children:"N/A"}),c=({title:e,text:n,className:o,titleWidth:a="four",noText:l})=>(0,t.jsxs)("div",{className:s()("ui row",o),children:[(0,t.jsx)("div",{className:s()(l?"sixteen":a,"wide column title"),children:(0,t.jsx)("div",{className:"ui tiny header",style:{overflow:"hidden"},children:e})}),!l&&(0,t.jsx)("div",{className:"column value",children:r(n)})]}),h=({title:e})=>(0,t.jsx)("div",{className:"ui row",children:(0,t.jsx)("div",{className:"sixteen wide column",children:(0,t.jsx)("div",{className:"ui blue section header",children:e})})}),m=e=>{var{className:n,children:o,columns:a,stackable:l}=e,d=function(e,n){var o={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(t=Object.getOwnPropertySymbols(e);a<t.length;a++)n.indexOf(t[a])<0&&Object.prototype.propertyIsEnumerable.call(e,t[a])&&(o[t[a]]=e[t[a]])}return o}(e,["className","children","columns","stackable"]);return(0,t.jsx)("div",Object.assign({className:s()("ui grid",{[`${a} column`]:!!a},{stackable:l},n)},d,{children:o}))}},79179:(e,n,o)=>{o.d(n,{A:()=>a});const t="favorite_directories",a={MODULE_URL:t,GROUPED_DIRECTORIES_URL:t+"/grouped_paths",DIRECTORIES_URL:t,DIRECTORIES_UPDATED:"favorite_directories_updated"}},88544:(e,n,o)=>{o.d(n,{A:()=>de});var t=o(74848),a=o(96540),s=o(13017),l=o(32389),d=o(93226),i=o(59315),r=o(4425),c=o(88939),h=o(56484),m=o(65385),u=o(99671),A=o(47603),p=o(36076),f=o(42695),w=o(53213),y=o(33968),x=o(8098),v=o(42191),j=o(79179),O=o(27725),g=o(67749),E=o(32728),b=o(83994),N=o(74416),C=o(50489);const I=(e,n,{formatSize:o})=>e.free_space<=0?e.path:` (${n((0,f.j2)("spaceFree",g.KV.COMMON),{defaultValue:"{{freeSpace}} free",replace:{freeSpace:o(e.free_space)}})})`,P=({pathInfo:e,downloadHandler:n,t:o})=>{const a=(0,N.k)();return(0,t.jsxs)("div",{className:"item",children:[(0,t.jsx)(b.A,{icon:r.A.FOLDER}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(C.A,{onClick:()=>n(e.path),caption:(0,t.jsxs)(t.Fragment,{children:[e.path,(0,t.jsx)("span",{className:"disk-info",children:I(e,o,a)})]})})})]})},B=(0,h.A)(function({downloadHandler:e,pathInfos:n,t:o}){return(0,t.jsx)("div",{className:"ui relaxed list",children:n.map(n=>(0,t.jsx)(P,{pathInfo:n,downloadHandler:e,t:o},n.path))})},{urls:{pathInfos:({paths:e},n)=>n.post(i.A.DISK_INFO_URL,{paths:e})}}),k=e=>0===e.paths.length?(0,t.jsx)(E.A,{title:(0,f.Tl)("No paths to display",e.t,g.KV.COMMON)}):(0,t.jsx)(B,Object.assign({},e));var R=o(78340);class D extends a.Component{constructor(){super(...arguments),this.formatParent=e=>{const{downloadHandler:n,t:o}=this.props;return(0,t.jsxs)(a.Fragment,{children:[(0,t.jsxs)("div",{className:"title",children:[(0,t.jsx)(b.A,{icon:r.A.DROPDOWN}),e.name]}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(k,{paths:e.paths,downloadHandler:n,t:o})})]},e.name)}}render(){const{groupedPaths:e,t:n}=this.props;return 0===e.length?(0,t.jsx)(E.A,{title:(0,f.Tl)("No paths to display",n,g.KV.COMMON)}):(0,t.jsx)(R.Ay,{className:"styled download-targets",children:e.map(this.formatParent)})}}const _=D;var S=o(90425);const M=(e,n,o)=>n?[...e,(0,t.jsxs)(O.A,{onClick:n,children:[(0,f.Tl)("Browse",o,g.KV.COMMON),(0,t.jsx)(b.A,{icon:r.A.BROWSE})]},"browse")]:e,T=({menuItems:e,title:n,handleBrowse:o,t:a,children:s})=>(0,t.jsxs)("div",{className:"mobile layout",children:[(0,t.jsx)(S.A,{selection:!0,caption:n,children:M(e,o,a)}),(0,t.jsx)("div",{className:"ui segment main-content",children:s})]});var H=o(96529),L=o(73070);const V=({menuItems:e,title:n,handleBrowse:o,t:a,children:s})=>(0,t.jsxs)(L.xA,{className:"normal layout",children:[(0,t.jsxs)("div",{className:"four wide column",children:[(0,t.jsx)("div",{className:"ui vertical fluid tabular menu",children:e}),!!o&&(0,t.jsx)(H.A,{className:"fluid basic",caption:(0,f.Tl)("Browse",a,g.KV.COMMON),onClick:o,icon:r.A.BROWSE})]}),(0,t.jsx)("div",{className:"twelve wide stretched column",children:(0,t.jsx)("div",{className:"ui segment main-content",children:s})})]}),U=(0,h.A)(e=>{const{t:n}=(0,l.Bd)(),[o,s]=(0,a.useState)("history"),d=a.useMemo(()=>{const{historyPaths:n,sharePaths:o,favoritePaths:a,itemInfo:s}=e;return(e=>{const{sharePaths:n,favoritePaths:o,historyPaths:a,dupePaths:s}=e;return[{name:"Previous",key:"history",list:a,component:({downloadHandler:e,t:n})=>(0,t.jsx)(k,{paths:a,downloadHandler:e,t:n})},{name:"Shared",key:"shared",list:n,component:({downloadHandler:e,t:o})=>(0,t.jsx)(_,{groupedPaths:n,downloadHandler:e,t:o})},{name:"Favorites",key:"favorites",list:o,component:({downloadHandler:e,t:n})=>(0,t.jsx)(_,{groupedPaths:o,downloadHandler:e,t:n})},{name:"Dupes",key:"dupes",list:s,component:({downloadHandler:e,t:n})=>(0,t.jsx)(k,{paths:s,downloadHandler:e,t:n})}]})({historyPaths:n,sharePaths:o,favoritePaths:a,dupePaths:s.dupe?s.dupe.paths.map(e=>(0,y._6)(e)):[]})},[]),i=d.find(e=>e.key===o);if(!i)return null;const r=d.map(e=>((e,n,o,a)=>(0,t.jsx)(O.A,{onClick:()=>o(e.key),active:n===e.key,children:(0,t.jsxs)(t.Fragment,{children:[a((0,f.j2)(e.key,g.KV.COMMON),e.name),!!e.list&&(0,t.jsx)("div",{className:"ui small label",children:e.list.length})]})},e.key))(e,o,s,n)),c=(0,x.vU)()?T:V;return(0,t.jsx)(c,{menuItems:r,title:i.name,handleBrowse:e.handleBrowse,t:n,children:(0,t.jsx)(i.component,{t:n,downloadHandler:e.downloadHandler})},i.key)},{urls:{sharePaths:v.A.GROUPED_ROOTS_GET_URL,favoritePaths:j.A.GROUPED_DIRECTORIES_URL}});var F=o(86038),K=o(85072),G=o.n(K),W=o(97825),Y=o.n(W),q=o(77659),$=o.n(q),z=o(55056),Z=o.n(z),J=o(10540),Q=o.n(J),X=o(41113),ee=o.n(X),ne=o(20082),oe={};oe.styleTagTransform=ee(),oe.setAttributes=Z(),oe.insert=$().bind(null,"head"),oe.domAPI=Y(),oe.insertStyleElement=Q(),G()(ne.A,oe),ne.A&&ne.A.locals&&ne.A.locals;var te=o(39364),ae=o(48249),se=o(70756),le=function(e,n,o,t){return new(o||(o=Promise))(function(a,s){function l(e){try{i(t.next(e))}catch(e){s(e)}}function d(e){try{i(t.throw(e))}catch(e){s(e)}}function i(e){var n;e.done?a(e.value):(n=e.value,n instanceof o?n:new o(function(e){e(n)})).then(l,d)}i((t=t.apply(e,n||[])).next())})};const de=(0,m.A)((0,h.A)(e=>{const{t:n}=(0,l.Bd)(),o=(0,s.Zp)(),a=(0,te.wV)(),h=(0,ae.F)(),{downloadHandler:m,itemInfo:x,userGetter:v,params:j,sessionItem:O,historyPaths:E,handleClose:b}=e,N=function(e,n){var o={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(t=Object.getOwnPropertySymbols(e);a<t.length;a++)n.indexOf(t[a])<0&&Object.prototype.propertyIsEnumerable.call(e,t[a])&&(o[t[a]]=e[t[a]])}return o}(e,["downloadHandler","itemInfo","userGetter","params","sessionItem","historyPaths","handleClose"]),C=(o,t)=>le(void 0,void 0,void 0,function*(){try{const n={itemInfo:x,user:v?v(j.downloadItemId,e):void 0,entity:O},a={target_name:t||x.name,target_directory:o,priority:F.Fm.DEFAULT};yield m(n,a,h)}catch(e){c.A.error({title:n((0,f.j2)("queueingFailed",g.KV.COMMON),{defaultValue:"Failed to queue the item {{item.name}}",replace:{item:x}}),message:e.message})}(0,p.bd)(()=>(0,w.G)(h,d.n2.DOWNLOAD_DIR,o),n)}),I={subHeader:x.name,title:(0,f.Tl)("Download",n,g.KV.COMMON),icon:r.A.DOWNLOAD,closable:!1},P=(0,se.z)(a,F.US.FILESYSTEM_VIEW);return(0,t.jsxs)(s.BV,{children:[(0,t.jsx)(s.qh,{path:"browse/*",element:(0,t.jsx)(A.d,Object.assign({onConfirm:e=>le(void 0,void 0,void 0,function*(){yield C((0,y.oK)(e),(0,y.WP)(e))}),initialPath:(()=>{const e=E.length>0?E[E.length-1]:"";return"directory"===x.type.id?e:e+x.name})(),selectMode:"directory"===x.type.id?g.bV.DIRECTORY:g.bV.FILE,historyId:i.A.LOCATION_DOWNLOAD,approveCaption:(0,f.Tl)("Download",n,g.KV.COMMON),modalComponent:u.A},I))}),(0,t.jsx)(s.qh,{index:!0,element:(0,t.jsx)(u.A,Object.assign({className:"download-dialog",fullHeight:!0},I,N,{children:(0,t.jsx)(U,{downloadHandler:(e,n)=>le(void 0,void 0,void 0,function*(){yield C(e,n),yield b()}),handleBrowse:P?()=>{o("browse")}:void 0,historyPaths:E,itemInfo:x})}))})]})},{urls:{historyPaths:`${d.Ay.STRINGS_URL}/${d.n2.DOWNLOAD_DIR}`,itemInfo:({params:e,itemDataGetter:n},o)=>n(e.downloadItemId,o)}}),"/download/:downloadItemId")}}]);
|
|
2
|
+
//# sourceMappingURL=544.23c1c02472b86725dbe7.chunk.js.map
|
|
Binary file
|
package/dist/js/{544.65aa9935aff661f699f2.chunk.js.map → 544.23c1c02472b86725dbe7.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/544.65aa9935aff661f699f2.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/components/download/style.css","webpack://airdcpp-webui/./src/services/api/HistoryApi.ts","webpack://airdcpp-webui/./src/components/semantic/Grid.tsx","webpack://airdcpp-webui/./src/constants/FavoriteDirectoryConstants.ts","webpack://airdcpp-webui/./src/components/download/layout/sections/PathListItem.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/PathList.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/AccordionTargets.tsx","webpack://airdcpp-webui/./src/components/download/layout/MobileDownloadLayout.tsx","webpack://airdcpp-webui/./src/components/download/layout/NormalDownloadLayout.tsx","webpack://airdcpp-webui/./src/components/download/layout/DownloadView.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/sections.tsx","webpack://airdcpp-webui/./src/components/download/style.css?6643","webpack://airdcpp-webui/./src/components/download/DownloadDialog.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, `.download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/download/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC\",\"sourcesContent\":[\".download-dialog .accordion.download-targets {\\n overflow-y: auto;\\n}\\n\\n.download-dialog .main-content,\\n.download-dialog .mobile.layout {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.download-dialog .main-content .list {\\n overflow-y: auto;\\n overflow-x: hidden;\\n}\\n\\n.download-dialog .content > div,\\n.download-dialog .ui.grid .column,\\n.download-dialog .main-content {\\n height: 100%;\\n}\\n\\n.download-dialog .download-handler {\\n display: flex;\\n align-items: baseline;\\n}\\n\\n.download-dialog .disk-info {\\n color: black;\\n font-size: 90%;\\n font-style: italic;\\n}\\n\\n.download-dialog .normal.layout .four.wide.column {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { APISocket } from '@/services/SocketService';\nimport HistoryConstants from '@/constants/HistoryConstants';\n\nexport const addHistory = (socket: APISocket, historyId: string, text: string) => {\n return socket.post(`${HistoryConstants.STRINGS_URL}/${historyId}`, {\n string: text,\n });\n};\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { Trans } from 'react-i18next';\r\nimport { toI18nKey } from '@/utils/TranslationUtils';\r\n\r\nimport * as UI from '@/types/ui';\r\n\r\nexport interface RowProps {\r\n title: React.ReactNode;\r\n text?: React.ReactNode;\r\n titleWidth?: string;\r\n className?: string;\r\n noText?: boolean;\r\n}\r\n\r\nconst formatText = (text: React.ReactNode) => {\r\n if (!!text) {\r\n return text;\r\n }\r\n\r\n return <Trans i18nKey={toI18nKey('na', UI.Modules.COMMON)}>N/A</Trans>;\r\n};\r\n\r\nexport const Row: React.FC<RowProps> = ({\r\n title,\r\n text,\r\n className,\r\n titleWidth = 'four',\r\n noText,\r\n}) => (\r\n <div className={classNames('ui row', className)}>\r\n <div className={classNames(noText ? 'sixteen' : titleWidth, 'wide column title')}>\r\n <div className=\"ui tiny header\" style={{ overflow: 'hidden' }}>\r\n {title}\r\n </div>\r\n </div>\r\n {!noText && <div className=\"column value\">{formatText(text)}</div>}\r\n </div>\r\n);\r\n\r\nexport interface HeaderProps {\r\n title: React.ReactNode;\r\n}\r\n\r\nexport const Header: React.FC<HeaderProps> = ({ title }) => (\r\n <div className=\"ui row\">\r\n <div className=\"sixteen wide column\">\r\n <div className=\"ui blue section header\">{title}</div>\r\n </div>\r\n </div>\r\n);\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n columns?: string;\r\n stackable?: boolean;\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({\r\n className,\r\n children,\r\n columns,\r\n stackable,\r\n ...other\r\n}) => (\r\n <div\r\n className={classNames(\r\n 'ui grid',\r\n //`${columns} column`,\r\n { [`${columns} column`]: !!columns },\r\n { stackable: stackable },\r\n className,\r\n )}\r\n {...other}\r\n >\r\n {children}\r\n </div>\r\n);\r\n","const MODULE_URL = 'favorite_directories';\nexport default {\n MODULE_URL: MODULE_URL,\n\n GROUPED_DIRECTORIES_URL: MODULE_URL + '/grouped_paths',\n DIRECTORIES_URL: MODULE_URL,\n\n DIRECTORIES_UPDATED: 'favorite_directories_updated',\n};\n","import * as React from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport Icon from '@/components/semantic/Icon';\n\nimport { toI18nKey } from '@/utils/TranslationUtils';\nimport { Formatter, useFormatter } from '@/context/FormatterContext';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\nimport { PathDownloadHandler } from '../../types';\nimport LinkButton from '@/components/semantic/LinkButton';\n\ninterface PathItemProps {\n pathInfo: API.DiskSpaceInfo;\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nconst formatFreeSpace = (\n pathInfo: API.DiskSpaceInfo,\n t: UI.TranslateF,\n { formatSize }: Formatter,\n) => {\n if (pathInfo.free_space <= 0) {\n return pathInfo.path;\n }\n\n return ` (${t(toI18nKey('spaceFree', UI.Modules.COMMON), {\n defaultValue: '{{freeSpace}} free',\n replace: {\n freeSpace: formatSize(pathInfo.free_space),\n },\n })})`;\n};\n\nexport const PathListItem: React.FC<PathItemProps> = ({\n pathInfo,\n downloadHandler,\n t,\n}) => {\n const formatter = useFormatter();\n return (\n <div className=\"item\">\n <Icon icon={IconConstants.FOLDER} />\n <div className=\"content\">\n <LinkButton\n onClick={() => downloadHandler(pathInfo.path)}\n caption={\n <>\n {pathInfo.path}\n <span className=\"disk-info\">{formatFreeSpace(pathInfo, t, formatter)}</span>\n </>\n }\n />\n </div>\n </div>\n );\n};\n","import FilesystemConstants from '@/constants/FilesystemConstants';\r\n\r\nimport DataProviderDecorator from '@/decorators/DataProviderDecorator';\r\n\r\nimport Message from '@/components/semantic/Message';\r\n\r\nimport { translate } from '@/utils/TranslationUtils';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\n\r\nimport { PathDownloadHandler } from '../../types';\r\nimport { PathListItem } from './PathListItem';\r\n\r\ninterface PathListProps {\r\n // Function handling the path selection\r\n downloadHandler: PathDownloadHandler;\r\n\r\n // Array of paths to list\r\n paths: string[];\r\n t: UI.TranslateF;\r\n}\r\n\r\ninterface PathListDataProps {\r\n pathInfos: API.DiskSpaceInfo[];\r\n}\r\n\r\nconst PathListWithData = DataProviderDecorator<PathListProps, PathListDataProps>(\r\n function PathList({ downloadHandler, pathInfos, t }) {\r\n return (\r\n <div className=\"ui relaxed list\">\r\n {pathInfos.map((pathInfo) => (\r\n <PathListItem\r\n key={pathInfo.path}\r\n pathInfo={pathInfo}\r\n downloadHandler={downloadHandler}\r\n t={t}\r\n />\r\n ))}\r\n </div>\r\n );\r\n },\r\n {\r\n urls: {\r\n pathInfos: ({ paths }, socket) =>\r\n socket.post(FilesystemConstants.DISK_INFO_URL, { paths }),\r\n },\r\n },\r\n);\r\n\r\nconst PathList: React.FC<PathListProps> = (props) => {\r\n if (props.paths.length === 0) {\r\n return (\r\n <Message title={translate('No paths to display', props.t, UI.Modules.COMMON)} />\r\n );\r\n }\r\n\r\n return <PathListWithData {...props} />;\r\n};\r\n\r\nexport default PathList;\r\n","import React, { Component } from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport Accordion from '@/components/semantic/Accordion';\nimport Icon from '@/components/semantic/Icon';\nimport Message from '@/components/semantic/Message';\n\nimport { translate } from '@/utils/TranslationUtils';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\nimport { PathDownloadHandler } from '../../types';\n\nimport PathList from './PathList';\n\ninterface AccordionTargetsProps {\n // Grouped paths to list\n groupedPaths: API.GroupedPath[];\n\n // Function handling the path selection. Receives the selected path as argument.\n downloadHandler: PathDownloadHandler;\n\n t: UI.TranslateF;\n}\n\nclass AccordionTargets extends Component<AccordionTargetsProps> {\n formatParent = (parent: API.GroupedPath) => {\n const { downloadHandler, t } = this.props;\n return (\n <React.Fragment key={parent.name}>\n <div className=\"title\">\n <Icon icon={IconConstants.DROPDOWN} />\n {parent.name}\n </div>\n\n <div className=\"content\">\n <PathList paths={parent.paths} downloadHandler={downloadHandler} t={t} />\n </div>\n </React.Fragment>\n );\n };\n\n render() {\n const { groupedPaths, t } = this.props;\n if (groupedPaths.length === 0) {\n return <Message title={translate('No paths to display', t, UI.Modules.COMMON)} />;\n }\n\n return (\n <Accordion className=\"styled download-targets\">\n {groupedPaths.map(this.formatParent)}\n </Accordion>\n );\n }\n}\n\nexport default AccordionTargets;\n","import * as React from 'react';\r\n\r\nimport { translate } from '@/utils/TranslationUtils';\r\n\r\nimport Dropdown from '@/components/semantic/Dropdown';\r\nimport MenuItemLink from '@/components/semantic/MenuItemLink';\r\n\r\nimport * as UI from '@/types/ui';\r\n\r\nimport Icon from '@/components/semantic/Icon';\r\nimport { BrowseHandler, DownloadLayoutProps } from '../types';\r\nimport IconConstants from '@/constants/IconConstants';\r\n\r\nconst appendBrowseItem = (\r\n menuItems: React.ReactNode[],\r\n handleBrowse: BrowseHandler,\r\n t: UI.TranslateF,\r\n) => {\r\n if (!handleBrowse) {\r\n return menuItems;\r\n }\r\n\r\n return [\r\n ...menuItems,\r\n <MenuItemLink key=\"browse\" onClick={handleBrowse}>\r\n {translate('Browse', t, UI.Modules.COMMON)}\r\n <Icon icon={IconConstants.BROWSE} />\r\n </MenuItemLink>,\r\n ];\r\n};\r\n\r\nexport const MobileDownloadLayout: React.FC<DownloadLayoutProps> = ({\r\n menuItems,\r\n title,\r\n handleBrowse,\r\n t,\r\n children,\r\n}) => (\r\n <div className=\"mobile layout\">\r\n <Dropdown selection={true} caption={title}>\r\n {appendBrowseItem(menuItems, handleBrowse, t)}\r\n </Dropdown>\r\n <div className=\"ui segment main-content\">{children}</div>\r\n </div>\r\n);\r\n","import * as React from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport { translate } from '@/utils/TranslationUtils';\n\nimport Button from '@/components/semantic/Button';\nimport { Grid } from '@/components/semantic/Grid';\n\nimport * as UI from '@/types/ui';\nimport { DownloadLayoutProps } from '../types';\n\nexport const NormalDownloadLayout: React.FC<DownloadLayoutProps> = ({\n menuItems,\n title,\n handleBrowse,\n t,\n children,\n}) => (\n <Grid className=\"normal layout\">\n <div className=\"four wide column\">\n <div className=\"ui vertical fluid tabular menu\">{menuItems}</div>\n {!!handleBrowse && (\n <Button\n className=\"fluid basic\"\n caption={translate('Browse', t, UI.Modules.COMMON)}\n onClick={handleBrowse}\n icon={IconConstants.BROWSE}\n />\n )}\n </div>\n <div className=\"twelve wide stretched column\">\n <div className=\"ui segment main-content\">{children}</div>\n </div>\n </Grid>\n);\n","import { useState } from 'react';\r\nimport * as React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { getParentPath } from '@/utils/FileUtils';\r\nimport { usingMobileLayout } from '@/utils/BrowserUtils';\r\nimport { toI18nKey } from '@/utils/TranslationUtils';\r\n\r\nimport ShareConstants from '@/constants/ShareConstants';\r\nimport FavoriteDirectoryConstants from '@/constants/FavoriteDirectoryConstants';\r\n\r\nimport MenuItemLink from '@/components/semantic/MenuItemLink';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\n\r\nimport { getDownloadSections, DownloadSection } from './sections';\r\nimport { BrowseHandler, PathDownloadHandler } from '../types';\r\n\r\nimport { MobileDownloadLayout } from './MobileDownloadLayout';\r\nimport { NormalDownloadLayout } from './NormalDownloadLayout';\r\nimport DataProviderDecorator from '@/decorators/DataProviderDecorator';\r\n\r\nexport interface DownloadLayoutDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n sharePaths: API.GroupedPath[];\r\n favoritePaths: API.GroupedPath[];\r\n}\r\n\r\nexport interface DownloadLayoutProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n downloadHandler: PathDownloadHandler;\r\n handleBrowse: BrowseHandler;\r\n\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\nconst getMenuItem = (\r\n section: DownloadSection,\r\n activeSection: string,\r\n onClick: (key: string) => void,\r\n t: UI.TranslateF,\r\n) => (\r\n <MenuItemLink\r\n key={section.key}\r\n onClick={() => onClick(section.key)}\r\n active={activeSection === section.key}\r\n >\r\n <>\r\n {t(toI18nKey(section.key, UI.Modules.COMMON), section.name)}\r\n {!!section.list && <div className=\"ui small label\">{section.list.length}</div>}\r\n </>\r\n </MenuItemLink>\r\n);\r\n\r\ntype Props<ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo> =\r\n DownloadLayoutProps<ItemT> & DownloadLayoutDataProps<ItemT>;\r\n\r\nconst DownloadLayout: React.FC<Props> = (props) => {\r\n const { t } = useTranslation();\r\n const [activeSectionKey, setActiveSectionKey] = useState('history');\r\n\r\n const sections = React.useMemo(() => {\r\n const { historyPaths, sharePaths, favoritePaths, itemInfo } = props;\r\n const dupePaths = itemInfo.dupe\r\n ? itemInfo.dupe.paths.map((path) => getParentPath(path))\r\n : [];\r\n\r\n return getDownloadSections({\r\n historyPaths,\r\n sharePaths,\r\n favoritePaths,\r\n dupePaths,\r\n });\r\n }, []);\r\n\r\n const activeSection = sections.find((s) => s.key === activeSectionKey);\r\n if (!activeSection) {\r\n return null;\r\n }\r\n\r\n const menuItems = sections.map((s) =>\r\n getMenuItem(s, activeSectionKey, setActiveSectionKey, t),\r\n );\r\n\r\n const Component = usingMobileLayout() ? MobileDownloadLayout : NormalDownloadLayout;\r\n return (\r\n <Component\r\n key={activeSection.key} // Ensure that section-specific data is refetched\r\n menuItems={menuItems}\r\n title={activeSection.name}\r\n handleBrowse={props.handleBrowse}\r\n t={t}\r\n >\r\n <activeSection.component t={t} downloadHandler={props.downloadHandler} />\r\n </Component>\r\n );\r\n};\r\n\r\nconst DownloadLayoutDecorated = DataProviderDecorator<\r\n DownloadLayoutProps,\r\n DownloadLayoutDataProps\r\n>(DownloadLayout, {\r\n urls: {\r\n sharePaths: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n favoritePaths: FavoriteDirectoryConstants.GROUPED_DIRECTORIES_URL,\r\n },\r\n});\r\n\r\nexport { DownloadLayoutDecorated as DownloadLayout };\r\n","import * as React from 'react';\n\nimport PathList from './PathList';\nimport AccordionTargets from './AccordionTargets';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\n\nimport { PathDownloadHandler } from '../../types';\n\nexport interface DownloadSectionChildProps {\n t: UI.TranslateF;\n downloadHandler: PathDownloadHandler;\n}\n\nexport interface DownloadSection {\n name: string;\n key: string;\n list?: string[] | API.GroupedPath[];\n component: React.ComponentType<DownloadSectionChildProps>;\n}\n\ninterface PathInfo {\n sharePaths: API.GroupedPath[];\n favoritePaths: API.GroupedPath[];\n historyPaths: string[];\n dupePaths: string[];\n}\n\nexport const getDownloadSections = (pathInfo: PathInfo) => {\n const { sharePaths, favoritePaths, historyPaths, dupePaths } = pathInfo;\n\n const sections: DownloadSection[] = [\n {\n name: 'Previous',\n key: 'history',\n list: historyPaths,\n component: ({ downloadHandler, t }) => (\n <PathList paths={historyPaths} downloadHandler={downloadHandler} t={t} />\n ),\n },\n {\n name: 'Shared',\n key: 'shared',\n list: sharePaths,\n component: ({ downloadHandler, t }) => (\n <AccordionTargets\n groupedPaths={sharePaths}\n downloadHandler={downloadHandler}\n t={t}\n />\n ),\n },\n {\n name: 'Favorites',\n key: 'favorites',\n list: favoritePaths,\n component: ({ downloadHandler, t }) => (\n <AccordionTargets\n groupedPaths={favoritePaths}\n downloadHandler={downloadHandler}\n t={t}\n />\n ),\n },\n {\n name: 'Dupes',\n key: 'dupes',\n list: dupePaths,\n component: ({ downloadHandler, t }) => (\n <PathList paths={dupePaths} downloadHandler={downloadHandler} t={t} />\n ),\n },\n ];\n\n return sections;\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;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as React from 'react';\r\nimport { Route, Routes, useNavigate } from 'react-router';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n default as HistoryConstants,\r\n HistoryStringEnum,\r\n} from '@/constants/HistoryConstants';\r\nimport FilesystemConstants from '@/constants/FilesystemConstants';\r\nimport IconConstants from '@/constants/IconConstants';\r\n\r\nimport NotificationActions from '@/actions/NotificationActions';\r\n\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n} from '@/decorators/DataProviderDecorator';\r\nimport ModalRouteDecorator, {\r\n ModalRouteDecoratorChildProps,\r\n} from '@/decorators/ModalRouteDecorator';\r\n\r\nimport RouteModal, { RouteModalProps } from '@/components/semantic/RouteModal';\r\nimport { FileBrowserDialog } from '@/components/filebrowser';\r\n\r\nimport { runBackgroundSocketAction } from '@/utils/ActionUtils';\r\nimport { toI18nKey, translate } from '@/utils/TranslationUtils';\r\nimport { addHistory } from '@/services/api/HistoryApi';\r\n\r\nimport { DownloadLayout } from './layout';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\nimport { PathDownloadHandler } from './types';\r\n\r\nimport './style.css';\r\nimport { useSession } from '@/context/AppStoreContext';\r\nimport { useSocket } from '@/context/SocketContext';\r\nimport { getFileName, getFilePath } from '@/utils/FileUtils';\r\nimport { hasAccess } from '@/utils/AuthUtils';\r\n\r\nexport type DownloadDialogProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> = UI.ItemDownloadHandler<ItemT, Props<ItemT>>;\r\n\r\ntype DownloadDialogRouteProps = ModalRouteDecoratorChildProps;\r\n\r\ninterface DownloadDialogDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> extends DataProviderDecoratorChildProps {\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\ntype Props<ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo> =\r\n DownloadDialogProps<ItemT> & DownloadDialogDataProps<ItemT> & DownloadDialogRouteProps;\r\n\r\nconst DownloadDialog: React.FC<Props> = (props) => {\r\n const { t } = useTranslation();\r\n const navigate = useNavigate();\r\n const session = useSession();\r\n const socket = useSocket();\r\n\r\n const {\r\n downloadHandler,\r\n itemInfo,\r\n userGetter,\r\n params,\r\n sessionItem,\r\n historyPaths,\r\n handleClose,\r\n ...other\r\n } = props;\r\n\r\n const handleDownload: PathDownloadHandler = async (targetPath, targetFilename) => {\r\n try {\r\n const itemData = {\r\n itemInfo,\r\n user: !!userGetter ? userGetter(params.downloadItemId!, props) : undefined,\r\n entity: sessionItem,\r\n };\r\n\r\n const downloadData = {\r\n target_name: !!targetFilename ? targetFilename : itemInfo.name,\r\n target_directory: targetPath,\r\n priority: API.QueuePriorityEnum.DEFAULT,\r\n };\r\n\r\n await downloadHandler(itemData, downloadData, socket);\r\n } catch (e) {\r\n NotificationActions.error({\r\n title: t(toI18nKey('queueingFailed', UI.Modules.COMMON), {\r\n defaultValue: 'Failed to queue the item {{item.name}}',\r\n replace: {\r\n item: itemInfo,\r\n },\r\n }),\r\n message: e.message,\r\n });\r\n }\r\n\r\n runBackgroundSocketAction(\r\n () => addHistory(socket, HistoryStringEnum.DOWNLOAD_DIR, targetPath),\r\n t,\r\n );\r\n };\r\n\r\n const getInitialBrowsePath = () => {\r\n const path = historyPaths.length > 0 ? historyPaths[historyPaths.length - 1] : '';\r\n return itemInfo.type.id === 'directory' ? path : path + itemInfo.name;\r\n };\r\n\r\n const handleBrowse = () => {\r\n navigate(`browse`);\r\n };\r\n\r\n const commonDialogProps: RouteModalProps = {\r\n subHeader: itemInfo.name,\r\n title: translate('Download', t, UI.Modules.COMMON),\r\n icon: IconConstants.DOWNLOAD,\r\n closable: false,\r\n };\r\n\r\n const hasFileBrowserAccess = hasAccess(session, API.AccessEnum.FILESYSTEM_VIEW);\r\n return (\r\n <Routes>\r\n <Route\r\n path=\"browse/*\"\r\n element={\r\n <FileBrowserDialog\r\n onConfirm={async (path) => {\r\n await handleDownload(getFilePath(path), getFileName(path));\r\n }}\r\n initialPath={getInitialBrowsePath()}\r\n selectMode={\r\n itemInfo.type.id === 'directory'\r\n ? UI.FileSelectModeEnum.DIRECTORY\r\n : UI.FileSelectModeEnum.FILE\r\n }\r\n historyId={FilesystemConstants.LOCATION_DOWNLOAD}\r\n approveCaption={translate('Download', t, UI.Modules.COMMON)}\r\n modalComponent={RouteModal}\r\n {...commonDialogProps}\r\n />\r\n }\r\n />\r\n <Route\r\n index\r\n element={\r\n <RouteModal\r\n className=\"download-dialog\"\r\n fullHeight={true}\r\n {...commonDialogProps}\r\n {...other}\r\n >\r\n <DownloadLayout\r\n downloadHandler={async (targetPath, targetFilename) => {\r\n await handleDownload(targetPath, targetFilename);\r\n await handleClose();\r\n }}\r\n handleBrowse={hasFileBrowserAccess ? handleBrowse : undefined}\r\n historyPaths={historyPaths}\r\n itemInfo={itemInfo}\r\n />\r\n </RouteModal>\r\n }\r\n />\r\n </Routes>\r\n );\r\n};\r\n\r\nexport default ModalRouteDecorator<DownloadDialogProps>(\r\n DataProviderDecorator<\r\n DownloadDialogProps & DownloadDialogRouteProps,\r\n DownloadDialogDataProps\r\n >(DownloadDialog, {\r\n urls: {\r\n historyPaths: `${HistoryConstants.STRINGS_URL}/${HistoryStringEnum.DOWNLOAD_DIR}`,\r\n itemInfo: ({ params, itemDataGetter }, socket) => {\r\n return itemDataGetter(params.downloadItemId!, socket);\r\n },\r\n },\r\n }),\r\n '/download/:downloadItemId',\r\n);\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","addHistory","socket","historyId","text","post","STRINGS_URL","string","formatText","i18nKey","COMMON","Row","title","className","titleWidth","noText","style","overflow","Header","Grid","children","columns","stackable","other","MODULE_URL","GROUPED_DIRECTORIES_URL","DIRECTORIES_URL","DIRECTORIES_UPDATED","formatFreeSpace","pathInfo","t","formatSize","free_space","path","defaultValue","replace","freeSpace","PathListItem","downloadHandler","formatter","Icon","icon","IconConstants","FOLDER","LinkButton","onClick","caption","PathListWithData","DataProviderDecorator","pathInfos","map","urls","paths","FilesystemConstants","DISK_INFO_URL","props","length","Message","AccordionTargets","Component","formatParent","parent","this","DROPDOWN","name","render","groupedPaths","Accordion","appendBrowseItem","menuItems","handleBrowse","MenuItemLink","BROWSE","MobileDownloadLayout","Dropdown","selection","NormalDownloadLayout","Button","DownloadLayoutDecorated","activeSectionKey","setActiveSectionKey","useState","sections","historyPaths","sharePaths","favoritePaths","itemInfo","dupePaths","key","list","component","getDownloadSections","dupe","activeSection","find","s","section","active","getMenuItem","ShareConstants","GROUPED_ROOTS_GET_URL","FavoriteDirectoryConstants","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","ModalRouteDecorator","navigate","session","userGetter","params","sessionItem","handleClose","handleDownload","targetPath","targetFilename","itemData","user","downloadItemId","undefined","entity","downloadData","target_name","target_directory","priority","DEFAULT","e","NotificationActions","error","item","message","DOWNLOAD_DIR","commonDialogProps","subHeader","DOWNLOAD","closable","hasFileBrowserAccess","FILESYSTEM_VIEW","element","onConfirm","initialPath","type","getInitialBrowsePath","selectMode","DIRECTORY","FILE","LOCATION_DOWNLOAD","approveCaption","modalComponent","RouteModal","index","fullHeight","HistoryConstants","itemDataGetter"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/544.23c1c02472b86725dbe7.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/components/download/style.css","webpack://airdcpp-webui/./src/services/api/HistoryApi.ts","webpack://airdcpp-webui/./src/components/semantic/Grid.tsx","webpack://airdcpp-webui/./src/constants/FavoriteDirectoryConstants.ts","webpack://airdcpp-webui/./src/components/download/layout/sections/PathListItem.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/PathList.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/AccordionTargets.tsx","webpack://airdcpp-webui/./src/components/download/layout/MobileDownloadLayout.tsx","webpack://airdcpp-webui/./src/components/download/layout/NormalDownloadLayout.tsx","webpack://airdcpp-webui/./src/components/download/layout/DownloadView.tsx","webpack://airdcpp-webui/./src/components/download/layout/sections/sections.tsx","webpack://airdcpp-webui/./src/components/download/style.css?6643","webpack://airdcpp-webui/./src/components/download/DownloadDialog.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, `.download-dialog .accordion.download-targets {\n overflow-y: auto;\n}\n\n.download-dialog .main-content,\n.download-dialog .mobile.layout {\n display: flex;\n flex-direction: column;\n}\n\n.download-dialog .main-content .list {\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.download-dialog .content > div,\n.download-dialog .ui.grid .column,\n.download-dialog .main-content {\n height: 100%;\n}\n\n.download-dialog .download-handler {\n display: flex;\n align-items: baseline;\n}\n\n.download-dialog .disk-info {\n color: black;\n font-size: 90%;\n font-style: italic;\n}\n\n.download-dialog .normal.layout .four.wide.column {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/download/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC\",\"sourcesContent\":[\".download-dialog .accordion.download-targets {\\n overflow-y: auto;\\n}\\n\\n.download-dialog .main-content,\\n.download-dialog .mobile.layout {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.download-dialog .main-content .list {\\n overflow-y: auto;\\n overflow-x: hidden;\\n}\\n\\n.download-dialog .content > div,\\n.download-dialog .ui.grid .column,\\n.download-dialog .main-content {\\n height: 100%;\\n}\\n\\n.download-dialog .download-handler {\\n display: flex;\\n align-items: baseline;\\n}\\n\\n.download-dialog .disk-info {\\n color: black;\\n font-size: 90%;\\n font-style: italic;\\n}\\n\\n.download-dialog .normal.layout .four.wide.column {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { APISocket } from '@/services/SocketService';\nimport HistoryConstants from '@/constants/HistoryConstants';\n\nexport const addHistory = (socket: APISocket, historyId: string, text: string) => {\n return socket.post(`${HistoryConstants.STRINGS_URL}/${historyId}`, {\n string: text,\n });\n};\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { Trans } from 'react-i18next';\r\nimport { toI18nKey } from '@/utils/TranslationUtils';\r\n\r\nimport * as UI from '@/types/ui';\r\n\r\nexport interface RowProps {\r\n title: React.ReactNode;\r\n text?: React.ReactNode;\r\n titleWidth?: string;\r\n className?: string;\r\n noText?: boolean;\r\n}\r\n\r\nconst formatText = (text: React.ReactNode) => {\r\n if (!!text) {\r\n return text;\r\n }\r\n\r\n return <Trans i18nKey={toI18nKey('na', UI.Modules.COMMON)}>N/A</Trans>;\r\n};\r\n\r\nexport const Row: React.FC<RowProps> = ({\r\n title,\r\n text,\r\n className,\r\n titleWidth = 'four',\r\n noText,\r\n}) => (\r\n <div className={classNames('ui row', className)}>\r\n <div className={classNames(noText ? 'sixteen' : titleWidth, 'wide column title')}>\r\n <div className=\"ui tiny header\" style={{ overflow: 'hidden' }}>\r\n {title}\r\n </div>\r\n </div>\r\n {!noText && <div className=\"column value\">{formatText(text)}</div>}\r\n </div>\r\n);\r\n\r\nexport interface HeaderProps {\r\n title: React.ReactNode;\r\n}\r\n\r\nexport const Header: React.FC<HeaderProps> = ({ title }) => (\r\n <div className=\"ui row\">\r\n <div className=\"sixteen wide column\">\r\n <div className=\"ui blue section header\">{title}</div>\r\n </div>\r\n </div>\r\n);\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n columns?: string;\r\n stackable?: boolean;\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({\r\n className,\r\n children,\r\n columns,\r\n stackable,\r\n ...other\r\n}) => (\r\n <div\r\n className={classNames(\r\n 'ui grid',\r\n //`${columns} column`,\r\n { [`${columns} column`]: !!columns },\r\n { stackable: stackable },\r\n className,\r\n )}\r\n {...other}\r\n >\r\n {children}\r\n </div>\r\n);\r\n","const MODULE_URL = 'favorite_directories';\nexport default {\n MODULE_URL: MODULE_URL,\n\n GROUPED_DIRECTORIES_URL: MODULE_URL + '/grouped_paths',\n DIRECTORIES_URL: MODULE_URL,\n\n DIRECTORIES_UPDATED: 'favorite_directories_updated',\n};\n","import * as React from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport Icon from '@/components/semantic/Icon';\n\nimport { toI18nKey } from '@/utils/TranslationUtils';\nimport { Formatter, useFormatter } from '@/context/FormatterContext';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\nimport { PathDownloadHandler } from '../../types';\nimport LinkButton from '@/components/semantic/LinkButton';\n\ninterface PathItemProps {\n pathInfo: API.DiskSpaceInfo;\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nconst formatFreeSpace = (\n pathInfo: API.DiskSpaceInfo,\n t: UI.TranslateF,\n { formatSize }: Formatter,\n) => {\n if (pathInfo.free_space <= 0) {\n return pathInfo.path;\n }\n\n return ` (${t(toI18nKey('spaceFree', UI.Modules.COMMON), {\n defaultValue: '{{freeSpace}} free',\n replace: {\n freeSpace: formatSize(pathInfo.free_space),\n },\n })})`;\n};\n\nexport const PathListItem: React.FC<PathItemProps> = ({\n pathInfo,\n downloadHandler,\n t,\n}) => {\n const formatter = useFormatter();\n return (\n <div className=\"item\">\n <Icon icon={IconConstants.FOLDER} />\n <div className=\"content\">\n <LinkButton\n onClick={() => downloadHandler(pathInfo.path)}\n caption={\n <>\n {pathInfo.path}\n <span className=\"disk-info\">{formatFreeSpace(pathInfo, t, formatter)}</span>\n </>\n }\n />\n </div>\n </div>\n );\n};\n","import FilesystemConstants from '@/constants/FilesystemConstants';\r\n\r\nimport DataProviderDecorator from '@/decorators/DataProviderDecorator';\r\n\r\nimport Message from '@/components/semantic/Message';\r\n\r\nimport { translate } from '@/utils/TranslationUtils';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\n\r\nimport { PathDownloadHandler } from '../../types';\r\nimport { PathListItem } from './PathListItem';\r\n\r\ninterface PathListProps {\r\n // Function handling the path selection\r\n downloadHandler: PathDownloadHandler;\r\n\r\n // Array of paths to list\r\n paths: string[];\r\n t: UI.TranslateF;\r\n}\r\n\r\ninterface PathListDataProps {\r\n pathInfos: API.DiskSpaceInfo[];\r\n}\r\n\r\nconst PathListWithData = DataProviderDecorator<PathListProps, PathListDataProps>(\r\n function PathList({ downloadHandler, pathInfos, t }) {\r\n return (\r\n <div className=\"ui relaxed list\">\r\n {pathInfos.map((pathInfo) => (\r\n <PathListItem\r\n key={pathInfo.path}\r\n pathInfo={pathInfo}\r\n downloadHandler={downloadHandler}\r\n t={t}\r\n />\r\n ))}\r\n </div>\r\n );\r\n },\r\n {\r\n urls: {\r\n pathInfos: ({ paths }, socket) =>\r\n socket.post(FilesystemConstants.DISK_INFO_URL, { paths }),\r\n },\r\n },\r\n);\r\n\r\nconst PathList: React.FC<PathListProps> = (props) => {\r\n if (props.paths.length === 0) {\r\n return (\r\n <Message title={translate('No paths to display', props.t, UI.Modules.COMMON)} />\r\n );\r\n }\r\n\r\n return <PathListWithData {...props} />;\r\n};\r\n\r\nexport default PathList;\r\n","import React, { Component } from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport Accordion from '@/components/semantic/Accordion';\nimport Icon from '@/components/semantic/Icon';\nimport Message from '@/components/semantic/Message';\n\nimport { translate } from '@/utils/TranslationUtils';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\nimport { PathDownloadHandler } from '../../types';\n\nimport PathList from './PathList';\n\ninterface AccordionTargetsProps {\n // Grouped paths to list\n groupedPaths: API.GroupedPath[];\n\n // Function handling the path selection. Receives the selected path as argument.\n downloadHandler: PathDownloadHandler;\n\n t: UI.TranslateF;\n}\n\nclass AccordionTargets extends Component<AccordionTargetsProps> {\n formatParent = (parent: API.GroupedPath) => {\n const { downloadHandler, t } = this.props;\n return (\n <React.Fragment key={parent.name}>\n <div className=\"title\">\n <Icon icon={IconConstants.DROPDOWN} />\n {parent.name}\n </div>\n\n <div className=\"content\">\n <PathList paths={parent.paths} downloadHandler={downloadHandler} t={t} />\n </div>\n </React.Fragment>\n );\n };\n\n render() {\n const { groupedPaths, t } = this.props;\n if (groupedPaths.length === 0) {\n return <Message title={translate('No paths to display', t, UI.Modules.COMMON)} />;\n }\n\n return (\n <Accordion className=\"styled download-targets\">\n {groupedPaths.map(this.formatParent)}\n </Accordion>\n );\n }\n}\n\nexport default AccordionTargets;\n","import * as React from 'react';\r\n\r\nimport { translate } from '@/utils/TranslationUtils';\r\n\r\nimport Dropdown from '@/components/semantic/Dropdown';\r\nimport MenuItemLink from '@/components/semantic/MenuItemLink';\r\n\r\nimport * as UI from '@/types/ui';\r\n\r\nimport Icon from '@/components/semantic/Icon';\r\nimport { BrowseHandler, DownloadLayoutProps } from '../types';\r\nimport IconConstants from '@/constants/IconConstants';\r\n\r\nconst appendBrowseItem = (\r\n menuItems: React.ReactNode[],\r\n handleBrowse: BrowseHandler,\r\n t: UI.TranslateF,\r\n) => {\r\n if (!handleBrowse) {\r\n return menuItems;\r\n }\r\n\r\n return [\r\n ...menuItems,\r\n <MenuItemLink key=\"browse\" onClick={handleBrowse}>\r\n {translate('Browse', t, UI.Modules.COMMON)}\r\n <Icon icon={IconConstants.BROWSE} />\r\n </MenuItemLink>,\r\n ];\r\n};\r\n\r\nexport const MobileDownloadLayout: React.FC<DownloadLayoutProps> = ({\r\n menuItems,\r\n title,\r\n handleBrowse,\r\n t,\r\n children,\r\n}) => (\r\n <div className=\"mobile layout\">\r\n <Dropdown selection={true} caption={title}>\r\n {appendBrowseItem(menuItems, handleBrowse, t)}\r\n </Dropdown>\r\n <div className=\"ui segment main-content\">{children}</div>\r\n </div>\r\n);\r\n","import * as React from 'react';\n\nimport IconConstants from '@/constants/IconConstants';\n\nimport { translate } from '@/utils/TranslationUtils';\n\nimport Button from '@/components/semantic/Button';\nimport { Grid } from '@/components/semantic/Grid';\n\nimport * as UI from '@/types/ui';\nimport { DownloadLayoutProps } from '../types';\n\nexport const NormalDownloadLayout: React.FC<DownloadLayoutProps> = ({\n menuItems,\n title,\n handleBrowse,\n t,\n children,\n}) => (\n <Grid className=\"normal layout\">\n <div className=\"four wide column\">\n <div className=\"ui vertical fluid tabular menu\">{menuItems}</div>\n {!!handleBrowse && (\n <Button\n className=\"fluid basic\"\n caption={translate('Browse', t, UI.Modules.COMMON)}\n onClick={handleBrowse}\n icon={IconConstants.BROWSE}\n />\n )}\n </div>\n <div className=\"twelve wide stretched column\">\n <div className=\"ui segment main-content\">{children}</div>\n </div>\n </Grid>\n);\n","import { useState } from 'react';\r\nimport * as React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { getParentPath } from '@/utils/FileUtils';\r\nimport { usingMobileLayout } from '@/utils/BrowserUtils';\r\nimport { toI18nKey } from '@/utils/TranslationUtils';\r\n\r\nimport ShareConstants from '@/constants/ShareConstants';\r\nimport FavoriteDirectoryConstants from '@/constants/FavoriteDirectoryConstants';\r\n\r\nimport MenuItemLink from '@/components/semantic/MenuItemLink';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\n\r\nimport { getDownloadSections, DownloadSection } from './sections';\r\nimport { BrowseHandler, PathDownloadHandler } from '../types';\r\n\r\nimport { MobileDownloadLayout } from './MobileDownloadLayout';\r\nimport { NormalDownloadLayout } from './NormalDownloadLayout';\r\nimport DataProviderDecorator from '@/decorators/DataProviderDecorator';\r\n\r\nexport interface DownloadLayoutDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n sharePaths: API.GroupedPath[];\r\n favoritePaths: API.GroupedPath[];\r\n}\r\n\r\nexport interface DownloadLayoutProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n downloadHandler: PathDownloadHandler;\r\n handleBrowse: BrowseHandler;\r\n\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\nconst getMenuItem = (\r\n section: DownloadSection,\r\n activeSection: string,\r\n onClick: (key: string) => void,\r\n t: UI.TranslateF,\r\n) => (\r\n <MenuItemLink\r\n key={section.key}\r\n onClick={() => onClick(section.key)}\r\n active={activeSection === section.key}\r\n >\r\n <>\r\n {t(toI18nKey(section.key, UI.Modules.COMMON), section.name)}\r\n {!!section.list && <div className=\"ui small label\">{section.list.length}</div>}\r\n </>\r\n </MenuItemLink>\r\n);\r\n\r\ntype Props<ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo> =\r\n DownloadLayoutProps<ItemT> & DownloadLayoutDataProps<ItemT>;\r\n\r\nconst DownloadLayout: React.FC<Props> = (props) => {\r\n const { t } = useTranslation();\r\n const [activeSectionKey, setActiveSectionKey] = useState('history');\r\n\r\n const sections = React.useMemo(() => {\r\n const { historyPaths, sharePaths, favoritePaths, itemInfo } = props;\r\n const dupePaths = itemInfo.dupe\r\n ? itemInfo.dupe.paths.map((path) => getParentPath(path))\r\n : [];\r\n\r\n return getDownloadSections({\r\n historyPaths,\r\n sharePaths,\r\n favoritePaths,\r\n dupePaths,\r\n });\r\n }, []);\r\n\r\n const activeSection = sections.find((s) => s.key === activeSectionKey);\r\n if (!activeSection) {\r\n return null;\r\n }\r\n\r\n const menuItems = sections.map((s) =>\r\n getMenuItem(s, activeSectionKey, setActiveSectionKey, t),\r\n );\r\n\r\n const Component = usingMobileLayout() ? MobileDownloadLayout : NormalDownloadLayout;\r\n return (\r\n <Component\r\n key={activeSection.key} // Ensure that section-specific data is refetched\r\n menuItems={menuItems}\r\n title={activeSection.name}\r\n handleBrowse={props.handleBrowse}\r\n t={t}\r\n >\r\n <activeSection.component t={t} downloadHandler={props.downloadHandler} />\r\n </Component>\r\n );\r\n};\r\n\r\nconst DownloadLayoutDecorated = DataProviderDecorator<\r\n DownloadLayoutProps,\r\n DownloadLayoutDataProps\r\n>(DownloadLayout, {\r\n urls: {\r\n sharePaths: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n favoritePaths: FavoriteDirectoryConstants.GROUPED_DIRECTORIES_URL,\r\n },\r\n});\r\n\r\nexport { DownloadLayoutDecorated as DownloadLayout };\r\n","import * as React from 'react';\n\nimport PathList from './PathList';\nimport AccordionTargets from './AccordionTargets';\n\nimport * as API from '@/types/api';\nimport * as UI from '@/types/ui';\n\nimport { PathDownloadHandler } from '../../types';\n\nexport interface DownloadSectionChildProps {\n t: UI.TranslateF;\n downloadHandler: PathDownloadHandler;\n}\n\nexport interface DownloadSection {\n name: string;\n key: string;\n list?: string[] | API.GroupedPath[];\n component: React.ComponentType<DownloadSectionChildProps>;\n}\n\ninterface PathInfo {\n sharePaths: API.GroupedPath[];\n favoritePaths: API.GroupedPath[];\n historyPaths: string[];\n dupePaths: string[];\n}\n\nexport const getDownloadSections = (pathInfo: PathInfo) => {\n const { sharePaths, favoritePaths, historyPaths, dupePaths } = pathInfo;\n\n const sections: DownloadSection[] = [\n {\n name: 'Previous',\n key: 'history',\n list: historyPaths,\n component: ({ downloadHandler, t }) => (\n <PathList paths={historyPaths} downloadHandler={downloadHandler} t={t} />\n ),\n },\n {\n name: 'Shared',\n key: 'shared',\n list: sharePaths,\n component: ({ downloadHandler, t }) => (\n <AccordionTargets\n groupedPaths={sharePaths}\n downloadHandler={downloadHandler}\n t={t}\n />\n ),\n },\n {\n name: 'Favorites',\n key: 'favorites',\n list: favoritePaths,\n component: ({ downloadHandler, t }) => (\n <AccordionTargets\n groupedPaths={favoritePaths}\n downloadHandler={downloadHandler}\n t={t}\n />\n ),\n },\n {\n name: 'Dupes',\n key: 'dupes',\n list: dupePaths,\n component: ({ downloadHandler, t }) => (\n <PathList paths={dupePaths} downloadHandler={downloadHandler} t={t} />\n ),\n },\n ];\n\n return sections;\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;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as React from 'react';\r\nimport { Route, Routes, useNavigate } from 'react-router';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n default as HistoryConstants,\r\n HistoryStringEnum,\r\n} from '@/constants/HistoryConstants';\r\nimport FilesystemConstants from '@/constants/FilesystemConstants';\r\nimport IconConstants from '@/constants/IconConstants';\r\n\r\nimport NotificationActions from '@/actions/NotificationActions';\r\n\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n} from '@/decorators/DataProviderDecorator';\r\nimport ModalRouteDecorator, {\r\n ModalRouteDecoratorChildProps,\r\n} from '@/decorators/ModalRouteDecorator';\r\n\r\nimport RouteModal, { RouteModalProps } from '@/components/semantic/RouteModal';\r\nimport { FileBrowserDialog } from '@/components/filebrowser';\r\n\r\nimport { runBackgroundSocketAction } from '@/utils/ActionUtils';\r\nimport { toI18nKey, translate } from '@/utils/TranslationUtils';\r\nimport { addHistory } from '@/services/api/HistoryApi';\r\n\r\nimport { DownloadLayout } from './layout';\r\n\r\nimport * as API from '@/types/api';\r\nimport * as UI from '@/types/ui';\r\nimport { PathDownloadHandler } from './types';\r\n\r\nimport './style.css';\r\nimport { useSession } from '@/context/AppStoreContext';\r\nimport { useSocket } from '@/context/SocketContext';\r\nimport { getFileName, getFilePath } from '@/utils/FileUtils';\r\nimport { hasAccess } from '@/utils/AuthUtils';\r\n\r\nexport type DownloadDialogProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> = UI.ItemDownloadHandler<ItemT, Props<ItemT>>;\r\n\r\ntype DownloadDialogRouteProps = ModalRouteDecoratorChildProps;\r\n\r\ninterface DownloadDialogDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> extends DataProviderDecoratorChildProps {\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\ntype Props<ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo> =\r\n DownloadDialogProps<ItemT> & DownloadDialogDataProps<ItemT> & DownloadDialogRouteProps;\r\n\r\nconst DownloadDialog: React.FC<Props> = (props) => {\r\n const { t } = useTranslation();\r\n const navigate = useNavigate();\r\n const session = useSession();\r\n const socket = useSocket();\r\n\r\n const {\r\n downloadHandler,\r\n itemInfo,\r\n userGetter,\r\n params,\r\n sessionItem,\r\n historyPaths,\r\n handleClose,\r\n ...other\r\n } = props;\r\n\r\n const handleDownload: PathDownloadHandler = async (targetPath, targetFilename) => {\r\n try {\r\n const itemData = {\r\n itemInfo,\r\n user: !!userGetter ? userGetter(params.downloadItemId!, props) : undefined,\r\n entity: sessionItem,\r\n };\r\n\r\n const downloadData = {\r\n target_name: !!targetFilename ? targetFilename : itemInfo.name,\r\n target_directory: targetPath,\r\n priority: API.QueuePriorityEnum.DEFAULT,\r\n };\r\n\r\n await downloadHandler(itemData, downloadData, socket);\r\n } catch (e) {\r\n NotificationActions.error({\r\n title: t(toI18nKey('queueingFailed', UI.Modules.COMMON), {\r\n defaultValue: 'Failed to queue the item {{item.name}}',\r\n replace: {\r\n item: itemInfo,\r\n },\r\n }),\r\n message: e.message,\r\n });\r\n }\r\n\r\n runBackgroundSocketAction(\r\n () => addHistory(socket, HistoryStringEnum.DOWNLOAD_DIR, targetPath),\r\n t,\r\n );\r\n };\r\n\r\n const getInitialBrowsePath = () => {\r\n const path = historyPaths.length > 0 ? historyPaths[historyPaths.length - 1] : '';\r\n return itemInfo.type.id === 'directory' ? path : path + itemInfo.name;\r\n };\r\n\r\n const handleBrowse = () => {\r\n navigate(`browse`);\r\n };\r\n\r\n const commonDialogProps: RouteModalProps = {\r\n subHeader: itemInfo.name,\r\n title: translate('Download', t, UI.Modules.COMMON),\r\n icon: IconConstants.DOWNLOAD,\r\n closable: false,\r\n };\r\n\r\n const hasFileBrowserAccess = hasAccess(session, API.AccessEnum.FILESYSTEM_VIEW);\r\n return (\r\n <Routes>\r\n <Route\r\n path=\"browse/*\"\r\n element={\r\n <FileBrowserDialog\r\n onConfirm={async (path) => {\r\n await handleDownload(getFilePath(path), getFileName(path));\r\n }}\r\n initialPath={getInitialBrowsePath()}\r\n selectMode={\r\n itemInfo.type.id === 'directory'\r\n ? UI.FileSelectModeEnum.DIRECTORY\r\n : UI.FileSelectModeEnum.FILE\r\n }\r\n historyId={FilesystemConstants.LOCATION_DOWNLOAD}\r\n approveCaption={translate('Download', t, UI.Modules.COMMON)}\r\n modalComponent={RouteModal}\r\n {...commonDialogProps}\r\n />\r\n }\r\n />\r\n <Route\r\n index\r\n element={\r\n <RouteModal\r\n className=\"download-dialog\"\r\n fullHeight={true}\r\n {...commonDialogProps}\r\n {...other}\r\n >\r\n <DownloadLayout\r\n downloadHandler={async (targetPath, targetFilename) => {\r\n await handleDownload(targetPath, targetFilename);\r\n await handleClose();\r\n }}\r\n handleBrowse={hasFileBrowserAccess ? handleBrowse : undefined}\r\n historyPaths={historyPaths}\r\n itemInfo={itemInfo}\r\n />\r\n </RouteModal>\r\n }\r\n />\r\n </Routes>\r\n );\r\n};\r\n\r\nexport default ModalRouteDecorator<DownloadDialogProps>(\r\n DataProviderDecorator<\r\n DownloadDialogProps & DownloadDialogRouteProps,\r\n DownloadDialogDataProps\r\n >(DownloadDialog, {\r\n urls: {\r\n historyPaths: `${HistoryConstants.STRINGS_URL}/${HistoryStringEnum.DOWNLOAD_DIR}`,\r\n itemInfo: ({ params, itemDataGetter }, socket) => {\r\n return itemDataGetter(params.downloadItemId!, socket);\r\n },\r\n },\r\n }),\r\n '/download/:downloadItemId',\r\n);\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","addHistory","socket","historyId","text","post","STRINGS_URL","string","formatText","i18nKey","COMMON","Row","title","className","titleWidth","noText","style","overflow","Header","Grid","children","columns","stackable","other","MODULE_URL","GROUPED_DIRECTORIES_URL","DIRECTORIES_URL","DIRECTORIES_UPDATED","formatFreeSpace","pathInfo","t","formatSize","free_space","path","defaultValue","replace","freeSpace","PathListItem","downloadHandler","formatter","Icon","icon","IconConstants","FOLDER","LinkButton","onClick","caption","PathListWithData","DataProviderDecorator","pathInfos","map","urls","paths","FilesystemConstants","DISK_INFO_URL","props","length","Message","AccordionTargets","Component","formatParent","parent","this","DROPDOWN","name","render","groupedPaths","Accordion","appendBrowseItem","menuItems","handleBrowse","MenuItemLink","BROWSE","MobileDownloadLayout","Dropdown","selection","NormalDownloadLayout","Button","DownloadLayoutDecorated","activeSectionKey","setActiveSectionKey","useState","sections","historyPaths","sharePaths","favoritePaths","itemInfo","dupePaths","key","list","component","getDownloadSections","dupe","activeSection","find","s","section","active","getMenuItem","ShareConstants","GROUPED_ROOTS_GET_URL","FavoriteDirectoryConstants","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","ModalRouteDecorator","navigate","session","userGetter","params","sessionItem","handleClose","handleDownload","targetPath","targetFilename","itemData","user","downloadItemId","undefined","entity","downloadData","target_name","target_directory","priority","DEFAULT","e","NotificationActions","error","item","message","DOWNLOAD_DIR","commonDialogProps","subHeader","DOWNLOAD","closable","hasFileBrowserAccess","FILESYSTEM_VIEW","element","onConfirm","initialPath","type","getInitialBrowsePath","selectMode","DIRECTORY","FILE","LOCATION_DOWNLOAD","approveCaption","modalComponent","RouteModal","index","fullHeight","HistoryConstants","itemDataGetter"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[550],{4112:(n,e,s)=>{s.d(e,{R:()=>t});var i=s(4425);const t=(n,e)=>({id:"remove",displayName:"Close",access:e,icon:i.A.REMOVE,handler:({itemData:e,socket:s})=>s.delete(`${n}/${e.id}`)})},38453:(n,e,s)=>{s.d(e,{J:()=>t,q:()=>o});var i=s(74848);s(96540);const t=({label:n,text:e})=>(0,i.jsx)("div",{className:"grid-item",children:(0,i.jsx)("div",{className:"item-inner",children:n&&"string"==typeof e?`${n}: ${e}`:e})}),o=({children:n})=>(0,i.jsxs)("div",{className:"session-footer",children:[(0,i.jsx)("div",{className:"ui footer divider"}),(0,i.jsx)("div",{className:"info-grid ui",children:n})]})},46510:(n,e,s)=>{s.d(e,{A:()=>a});var i=s(71354),t=s.n(i),o=s(76314),r=s.n(o)()(t());r.push([n.id,".session-container {\n background-color: white;\n}\n\n.session-container.horizontal.ui.grid {\n margin: 0px !important;\n}\n\n.session-container.horizontal .menu-column .item.new {\n padding: 0.78571429em 1.1em !important;\n}\n\n.session-container.horizontal .ui.vertical.menu .item > i.icon {\n margin: 0 0.35714286em 0 0 !important;\n}\n\n.session-container.horizontal .session-layout > .ui.divider {\n margin: 5px 0px 0px 0px;\n}\n\n.session-container.vertical {\n padding: 15px;\n display: flex;\n flex-direction: column;\n}\n.session-layout {\n flex: 100 100 auto;\n display: flex;\n overflow: hidden;\n}\n\n.session-container.horizontal .session-layout {\n flex-direction: column;\n}\n\n.session-container.vertical .menu-bar {\n justify-content: space-between;\n margin: 0px !important;\n}\n\n.session-container.vertical .menu-bar .content-left {\n width: 100%;\n}\n\n.session-container.vertical .menu-bar .close-button.item:before {\n background: none !important;\n}\n\n.session-container.vertical .menu-bar .close-button.item {\n box-shadow: none !important;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown {\n float: left;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown .menu {\n max-height: calc(100dvh - 140px);\n overflow-y: auto;\n overflow-x: hidden;\n max-width: calc(100vw - 30px);\n}\n\n.session-container.vertical .session-item .count.label {\n margin-left: 1em !important;\n}\n\n.session-container.vertical .session-header {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n.session-container.vertical .session-header > div {\n max-width: 90%; /* Hack, auto width won't work without \"overflow: hidden\", but that would prevent viewing the menu items */\n padding: 0.82857143em 0.4285714em;\n line-height: 1.2;\n}\n\n.session-container.vertical .session-header > div:before {\n background: none !important;\n}\n\n.session-container.vertical .session-header > i {\n margin-left: 10px;\n}\n\n.session-container.vertical .session-header .ui.dropdown > i {\n margin: 0px 5px;\n}\n\n/* Fix a few inconsistencies between 'icon' and 'icons' classnames */\n.session-container.horizontal .session-header .header > i,\n.session-container.vertical .session-header > i {\n width: inherit !important;\n font-size: 1.5em;\n}\n\n.session-container.horizontal .session-header .ui.header {\n align-items: center;\n}\n\n.session-container.vertical .menu-bar {\n border-radius: 0px !important;\n padding-bottom: 0px;\n}\n\n.session-container,\n.session-layout,\n.session-container.horizontal .column {\n height: 100%;\n}\n\n.session-container.horizontal .column > div {\n max-height: 100%;\n}\n\n.session-container .session-item {\n overflow: hidden;\n display: flex !important;\n align-items: center;\n padding: 0.68571429em 0.92857143em !important;\n height: 35px;\n}\n\n.session-container .session-item .session-status {\n float: none !important;\n margin: 0 0.5em 0 0 !important;\n}\n\n.session-container .session-item span.name {\n overflow: hidden;\n flex: 1 1 100%;\n line-height: 1.2;\n}\n\n.session-container .session-status {\n margin-right: 5px;\n margin-top: 3px;\n}\n\n.session-container.horizontal .menu-column {\n display: flex !important;\n flex-direction: column;\n padding-right: 0px !important;\n}\n\n.session-container.horizontal .menu-column .menu {\n width: initial !important;\n overflow-y: auto;\n padding-top: 10px;\n flex: 1;\n}\n\n.session-container.horizontal .menu-column .session-item span.name,\n.session-container .session-header .ui.dropdown .caption {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.session-container .session-header .title .ui.dropdown {\n width: 100%;\n}\n\n.session-layout .sub.header {\n overflow: hidden;\n}\n\n.session-layout .sub.header img {\n vertical-align: text-top;\n}\n\n.session-footer .info-grid {\n margin-top: 7px !important;\n font-size: small;\n color: grey;\n display: flex;\n flex: 1;\n align-items: flex-end;\n}\n\n.session-footer .info-grid > div {\n flex: 1;\n}\n\n.session-footer .info-grid > div:last-child > div {\n float: right;\n}\n\n.session-footer .info-grid > div:only-child > div {\n float: inherit;\n}\n\n.session-footer .ui.checkbox {\n min-height: inherit !important;\n}\n\n.session-footer .divider {\n margin-top: 8px;\n margin-bottom: 0px;\n}\n\n/* New session layout */\n.session.new {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n overflow-y: hidden;\n margin-top: 20px;\n padding: 1px;\n}\n\n.session.new .recents {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n margin-top: 20px;\n overflow-y: hidden;\n}\n\n.session.new .recents .list {\n padding: 3px 5px;\n flex: 100 100 0%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n","",{version:3,sources:["webpack://./src/routes/Sidebar/sessions.css"],names:[],mappings:"AAAA;EACE,uBAAuB;AACzB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,8BAA8B;EAC9B,sBAAsB;AACxB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,gCAAgC;EAChC,gBAAgB;EAChB,kBAAkB;EAClB,6BAA6B;AAC/B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;AACd;;AAEA;EACE,cAAc,EAAE,2GAA2G;EAC3H,iCAAiC;EACjC,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,eAAe;AACjB;;AAEA,oEAAoE;AACpE;;EAEE,yBAAyB;EACzB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,6BAA6B;EAC7B,mBAAmB;AACrB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;EACxB,mBAAmB;EACnB,6CAA6C;EAC7C,YAAY;AACd;;AAEA;EACE,sBAAsB;EACtB,8BAA8B;AAChC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,wBAAwB;EACxB,sBAAsB;EACtB,6BAA6B;AAC/B;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,OAAO;AACT;;AAEA;;EAEE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,0BAA0B;EAC1B,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,OAAO;EACP,qBAAqB;AACvB;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,eAAe;EACf,kBAAkB;AACpB;;AAEA,uBAAuB;AACvB;EACE,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AACpB",sourcesContent:[".session-container {\n background-color: white;\n}\n\n.session-container.horizontal.ui.grid {\n margin: 0px !important;\n}\n\n.session-container.horizontal .menu-column .item.new {\n padding: 0.78571429em 1.1em !important;\n}\n\n.session-container.horizontal .ui.vertical.menu .item > i.icon {\n margin: 0 0.35714286em 0 0 !important;\n}\n\n.session-container.horizontal .session-layout > .ui.divider {\n margin: 5px 0px 0px 0px;\n}\n\n.session-container.vertical {\n padding: 15px;\n display: flex;\n flex-direction: column;\n}\n.session-layout {\n flex: 100 100 auto;\n display: flex;\n overflow: hidden;\n}\n\n.session-container.horizontal .session-layout {\n flex-direction: column;\n}\n\n.session-container.vertical .menu-bar {\n justify-content: space-between;\n margin: 0px !important;\n}\n\n.session-container.vertical .menu-bar .content-left {\n width: 100%;\n}\n\n.session-container.vertical .menu-bar .close-button.item:before {\n background: none !important;\n}\n\n.session-container.vertical .menu-bar .close-button.item {\n box-shadow: none !important;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown {\n float: left;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown .menu {\n max-height: calc(100dvh - 140px);\n overflow-y: auto;\n overflow-x: hidden;\n max-width: calc(100vw - 30px);\n}\n\n.session-container.vertical .session-item .count.label {\n margin-left: 1em !important;\n}\n\n.session-container.vertical .session-header {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n.session-container.vertical .session-header > div {\n max-width: 90%; /* Hack, auto width won't work without \"overflow: hidden\", but that would prevent viewing the menu items */\n padding: 0.82857143em 0.4285714em;\n line-height: 1.2;\n}\n\n.session-container.vertical .session-header > div:before {\n background: none !important;\n}\n\n.session-container.vertical .session-header > i {\n margin-left: 10px;\n}\n\n.session-container.vertical .session-header .ui.dropdown > i {\n margin: 0px 5px;\n}\n\n/* Fix a few inconsistencies between 'icon' and 'icons' classnames */\n.session-container.horizontal .session-header .header > i,\n.session-container.vertical .session-header > i {\n width: inherit !important;\n font-size: 1.5em;\n}\n\n.session-container.horizontal .session-header .ui.header {\n align-items: center;\n}\n\n.session-container.vertical .menu-bar {\n border-radius: 0px !important;\n padding-bottom: 0px;\n}\n\n.session-container,\n.session-layout,\n.session-container.horizontal .column {\n height: 100%;\n}\n\n.session-container.horizontal .column > div {\n max-height: 100%;\n}\n\n.session-container .session-item {\n overflow: hidden;\n display: flex !important;\n align-items: center;\n padding: 0.68571429em 0.92857143em !important;\n height: 35px;\n}\n\n.session-container .session-item .session-status {\n float: none !important;\n margin: 0 0.5em 0 0 !important;\n}\n\n.session-container .session-item span.name {\n overflow: hidden;\n flex: 1 1 100%;\n line-height: 1.2;\n}\n\n.session-container .session-status {\n margin-right: 5px;\n margin-top: 3px;\n}\n\n.session-container.horizontal .menu-column {\n display: flex !important;\n flex-direction: column;\n padding-right: 0px !important;\n}\n\n.session-container.horizontal .menu-column .menu {\n width: initial !important;\n overflow-y: auto;\n padding-top: 10px;\n flex: 1;\n}\n\n.session-container.horizontal .menu-column .session-item span.name,\n.session-container .session-header .ui.dropdown .caption {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.session-container .session-header .title .ui.dropdown {\n width: 100%;\n}\n\n.session-layout .sub.header {\n overflow: hidden;\n}\n\n.session-layout .sub.header img {\n vertical-align: text-top;\n}\n\n.session-footer .info-grid {\n margin-top: 7px !important;\n font-size: small;\n color: grey;\n display: flex;\n flex: 1;\n align-items: flex-end;\n}\n\n.session-footer .info-grid > div {\n flex: 1;\n}\n\n.session-footer .info-grid > div:last-child > div {\n float: right;\n}\n\n.session-footer .info-grid > div:only-child > div {\n float: inherit;\n}\n\n.session-footer .ui.checkbox {\n min-height: inherit !important;\n}\n\n.session-footer .divider {\n margin-top: 8px;\n margin-bottom: 0px;\n}\n\n/* New session layout */\n.session.new {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n overflow-y: hidden;\n margin-top: 20px;\n padding: 1px;\n}\n\n.session.new .recents {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n margin-top: 20px;\n overflow-y: hidden;\n}\n\n.session.new .recents .list {\n padding: 3px 5px;\n flex: 100 100 0%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n"],sourceRoot:""}]);const a=r},78046:(n,e,s)=>{s.d(e,{Z:()=>c});var i=s(74848),t=(s(96540),s(99347)),o=s(67749),r=s(32389),a=s(42695),A=s(31290),l=s(97145);const c=(n,e,s)=>c=>{const{t:d}=(0,r.Bd)(),m=(0,a.lw)(d,s),u=(0,A.g)(),p=(0,l.c7)(n=>e(n).sessions);return p?(0,i.jsx)(n,{items:p,params:u,sessionT:m}):(0,i.jsx)(t.A,{text:(0,a.Tl)("Loading sessions",d,o.KV.COMMON)})}},80783:(n,e,s)=>{s.d(e,{q:()=>l});var i=s(96540),t=s(97145),o=s(48249),r=s(39364),a=s(80377),A=s(35106);const l=(n,e,s,l=!1)=>{const c=(0,r.sL)(),d=(0,o.F)(),m=(0,t.c7)(n=>n.activity.userActive),u=(0,t.c7)(n=>s(n).setActiveSession),p=i.useRef(void 0),h=n=>{(0,A.m)(n,()=>{e.setRead(n,d)}),p.current=void 0};i.useEffect(()=>()=>{u(null)},[]),i.useEffect(()=>(u(n),()=>{p.current&&(clearTimeout(p.current),n&&h(n))}),[n.id]),i.useEffect(()=>{m&&(n=>{const e=l?1e3*c.getState().settings.getValue(a.x.UNREAD_LABEL_DELAY):0;p.current=window.setTimeout(()=>h(n),e)})(n)},[m,n.id])}},91950:(n,e,s)=>{s.d(e,{A:()=>en});var i=s(74848),t=s(96540),o=s(99347),r=s(8098),a=s(68514),A=s(31104),l=s(19247),c=s(25906),d=s(67749),m=s(42695),u=s(4425),p=s(32389),h=s(97145);const E=({sessionMenuItems:n,newButton:e,sessionStoreSelector:s,listActionMenuGetter:t})=>{const{t:o}=(0,p.Bd)(),r=(0,h.c7)(n=>s(n).getTotalUrgencies);return(0,i.jsxs)(A.A,{triggerIcon:(0,i.jsx)(c.Z,{label:"Session menu",urgencies:r()}),children:[(0,i.jsx)(l.A,{caption:(0,m.Tl)("New",o,d.KV.COMMON),children:e}),(0,i.jsx)(l.A,{caption:(0,m.Tl)("Current sessions",o,d.KV.COMMON),children:n}),(0,i.jsx)(l.A,{children:t()})]})},g=({actions:n,activeItem:e})=>{if(!e||(0,r.vU)())return null;const s=Object.values(n.actions)[Object.values(n.actions).length-1];return(0,i.jsx)(a.A,{className:"basic small item close-button",action:s,moduleData:n.moduleData,itemData:e,icon:u.A.CLOSE})},B=({itemHeaderIcon:n,itemHeaderTitle:e})=>(0,i.jsxs)("div",{className:"session-header",children:[n,e]}),x=n=>{var{children:e,onKeyDown:s}=n,t=function(n,e){var s={};for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.indexOf(i)<0&&(s[i]=n[i]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var t=0;for(i=Object.getOwnPropertySymbols(n);t<i.length;t++)e.indexOf(i[t])<0&&Object.prototype.propertyIsEnumerable.call(n,i[t])&&(s[i[t]]=n[i[t]])}return s}(n,["children","onKeyDown"]);return(0,i.jsxs)("div",{className:"session-container vertical",onKeyDown:s,tabIndex:0,children:[(0,i.jsxs)("div",{className:"ui main menu menu-bar",children:[(0,i.jsxs)("div",{className:"content-left",children:[(0,i.jsx)(E,Object.assign({},t)),(0,i.jsx)(B,Object.assign({},t))]}),(0,i.jsx)(g,Object.assign({},t))]}),(0,i.jsx)("div",{className:"session-layout",children:e})]})};var f=s(31224),v=s(73070);const C=({sessionMenuItems:n,newButton:e,itemHeaderIcon:s,itemHeaderTitle:o,children:r,itemHeaderDescription:a,onKeyDown:A})=>(e&&(e=t.cloneElement(e,{className:e.props.className+" ui fluid button"})),(0,i.jsxs)(v.xA,{className:"session-container horizontal",onKeyDown:A,tabIndex:0,children:[(0,i.jsxs)("div",{className:"four wide column menu-column",children:[e,!!n.length&&(0,i.jsx)("div",{className:"ui vertical secondary menu",role:"menubar",children:n})]}),(0,i.jsx)("div",{className:"twelve wide stretched column content-column session",children:(0,i.jsxs)("div",{className:"ui segment session-layout",children:[(0,i.jsx)(f.A,{className:"session-header",icon:s,title:(0,i.jsx)("div",{className:"title",children:o}),subHeader:a}),(0,i.jsx)("div",{className:"ui divider",style:{margin:"5px 0px 0px 0px"}}),r]})})]}));var w=s(32728),b=s(18220),y=s(31290),j=s(20311),I=s.n(j);const N=({baseUrl:n})=>{const e=(0,y.Zp)(),s=e=>(I()(!!e,"Trying to get session URL without a session"),`/${n}/session/${e}`),i=`/${n}/new`;return{newUrl:`/${n}/new`,replaceNew:()=>{e(i,{replace:!0})},getSessionUrl:s,pushSession:n=>{e(s(n))},replaceSession:(n,i)=>{e(s(n),{replace:!0,state:i})}}};var O=s(48249);const S=(n,e)=>n.find(n=>n.id===e);var z=s(71352),k=s(46942),T=s.n(k),M=s(45325);const D=({url:n,title:e,className:s})=>(0,i.jsx)(M.A,{className:T()("new",s),icon:u.A.CREATE,url:n,children:e},"button-new"),H=({sessionItem:n,status:e,name:s,unreadInfoStoreSelector:t,url:o})=>(0,i.jsx)(M.A,{url:o,className:"session-item",icon:e,sessionItem:n,unreadInfoStoreSelector:t,children:s});var U=s(83994),K=s(27725),L=s(39364),G=s(85072),V=s.n(G),Y=s(97825),W=s.n(Y),R=s(77659),$=s.n(R),q=s(55056),_=s.n(q),F=s(10540),P=s.n(F),Z=s(41113),J=s.n(Z),X=s(46510),Q={};Q.styleTagTransform=J(),Q.setAttributes=_(),Q.insert=$().bind(null,"head"),Q.domAPI=W(),Q.insertStyleElement=P(),V()(X.A,Q),X.A&&X.A.locals&&X.A.locals;var nn=s(70756);const en=n=>{const e=(0,L.wV)(),s=(0,b.y)(),a=(0,y.Zp)(),A=(0,y.zy)(),{activeItem:l,onKeyDown:c}=(n=>{const[e,s]=t.useState(null),i=(0,y.zy)(),o=(0,O.F)(),{pushSession:a,replaceSession:A,newUrl:l,replaceNew:c}=N({baseUrl:n.baseUrl}),d=()=>`${n.baseUrl}_last_active`;return t.useLayoutEffect(()=>{if(i.pathname===l)return void(e&&s(null));if((()=>{const e=i,t=e.state&&e.state.pending,o=S(n.items,n.activeId);return o?t?(A(o.id,{pending:!1}),!0):(s(o),(0,r.MS)(d(),n.activeId),!0):!!t||0===n.items.length&&(c(),s(null),!0)})())return;if(!e){const e=(0,r.H5)(d());if(e&&S(n.items,e))return void A(e)}const{items:t,activeId:o}=n;let a=0;const m=S(t,o);m&&(a=t.indexOf(m),a===t.length-1&&(a-=1)),A(t[a].id)},[i,n.items]),{onKeyDown:e=>{const{key:s,altKey:i}=e;if(!i||"ArrowUp"!==s&&"ArrowDown"!==s){if(i&&"Insert"===s)e.preventDefault(),c();else if(i&&"Delete"===s){e.preventDefault();const{items:s,activeId:i,sessionApi:t}=n,r=S(s,i);r&&t.removeSession(r,o)}}else{e.preventDefault();const{items:i,activeId:t}=n,o=S(i,t);if(!o)return;const r=i.indexOf(o);if(-1===r)return;const A=i["ArrowUp"===s?r-1:r+1];A&&a(A.id)}},activeItem:e}})(n),h=(0,nn.z)(e,n.editAccess),E=!!n.newLayout&&A.pathname.endsWith("/new"),{disableSideMenu:g,items:B,sessionStoreSelector:f,sessionT:v,uiActions:j}=n,I=g||(0,r.vU)(s),{getItemHeaderTitle:k,getItemHeaderDescription:T,getItemHeaderIcon:M,getNewButton:G,getSessionMenuItems:V,getSessionActionMenuItems:Y}=(n=>{const e=(0,O.F)(),s=(0,y.zy)(),{t}=(0,p.Bd)(),{newUrl:o,getSessionUrl:r}=N({baseUrl:n.baseUrl}),a=e=>{const{itemStatusGetter:s,itemHeaderIconGetter:t}=n;return s?(0,i.jsx)("div",{className:"ui session-status empty circular left mini label "+s(e)}):(0,i.jsx)(U.A,{icon:t(e)})};return{getItemHeaderDescription:()=>{const{itemHeaderDescriptionGetter:e,newDescription:s,activeItem:i,isNewLayout:t}=n;return t?s:i?e(i):null},getItemHeaderIcon:()=>{const{itemHeaderIconGetter:e,newIcon:s,activeItem:t,isNewLayout:o}=n;return o?(0,i.jsx)(U.A,{icon:s}):t?(0,i.jsx)(U.A,{icon:e(t)}):null},getItemHeaderTitle:()=>{const{activeItem:e,newCaption:t,remoteMenuId:o,isNewLayout:r}=n;if(r)return(0,i.jsx)("div",{children:t});if(!e)return null;const{uiActions:a,actionIds:A,itemNameGetter:l,itemHeaderTitleGetter:c}=n,d=A?[...A,"divider","remove"]:void 0,m=(0,i.jsx)(z.Wy,{caption:l(e),actions:a,itemData:e,ids:d,remoteMenuId:o});if(c){const n=c(e,s,m);if(n)return n}return m},getSessionActionMenuItems:()=>{const{items:s,hasEditAccess:o}=n;return o&&0!==s.length?(0,i.jsx)(K.A,{onClick:()=>{const{sessionApi:s,items:i}=n;i.forEach(n=>s.removeSession(n,e))},icon:u.A.REMOVE,children:(0,m.Tl)("Close all",t,d.KV.COMMON)},"close"):null},getNewButton:()=>{const{newCaption:e,hasEditAccess:s}=n;return s&&e?(0,i.jsx)(D,{title:e,url:o},"new-button"):null},getSessionMenuItems:()=>n.items.map(e=>{const{itemNameGetter:s,sessionStoreSelector:t}=n;return(0,i.jsx)(H,{url:r(e.id),name:s(e),unreadInfoStoreSelector:t,status:a(e),sessionItem:e},e.id)})}})(Object.assign(Object.assign({},n),{activeItem:l,hasEditAccess:h,isNewLayout:E}));if(!h&&0===B.length)return(0,i.jsx)(w.A,{title:(0,m.Tl)("No items to show",v.plainT,d.KV.COMMON),description:v.plainT((0,m.j2)("noSessionEditAccess",d.KV.COMMON),"You aren't allowed to open new sessions")});const W=I?x:C;return(0,i.jsx)(W,{itemHeaderTitle:k(),itemHeaderDescription:T(),itemHeaderIcon:M(),newButton:G(),sessionMenuItems:V(),listActionMenuGetter:Y,activeItem:l,sessionStoreSelector:f,onKeyDown:c,actions:j,children:(()=>{const{newLayout:e,sessionT:s}=n;return E&&e?(0,i.jsx)(e,{navigate:a,location:A,sessionT:s}):(()=>{const{activeId:e,items:s,sessionItemLayout:t,sessionApi:r,uiActions:c,sessionT:u,baseUrl:p}=n;if(!l){const{state:n}=A;return n&&n.pending?(0,i.jsx)(o.A,{text:(0,m.Tl)("Waiting for server response",u.plainT,d.KV.COMMON)}):e||0!==s.length?(0,i.jsx)(o.A,{text:(0,m.Tl)("Loading session",u.plainT,d.KV.COMMON)}):void console.error("SessionLayout route: active session missing")}return(0,i.jsx)(t,{sessionItem:l,sessionApi:r,uiActions:c,location:A,navigate:a,sessionT:u,baseUrl:p})})()})()})}}}]);
|
|
2
|
-
//# sourceMappingURL=550.
|
|
1
|
+
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[550],{4112:(n,e,s)=>{s.d(e,{R:()=>t});var i=s(4425);const t=(n,e)=>({id:"remove",displayName:"Close",access:e,icon:i.A.REMOVE,handler:({itemData:e,socket:s})=>s.delete(`${n}/${e.id}`)})},38453:(n,e,s)=>{s.d(e,{J:()=>t,q:()=>o});var i=s(74848);s(96540);const t=({label:n,text:e})=>(0,i.jsx)("div",{className:"grid-item",children:(0,i.jsx)("div",{className:"item-inner",children:n&&"string"==typeof e?`${n}: ${e}`:e})}),o=({children:n})=>(0,i.jsxs)("div",{className:"session-footer",children:[(0,i.jsx)("div",{className:"ui footer divider"}),(0,i.jsx)("div",{className:"info-grid ui",children:n})]})},46510:(n,e,s)=>{s.d(e,{A:()=>a});var i=s(71354),t=s.n(i),o=s(76314),r=s.n(o)()(t());r.push([n.id,".session-container {\n background-color: white;\n}\n\n.session-container.horizontal.ui.grid {\n margin: 0px !important;\n}\n\n.session-container.horizontal .menu-column .item.new {\n padding: 0.78571429em 1.1em !important;\n}\n\n.session-container.horizontal .ui.vertical.menu .item > i.icon {\n margin: 0 0.35714286em 0 0 !important;\n}\n\n.session-container.horizontal .session-layout > .ui.divider {\n margin: 5px 0px 0px 0px;\n}\n\n.session-container.vertical {\n padding: 15px;\n display: flex;\n flex-direction: column;\n}\n.session-layout {\n flex: 100 100 auto;\n display: flex;\n overflow: hidden;\n}\n\n.session-container.horizontal .session-layout {\n flex-direction: column;\n}\n\n.session-container.vertical .menu-bar {\n justify-content: space-between;\n margin: 0px !important;\n}\n\n.session-container.vertical .menu-bar .content-left {\n width: 100%;\n}\n\n.session-container.vertical .menu-bar .close-button.item:before {\n background: none !important;\n}\n\n.session-container.vertical .menu-bar .close-button.item {\n box-shadow: none !important;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown {\n float: left;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown .menu {\n max-height: calc(100dvh - 140px);\n overflow-y: auto;\n overflow-x: hidden;\n max-width: calc(100vw - 30px);\n}\n\n.session-container.vertical .session-item .count.label {\n margin-left: 1em !important;\n}\n\n.session-container.vertical .session-header {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n.session-container.vertical .session-header > div {\n max-width: 90%; /* Hack, auto width won't work without \"overflow: hidden\", but that would prevent viewing the menu items */\n padding: 0.82857143em 0.4285714em;\n line-height: 1.2;\n}\n\n.session-container.vertical .session-header > div:before {\n background: none !important;\n}\n\n.session-container.vertical .session-header > i {\n margin-left: 10px;\n}\n\n.session-container.vertical .session-header .ui.dropdown > i {\n margin: 0px 5px;\n}\n\n/* Fix a few inconsistencies between 'icon' and 'icons' classnames */\n.session-container.horizontal .session-header .header > i,\n.session-container.vertical .session-header > i {\n width: inherit !important;\n font-size: 1.5em;\n}\n\n.session-container.horizontal .session-header .ui.header {\n align-items: center;\n}\n\n.session-container.vertical .menu-bar {\n border-radius: 0px !important;\n padding-bottom: 0px;\n}\n\n.session-container,\n.session-layout,\n.session-container.horizontal .column {\n height: 100%;\n}\n\n.session-container.horizontal .column > div {\n max-height: 100%;\n}\n\n.session-container .session-item {\n overflow: hidden;\n display: flex !important;\n align-items: center;\n padding: 0.68571429em 0.92857143em !important;\n height: 35px;\n}\n\n.session-container .session-item .session-status {\n float: none !important;\n margin: 0 0.5em 0 0 !important;\n}\n\n.session-container .session-item span.name {\n overflow: hidden;\n flex: 1 1 100%;\n line-height: 1.2;\n}\n\n.session-container .session-status {\n margin-right: 5px;\n margin-top: 3px;\n}\n\n.session-container.horizontal .menu-column {\n display: flex !important;\n flex-direction: column;\n padding-right: 0px !important;\n}\n\n.session-container.horizontal .menu-column .menu {\n width: initial !important;\n overflow-y: auto;\n padding-top: 10px;\n flex: 1;\n}\n\n.session-container.horizontal .menu-column .session-item span.name,\n.session-container .session-header .ui.dropdown .caption {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.session-container .session-header .title .ui.dropdown {\n width: 100%;\n}\n\n.session-layout .sub.header {\n overflow: hidden;\n}\n\n.session-layout .sub.header img {\n vertical-align: text-top;\n}\n\n.session-footer .info-grid {\n margin-top: 7px !important;\n font-size: small;\n color: grey;\n display: flex;\n flex: 1;\n align-items: flex-end;\n}\n\n.session-footer .info-grid > div {\n flex: 1;\n}\n\n.session-footer .info-grid > div:last-child > div {\n float: right;\n}\n\n.session-footer .info-grid > div:only-child > div {\n float: inherit;\n}\n\n.session-footer .ui.checkbox {\n min-height: inherit !important;\n}\n\n.session-footer .divider {\n margin-top: 8px;\n margin-bottom: 0px;\n}\n\n/* New session layout */\n.session.new {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n overflow-y: hidden;\n margin-top: 20px;\n padding: 1px;\n}\n\n.session.new .recents {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n margin-top: 20px;\n overflow-y: hidden;\n}\n\n.session.new .recents .list {\n padding: 3px 5px;\n flex: 100 100 0%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n","",{version:3,sources:["webpack://./src/routes/Sidebar/sessions.css"],names:[],mappings:"AAAA;EACE,uBAAuB;AACzB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,8BAA8B;EAC9B,sBAAsB;AACxB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,gCAAgC;EAChC,gBAAgB;EAChB,kBAAkB;EAClB,6BAA6B;AAC/B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;AACd;;AAEA;EACE,cAAc,EAAE,2GAA2G;EAC3H,iCAAiC;EACjC,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,eAAe;AACjB;;AAEA,oEAAoE;AACpE;;EAEE,yBAAyB;EACzB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,6BAA6B;EAC7B,mBAAmB;AACrB;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;EACxB,mBAAmB;EACnB,6CAA6C;EAC7C,YAAY;AACd;;AAEA;EACE,sBAAsB;EACtB,8BAA8B;AAChC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,wBAAwB;EACxB,sBAAsB;EACtB,6BAA6B;AAC/B;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,OAAO;AACT;;AAEA;;EAEE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,0BAA0B;EAC1B,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,OAAO;EACP,qBAAqB;AACvB;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,eAAe;EACf,kBAAkB;AACpB;;AAEA,uBAAuB;AACvB;EACE,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AACpB",sourcesContent:[".session-container {\n background-color: white;\n}\n\n.session-container.horizontal.ui.grid {\n margin: 0px !important;\n}\n\n.session-container.horizontal .menu-column .item.new {\n padding: 0.78571429em 1.1em !important;\n}\n\n.session-container.horizontal .ui.vertical.menu .item > i.icon {\n margin: 0 0.35714286em 0 0 !important;\n}\n\n.session-container.horizontal .session-layout > .ui.divider {\n margin: 5px 0px 0px 0px;\n}\n\n.session-container.vertical {\n padding: 15px;\n display: flex;\n flex-direction: column;\n}\n.session-layout {\n flex: 100 100 auto;\n display: flex;\n overflow: hidden;\n}\n\n.session-container.horizontal .session-layout {\n flex-direction: column;\n}\n\n.session-container.vertical .menu-bar {\n justify-content: space-between;\n margin: 0px !important;\n}\n\n.session-container.vertical .menu-bar .content-left {\n width: 100%;\n}\n\n.session-container.vertical .menu-bar .close-button.item:before {\n background: none !important;\n}\n\n.session-container.vertical .menu-bar .close-button.item {\n box-shadow: none !important;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown {\n float: left;\n}\n\n.session-container.vertical .menu-bar .content-left > .ui.dropdown .menu {\n max-height: calc(100dvh - 140px);\n overflow-y: auto;\n overflow-x: hidden;\n max-width: calc(100vw - 30px);\n}\n\n.session-container.vertical .session-item .count.label {\n margin-left: 1em !important;\n}\n\n.session-container.vertical .session-header {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n.session-container.vertical .session-header > div {\n max-width: 90%; /* Hack, auto width won't work without \"overflow: hidden\", but that would prevent viewing the menu items */\n padding: 0.82857143em 0.4285714em;\n line-height: 1.2;\n}\n\n.session-container.vertical .session-header > div:before {\n background: none !important;\n}\n\n.session-container.vertical .session-header > i {\n margin-left: 10px;\n}\n\n.session-container.vertical .session-header .ui.dropdown > i {\n margin: 0px 5px;\n}\n\n/* Fix a few inconsistencies between 'icon' and 'icons' classnames */\n.session-container.horizontal .session-header .header > i,\n.session-container.vertical .session-header > i {\n width: inherit !important;\n font-size: 1.5em;\n}\n\n.session-container.horizontal .session-header .ui.header {\n align-items: center;\n}\n\n.session-container.vertical .menu-bar {\n border-radius: 0px !important;\n padding-bottom: 0px;\n}\n\n.session-container,\n.session-layout,\n.session-container.horizontal .column {\n height: 100%;\n}\n\n.session-container.horizontal .column > div {\n max-height: 100%;\n}\n\n.session-container .session-item {\n overflow: hidden;\n display: flex !important;\n align-items: center;\n padding: 0.68571429em 0.92857143em !important;\n height: 35px;\n}\n\n.session-container .session-item .session-status {\n float: none !important;\n margin: 0 0.5em 0 0 !important;\n}\n\n.session-container .session-item span.name {\n overflow: hidden;\n flex: 1 1 100%;\n line-height: 1.2;\n}\n\n.session-container .session-status {\n margin-right: 5px;\n margin-top: 3px;\n}\n\n.session-container.horizontal .menu-column {\n display: flex !important;\n flex-direction: column;\n padding-right: 0px !important;\n}\n\n.session-container.horizontal .menu-column .menu {\n width: initial !important;\n overflow-y: auto;\n padding-top: 10px;\n flex: 1;\n}\n\n.session-container.horizontal .menu-column .session-item span.name,\n.session-container .session-header .ui.dropdown .caption {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.session-container .session-header .title .ui.dropdown {\n width: 100%;\n}\n\n.session-layout .sub.header {\n overflow: hidden;\n}\n\n.session-layout .sub.header img {\n vertical-align: text-top;\n}\n\n.session-footer .info-grid {\n margin-top: 7px !important;\n font-size: small;\n color: grey;\n display: flex;\n flex: 1;\n align-items: flex-end;\n}\n\n.session-footer .info-grid > div {\n flex: 1;\n}\n\n.session-footer .info-grid > div:last-child > div {\n float: right;\n}\n\n.session-footer .info-grid > div:only-child > div {\n float: inherit;\n}\n\n.session-footer .ui.checkbox {\n min-height: inherit !important;\n}\n\n.session-footer .divider {\n margin-top: 8px;\n margin-bottom: 0px;\n}\n\n/* New session layout */\n.session.new {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n overflow-y: hidden;\n margin-top: 20px;\n padding: 1px;\n}\n\n.session.new .recents {\n flex: 100 100 0%;\n display: flex;\n flex-direction: column;\n margin-top: 20px;\n overflow-y: hidden;\n}\n\n.session.new .recents .list {\n padding: 3px 5px;\n flex: 100 100 0%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n"],sourceRoot:""}]);const a=r},78046:(n,e,s)=>{s.d(e,{Z:()=>c});var i=s(74848),t=(s(96540),s(99347)),o=s(67749),r=s(32389),a=s(42695),A=s(13017),l=s(97145);const c=(n,e,s)=>c=>{const{t:d}=(0,r.Bd)(),m=(0,a.lw)(d,s),u=(0,A.g)(),p=(0,l.c7)(n=>e(n).sessions);return p?(0,i.jsx)(n,{items:p,params:u,sessionT:m}):(0,i.jsx)(t.A,{text:(0,a.Tl)("Loading sessions",d,o.KV.COMMON)})}},80783:(n,e,s)=>{s.d(e,{q:()=>l});var i=s(96540),t=s(97145),o=s(48249),r=s(39364),a=s(80377),A=s(35106);const l=(n,e,s,l=!1)=>{const c=(0,r.sL)(),d=(0,o.F)(),m=(0,t.c7)(n=>n.activity.userActive),u=(0,t.c7)(n=>s(n).setActiveSession),p=i.useRef(void 0),h=n=>{(0,A.m)(n,()=>{e.setRead(n,d)}),p.current=void 0};i.useEffect(()=>()=>{u(null)},[]),i.useEffect(()=>(u(n),()=>{p.current&&(clearTimeout(p.current),n&&h(n))}),[n.id]),i.useEffect(()=>{m&&(n=>{const e=l?1e3*c.getState().settings.getValue(a.x.UNREAD_LABEL_DELAY):0;p.current=window.setTimeout(()=>h(n),e)})(n)},[m,n.id])}},91950:(n,e,s)=>{s.d(e,{A:()=>en});var i=s(74848),t=s(96540),o=s(99347),r=s(8098),a=s(68514),A=s(31104),l=s(19247),c=s(25906),d=s(67749),m=s(42695),u=s(4425),p=s(32389),h=s(97145);const E=({sessionMenuItems:n,newButton:e,sessionStoreSelector:s,listActionMenuGetter:t})=>{const{t:o}=(0,p.Bd)(),r=(0,h.c7)(n=>s(n).getTotalUrgencies);return(0,i.jsxs)(A.A,{triggerIcon:(0,i.jsx)(c.Z,{label:"Session menu",urgencies:r()}),children:[(0,i.jsx)(l.A,{caption:(0,m.Tl)("New",o,d.KV.COMMON),children:e}),(0,i.jsx)(l.A,{caption:(0,m.Tl)("Current sessions",o,d.KV.COMMON),children:n}),(0,i.jsx)(l.A,{children:t()})]})},g=({actions:n,activeItem:e})=>{if(!e||(0,r.vU)())return null;const s=Object.values(n.actions)[Object.values(n.actions).length-1];return(0,i.jsx)(a.A,{className:"basic small item close-button",action:s,moduleData:n.moduleData,itemData:e,icon:u.A.CLOSE})},B=({itemHeaderIcon:n,itemHeaderTitle:e})=>(0,i.jsxs)("div",{className:"session-header",children:[n,e]}),x=n=>{var{children:e,onKeyDown:s}=n,t=function(n,e){var s={};for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.indexOf(i)<0&&(s[i]=n[i]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var t=0;for(i=Object.getOwnPropertySymbols(n);t<i.length;t++)e.indexOf(i[t])<0&&Object.prototype.propertyIsEnumerable.call(n,i[t])&&(s[i[t]]=n[i[t]])}return s}(n,["children","onKeyDown"]);return(0,i.jsxs)("div",{className:"session-container vertical",onKeyDown:s,tabIndex:0,children:[(0,i.jsxs)("div",{className:"ui main menu menu-bar",children:[(0,i.jsxs)("div",{className:"content-left",children:[(0,i.jsx)(E,Object.assign({},t)),(0,i.jsx)(B,Object.assign({},t))]}),(0,i.jsx)(g,Object.assign({},t))]}),(0,i.jsx)("div",{className:"session-layout",children:e})]})};var f=s(31224),v=s(73070);const C=({sessionMenuItems:n,newButton:e,itemHeaderIcon:s,itemHeaderTitle:o,children:r,itemHeaderDescription:a,onKeyDown:A})=>(e&&(e=t.cloneElement(e,{className:e.props.className+" ui fluid button"})),(0,i.jsxs)(v.xA,{className:"session-container horizontal",onKeyDown:A,tabIndex:0,children:[(0,i.jsxs)("div",{className:"four wide column menu-column",children:[e,!!n.length&&(0,i.jsx)("div",{className:"ui vertical secondary menu",role:"menubar",children:n})]}),(0,i.jsx)("div",{className:"twelve wide stretched column content-column session",children:(0,i.jsxs)("div",{className:"ui segment session-layout",children:[(0,i.jsx)(f.A,{className:"session-header",icon:s,title:(0,i.jsx)("div",{className:"title",children:o}),subHeader:a}),(0,i.jsx)("div",{className:"ui divider",style:{margin:"5px 0px 0px 0px"}}),r]})})]}));var w=s(32728),b=s(18220),y=s(13017),j=s(20311),I=s.n(j);const N=({baseUrl:n})=>{const e=(0,y.Zp)(),s=e=>(I()(!!e,"Trying to get session URL without a session"),`/${n}/session/${e}`),i=`/${n}/new`;return{newUrl:`/${n}/new`,replaceNew:()=>{e(i,{replace:!0})},getSessionUrl:s,pushSession:n=>{e(s(n))},replaceSession:(n,i)=>{e(s(n),{replace:!0,state:i})}}};var O=s(48249);const S=(n,e)=>n.find(n=>n.id===e);var z=s(71352),k=s(46942),T=s.n(k),M=s(45325);const D=({url:n,title:e,className:s})=>(0,i.jsx)(M.A,{className:T()("new",s),icon:u.A.CREATE,url:n,children:e},"button-new"),H=({sessionItem:n,status:e,name:s,unreadInfoStoreSelector:t,url:o})=>(0,i.jsx)(M.A,{url:o,className:"session-item",icon:e,sessionItem:n,unreadInfoStoreSelector:t,children:s});var U=s(83994),K=s(27725),L=s(39364),G=s(85072),V=s.n(G),Y=s(97825),W=s.n(Y),R=s(77659),$=s.n(R),q=s(55056),_=s.n(q),F=s(10540),P=s.n(F),Z=s(41113),J=s.n(Z),X=s(46510),Q={};Q.styleTagTransform=J(),Q.setAttributes=_(),Q.insert=$().bind(null,"head"),Q.domAPI=W(),Q.insertStyleElement=P(),V()(X.A,Q),X.A&&X.A.locals&&X.A.locals;var nn=s(70756);const en=n=>{const e=(0,L.wV)(),s=(0,b.y)(),a=(0,y.Zp)(),A=(0,y.zy)(),{activeItem:l,onKeyDown:c}=(n=>{const[e,s]=t.useState(null),i=(0,y.zy)(),o=(0,O.F)(),{pushSession:a,replaceSession:A,newUrl:l,replaceNew:c}=N({baseUrl:n.baseUrl}),d=()=>`${n.baseUrl}_last_active`;return t.useLayoutEffect(()=>{if(i.pathname===l)return void(e&&s(null));if((()=>{const e=i,t=e.state&&e.state.pending,o=S(n.items,n.activeId);return o?t?(A(o.id,{pending:!1}),!0):(s(o),(0,r.MS)(d(),n.activeId),!0):!!t||0===n.items.length&&(c(),s(null),!0)})())return;if(!e){const e=(0,r.H5)(d());if(e&&S(n.items,e))return void A(e)}const{items:t,activeId:o}=n;let a=0;const m=S(t,o);m&&(a=t.indexOf(m),a===t.length-1&&(a-=1)),A(t[a].id)},[i,n.items]),{onKeyDown:e=>{const{key:s,altKey:i}=e;if(!i||"ArrowUp"!==s&&"ArrowDown"!==s){if(i&&"Insert"===s)e.preventDefault(),c();else if(i&&"Delete"===s){e.preventDefault();const{items:s,activeId:i,sessionApi:t}=n,r=S(s,i);r&&t.removeSession(r,o)}}else{e.preventDefault();const{items:i,activeId:t}=n,o=S(i,t);if(!o)return;const r=i.indexOf(o);if(-1===r)return;const A=i["ArrowUp"===s?r-1:r+1];A&&a(A.id)}},activeItem:e}})(n),h=(0,nn.z)(e,n.editAccess),E=!!n.newLayout&&A.pathname.endsWith("/new"),{disableSideMenu:g,items:B,sessionStoreSelector:f,sessionT:v,uiActions:j}=n,I=g||(0,r.vU)(s),{getItemHeaderTitle:k,getItemHeaderDescription:T,getItemHeaderIcon:M,getNewButton:G,getSessionMenuItems:V,getSessionActionMenuItems:Y}=(n=>{const e=(0,O.F)(),s=(0,y.zy)(),{t}=(0,p.Bd)(),{newUrl:o,getSessionUrl:r}=N({baseUrl:n.baseUrl}),a=e=>{const{itemStatusGetter:s,itemHeaderIconGetter:t}=n;return s?(0,i.jsx)("div",{className:"ui session-status empty circular left mini label "+s(e)}):(0,i.jsx)(U.A,{icon:t(e)})};return{getItemHeaderDescription:()=>{const{itemHeaderDescriptionGetter:e,newDescription:s,activeItem:i,isNewLayout:t}=n;return t?s:i?e(i):null},getItemHeaderIcon:()=>{const{itemHeaderIconGetter:e,newIcon:s,activeItem:t,isNewLayout:o}=n;return o?(0,i.jsx)(U.A,{icon:s}):t?(0,i.jsx)(U.A,{icon:e(t)}):null},getItemHeaderTitle:()=>{const{activeItem:e,newCaption:t,remoteMenuId:o,isNewLayout:r}=n;if(r)return(0,i.jsx)("div",{children:t});if(!e)return null;const{uiActions:a,actionIds:A,itemNameGetter:l,itemHeaderTitleGetter:c}=n,d=A?[...A,"divider","remove"]:void 0,m=(0,i.jsx)(z.Wy,{caption:l(e),actions:a,itemData:e,ids:d,remoteMenuId:o});if(c){const n=c(e,s,m);if(n)return n}return m},getSessionActionMenuItems:()=>{const{items:s,hasEditAccess:o}=n;return o&&0!==s.length?(0,i.jsx)(K.A,{onClick:()=>{const{sessionApi:s,items:i}=n;i.forEach(n=>s.removeSession(n,e))},icon:u.A.REMOVE,children:(0,m.Tl)("Close all",t,d.KV.COMMON)},"close"):null},getNewButton:()=>{const{newCaption:e,hasEditAccess:s}=n;return s&&e?(0,i.jsx)(D,{title:e,url:o},"new-button"):null},getSessionMenuItems:()=>n.items.map(e=>{const{itemNameGetter:s,sessionStoreSelector:t}=n;return(0,i.jsx)(H,{url:r(e.id),name:s(e),unreadInfoStoreSelector:t,status:a(e),sessionItem:e},e.id)})}})(Object.assign(Object.assign({},n),{activeItem:l,hasEditAccess:h,isNewLayout:E}));if(!h&&0===B.length)return(0,i.jsx)(w.A,{title:(0,m.Tl)("No items to show",v.plainT,d.KV.COMMON),description:v.plainT((0,m.j2)("noSessionEditAccess",d.KV.COMMON),"You aren't allowed to open new sessions")});const W=I?x:C;return(0,i.jsx)(W,{itemHeaderTitle:k(),itemHeaderDescription:T(),itemHeaderIcon:M(),newButton:G(),sessionMenuItems:V(),listActionMenuGetter:Y,activeItem:l,sessionStoreSelector:f,onKeyDown:c,actions:j,children:(()=>{const{newLayout:e,sessionT:s}=n;return E&&e?(0,i.jsx)(e,{navigate:a,location:A,sessionT:s}):(()=>{const{activeId:e,items:s,sessionItemLayout:t,sessionApi:r,uiActions:c,sessionT:u,baseUrl:p}=n;if(!l){const{state:n}=A;return n&&n.pending?(0,i.jsx)(o.A,{text:(0,m.Tl)("Waiting for server response",u.plainT,d.KV.COMMON)}):e||0!==s.length?(0,i.jsx)(o.A,{text:(0,m.Tl)("Loading session",u.plainT,d.KV.COMMON)}):void console.error("SessionLayout route: active session missing")}return(0,i.jsx)(t,{sessionItem:l,sessionApi:r,uiActions:c,location:A,navigate:a,sessionT:u,baseUrl:p})})()})()})}}}]);
|
|
2
|
+
//# sourceMappingURL=550.43735d298b0c3e70c6bd.chunk.js.map
|
|
Binary file
|