airdcpp-webui 2.12.1-beta.3 → 2.12.1
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/{223.d8381390628f8a92159f.chunk.js → 223.92cf614c9d87cf67385e.chunk.js} +2 -2
- package/dist/js/223.92cf614c9d87cf67385e.chunk.js.gz +0 -0
- package/dist/js/{223.d8381390628f8a92159f.chunk.js.map → 223.92cf614c9d87cf67385e.chunk.js.map} +1 -1
- package/dist/js/{236.a5df8c51dbebe95cc268.chunk.js → 236.6b4fd58c10a23138b7d8.chunk.js} +2 -2
- package/dist/js/236.6b4fd58c10a23138b7d8.chunk.js.gz +0 -0
- package/dist/js/236.6b4fd58c10a23138b7d8.chunk.js.map +1 -0
- package/dist/js/{544.58de40c388788ce8d588.chunk.js → 544.826a806e4535f09cf100.chunk.js} +2 -2
- package/dist/js/{544.58de40c388788ce8d588.chunk.js.gz → 544.826a806e4535f09cf100.chunk.js.gz} +0 -0
- package/dist/js/{544.58de40c388788ce8d588.chunk.js.map → 544.826a806e4535f09cf100.chunk.js.map} +1 -1
- package/dist/js/{616.6af0b2487703c8da4b2c.chunk.js → 616.57a60c241582d79fa280.chunk.js} +2 -2
- package/dist/js/616.57a60c241582d79fa280.chunk.js.gz +0 -0
- package/dist/js/{616.6af0b2487703c8da4b2c.chunk.js.map → 616.57a60c241582d79fa280.chunk.js.map} +1 -1
- package/dist/js/{favorite-hubs.5d14015c002fab9d6e93.chunk.js → favorite-hubs.f1ced66aa7691eeee525.chunk.js} +2 -2
- package/dist/js/favorite-hubs.f1ced66aa7691eeee525.chunk.js.gz +0 -0
- package/dist/js/{favorite-hubs.5d14015c002fab9d6e93.chunk.js.map → favorite-hubs.f1ced66aa7691eeee525.chunk.js.map} +1 -1
- package/dist/js/{filelists.69f099cbc0bb5b67d1b8.chunk.js → filelists.852a6a879bab1f93854e.chunk.js} +2 -2
- package/dist/js/filelists.852a6a879bab1f93854e.chunk.js.gz +0 -0
- package/dist/js/{filelists.69f099cbc0bb5b67d1b8.chunk.js.map → filelists.852a6a879bab1f93854e.chunk.js.map} +1 -1
- package/dist/js/{home.ccd57551ac01ff4fc4ba.chunk.js → home.9a37f3a3c78cb9b3f45c.chunk.js} +3 -3
- package/dist/js/home.9a37f3a3c78cb9b3f45c.chunk.js.gz +0 -0
- package/dist/js/home.9a37f3a3c78cb9b3f45c.chunk.js.map +1 -0
- package/dist/js/{hubs.c2b8880d6d8ccfc9eb3a.chunk.js → hubs.c21b941c411425d4852f.chunk.js} +2 -2
- package/dist/js/hubs.c21b941c411425d4852f.chunk.js.gz +0 -0
- package/dist/js/hubs.c21b941c411425d4852f.chunk.js.map +1 -0
- package/dist/js/main.7a746a54efc4bf96cd20.entry.js +3 -0
- package/dist/js/{main.a7216efbb2c5cd34c7e5.entry.js.LICENSE.txt → main.7a746a54efc4bf96cd20.entry.js.LICENSE.txt} +3 -3
- package/dist/js/main.7a746a54efc4bf96cd20.entry.js.gz +0 -0
- package/dist/js/main.7a746a54efc4bf96cd20.entry.js.map +1 -0
- package/dist/js/{messages.980fd246050252a227cd.chunk.js → messages.6ed02d7d7ec7e06a93f2.chunk.js} +2 -2
- package/dist/js/messages.6ed02d7d7ec7e06a93f2.chunk.js.gz +0 -0
- package/dist/js/{messages.980fd246050252a227cd.chunk.js.map → messages.6ed02d7d7ec7e06a93f2.chunk.js.map} +1 -1
- package/dist/js/{queue.31409106566ce8e19fc3.chunk.js → queue.c73112a5c40baeee7c54.chunk.js} +2 -2
- package/dist/js/queue.c73112a5c40baeee7c54.chunk.js.gz +0 -0
- package/dist/js/{queue.31409106566ce8e19fc3.chunk.js.map → queue.c73112a5c40baeee7c54.chunk.js.map} +1 -1
- package/dist/js/{search.d724d4a3b2c8f3fe2768.chunk.js → search.66bbb5aead0f68100e76.chunk.js} +2 -2
- package/dist/js/search.66bbb5aead0f68100e76.chunk.js.gz +0 -0
- package/dist/js/{search.d724d4a3b2c8f3fe2768.chunk.js.map → search.66bbb5aead0f68100e76.chunk.js.map} +1 -1
- package/dist/js/settings.a509b3c48b03452b6783.chunk.js +2 -0
- package/dist/js/settings.a509b3c48b03452b6783.chunk.js.gz +0 -0
- package/dist/js/settings.a509b3c48b03452b6783.chunk.js.map +1 -0
- package/dist/js/{share.a35d32796acde4fc3d59.chunk.js → share.6efce937acbd036d089d.chunk.js} +2 -2
- package/dist/js/share.6efce937acbd036d089d.chunk.js.gz +0 -0
- package/dist/js/{share.a35d32796acde4fc3d59.chunk.js.map → share.6efce937acbd036d089d.chunk.js.map} +1 -1
- package/dist/js/{system-log.2d9af5f3372752909d83.chunk.js → system-log.3efd872fbf4a90cde8d5.chunk.js} +2 -2
- package/dist/js/system-log.3efd872fbf4a90cde8d5.chunk.js.gz +0 -0
- package/dist/js/{system-log.2d9af5f3372752909d83.chunk.js.map → system-log.3efd872fbf4a90cde8d5.chunk.js.map} +1 -1
- package/dist/js/{transfers.22bad3799f0455da946b.chunk.js → transfers.326119d8de6e6f8176b5.chunk.js} +2 -2
- package/dist/js/transfers.326119d8de6e6f8176b5.chunk.js.gz +0 -0
- package/dist/js/{transfers.22bad3799f0455da946b.chunk.js.map → transfers.326119d8de6e6f8176b5.chunk.js.map} +1 -1
- package/dist/sw.js +1 -1
- package/dist/sw.js.gz +0 -0
- package/jest.config.js +1 -1
- package/package.json +2 -2
- package/tsconfig.json +1 -1
- package/dist/js/223.d8381390628f8a92159f.chunk.js.gz +0 -0
- package/dist/js/236.a5df8c51dbebe95cc268.chunk.js.gz +0 -0
- package/dist/js/236.a5df8c51dbebe95cc268.chunk.js.map +0 -1
- package/dist/js/616.6af0b2487703c8da4b2c.chunk.js.gz +0 -0
- package/dist/js/favorite-hubs.5d14015c002fab9d6e93.chunk.js.gz +0 -0
- package/dist/js/filelists.69f099cbc0bb5b67d1b8.chunk.js.gz +0 -0
- package/dist/js/home.ccd57551ac01ff4fc4ba.chunk.js.gz +0 -0
- package/dist/js/home.ccd57551ac01ff4fc4ba.chunk.js.map +0 -1
- package/dist/js/hubs.c2b8880d6d8ccfc9eb3a.chunk.js.gz +0 -0
- package/dist/js/hubs.c2b8880d6d8ccfc9eb3a.chunk.js.map +0 -1
- package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js +0 -3
- package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js.gz +0 -0
- package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js.map +0 -1
- package/dist/js/messages.980fd246050252a227cd.chunk.js.gz +0 -0
- package/dist/js/queue.31409106566ce8e19fc3.chunk.js.gz +0 -0
- package/dist/js/search.d724d4a3b2c8f3fe2768.chunk.js.gz +0 -0
- package/dist/js/settings.4087d834170e87ff1c53.chunk.js +0 -2
- package/dist/js/settings.4087d834170e87ff1c53.chunk.js.gz +0 -0
- package/dist/js/settings.4087d834170e87ff1c53.chunk.js.map +0 -1
- package/dist/js/share.a35d32796acde4fc3d59.chunk.js.gz +0 -0
- package/dist/js/system-log.2d9af5f3372752909d83.chunk.js.gz +0 -0
- package/dist/js/transfers.22bad3799f0455da946b.chunk.js.gz +0 -0
- /package/dist/js/{home.ccd57551ac01ff4fc4ba.chunk.js.LICENSE.txt → home.9a37f3a3c78cb9b3f45c.chunk.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[544],{20082:(e,n,a)=>{a.d(n,{A:()=>d});var t=a(71354),o=a.n(t),s=a(76314),l=a.n(s)()(o());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},88544:(e,n,a)=>{a.d(n,{A:()=>se});var t=a(74848),o=a(96540),s=a(47767),l=a(32389),d=a(42191),i=a(93226),r=a(79179),c=a(59315),h=a(4425),m=a(88939),u=a(41860),A=a(13546),p=a(65385),w=a(75662),f=a(56010),y=a(36076),x=a(42695),v=a(53213),g=a(33968),j=a(8098),O=a(27725),E=a(67749),b=a(32728),N=a(83994),C=a(98573);const P=(e,n)=>e.free_space<=0?e.path:` (${n((0,x.j2)("spaceFree",E.KV.COMMON),{defaultValue:"{{freeSpace}} free",replace:{freeSpace:(0,C.Xq)(e.free_space,n)}})})`,I=({pathInfo:e,downloadHandler:n,t:a})=>(0,t.jsxs)("div",{className:"item",children:[(0,t.jsx)(N.A,{icon:h.A.FOLDER}),(0,t.jsx)("div",{className:"content",children:(0,t.jsxs)("a",{onClick:()=>n(e.path),children:[e.path,(0,t.jsx)("span",{className:"disk-info",children:P(e,a)})]})})]}),B=(0,A.A)((function({downloadHandler:e,pathInfos:n,t:a}){return(0,t.jsx)("div",{className:"ui relaxed list",children:n.map((n=>(0,t.jsx)(I,{pathInfo:n,downloadHandler:e,t:a},n.path)))})}),{urls:{pathInfos:({paths:e},n)=>n.post(c.A.DISK_INFO_URL,{paths:e})}}),R=e=>0===e.paths.length?(0,t.jsx)(b.A,{title:(0,x.Tl)("No paths to display",e.t,E.KV.COMMON)}):(0,t.jsx)(B,Object.assign({},e));var k=a(5556),D=a.n(k),_=a(78340);class M extends o.Component{constructor(){super(...arguments),this.formatParent=e=>{const{downloadHandler:n,t:a}=this.props;return(0,t.jsxs)(o.Fragment,{children:[(0,t.jsxs)("div",{className:"title",children:[(0,t.jsx)(N.A,{icon:h.A.DROPDOWN}),e.name]}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(R,{paths:e.paths,downloadHandler:n,t:a})})]},e.name)}}render(){const{groupedPaths:e,t:n}=this.props;return 0===e.length?(0,t.jsx)(b.A,{title:(0,x.Tl)("No paths to display",n,E.KV.COMMON)}):(0,t.jsx)(_.Ay,{className:"styled download-targets",children:e.map(this.formatParent)})}}M.propTypes={downloadHandler:D().func.isRequired,groupedPaths:D().array.isRequired};const S=M;var T=a(90425);const H=(e,n,a)=>n?[...e,(0,t.jsxs)(O.A,{onClick:n,children:[(0,x.Tl)("Browse",a,E.KV.COMMON),(0,t.jsx)(N.A,{icon:h.A.BROWSE})]},"browse")]:e,L=({menuItems:e,title:n,handleBrowse:a,t:o,children:s})=>(0,t.jsxs)("div",{className:"mobile layout",children:[(0,t.jsx)(T.A,{selection:!0,caption:n,children:H(e,a,o)}),(0,t.jsx)("div",{className:"ui segment main-content",children:s})]});var V=a(96529),U=a(73070);const F=({menuItems:e,title:n,handleBrowse:a,t:o,children:s})=>(0,t.jsxs)(U.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}),!!a&&(0,t.jsx)(V.A,{className:"fluid basic",caption:(0,x.Tl)("Browse",o,E.KV.COMMON),onClick:a,icon:h.A.BROWSE})]}),(0,t.jsx)("div",{className:"twelve wide stretched column",children:(0,t.jsx)("div",{className:"ui segment main-content",children:s})})]}),G=e=>{const{t:n}=(0,l.Bd)(),[a,s]=(0,o.useState)("history"),d=o.useMemo((()=>{const{historyPaths:n,sharePaths:a,favoritePaths:o,itemInfo:s}=e;return(e=>{const{sharePaths:n,favoritePaths:a,historyPaths:o,dupePaths:s}=e;return[{name:"Previous",key:"history",list:o,component:({downloadHandler:e,t:n})=>(0,t.jsx)(R,{paths:o,downloadHandler:e,t:n})},{name:"Shared",key:"shared",list:n,component:({downloadHandler:e,t:a})=>(0,t.jsx)(S,{groupedPaths:n,downloadHandler:e,t:a})},{name:"Favorites",key:"favorites",list:a,component:({downloadHandler:e,t:n})=>(0,t.jsx)(S,{groupedPaths:a,downloadHandler:e,t:n})},{name:"Dupes",key:"dupes",list:s,component:({downloadHandler:e,t:n})=>(0,t.jsx)(R,{paths:s,downloadHandler:e,t:n})}]})({historyPaths:n,sharePaths:a,favoritePaths:o,dupePaths:s.dupe?s.dupe.paths.map((e=>(0,g._6)(e))):[]})}),[]),i=d.find((e=>e.key===a));if(!i)return null;const r=d.map((e=>((e,n,a,o)=>(0,t.jsx)(O.A,{onClick:()=>a(e.key),active:n===e.key,children:(0,t.jsxs)(t.Fragment,{children:[o((0,x.j2)(e.key,E.KV.COMMON),e.name),!!e.list&&(0,t.jsx)("div",{className:"ui small right label",children:e.list.length})]})},e.key))(e,a,s,n))),c=(0,j.mY)()?L:F;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)};var K=a(86038),q=a(85072),W=a.n(q),Y=a(97825),$=a.n(Y),z=a(77659),Z=a.n(z),X=a(55056),J=a.n(X),Q=a(10540),ee=a.n(Q),ne=a(41113),ae=a.n(ne),te=a(20082),oe={};oe.styleTagTransform=ae(),oe.setAttributes=J(),oe.insert=Z().bind(null,"head"),oe.domAPI=$(),oe.insertStyleElement=ee(),W()(te.A,oe),te.A&&te.A.locals&&te.A.locals;const se=(0,p.A)((0,A.A)((e=>{const{t:n}=(0,l.Bd)(),a=(0,s.Zp)(),{downloadHandler:o,itemInfo:d,userGetter:r,params:A,session:p,historyPaths:g,favoritePaths:j,sharePaths:O,handleClose:b}=e,N=function(e,n){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(a[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(a[t[o]]=e[t[o]])}return a}(e,["downloadHandler","itemInfo","userGetter","params","session","historyPaths","favoritePaths","sharePaths","handleClose"]),C=(a,t)=>{return s=void 0,l=void 0,h=function*(){try{yield o(d,r?r(A.downloadItemId,e):void 0,{target_name:t||d.name,target_directory:a,priority:K.Fm.DEFAULT},p)}catch(e){m.A.error({title:n((0,x.j2)("queueingFailed",E.KV.COMMON),{defaultValue:"Failed to queue the item {{item.name}}",replace:{item:d}}),message:e.message})}(0,y.bd)((()=>(0,v.G)(i.n2.DOWNLOAD_DIR,a)),n),b()},new((c=void 0)||(c=Promise))((function(e,n){function a(e){try{o(h.next(e))}catch(e){n(e)}}function t(e){try{o(h.throw(e))}catch(e){n(e)}}function o(n){var o;n.done?e(n.value):(o=n.value,o instanceof c?o:new c((function(e){e(o)}))).then(a,t)}o((h=h.apply(s,l||[])).next())}));var s,l,c,h},P={subHeader:d.name,title:(0,x.Tl)("Download",n,E.KV.COMMON),icon:h.A.DOWNLOAD,closable:!1},I=u.A.hasAccess(K.US.FILESYSTEM_VIEW);return(0,t.jsxs)(s.BV,{children:[(0,t.jsx)(s.qh,{path:"browse",element:(0,t.jsx)(f.d,Object.assign({onConfirm:(e,n,a)=>C(n,a),initialPath:(()=>{const e=g.length>0?g[g.length-1]:"";return"directory"===d.type.id?e:e+d.name})(),selectMode:"directory"===d.type.id?E.bV.DIRECTORY:E.bV.FILE,historyId:c.A.LOCATION_DOWNLOAD,approveCaption:(0,x.Tl)("Download",n,E.KV.COMMON)},P))}),(0,t.jsx)(s.qh,{index:!0,element:(0,t.jsx)(w.A,Object.assign({className:"download-dialog",fullHeight:!0},P,N,{children:(0,t.jsx)(G,{downloadHandler:C,handleBrowse:I?()=>{a("browse")}:void 0,historyPaths:g,favoritePaths:j,sharePaths:O,itemInfo:d})}))})]})}),{urls:{sharePaths:d.A.GROUPED_ROOTS_GET_URL,favoritePaths:r.A.GROUPED_DIRECTORIES_URL,historyPaths:i.Ay.STRINGS_URL+"/"+i.n2.DOWNLOAD_DIR,itemInfo:({params:e,itemDataGetter:n},a)=>n(e.downloadItemId,a)}}),"/download/:downloadItemId")},73070:(e,n,a)=>{a.d(n,{Y9:()=>h,fI:()=>c,xA:()=>m});var t=a(74848),o=(a(96540),a(46942)),s=a.n(o),l=a(32389),d=a(42695),i=a(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:a,titleWidth:o="four",noText:l})=>(0,t.jsxs)("div",{className:s()("ui row",a),children:[(0,t.jsx)("div",{className:s()(l?"sixteen":o,"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:a,columns:o,stackable:l}=e,d=function(e,n){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(a[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(a[t[o]]=e[t[o]])}return a}(e,["className","children","columns","stackable"]);return(0,t.jsx)("div",Object.assign({className:s()("ui grid",{[`${o} column`]:!!o},{stackable:l},n)},d,{children:a}))}},79179:(e,n,a)=>{a.d(n,{A:()=>o});const t="favorite_directories",o={MODULE_URL:t,GROUPED_DIRECTORIES_URL:t+"/grouped_paths",DIRECTORIES_URL:t,DIRECTORIES_UPDATED:"favorite_directories_updated"}},53213:(e,n,a)=>{a.d(n,{G:()=>s});var t=a(26817),o=a(93226);const s=(e,n)=>t.A.post(`${o.Ay.STRINGS_URL}/${e}`,{string:n})}}]);
|
|
2
|
-
//# sourceMappingURL=544.
|
|
1
|
+
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[544],{20082:(e,n,a)=>{a.d(n,{A:()=>d});var t=a(71354),o=a.n(t),s=a(76314),l=a.n(s)()(o());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},88544:(e,n,a)=>{a.d(n,{A:()=>se});var t=a(74848),o=a(96540),s=a(47767),l=a(32389),d=a(42191),i=a(93226),r=a(79179),c=a(59315),h=a(4425),m=a(88939),u=a(41860),A=a(13546),p=a(65385),w=a(75662),f=a(56010),y=a(36076),x=a(42695),v=a(53213),g=a(33968),j=a(8098),O=a(27725),E=a(67749),b=a(32728),N=a(83994),C=a(98573);const P=(e,n)=>e.free_space<=0?e.path:` (${n((0,x.j2)("spaceFree",E.KV.COMMON),{defaultValue:"{{freeSpace}} free",replace:{freeSpace:(0,C.Xq)(e.free_space,n)}})})`,I=({pathInfo:e,downloadHandler:n,t:a})=>(0,t.jsxs)("div",{className:"item",children:[(0,t.jsx)(N.A,{icon:h.A.FOLDER}),(0,t.jsx)("div",{className:"content",children:(0,t.jsxs)("a",{onClick:()=>n(e.path),children:[e.path,(0,t.jsx)("span",{className:"disk-info",children:P(e,a)})]})})]}),B=(0,A.A)((function({downloadHandler:e,pathInfos:n,t:a}){return(0,t.jsx)("div",{className:"ui relaxed list",children:n.map((n=>(0,t.jsx)(I,{pathInfo:n,downloadHandler:e,t:a},n.path)))})}),{urls:{pathInfos:({paths:e},n)=>n.post(c.A.DISK_INFO_URL,{paths:e})}}),R=e=>0===e.paths.length?(0,t.jsx)(b.A,{title:(0,x.Tl)("No paths to display",e.t,E.KV.COMMON)}):(0,t.jsx)(B,Object.assign({},e));var k=a(5556),D=a.n(k),_=a(78340);class M extends o.Component{constructor(){super(...arguments),this.formatParent=e=>{const{downloadHandler:n,t:a}=this.props;return(0,t.jsxs)(o.Fragment,{children:[(0,t.jsxs)("div",{className:"title",children:[(0,t.jsx)(N.A,{icon:h.A.DROPDOWN}),e.name]}),(0,t.jsx)("div",{className:"content",children:(0,t.jsx)(R,{paths:e.paths,downloadHandler:n,t:a})})]},e.name)}}render(){const{groupedPaths:e,t:n}=this.props;return 0===e.length?(0,t.jsx)(b.A,{title:(0,x.Tl)("No paths to display",n,E.KV.COMMON)}):(0,t.jsx)(_.Ay,{className:"styled download-targets",children:e.map(this.formatParent)})}}M.propTypes={downloadHandler:D().func.isRequired,groupedPaths:D().array.isRequired};const S=M;var T=a(90425);const H=(e,n,a)=>n?[...e,(0,t.jsxs)(O.A,{onClick:n,children:[(0,x.Tl)("Browse",a,E.KV.COMMON),(0,t.jsx)(N.A,{icon:h.A.BROWSE})]},"browse")]:e,L=({menuItems:e,title:n,handleBrowse:a,t:o,children:s})=>(0,t.jsxs)("div",{className:"mobile layout",children:[(0,t.jsx)(T.A,{selection:!0,caption:n,children:H(e,a,o)}),(0,t.jsx)("div",{className:"ui segment main-content",children:s})]});var V=a(96529),U=a(73070);const F=({menuItems:e,title:n,handleBrowse:a,t:o,children:s})=>(0,t.jsxs)(U.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}),!!a&&(0,t.jsx)(V.A,{className:"fluid basic",caption:(0,x.Tl)("Browse",o,E.KV.COMMON),onClick:a,icon:h.A.BROWSE})]}),(0,t.jsx)("div",{className:"twelve wide stretched column",children:(0,t.jsx)("div",{className:"ui segment main-content",children:s})})]}),G=e=>{const{t:n}=(0,l.Bd)(),[a,s]=(0,o.useState)("history"),d=o.useMemo((()=>{const{historyPaths:n,sharePaths:a,favoritePaths:o,itemInfo:s}=e;return(e=>{const{sharePaths:n,favoritePaths:a,historyPaths:o,dupePaths:s}=e;return[{name:"Previous",key:"history",list:o,component:({downloadHandler:e,t:n})=>(0,t.jsx)(R,{paths:o,downloadHandler:e,t:n})},{name:"Shared",key:"shared",list:n,component:({downloadHandler:e,t:a})=>(0,t.jsx)(S,{groupedPaths:n,downloadHandler:e,t:a})},{name:"Favorites",key:"favorites",list:a,component:({downloadHandler:e,t:n})=>(0,t.jsx)(S,{groupedPaths:a,downloadHandler:e,t:n})},{name:"Dupes",key:"dupes",list:s,component:({downloadHandler:e,t:n})=>(0,t.jsx)(R,{paths:s,downloadHandler:e,t:n})}]})({historyPaths:n,sharePaths:a,favoritePaths:o,dupePaths:s.dupe?s.dupe.paths.map((e=>(0,g._6)(e))):[]})}),[]),i=d.find((e=>e.key===a));if(!i)return null;const r=d.map((e=>((e,n,a,o)=>(0,t.jsx)(O.A,{onClick:()=>a(e.key),active:n===e.key,children:(0,t.jsxs)(t.Fragment,{children:[o((0,x.j2)(e.key,E.KV.COMMON),e.name),!!e.list&&(0,t.jsx)("div",{className:"ui small right label",children:e.list.length})]})},e.key))(e,a,s,n))),c=(0,j.mY)()?L:F;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)};var K=a(86038),q=a(85072),W=a.n(q),Y=a(97825),$=a.n(Y),z=a(77659),Z=a.n(z),X=a(55056),J=a.n(X),Q=a(10540),ee=a.n(Q),ne=a(41113),ae=a.n(ne),te=a(20082),oe={};oe.styleTagTransform=ae(),oe.setAttributes=J(),oe.insert=Z().bind(null,"head"),oe.domAPI=$(),oe.insertStyleElement=ee(),W()(te.A,oe),te.A&&te.A.locals&&te.A.locals;const se=(0,p.A)((0,A.A)((e=>{const{t:n}=(0,l.Bd)(),a=(0,s.Zp)(),{downloadHandler:o,itemInfo:d,userGetter:r,params:A,session:p,historyPaths:g,favoritePaths:j,sharePaths:O,handleClose:b}=e,N=function(e,n){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(a[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(a[t[o]]=e[t[o]])}return a}(e,["downloadHandler","itemInfo","userGetter","params","session","historyPaths","favoritePaths","sharePaths","handleClose"]),C=(a,t)=>{return s=void 0,l=void 0,h=function*(){try{yield o(d,r?r(A.downloadItemId,e):void 0,{target_name:t||d.name,target_directory:a,priority:K.Fm.DEFAULT},p)}catch(e){m.A.error({title:n((0,x.j2)("queueingFailed",E.KV.COMMON),{defaultValue:"Failed to queue the item {{item.name}}",replace:{item:d}}),message:e.message})}(0,y.bd)((()=>(0,v.G)(i.n2.DOWNLOAD_DIR,a)),n),b()},new((c=void 0)||(c=Promise))((function(e,n){function a(e){try{o(h.next(e))}catch(e){n(e)}}function t(e){try{o(h.throw(e))}catch(e){n(e)}}function o(n){var o;n.done?e(n.value):(o=n.value,o instanceof c?o:new c((function(e){e(o)}))).then(a,t)}o((h=h.apply(s,l||[])).next())}));var s,l,c,h},P={subHeader:d.name,title:(0,x.Tl)("Download",n,E.KV.COMMON),icon:h.A.DOWNLOAD,closable:!1},I=u.A.hasAccess(K.US.FILESYSTEM_VIEW);return(0,t.jsxs)(s.BV,{children:[(0,t.jsx)(s.qh,{path:"browse",element:(0,t.jsx)(f.d,Object.assign({onConfirm:(e,n,a)=>C(n,a),initialPath:(()=>{const e=g.length>0?g[g.length-1]:"";return"directory"===d.type.id?e:e+d.name})(),selectMode:"directory"===d.type.id?E.bV.DIRECTORY:E.bV.FILE,historyId:c.A.LOCATION_DOWNLOAD,approveCaption:(0,x.Tl)("Download",n,E.KV.COMMON)},P))}),(0,t.jsx)(s.qh,{index:!0,element:(0,t.jsx)(w.A,Object.assign({className:"download-dialog",fullHeight:!0},P,N,{children:(0,t.jsx)(G,{downloadHandler:C,handleBrowse:I?()=>{a("browse")}:void 0,historyPaths:g,favoritePaths:j,sharePaths:O,itemInfo:d})}))})]})}),{urls:{sharePaths:d.A.GROUPED_ROOTS_GET_URL,favoritePaths:r.A.GROUPED_DIRECTORIES_URL,historyPaths:i.Ay.STRINGS_URL+"/"+i.n2.DOWNLOAD_DIR,itemInfo:({params:e,itemDataGetter:n},a)=>n(e.downloadItemId,a)}}),"/download/:downloadItemId")},73070:(e,n,a)=>{a.d(n,{Y9:()=>h,fI:()=>c,xA:()=>m});var t=a(74848),o=(a(96540),a(46942)),s=a.n(o),l=a(32389),d=a(42695),i=a(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:a,titleWidth:o="four",noText:l})=>(0,t.jsxs)("div",{className:s()("ui row",a),children:[(0,t.jsx)("div",{className:s()(l?"sixteen":o,"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:a,columns:o,stackable:l}=e,d=function(e,n){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(a[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(t=Object.getOwnPropertySymbols(e);o<t.length;o++)n.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(a[t[o]]=e[t[o]])}return a}(e,["className","children","columns","stackable"]);return(0,t.jsx)("div",Object.assign({className:s()("ui grid",{[`${o} column`]:!!o},{stackable:l},n)},d,{children:a}))}},79179:(e,n,a)=>{a.d(n,{A:()=>o});const t="favorite_directories",o={MODULE_URL:t,GROUPED_DIRECTORIES_URL:t+"/grouped_paths",DIRECTORIES_URL:t,DIRECTORIES_UPDATED:"favorite_directories_updated"}},53213:(e,n,a)=>{a.d(n,{G:()=>s});var t=a(32811),o=a(93226);const s=(e,n)=>t.A.post(`${o.Ay.STRINGS_URL}/${e}`,{string:n})}}]);
|
|
2
|
+
//# sourceMappingURL=544.826a806e4535f09cf100.chunk.js.map
|
package/dist/js/{544.58de40c388788ce8d588.chunk.js.gz → 544.826a806e4535f09cf100.chunk.js.gz}
RENAMED
|
Binary file
|
package/dist/js/{544.58de40c388788ce8d588.chunk.js.map → 544.826a806e4535f09cf100.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/544.58de40c388788ce8d588.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/components/download/style.css","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","webpack://airdcpp-webui/./src/components/semantic/Grid.tsx","webpack://airdcpp-webui/./src/constants/FavoriteDirectoryConstants.ts","webpack://airdcpp-webui/./src/services/api/HistoryApi.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.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 PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport Icon from 'components/semantic/Icon';\n\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport { formatSize } from 'utils/ValueFormat';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { PathDownloadHandler } from '../../types';\n\ninterface PathItemProps {\n pathInfo: API.DiskSpaceInfo;\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nconst formatFreeSpace = (pathInfo: API.DiskSpaceInfo, t: UI.TranslateF) => {\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, t),\n },\n })})`;\n};\n\nexport const PathListItem: React.FC<PathItemProps> = ({\n pathInfo,\n downloadHandler,\n t,\n}) => (\n <div className=\"item\">\n <Icon icon={IconConstants.FOLDER} />\n <div className=\"content\">\n <a onClick={() => downloadHandler(pathInfo.path)}>\n {pathInfo.path}\n <span className=\"disk-info\">{formatFreeSpace(pathInfo, t)}</span>\n </a>\n </div>\n </div>\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 PropTypes from 'prop-types';\nimport 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 groupedPaths: API.GroupedPath[];\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nclass AccordionTargets extends Component<AccordionTargetsProps> {\n static propTypes = {\n // Function handling the path selection. Receives the selected path as argument.\n downloadHandler: PropTypes.func.isRequired,\n\n // Grouped paths to list\n groupedPaths: PropTypes.array.isRequired,\n };\n\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 { useMobileLayout } from 'utils/BrowserUtils';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\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\n\r\nexport interface DownloadDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n sharePaths: API.GroupedPath[];\r\n favoritePaths: API.GroupedPath[];\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\nexport interface DownloadLayoutProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> extends DownloadDataProps<ItemT> {\r\n downloadHandler: PathDownloadHandler;\r\n handleBrowse: BrowseHandler;\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 && (\r\n <div className=\"ui small right label\">{section.list.length}</div>\r\n )}\r\n </>\r\n </MenuItemLink>\r\n);\r\n\r\nexport const DownloadView: React.FC<DownloadLayoutProps> = (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 = useMobileLayout() ? 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","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-dom';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport {\r\n default as HistoryConstants,\r\n HistoryStringEnum,\r\n} from 'constants/HistoryConstants';\r\nimport FavoriteDirectoryConstants from 'constants/FavoriteDirectoryConstants';\r\nimport FilesystemConstants from 'constants/FilesystemConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport NotificationActions from 'actions/NotificationActions';\r\nimport LoginStore from 'stores/LoginStore';\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 Modal, { ModalProps } from 'components/semantic/Modal';\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 { DownloadView, DownloadDataProps } 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\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 DownloadDataProps<ItemT> {}\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\r\n const {\r\n downloadHandler,\r\n itemInfo,\r\n userGetter,\r\n params,\r\n session,\r\n historyPaths,\r\n favoritePaths,\r\n sharePaths,\r\n handleClose,\r\n ...other\r\n } = props;\r\n\r\n const handleDownload: PathDownloadHandler = async (targetPath, targetFilename) => {\r\n try {\r\n await downloadHandler(\r\n itemInfo,\r\n !!userGetter ? userGetter(params.downloadItemId!, props) : undefined,\r\n {\r\n target_name: !!targetFilename ? targetFilename : itemInfo.name,\r\n target_directory: targetPath,\r\n priority: API.QueuePriorityEnum.DEFAULT,\r\n },\r\n session,\r\n );\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(HistoryStringEnum.DOWNLOAD_DIR, targetPath),\r\n t,\r\n );\r\n\r\n handleClose();\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: ModalProps = {\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 = LoginStore.hasAccess(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={(path, directoryPath, fileName) =>\r\n handleDownload(directoryPath, fileName)\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 {...commonDialogProps}\r\n />\r\n }\r\n />\r\n <Route\r\n index\r\n element={\r\n <Modal\r\n className=\"download-dialog\"\r\n fullHeight={true}\r\n {...commonDialogProps}\r\n {...other}\r\n >\r\n <DownloadView\r\n downloadHandler={handleDownload}\r\n handleBrowse={hasFileBrowserAccess ? handleBrowse : undefined}\r\n historyPaths={historyPaths}\r\n favoritePaths={favoritePaths}\r\n sharePaths={sharePaths}\r\n itemInfo={itemInfo}\r\n />\r\n </Modal>\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 sharePaths: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n favoritePaths: FavoriteDirectoryConstants.GROUPED_DIRECTORIES_URL,\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","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 SocketService from 'services/SocketService';\nimport HistoryConstants from 'constants/HistoryConstants';\n\nexport const addHistory = (historyId: string, text: string) => {\n return SocketService.post(`${HistoryConstants.STRINGS_URL}/${historyId}`, {\n string: text,\n });\n};\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","formatFreeSpace","pathInfo","t","free_space","path","COMMON","defaultValue","replace","freeSpace","PathListItem","downloadHandler","className","Icon","icon","IconConstants","FOLDER","onClick","PathListWithData","DataProviderDecorator","pathInfos","map","urls","paths","socket","post","FilesystemConstants","DISK_INFO_URL","props","length","Message","title","AccordionTargets","Component","formatParent","parent","this","DROPDOWN","name","render","groupedPaths","Accordion","propTypes","isRequired","appendBrowseItem","menuItems","handleBrowse","MenuItemLink","BROWSE","MobileDownloadLayout","children","Dropdown","selection","caption","NormalDownloadLayout","Grid","Button","DownloadView","activeSectionKey","setActiveSectionKey","useState","sections","historyPaths","sharePaths","favoritePaths","itemInfo","dupePaths","key","list","component","getDownloadSections","dupe","activeSection","find","s","section","active","getMenuItem","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","ModalRouteDecorator","navigate","userGetter","params","session","handleClose","other","handleDownload","targetPath","targetFilename","downloadItemId","undefined","target_name","target_directory","priority","DEFAULT","e","NotificationActions","error","item","message","DOWNLOAD_DIR","commonDialogProps","subHeader","DOWNLOAD","closable","hasFileBrowserAccess","LoginStore","hasAccess","FILESYSTEM_VIEW","element","onConfirm","directoryPath","fileName","initialPath","type","getInitialBrowsePath","selectMode","DIRECTORY","FILE","historyId","LOCATION_DOWNLOAD","approveCaption","index","Modal","fullHeight","ShareConstants","GROUPED_ROOTS_GET_URL","FavoriteDirectoryConstants","GROUPED_DIRECTORIES_URL","HistoryConstants","STRINGS_URL","itemDataGetter","formatText","text","i18nKey","Row","titleWidth","noText","style","overflow","Header","columns","stackable","MODULE_URL","DIRECTORIES_URL","DIRECTORIES_UPDATED","addHistory","string"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/544.826a806e4535f09cf100.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/components/download/style.css","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","webpack://airdcpp-webui/./src/components/semantic/Grid.tsx","webpack://airdcpp-webui/./src/constants/FavoriteDirectoryConstants.ts","webpack://airdcpp-webui/./src/services/api/HistoryApi.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.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 PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport Icon from 'components/semantic/Icon';\n\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport { formatSize } from 'utils/ValueFormat';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { PathDownloadHandler } from '../../types';\n\ninterface PathItemProps {\n pathInfo: API.DiskSpaceInfo;\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nconst formatFreeSpace = (pathInfo: API.DiskSpaceInfo, t: UI.TranslateF) => {\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, t),\n },\n })})`;\n};\n\nexport const PathListItem: React.FC<PathItemProps> = ({\n pathInfo,\n downloadHandler,\n t,\n}) => (\n <div className=\"item\">\n <Icon icon={IconConstants.FOLDER} />\n <div className=\"content\">\n <a onClick={() => downloadHandler(pathInfo.path)}>\n {pathInfo.path}\n <span className=\"disk-info\">{formatFreeSpace(pathInfo, t)}</span>\n </a>\n </div>\n </div>\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 PropTypes from 'prop-types';\nimport 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 groupedPaths: API.GroupedPath[];\n downloadHandler: PathDownloadHandler;\n t: UI.TranslateF;\n}\n\nclass AccordionTargets extends Component<AccordionTargetsProps> {\n static propTypes = {\n // Function handling the path selection. Receives the selected path as argument.\n downloadHandler: PropTypes.func.isRequired,\n\n // Grouped paths to list\n groupedPaths: PropTypes.array.isRequired,\n };\n\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 { useMobileLayout } from 'utils/BrowserUtils';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\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\n\r\nexport interface DownloadDataProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> {\r\n sharePaths: API.GroupedPath[];\r\n favoritePaths: API.GroupedPath[];\r\n historyPaths: string[];\r\n itemInfo: ItemT;\r\n}\r\n\r\nexport interface DownloadLayoutProps<\r\n ItemT extends UI.DownloadableItemInfo = UI.DownloadableItemInfo,\r\n> extends DownloadDataProps<ItemT> {\r\n downloadHandler: PathDownloadHandler;\r\n handleBrowse: BrowseHandler;\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 && (\r\n <div className=\"ui small right label\">{section.list.length}</div>\r\n )}\r\n </>\r\n </MenuItemLink>\r\n);\r\n\r\nexport const DownloadView: React.FC<DownloadLayoutProps> = (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 = useMobileLayout() ? 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","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-dom';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport {\r\n default as HistoryConstants,\r\n HistoryStringEnum,\r\n} from 'constants/HistoryConstants';\r\nimport FavoriteDirectoryConstants from 'constants/FavoriteDirectoryConstants';\r\nimport FilesystemConstants from 'constants/FilesystemConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport NotificationActions from 'actions/NotificationActions';\r\nimport LoginStore from 'stores/LoginStore';\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 Modal, { ModalProps } from 'components/semantic/Modal';\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 { DownloadView, DownloadDataProps } 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\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 DownloadDataProps<ItemT> {}\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\r\n const {\r\n downloadHandler,\r\n itemInfo,\r\n userGetter,\r\n params,\r\n session,\r\n historyPaths,\r\n favoritePaths,\r\n sharePaths,\r\n handleClose,\r\n ...other\r\n } = props;\r\n\r\n const handleDownload: PathDownloadHandler = async (targetPath, targetFilename) => {\r\n try {\r\n await downloadHandler(\r\n itemInfo,\r\n !!userGetter ? userGetter(params.downloadItemId!, props) : undefined,\r\n {\r\n target_name: !!targetFilename ? targetFilename : itemInfo.name,\r\n target_directory: targetPath,\r\n priority: API.QueuePriorityEnum.DEFAULT,\r\n },\r\n session,\r\n );\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(HistoryStringEnum.DOWNLOAD_DIR, targetPath),\r\n t,\r\n );\r\n\r\n handleClose();\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: ModalProps = {\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 = LoginStore.hasAccess(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={(path, directoryPath, fileName) =>\r\n handleDownload(directoryPath, fileName)\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 {...commonDialogProps}\r\n />\r\n }\r\n />\r\n <Route\r\n index\r\n element={\r\n <Modal\r\n className=\"download-dialog\"\r\n fullHeight={true}\r\n {...commonDialogProps}\r\n {...other}\r\n >\r\n <DownloadView\r\n downloadHandler={handleDownload}\r\n handleBrowse={hasFileBrowserAccess ? handleBrowse : undefined}\r\n historyPaths={historyPaths}\r\n favoritePaths={favoritePaths}\r\n sharePaths={sharePaths}\r\n itemInfo={itemInfo}\r\n />\r\n </Modal>\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 sharePaths: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n favoritePaths: FavoriteDirectoryConstants.GROUPED_DIRECTORIES_URL,\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","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 SocketService from 'services/SocketService';\nimport HistoryConstants from 'constants/HistoryConstants';\n\nexport const addHistory = (historyId: string, text: string) => {\n return SocketService.post(`${HistoryConstants.STRINGS_URL}/${historyId}`, {\n string: text,\n });\n};\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","formatFreeSpace","pathInfo","t","free_space","path","COMMON","defaultValue","replace","freeSpace","PathListItem","downloadHandler","className","Icon","icon","IconConstants","FOLDER","onClick","PathListWithData","DataProviderDecorator","pathInfos","map","urls","paths","socket","post","FilesystemConstants","DISK_INFO_URL","props","length","Message","title","AccordionTargets","Component","formatParent","parent","this","DROPDOWN","name","render","groupedPaths","Accordion","propTypes","isRequired","appendBrowseItem","menuItems","handleBrowse","MenuItemLink","BROWSE","MobileDownloadLayout","children","Dropdown","selection","caption","NormalDownloadLayout","Grid","Button","DownloadView","activeSectionKey","setActiveSectionKey","useState","sections","historyPaths","sharePaths","favoritePaths","itemInfo","dupePaths","key","list","component","getDownloadSections","dupe","activeSection","find","s","section","active","getMenuItem","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","ModalRouteDecorator","navigate","userGetter","params","session","handleClose","other","handleDownload","targetPath","targetFilename","downloadItemId","undefined","target_name","target_directory","priority","DEFAULT","e","NotificationActions","error","item","message","DOWNLOAD_DIR","commonDialogProps","subHeader","DOWNLOAD","closable","hasFileBrowserAccess","LoginStore","hasAccess","FILESYSTEM_VIEW","element","onConfirm","directoryPath","fileName","initialPath","type","getInitialBrowsePath","selectMode","DIRECTORY","FILE","historyId","LOCATION_DOWNLOAD","approveCaption","index","Modal","fullHeight","ShareConstants","GROUPED_ROOTS_GET_URL","FavoriteDirectoryConstants","GROUPED_DIRECTORIES_URL","HistoryConstants","STRINGS_URL","itemDataGetter","formatText","text","i18nKey","Row","titleWidth","noText","style","overflow","Header","columns","stackable","MODULE_URL","DIRECTORIES_URL","DIRECTORIES_UPDATED","addHistory","string"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[616],{46510:(n,e,s)=>{s.d(e,{A:()=>r});var i=s(71354),t=s.n(i),o=s(76314),a=s.n(o)()(t());a.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(100vh - 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 .session-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.session-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,+BAA+B;EAC/B,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(100vh - 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 .session-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.session-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 r=a},4112:(n,e,s)=>{s.d(e,{R:()=>o});var i=s(26817),t=s(4425);const o=(n,e)=>({id:"remove",displayName:"Close",access:e,icon:t.A.REMOVE,handler:({itemData:e})=>i.A.delete(`${n}/${e.id}`)})},79531:(n,e,s)=>{s.d(e,{A:()=>r});var i=s(74848),t=s(96540),o=s(1530),a=s(19718);function r(n,e=!1){class s extends t.Component{constructor(){super(...arguments),this.setRead=n=>{this.props.sessionApi.setRead(n),this.readTimeout=void 0},this.setSession=n=>{if(this.readTimeout&&(clearTimeout(this.readTimeout),this.setRead(this.props.session)),this.props.sessionApi.sessionChanged(n),!n)return;const s=e?1e3*o.A.getValue(a.xC.UNREAD_LABEL_DELAY):0;this.readTimeout=window.setTimeout((()=>this.setRead(n)),s)}}componentDidMount(){this.setSession(this.props.session)}componentWillUnmount(){this.setSession(null)}componentDidUpdate(n){this.props.session.id!==n.session.id&&this.setSession(this.props.session)}render(){return(0,i.jsx)(n,Object.assign({},this.props))}}return s}},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})]})},91950:(n,e,s)=>{s.d(e,{A:()=>X});var i=s(74848),t=s(96540),o=s(99347),a=s(8098),r=s(68514),A=s(31104),l=s(19247),c=s(25906),d=s(67749),m=s(42695),u=s(4425),p=s(32389);const h=({sessionMenuItems:n,newButton:e,unreadInfoStore:s,listActionMenuGetter:t})=>{const{t:o}=(0,p.Bd)();return(0,i.jsxs)(A.A,{triggerIcon:(0,i.jsx)(c.Z,{urgencies:s?s.getTotalUrgencies():null}),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()})]})},E=({actions:n,activeItem:e})=>{if(!e||(0,a.mY)())return null;const s=Object.values(n.actions)[Object.values(n.actions).length-1];return(0,i.jsx)(r.A,{className:"basic small item close-button",action:s,moduleData:n.moduleData,itemData:e,icon:u.A.CLOSE})},g=({itemHeaderIcon:n,itemHeaderTitle:e})=>(0,i.jsxs)("div",{className:"session-header",children:[n,e]}),B=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)(h,Object.assign({},t)),(0,i.jsx)(g,Object.assign({},t))]}),(0,i.jsx)(E,Object.assign({},t))]}),(0,i.jsx)("div",{className:"session-layout",children:e})]})};var x=s(31224),f=s(73070);const C=({sessionMenuItems:n,newButton:e,itemHeaderIcon:s,itemHeaderTitle:o,children:a,itemHeaderDescription:r,onKeyDown:A})=>(e&&(e=t.cloneElement(e,{className:e.props.className+" ui fluid button"})),(0,i.jsxs)(f.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",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)(x.A,{className:"session-header",icon:s,title:(0,i.jsx)("div",{className:"title",children:o}),subHeader:r}),(0,i.jsx)("div",{className:"ui divider",style:{margin:"5px 0px 0px 0px"}}),a]})})]}));var v=s(32728),w=s(41860),b=s(18220),y=s(47767),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})}}},O=(n,e)=>n.find((n=>n.id===e));var z=s(85072),T=s.n(z),S=s(97825),k=s.n(S),M=s(77659),D=s.n(M),H=s(55056),U=s.n(H),K=s(10540),Y=s.n(K),G=s(41113),L=s.n(G),R=s(46510),V={};V.styleTagTransform=L(),V.setAttributes=U(),V.insert=D().bind(null,"head"),V.domAPI=k(),V.insertStyleElement=Y(),T()(R.A,V),R.A&&R.A.locals&&R.A.locals;var W=s(71352),$=s(46942),P=s.n($),_=s(45325);const q=({url:n,title:e,className:s})=>(0,i.jsx)(_.A,{className:P()("new",s),icon:u.A.CREATE,url:n,children:e},"button-new"),Z=({sessionItem:n,status:e,name:s,unreadInfoStore:t,url:o})=>(0,i.jsx)(_.A,{url:o,className:"session-item",icon:e,session:n,unreadInfoStore:t,children:(0,i.jsx)("span",{className:"session-name",children:s})});var F=s(83994),J=s(27725);const X=n=>{const e=(0,b.y)(),s=(0,y.Zp)(),r=(0,y.zy)(),{activeItem:A,onKeyDown:l}=(n=>{const[e,s]=t.useState(null),i=(0,y.zy)(),{pushSession:o,replaceSession:r,newUrl:A,replaceNew:l}=N({baseUrl:n.baseUrl}),c=()=>`${n.baseUrl}_last_active`;return t.useLayoutEffect((()=>{if(i.pathname===A)return void(e&&s(null));if((()=>{const e=i,t=e.state&&e.state.pending,o=O(n.items,n.activeId);return o?t?(r(o.id,{pending:!1}),!0):(s(o),(0,a.MS)(c(),n.activeId),!0):!!t||0===n.items.length&&(l(),s(null),!0)})())return;if(!e){const e=(0,a.H5)(c());if(e&&O(n.items,e))return void r(e)}const{items:t,activeId:o}=n;let d=0;const m=O(t,o);m&&(d=t.indexOf(m),d===t.length-1&&(d-=1)),r(t[d].id)}),[i,n.items]),{onKeyDown:e=>{const{key:s,altKey:i}=e;if(!i||"ArrowUp"!==s&&"ArrowDown"!==s){if(i&&"Insert"===s)e.preventDefault(),l();else if(i&&"Delete"===s){e.preventDefault();const{items:s,activeId:i,sessionApi:t}=n,o=O(s,i);o&&t.removeSession(o)}}else{e.preventDefault();const{items:i,activeId:t}=n,a=O(i,t);if(!a)return;const r=i.indexOf(a);if(-1===r)return;const A=i["ArrowUp"===s?r-1:r+1];A&&o(A.id)}},activeItem:e}})(n),c=w.A.hasAccess(n.editAccess),{disableSideMenu:h,items:E,unreadInfoStore:g,sessionT:x,uiActions:f}=n;if(!c&&0===E.length)return(0,i.jsx)(v.A,{title:(0,m.Tl)("No items to show",x.plainT,d.KV.COMMON),description:x.plainT((0,m.j2)("noSessionEditAccess",d.KV.COMMON),"You aren't allowed to open new sessions")});const j=h||(0,a.mY)(e)?B:C,{getItemHeaderTitle:I,getItemHeaderDescription:z,getItemHeaderIcon:T,getNewButton:S,getSessionMenuItems:k,getSessionActionMenuItems:M}=(n=>{const e=(0,y.zy)(),{t:s}=(0,p.Bd)(),{newUrl:t,getSessionUrl:o}=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)(F.A,{icon:t(e)})};return{getItemHeaderDescription:()=>{const{itemHeaderDescriptionGetter:e,newDescription:s,activeItem:i}=n;return i?e(i):s},getItemHeaderIcon:()=>{const{itemHeaderIconGetter:e,newIcon:s,activeItem:t}=n;return(0,i.jsx)(F.A,{icon:t?e(t):s})},getItemHeaderTitle:()=>{const{activeItem:s,newCaption:t}=n;if(!s)return(0,i.jsx)("div",{children:t});const{uiActions:o,actionIds:a,itemNameGetter:r,itemHeaderTitleGetter:A}=n,l=a?[...a,"divider","remove"]:void 0,c=(0,i.jsx)(W.Wy,{caption:r(s),actions:o,itemData:s,ids:l});if(A){const n=A(s,e,c);if(n)return n}return c},getSessionActionMenuItems:()=>{const{items:e,hasEditAccess:t}=n;return t&&0!==e.length?(0,i.jsx)(J.A,{onClick:()=>{const{sessionApi:e,items:s}=n;s.forEach((n=>e.removeSession(n)))},icon:u.A.REMOVE,children:(0,m.Tl)("Close all",s,d.KV.COMMON)},"close"):null},getNewButton:()=>{const{newCaption:e,hasEditAccess:s}=n;return s&&e?(0,i.jsx)(q,{title:e,url:t},"new-button"):null},getSessionMenuItems:()=>n.items.map((e=>{const{itemNameGetter:s,unreadInfoStore:t}=n;return(0,i.jsx)(Z,{url:o(e.id),name:s(e),unreadInfoStore:t,status:a(e),sessionItem:e},e.id)}))}})(Object.assign(Object.assign({},n),{activeItem:A,hasEditAccess:c}));return(0,i.jsx)(j,{itemHeaderTitle:I(),itemHeaderDescription:z(),itemHeaderIcon:T(),newButton:S(),sessionMenuItems:k(),listActionMenuGetter:M,activeItem:A,unreadInfoStore:g,onKeyDown:l,actions:f,children:(()=>{const{newLayout:e,sessionT:t}=n;return!n.activeId&&e?(0,i.jsx)(e,{navigate:s,location:r,sessionT:t}):(()=>{const{activeId:e,items:t,sessionItemLayout:a,sessionApi:l,uiActions:c,sessionT:u}=n;if(!A){const{state:n}=r;return n&&n.pending?(0,i.jsx)(o.A,{text:(0,m.Tl)("Waiting for server response",u.plainT,d.KV.COMMON)}):e||0!==t.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)(a,{session:A,sessionApi:l,uiActions:c,location:r,navigate:s,sessionT:u})})()})()})}},78046:(n,e,s)=>{s.d(e,{Z:()=>c});var i=s(74848),t=(s(96540),s(99347)),o=s(69640),a=s(67749),r=s(32389),A=s(42695),l=s(47767);const c=(n,e,s)=>c=>{const{t:d}=(0,r.Bd)(),m=(0,A.lw)(d,s),u=(0,l.g)(),p=(0,o.P)(e);return e.isInitialized()?(0,i.jsx)(n,{items:p,params:u,sessionT:m}):(0,i.jsx)(t.A,{text:(0,A.Tl)("Loading sessions",d,a.KV.COMMON)})}}}]);
|
|
2
|
-
//# sourceMappingURL=616.
|
|
1
|
+
"use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[616],{46510:(n,e,s)=>{s.d(e,{A:()=>r});var i=s(71354),t=s.n(i),o=s(76314),a=s.n(o)()(t());a.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(100vh - 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 .session-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.session-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,+BAA+B;EAC/B,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(100vh - 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 .session-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.session-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 r=a},4112:(n,e,s)=>{s.d(e,{R:()=>o});var i=s(32811),t=s(4425);const o=(n,e)=>({id:"remove",displayName:"Close",access:e,icon:t.A.REMOVE,handler:({itemData:e})=>i.A.delete(`${n}/${e.id}`)})},79531:(n,e,s)=>{s.d(e,{A:()=>r});var i=s(74848),t=s(96540),o=s(1530),a=s(19718);function r(n,e=!1){class s extends t.Component{constructor(){super(...arguments),this.setRead=n=>{this.props.sessionApi.setRead(n),this.readTimeout=void 0},this.setSession=n=>{if(this.readTimeout&&(clearTimeout(this.readTimeout),this.setRead(this.props.session)),this.props.sessionApi.sessionChanged(n),!n)return;const s=e?1e3*o.A.getValue(a.xC.UNREAD_LABEL_DELAY):0;this.readTimeout=window.setTimeout((()=>this.setRead(n)),s)}}componentDidMount(){this.setSession(this.props.session)}componentWillUnmount(){this.setSession(null)}componentDidUpdate(n){this.props.session.id!==n.session.id&&this.setSession(this.props.session)}render(){return(0,i.jsx)(n,Object.assign({},this.props))}}return s}},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})]})},91950:(n,e,s)=>{s.d(e,{A:()=>X});var i=s(74848),t=s(96540),o=s(99347),a=s(8098),r=s(68514),A=s(31104),l=s(19247),c=s(25906),d=s(67749),m=s(42695),u=s(4425),p=s(32389);const h=({sessionMenuItems:n,newButton:e,unreadInfoStore:s,listActionMenuGetter:t})=>{const{t:o}=(0,p.Bd)();return(0,i.jsxs)(A.A,{triggerIcon:(0,i.jsx)(c.Z,{urgencies:s?s.getTotalUrgencies():null}),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()})]})},E=({actions:n,activeItem:e})=>{if(!e||(0,a.mY)())return null;const s=Object.values(n.actions)[Object.values(n.actions).length-1];return(0,i.jsx)(r.A,{className:"basic small item close-button",action:s,moduleData:n.moduleData,itemData:e,icon:u.A.CLOSE})},g=({itemHeaderIcon:n,itemHeaderTitle:e})=>(0,i.jsxs)("div",{className:"session-header",children:[n,e]}),B=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)(h,Object.assign({},t)),(0,i.jsx)(g,Object.assign({},t))]}),(0,i.jsx)(E,Object.assign({},t))]}),(0,i.jsx)("div",{className:"session-layout",children:e})]})};var x=s(31224),f=s(73070);const C=({sessionMenuItems:n,newButton:e,itemHeaderIcon:s,itemHeaderTitle:o,children:a,itemHeaderDescription:r,onKeyDown:A})=>(e&&(e=t.cloneElement(e,{className:e.props.className+" ui fluid button"})),(0,i.jsxs)(f.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",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)(x.A,{className:"session-header",icon:s,title:(0,i.jsx)("div",{className:"title",children:o}),subHeader:r}),(0,i.jsx)("div",{className:"ui divider",style:{margin:"5px 0px 0px 0px"}}),a]})})]}));var v=s(32728),w=s(41860),b=s(18220),y=s(47767),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})}}},O=(n,e)=>n.find((n=>n.id===e));var z=s(85072),T=s.n(z),S=s(97825),k=s.n(S),M=s(77659),D=s.n(M),H=s(55056),U=s.n(H),K=s(10540),Y=s.n(K),G=s(41113),L=s.n(G),R=s(46510),V={};V.styleTagTransform=L(),V.setAttributes=U(),V.insert=D().bind(null,"head"),V.domAPI=k(),V.insertStyleElement=Y(),T()(R.A,V),R.A&&R.A.locals&&R.A.locals;var W=s(71352),$=s(46942),P=s.n($),_=s(45325);const q=({url:n,title:e,className:s})=>(0,i.jsx)(_.A,{className:P()("new",s),icon:u.A.CREATE,url:n,children:e},"button-new"),Z=({sessionItem:n,status:e,name:s,unreadInfoStore:t,url:o})=>(0,i.jsx)(_.A,{url:o,className:"session-item",icon:e,session:n,unreadInfoStore:t,children:(0,i.jsx)("span",{className:"session-name",children:s})});var F=s(83994),J=s(27725);const X=n=>{const e=(0,b.y)(),s=(0,y.Zp)(),r=(0,y.zy)(),{activeItem:A,onKeyDown:l}=(n=>{const[e,s]=t.useState(null),i=(0,y.zy)(),{pushSession:o,replaceSession:r,newUrl:A,replaceNew:l}=N({baseUrl:n.baseUrl}),c=()=>`${n.baseUrl}_last_active`;return t.useLayoutEffect((()=>{if(i.pathname===A)return void(e&&s(null));if((()=>{const e=i,t=e.state&&e.state.pending,o=O(n.items,n.activeId);return o?t?(r(o.id,{pending:!1}),!0):(s(o),(0,a.MS)(c(),n.activeId),!0):!!t||0===n.items.length&&(l(),s(null),!0)})())return;if(!e){const e=(0,a.H5)(c());if(e&&O(n.items,e))return void r(e)}const{items:t,activeId:o}=n;let d=0;const m=O(t,o);m&&(d=t.indexOf(m),d===t.length-1&&(d-=1)),r(t[d].id)}),[i,n.items]),{onKeyDown:e=>{const{key:s,altKey:i}=e;if(!i||"ArrowUp"!==s&&"ArrowDown"!==s){if(i&&"Insert"===s)e.preventDefault(),l();else if(i&&"Delete"===s){e.preventDefault();const{items:s,activeId:i,sessionApi:t}=n,o=O(s,i);o&&t.removeSession(o)}}else{e.preventDefault();const{items:i,activeId:t}=n,a=O(i,t);if(!a)return;const r=i.indexOf(a);if(-1===r)return;const A=i["ArrowUp"===s?r-1:r+1];A&&o(A.id)}},activeItem:e}})(n),c=w.A.hasAccess(n.editAccess),{disableSideMenu:h,items:E,unreadInfoStore:g,sessionT:x,uiActions:f}=n;if(!c&&0===E.length)return(0,i.jsx)(v.A,{title:(0,m.Tl)("No items to show",x.plainT,d.KV.COMMON),description:x.plainT((0,m.j2)("noSessionEditAccess",d.KV.COMMON),"You aren't allowed to open new sessions")});const j=h||(0,a.mY)(e)?B:C,{getItemHeaderTitle:I,getItemHeaderDescription:z,getItemHeaderIcon:T,getNewButton:S,getSessionMenuItems:k,getSessionActionMenuItems:M}=(n=>{const e=(0,y.zy)(),{t:s}=(0,p.Bd)(),{newUrl:t,getSessionUrl:o}=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)(F.A,{icon:t(e)})};return{getItemHeaderDescription:()=>{const{itemHeaderDescriptionGetter:e,newDescription:s,activeItem:i}=n;return i?e(i):s},getItemHeaderIcon:()=>{const{itemHeaderIconGetter:e,newIcon:s,activeItem:t}=n;return(0,i.jsx)(F.A,{icon:t?e(t):s})},getItemHeaderTitle:()=>{const{activeItem:s,newCaption:t}=n;if(!s)return(0,i.jsx)("div",{children:t});const{uiActions:o,actionIds:a,itemNameGetter:r,itemHeaderTitleGetter:A}=n,l=a?[...a,"divider","remove"]:void 0,c=(0,i.jsx)(W.Wy,{caption:r(s),actions:o,itemData:s,ids:l});if(A){const n=A(s,e,c);if(n)return n}return c},getSessionActionMenuItems:()=>{const{items:e,hasEditAccess:t}=n;return t&&0!==e.length?(0,i.jsx)(J.A,{onClick:()=>{const{sessionApi:e,items:s}=n;s.forEach((n=>e.removeSession(n)))},icon:u.A.REMOVE,children:(0,m.Tl)("Close all",s,d.KV.COMMON)},"close"):null},getNewButton:()=>{const{newCaption:e,hasEditAccess:s}=n;return s&&e?(0,i.jsx)(q,{title:e,url:t},"new-button"):null},getSessionMenuItems:()=>n.items.map((e=>{const{itemNameGetter:s,unreadInfoStore:t}=n;return(0,i.jsx)(Z,{url:o(e.id),name:s(e),unreadInfoStore:t,status:a(e),sessionItem:e},e.id)}))}})(Object.assign(Object.assign({},n),{activeItem:A,hasEditAccess:c}));return(0,i.jsx)(j,{itemHeaderTitle:I(),itemHeaderDescription:z(),itemHeaderIcon:T(),newButton:S(),sessionMenuItems:k(),listActionMenuGetter:M,activeItem:A,unreadInfoStore:g,onKeyDown:l,actions:f,children:(()=>{const{newLayout:e,sessionT:t}=n;return!n.activeId&&e?(0,i.jsx)(e,{navigate:s,location:r,sessionT:t}):(()=>{const{activeId:e,items:t,sessionItemLayout:a,sessionApi:l,uiActions:c,sessionT:u}=n;if(!A){const{state:n}=r;return n&&n.pending?(0,i.jsx)(o.A,{text:(0,m.Tl)("Waiting for server response",u.plainT,d.KV.COMMON)}):e||0!==t.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)(a,{session:A,sessionApi:l,uiActions:c,location:r,navigate:s,sessionT:u})})()})()})}},78046:(n,e,s)=>{s.d(e,{Z:()=>c});var i=s(74848),t=(s(96540),s(99347)),o=s(69640),a=s(67749),r=s(32389),A=s(42695),l=s(47767);const c=(n,e,s)=>c=>{const{t:d}=(0,r.Bd)(),m=(0,A.lw)(d,s),u=(0,l.g)(),p=(0,o.P)(e);return e.isInitialized()?(0,i.jsx)(n,{items:p,params:u,sessionT:m}):(0,i.jsx)(t.A,{text:(0,A.Tl)("Loading sessions",d,a.KV.COMMON)})}}}]);
|
|
2
|
+
//# sourceMappingURL=616.57a60c241582d79fa280.chunk.js.map
|
|
Binary file
|