airdcpp-webui 2.13.0-beta.5 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/index.html +1 -1
  2. package/dist/js/{223.647d861e965b0e81ad42.chunk.js → 223.339879525b9d883969f0.chunk.js} +2 -2
  3. package/dist/js/223.339879525b9d883969f0.chunk.js.gz +0 -0
  4. package/dist/js/{223.647d861e965b0e81ad42.chunk.js.map → 223.339879525b9d883969f0.chunk.js.map} +1 -1
  5. package/dist/js/{home.bcc896c9d57390a3ddc6.chunk.js → home.8c48468bfa50df12e408.chunk.js} +3 -3
  6. package/dist/js/home.8c48468bfa50df12e408.chunk.js.gz +0 -0
  7. package/dist/js/{home.bcc896c9d57390a3ddc6.chunk.js.map → home.8c48468bfa50df12e408.chunk.js.map} +1 -1
  8. package/dist/js/locales/ca-webui-main-json.94f153eb573bb1577f8c.chunk.js +1 -0
  9. package/dist/js/locales/ca-webui-main-json.94f153eb573bb1577f8c.chunk.js.gz +0 -0
  10. package/dist/js/locales/{da-webui-main-json.eb0a4bae769f6aee4bd0.chunk.js → da-webui-main-json.ca9f289c8aa5901d18b9.chunk.js} +1 -1
  11. package/dist/js/locales/da-webui-main-json.ca9f289c8aa5901d18b9.chunk.js.gz +0 -0
  12. package/dist/js/locales/{de-webui-main-json.965cdd5f4f4bd9c95862.chunk.js → de-webui-main-json.9047a1d7d315099ddbe7.chunk.js} +1 -1
  13. package/dist/js/locales/de-webui-main-json.9047a1d7d315099ddbe7.chunk.js.gz +0 -0
  14. package/dist/js/locales/{es-webui-main-json.85d6d3a21a00b15fdb32.chunk.js → es-webui-main-json.8e576eafb5b6a27515e5.chunk.js} +1 -1
  15. package/dist/js/locales/es-webui-main-json.8e576eafb5b6a27515e5.chunk.js.gz +0 -0
  16. package/dist/js/locales/{eu-webui-main-json.d719c37626cb960d887e.chunk.js → eu-webui-main-json.88a05148312a0ab87d0f.chunk.js} +1 -1
  17. package/dist/js/locales/eu-webui-main-json.88a05148312a0ab87d0f.chunk.js.gz +0 -0
  18. package/dist/js/locales/fi-webui-main-json.5c36b83260e9acf8bb32.chunk.js +1 -0
  19. package/dist/js/locales/fi-webui-main-json.5c36b83260e9acf8bb32.chunk.js.gz +0 -0
  20. package/dist/js/locales/{fr-webui-main-json.b531890c464acae600af.chunk.js → fr-webui-main-json.e4097896401446b1dac4.chunk.js} +1 -1
  21. package/dist/js/locales/fr-webui-main-json.e4097896401446b1dac4.chunk.js.gz +0 -0
  22. package/dist/js/locales/{nl-webui-main-json.d7334522200cb4ccc89b.chunk.js → nl-webui-main-json.1d51a3408c4ea0934248.chunk.js} +1 -1
  23. package/dist/js/locales/nl-webui-main-json.1d51a3408c4ea0934248.chunk.js.gz +0 -0
  24. package/dist/js/locales/{pt-br-webui-main-json.83c68effad4bf9e5fc04.chunk.js → pt-br-webui-main-json.e26c89370b12b7c6bdbd.chunk.js} +1 -1
  25. package/dist/js/locales/pt-br-webui-main-json.e26c89370b12b7c6bdbd.chunk.js.gz +0 -0
  26. package/dist/js/locales/{pt-webui-main-json.9eb3071dba3b77f39a0a.chunk.js → pt-webui-main-json.6f1e5d0e3bb48f6e5ffb.chunk.js} +1 -1
  27. package/dist/js/locales/pt-webui-main-json.6f1e5d0e3bb48f6e5ffb.chunk.js.gz +0 -0
  28. package/dist/js/locales/{ro-webui-main-json.07d8014418182764e63f.chunk.js → ro-webui-main-json.c6004505ec260e3b9c21.chunk.js} +1 -1
  29. package/dist/js/locales/ro-webui-main-json.c6004505ec260e3b9c21.chunk.js.gz +0 -0
  30. package/dist/js/locales/{sv-webui-main-json.6add822af89dd0d3372a.chunk.js → sv-webui-main-json.700da599befa12ac9ad7.chunk.js} +1 -1
  31. package/dist/js/locales/sv-webui-main-json.700da599befa12ac9ad7.chunk.js.gz +0 -0
  32. package/dist/js/locales/{zh_CN-GB2312-webui-main-json.d9b0ca8894e9a7bcca3f.chunk.js → zh_CN-GB2312-webui-main-json.7625bbbce93643955b37.chunk.js} +1 -1
  33. package/dist/js/locales/zh_CN-GB2312-webui-main-json.7625bbbce93643955b37.chunk.js.gz +0 -0
  34. package/dist/js/{main.bc445e14268edf21f921.entry.js → main.e34835995525da795bea.entry.js} +3 -3
  35. package/dist/js/main.e34835995525da795bea.entry.js.gz +0 -0
  36. package/dist/js/{main.bc445e14268edf21f921.entry.js.map → main.e34835995525da795bea.entry.js.map} +1 -1
  37. package/dist/js/settings.b522d33bc5d4fcbbb3b1.chunk.js +2 -0
  38. package/dist/js/settings.b522d33bc5d4fcbbb3b1.chunk.js.gz +0 -0
  39. package/dist/js/settings.b522d33bc5d4fcbbb3b1.chunk.js.map +1 -0
  40. package/dist/js/share.1228a22e1be6550d60ca.chunk.js +2 -0
  41. package/dist/js/share.1228a22e1be6550d60ca.chunk.js.gz +0 -0
  42. package/dist/js/share.1228a22e1be6550d60ca.chunk.js.map +1 -0
  43. package/dist/sw.js +1 -1
  44. package/dist/sw.js.gz +0 -0
  45. package/package.json +1 -1
  46. package/dist/js/223.647d861e965b0e81ad42.chunk.js.gz +0 -0
  47. package/dist/js/home.bcc896c9d57390a3ddc6.chunk.js.gz +0 -0
  48. package/dist/js/locales/ca-webui-main-json.ec6ee5857766b8c555c3.chunk.js +0 -1
  49. package/dist/js/locales/ca-webui-main-json.ec6ee5857766b8c555c3.chunk.js.gz +0 -0
  50. package/dist/js/locales/da-webui-main-json.eb0a4bae769f6aee4bd0.chunk.js.gz +0 -0
  51. package/dist/js/locales/de-webui-main-json.965cdd5f4f4bd9c95862.chunk.js.gz +0 -0
  52. package/dist/js/locales/es-webui-main-json.85d6d3a21a00b15fdb32.chunk.js.gz +0 -0
  53. package/dist/js/locales/eu-webui-main-json.d719c37626cb960d887e.chunk.js.gz +0 -0
  54. package/dist/js/locales/fi-webui-main-json.cfafe8b333f680908c7c.chunk.js +0 -1
  55. package/dist/js/locales/fi-webui-main-json.cfafe8b333f680908c7c.chunk.js.gz +0 -0
  56. package/dist/js/locales/fr-webui-main-json.b531890c464acae600af.chunk.js.gz +0 -0
  57. package/dist/js/locales/nl-webui-main-json.d7334522200cb4ccc89b.chunk.js.gz +0 -0
  58. package/dist/js/locales/pt-br-webui-main-json.83c68effad4bf9e5fc04.chunk.js.gz +0 -0
  59. package/dist/js/locales/pt-webui-main-json.9eb3071dba3b77f39a0a.chunk.js.gz +0 -0
  60. package/dist/js/locales/ro-webui-main-json.07d8014418182764e63f.chunk.js.gz +0 -0
  61. package/dist/js/locales/sv-webui-main-json.6add822af89dd0d3372a.chunk.js.gz +0 -0
  62. package/dist/js/locales/zh_CN-GB2312-webui-main-json.d9b0ca8894e9a7bcca3f.chunk.js.gz +0 -0
  63. package/dist/js/main.bc445e14268edf21f921.entry.js.gz +0 -0
  64. package/dist/js/settings.0aedd3a834c09dc31003.chunk.js +0 -2
  65. package/dist/js/settings.0aedd3a834c09dc31003.chunk.js.gz +0 -0
  66. package/dist/js/settings.0aedd3a834c09dc31003.chunk.js.map +0 -1
  67. package/dist/js/share.826053e1b1dd08431ed0.chunk.js +0 -2
  68. package/dist/js/share.826053e1b1dd08431ed0.chunk.js.gz +0 -0
  69. package/dist/js/share.826053e1b1dd08431ed0.chunk.js.map +0 -1
  70. /package/dist/js/{home.bcc896c9d57390a3ddc6.chunk.js.LICENSE.txt → home.8c48468bfa50df12e408.chunk.js.LICENSE.txt} +0 -0
  71. /package/dist/js/{main.bc445e14268edf21f921.entry.js.LICENSE.txt → main.e34835995525da795bea.entry.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[976],{39291:(e,t,o)=>{o.d(t,{A:()=>s});var n=o(71354),i=o.n(n),r=o(76314),a=o.n(r)()(i());a.push([e.id,".share-directory .Select {\n margin-bottom: 0px;\n}\n\n\n.virtual-table .cell-wrapper.incoming,\n.virtual-table .cell-wrapper.incoming span,\n.virtual-table .cell-wrapper.incoming strong {\n font-weight: bold;\n}\n","",{version:3,sources:["webpack://./src/routes/Share/style.css"],names:[],mappings:"AAAA;EACE,kBAAkB;AACpB;;;AAGA;;;EAGE,iBAAiB;AACnB",sourcesContent:[".share-directory .Select {\n margin-bottom: 0px;\n}\n\n\n.virtual-table .cell-wrapper.incoming,\n.virtual-table .cell-wrapper.incoming span,\n.virtual-table .cell-wrapper.incoming strong {\n font-weight: bold;\n}\n"],sourceRoot:""}]);const s=a},29112:(e,t,o)=>{o.d(t,{RS:()=>l,eP:()=>d,t6:()=>p});var n=o(32811),i=o(42191),r=o(4425),a=o(86038),s=o(67749);const l={id:"refreshAll",displayName:"Refresh all",access:a.US.SETTINGS_EDIT,icon:r.A.REFRESH_COLORED,handler:()=>n.A.post(i.A.REFRESH_URL)},c={refresh:l},d={moduleId:s.KV.SHARE},p={moduleData:d,actions:c}},91510:(e,t,o)=>{o.d(t,{MB:()=>d,Tw:()=>l,nH:()=>p});var n=o(32811),i=o(42191),r=o(4425),a=o(86038),s=o(67749);const l={id:"add",displayName:"Add path",access:a.US.SETTINGS_EDIT,icon:r.A.CREATE,handler:({navigate:e})=>{e("browse")}},c={remove:{id:"remove",displayName:"Remove path",access:a.US.SETTINGS_EDIT,icon:r.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the excluded path {{item}}?",approveCaption:"Remove path",rejectCaption:"Don't remove"},handler:({itemData:e})=>n.A.post(i.A.EXCLUDES_REMOVE_URL,{path:e})}},d={moduleId:s.KV.SETTINGS,subId:"shareExclude"},p={moduleData:d,actions:c}},94899:(e,t,o)=>{o.d(t,{An:()=>u,Ds:()=>y,YS:()=>S,tx:()=>m});var n=o(32811),i=o(40599),r=o(17585),a=o(86818),s=o(4425),l=o(86038),c=o(67749),d=o(48844),p=o(68135);const h=(e,t)=>n.A.post(a.A.PROFILES_URL,{name:t}),m={id:"create",displayName:"Add profile",access:l.US.SETTINGS_EDIT,icon:s.A.CREATE,input:{approveCaption:"Create",content:"Enter name for the profile",inputProps:{placeholder:"Enter name",required:!0}},handler:h},u={id:"clone",displayName:"Clone profile",access:l.US.SETTINGS_EDIT,icon:s.A.COPY,input:{approveCaption:"Create",content:"Enter name for the profile (cloned from {{item.name}})",inputProps:{placeholder:"Enter name",required:!0}},handler:(e,t)=>{return o=void 0,i=void 0,a=function*(){const o=yield h(0,t),{itemData:i}=e,r=yield n.A.get(`${p.A.MODULE_URL}`);for(const e of r){const t=e.profiles.map((e=>e.id));t.includes(i.id)&&(yield n.A.patch(`${p.A.MODULE_URL}/${e.id}`,{profiles:[...t,o.id]}))}},new((r=void 0)||(r=Promise))((function(e,t){function n(e){try{l(a.next(e))}catch(e){t(e)}}function s(e){try{l(a.throw(e))}catch(e){t(e)}}function l(t){var o;t.done?e(t.value):(o=t.value,o instanceof r?o:new r((function(e){e(o)}))).then(n,s)}l((a=a.apply(o,i||[])).next())}));var o,i,r,a}},A={id:"browse",displayName:"Browse files",access:l.US.FILELISTS_VIEW,icon:s.A.FILELIST,handler:({itemData:e,location:t})=>i.A.ownList(t,e.id,r.A)},f={id:"edit",displayName:"Rename profile",access:l.US.SETTINGS_EDIT,icon:s.A.EDIT,input:e=>({approveCaption:"Rename",content:"Enter new name for the profile {{item.name}}",inputProps:{placeholder:"Enter name",defaultValue:e.name,required:!0}}),handler:({itemData:e},t)=>n.A.patch(`${a.A.PROFILES_URL}/${e.id}`,{name:t})},E={id:"default",displayName:"Set as default",access:l.US.SETTINGS_EDIT,filter:({itemData:e})=>!e.default,icon:s.A.DEFAULT,handler:({itemData:e})=>n.A.post(`${a.A.PROFILES_URL}/${e.id}/default`)},v={id:"remove",displayName:"Remove profile",access:l.US.SETTINGS_EDIT,icon:s.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the profile {{item.name}}?",approveCaption:"Remove profile",rejectCaption:"Don't remove"},handler:({itemData:e})=>n.A.delete(a.A.PROFILES_URL+"/"+e.id)},R={browse:A,divider:d.o,edit:f,default:E,remove:v},y={moduleId:c.KV.SETTINGS,subId:"profile"},S={moduleData:y,actions:R}},63252:(e,t,o)=>{o.d(t,{t6:()=>n.t6,Ds:()=>i.Ds,An:()=>i.An,tx:()=>i.tx,QC:()=>h,EU:()=>d,VY:()=>m});var n=o(29112),i=(o(91510),o(94899)),r=o(32811),a=o(68135),s=o(4425),l=o(86038),c=o(67749);const d={id:"create",displayName:"Add directory",access:l.US.SETTINGS_EDIT,icon:s.A.CREATE,handler:({navigate:e})=>{e("directories")}},p={edit:{id:"edit",displayName:"Edit directory",access:l.US.SETTINGS_EDIT,icon:s.A.EDIT,handler:({itemData:e,navigate:t})=>{t(`directories/${e.id}`)}},remove:{id:"remove",displayName:"Remove directory",access:l.US.SETTINGS_EDIT,icon:s.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the directory {{item.virtual_name}} from share? It will be removed from all share profiles.",approveCaption:"Remove directory",rejectCaption:"Don't remove"},handler:({itemData:e})=>r.A.delete(a.A.ROOTS_URL+"/"+e.id)}},h={moduleId:c.KV.SHARE,subId:"root"},m={moduleData:h,actions:p}},86818:(e,t,o)=>{o.d(t,{A:()=>i});const n="share_profiles",i={MODULE_URL:n,PROFILES_URL:n,PROFILE_ADDED:"share_profile_added",PROFILE_UPDATED:"share_profile_updated",PROFILE_REMOVED:"share_profile_removed",HIDDEN_PROFILE_ID:1}},68135:(e,t,o)=>{o.d(t,{A:()=>i});const n="share_roots",i={MODULE_URL:n,ROOTS_URL:n,CREATED:"share_root_created",UPDATED:"share_root_updated",REMOVED:"share_root_removed"}},53632:(e,t,o)=>{o.d(t,{A:()=>r});var n=o(74848),i=o(96540);function r(e,t=60){class o extends i.Component{constructor(){super(...arguments),this.scheduleComponentRefresh=()=>{this.redrawTimeout=window.setTimeout((()=>{this.forceUpdate(),this.scheduleComponentRefresh()}),1e3*t)}}componentDidMount(){this.scheduleComponentRefresh()}componentWillUnmount(){clearTimeout(this.redrawTimeout)}render(){return(0,n.jsx)(e,Object.assign({},this.props))}}return o}},71299:(e,t,o)=>{o.d(t,{A:()=>a});var n=o(2543),i=o(86818),r=o(13546);const a=function(e,t,o){return(0,r.A)(e,(0,n.merge)(o,{urls:{profiles:i.A.PROFILES_URL},dataConverters:{profiles:(e,{t:o})=>e.filter((e=>t||e.id!==i.A.HIDDEN_PROFILE_ID))},onSocketConnected:(e,{refetchData:t})=>{e(i.A.MODULE_URL,i.A.PROFILE_ADDED,(()=>t())),e(i.A.MODULE_URL,i.A.PROFILE_UPDATED,(()=>t())),e(i.A.MODULE_URL,i.A.PROFILE_REMOVED,(()=>t()))}}))}},96991:(e,t,o)=>{o.r(t),o.d(t,{default:()=>ue});var n=o(74848),i=o(96540),r=o(22005),a=o.n(r),s=o(52267),l=o(68135);const c=a().createStore({_viewName:"share_root_view",_apiUrl:l.A.MODULE_URL,mixins:[(0,s.A)("path")]});var d=o(22373),p=o(44247),h=o(68465),m=o(99671),u=o(42191),A=o(4425),f=o(65385),E=o(71299),v=o(32811),R=o(32728),y=o(51766),S=o(33968),T=o(94413),_=o(59315),D=o(13712),I=o(85072),O=o.n(I),w=o(97825),L=o.n(w),g=o(77659),U=o.n(g),x=o(55056),C=o.n(x),N=o(10540),P=o.n(N),b=o(41113),j=o.n(b),F=o(39291),G={};G.styleTagTransform=j(),G.setAttributes=C(),G.insert=U().bind(null,"head"),G.domAPI=L(),G.insertStyleElement=P(),O()(F.A,G),F.A&&F.A.locals&&F.A.locals;var V=o(86038),H=o(47456),M=o(32389),k=o(19430);const $=[{key:"path",title:"Path",type:V.OP.DIRECTORY_PATH},{key:"virtual_name",title:"Virtual name",type:V.OP.STRING,help:"Directories with identical virtual names will be merged in filelist"},{key:"profiles",type:V.OP.LIST,item_type:V.OP.NUMBER,title:"Share profiles",help:"New share profiles can be created from application settings"},{key:"incoming",title:"Incoming",type:V.OP.BOOLEAN}];class K extends i.Component{constructor(e){super(e),this.isNew=()=>!this.props.rootEntry,this.onFieldChanged=(e,t,o)=>{if(e.includes("path")){const e={virtual_name:t.path?(0,S.ap)(t.path):void 0};return Promise.resolve(e)}return null},this.save=()=>this.form.save(),this.onSave=e=>this.isNew()?v.A.post(l.A.ROOTS_URL,e):v.A.patch(`${l.A.ROOTS_URL}/${this.props.rootEntry.id}`,e),this.onFieldSetting=(e,t,o)=>{"path"===e?(t.disabled=!this.isNew(),t.config=Object.assign(Object.assign({},t.config||{}),{historyId:_.A.LOCATION_DOWNLOAD})):"virtual_name"===e&&(t.factory=y.Ay.form.Textbox,t.template=D.I9,t.config={suggestionGetter:()=>this.props.virtualNames})},this.fieldDefinitions=(0,H.Nn)($,e.shareT);const t=this.fieldDefinitions.find((e=>"profiles"===e.key));Object.assign(t,{options:e.profiles.map((e=>(0,k.T)(e,this.props.shareT.plainT))),default_value:[e.profiles.find((e=>e.default)).id]})}render(){const e=this.props,{rootEntry:t,shareT:o}=e,i=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(o[n[i]]=e[n[i]])}return o}(e,["rootEntry","shareT"]),r=o.translate(this.isNew()?"Add share directory":"Edit share directory");return(0,n.jsxs)(m.A,Object.assign({className:"share-directory",title:r,onApprove:this.save,closable:!1,icon:A.A.FOLDER},i,{children:[(0,n.jsx)(R.A,{title:o.translate("Hashing information"),icon:A.A.INFO,description:(0,n.jsx)(M.x6,{i18nKey:o.toI18nKey("hashingInformationDesc"),children:(0,n.jsx)("p",{children:"New files will appear in share only after they have finished hashing (the client has calculated checksums for them). Information about hashing progress will be posted to the event log."})})}),(0,n.jsx)(T.A,{ref:e=>this.form=e,fieldDefinitions:this.fieldDefinitions,onFieldChanged:this.onFieldChanged,onFieldSetting:this.onFieldSetting,onSave:this.onSave,sourceValue:t,location:this.props.location})]}))}}K.displayName="ShareDirectoryDialog";const B=(0,f.A)((0,E.A)(K,!1,{urls:{virtualNames:u.A.GROUPED_ROOTS_GET_URL,rootEntry:({params:e},t)=>e.directoryId?t.get(`${l.A.ROOTS_URL}/${e.directoryId}`):Promise.resolve(void 0)},dataConverters:{virtualNames:e=>e.map((e=>e.name),[])}}),"/directories/:directoryId?");var z=o(31104),W=o(19247),q=o(27725),Y=o(36995),X=o(42695);const Q=(e,t)=>e?(0,k.v)(e,t):(0,X.Tl)("All profiles",t,"table.filter"),J=(0,i.memo)((function(e){const{t}=(0,M.Bd)(),[o,r]=(0,i.useState)(null),a=t=>{e.onFilterUpdated(t?t.id:null),r(t)};return(0,n.jsx)(z.A,{className:"top right pointing",caption:Q(o,t),triggerIcon:"filter",button:!0,children:(0,n.jsx)(W.A,{caption:(0,X.Tl)("Filter by profile",t,"table.filter"),icon:A.A.FILTER,children:[null,...e.profiles].map((e=>((e,t,o,i)=>(0,n.jsx)(q.A,{active:o===e,onClick:()=>t(e),children:Q(e,i)},e?e.id:"all"))(e,a,o,t)))})})})),Z=(0,E.A)((0,Y.A)(J,"profiles"),!1);var ee=o(71352),te=o(53632),oe=o(98573),ne=o(99347),ie=o(67749),re=o(59548),ae=o(36076),se=o(83994);const le=(0,te.A)((({rowDataGetter:e,cellData:t,t:o})=>{const i=e().status;return i.id!==V.hZ.NORMAL?(0,n.jsxs)("div",{style:{display:"flex"},children:[(0,n.jsx)(se.A,{icon:A.A.CANCEL,color:"red",size:"large",onClick:()=>{const t=e().status.refresh_task_id;t&&(0,ae.bd)((()=>(0,re.Lt)(t)),o)}}),(0,n.jsx)(ne.A,{size:"small",inline:!0,text:i.str})]}):(0,n.jsxs)("div",{children:[(0,n.jsx)(se.A,{icon:A.A.REFRESH_COLORED,size:"large",onClick:()=>(0,ae.bd)((()=>(0,re.sf)([e().path])),o)}),0===t?(0,X.Tl)("Unknown",o,ie.KV.SHARE):(0,oe.fw)(t)]})}));var ce=o(41860),de=o(39115),pe=o(63252);const he={actions:{create:pe.EU},moduleData:pe.QC};class me extends i.Component{constructor(){super(...arguments),this.rowClassNameGetter=e=>e.incoming?"incoming":"",this.shareT=(0,X.lw)(this.props.t,ie.KV.SHARE)}render(){const{translate:e}=this.shareT,t=ce.A.hasAccess(V.US.SETTINGS_EDIT);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(d.A,{store:c,customFilter:Z,rowClassNameGetter:this.rowClassNameGetter,footerData:(0,n.jsx)(ee.Wy,{className:"top left pointing",caption:e("Actions..."),actions:he,header:e("Share actions"),triggerIcon:"chevron up",ids:["create"],button:!0,remoteMenuId:"share_roots",children:(0,n.jsx)(ee.Wy,{actions:pe.t6,ids:["refresh"]})}),moduleId:ie.KV.SHARE,children:[(0,n.jsx)(h.VP,{name:"Path",width:200,columnKey:"path",cell:(0,n.jsx)(p.tC,{actions:pe.VY,remoteMenuId:de.Ay.SHARE_ROOT}),flexGrow:10}),(0,n.jsx)(h.VP,{name:"Size",width:60,columnKey:"size",cell:(0,n.jsx)(p.us,{}),flexGrow:2}),(0,n.jsx)(h.VP,{name:"Content",width:150,columnKey:"type",hideWidth:1e3}),(0,n.jsx)(h.VP,{name:"Virtual name",width:120,columnKey:"virtual_name",flexGrow:5}),(0,n.jsx)(h.VP,{name:"Profiles",width:65,columnKey:"profiles"}),(0,n.jsx)(h.VP,{name:"Last refreshed",width:80,flexGrow:3,columnKey:"last_refresh_time",cell:t?(0,n.jsx)(le,{}):(0,n.jsx)(p.Jo,{})})]}),(0,n.jsx)(B,{shareT:this.shareT})]})}}me.displayName="Share";const ue=(0,M.CI)()(me)},88569:(e,t,o)=>{o.d(t,{H:()=>s,U:()=>a});var n=o(41860),i=o(41110),r=function(e,t,o,n){return new(o||(o=Promise))((function(i,r){function a(e){try{l(n.next(e))}catch(e){r(e)}}function s(e){try{l(n.throw(e))}catch(e){r(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,s)}l((n=n.apply(e,t||[])).next())}))};const a=e=>r(void 0,void 0,void 0,(function*(){try{return(yield(0,i.F)(`${getBasePath()}temp`,{method:"POST",headers:{"X-Authorization":n.A.authToken,Authorization:n.A.authToken},body:e})).headers.get("Location")}catch(e){throw e}})),s=(e,t,o)=>r(void 0,void 0,void 0,(function*(){try{const r=yield(0,i.F)((e=>`${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(e)}`)(e),Object.assign({headers:{"X-Authorization":n.A.authToken,"Cache-Control":"no-store, must-revalidate, max-age=0"}},o));return(yield t)?r.json():r.text()}catch(t){throw console.error(`CORS HTTP request failed (${e})`,t),t}}))},59548:(e,t,o)=>{o.d(t,{Lt:()=>d,eo:()=>s,sf:()=>l,t7:()=>c});var n=o(42191),i=o(32811),r=o(88569),a=o(86038);const s=(e,t,o)=>{return a=void 0,s=void 0,c=function*(){try{const a=yield(0,r.U)(e);return yield i.A.post(n.A.TEMP_SHARES_URL,{name:e.name,file_id:a,hub_url:t,cid:o})}catch(e){throw e}},new((l=void 0)||(l=Promise))((function(e,t){function o(e){try{i(c.next(e))}catch(e){t(e)}}function n(e){try{i(c.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof l?i:new l((function(e){e(i)}))).then(o,n)}i((c=c.apply(a,s||[])).next())}));var a,s,l,c},l=e=>i.A.post(n.A.REFRESH_PATHS_URL,{paths:e,priority:a.DH.MANUAL}),c=e=>i.A.post(n.A.REFRESH_VIRTUAL_URL,{path:e}),d=e=>i.A.delete(`${n.A.REFRESH_TASKS_URL}/${e}`)},19430:(e,t,o)=>{o.d(t,{T:()=>a,v:()=>r});var n=o(86818),i=o(98573);const r=(e,t)=>{let o=e.str;return e.id!==n.A.HIDDEN_PROFILE_ID&&(o+=` (${(0,i.Xq)(e.size,t)})`),o},a=(e,t)=>({id:e.id,name:r(e,t)})}}]);
2
- //# sourceMappingURL=share.826053e1b1dd08431ed0.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/share.826053e1b1dd08431ed0.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Share/style.css","webpack://airdcpp-webui/./src/actions/ui/share/ShareActions.ts","webpack://airdcpp-webui/./src/actions/ui/share/ShareExcludeActions.ts","webpack://airdcpp-webui/./src/actions/ui/share/ShareProfileActions.ts","webpack://airdcpp-webui/./src/actions/ui/share/ShareRootActions.ts","webpack://airdcpp-webui/./src/constants/ShareProfileConstants.ts","webpack://airdcpp-webui/./src/constants/ShareRootConstants.ts","webpack://airdcpp-webui/./src/decorators/RedrawDecorator.tsx","webpack://airdcpp-webui/./src/decorators/ShareProfileDecorator.tsx","webpack://airdcpp-webui/./src/stores/ShareRootStore.js","webpack://airdcpp-webui/./src/routes/Share/style.css?7048","webpack://airdcpp-webui/./src/routes/Share/components/ShareDirectoryDialog.tsx","webpack://airdcpp-webui/./src/components/table/ShareProfileFilter.tsx","webpack://airdcpp-webui/./src/routes/Share/components/RefreshCell.tsx","webpack://airdcpp-webui/./src/routes/Share/components/Share.tsx","webpack://airdcpp-webui/./src/services/HttpService.ts","webpack://airdcpp-webui/./src/services/api/ShareApi.ts","webpack://airdcpp-webui/./src/utils/ShareProfileUtils.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.share-directory .Select {\n margin-bottom: 0px;\n}\n\n\n.virtual-table .cell-wrapper.incoming,\n.virtual-table .cell-wrapper.incoming span,\n.virtual-table .cell-wrapper.incoming strong {\n font-weight: bold;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Share/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;;AAGA;;;EAGE,iBAAiB;AACnB\",\"sourcesContent\":[\".share-directory .Select {\\n margin-bottom: 0px;\\n}\\n\\n\\n.virtual-table .cell-wrapper.incoming,\\n.virtual-table .cell-wrapper.incoming span,\\n.virtual-table .cell-wrapper.incoming strong {\\n font-weight: bold;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import SocketService from 'services/SocketService';\n\nimport ShareConstants from 'constants/ShareConstants';\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nconst handleRefresh = () => {\n return SocketService.post(ShareConstants.REFRESH_URL);\n};\n\nexport const ShareRefreshAction = {\n id: 'refreshAll',\n displayName: 'Refresh all',\n access: API.AccessEnum.SETTINGS_EDIT,\n icon: IconConstants.REFRESH_COLORED,\n handler: handleRefresh,\n};\n\nconst ShareActions: UI.ActionListType<undefined> = {\n refresh: ShareRefreshAction,\n};\n\nexport const ShareActionModule = {\n moduleId: UI.Modules.SHARE,\n};\n\nexport const ShareActionMenu = {\n moduleData: ShareActionModule,\n actions: ShareActions,\n};\n","import SocketService from 'services/SocketService';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleAdd: UI.ActionHandler<void> = ({ navigate }) => {\r\n navigate(`browse`);\r\n};\r\n\r\nconst handleRemove: UI.ActionHandler<string> = ({ itemData: path }) => {\r\n return SocketService.post(ShareConstants.EXCLUDES_REMOVE_URL, { path });\r\n};\r\n\r\nexport const ShareExcludeAddAction = {\r\n id: 'add',\r\n displayName: 'Add path',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.CREATE,\r\n handler: handleAdd,\r\n};\r\n\r\nexport const ShareExcludeRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove path',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the excluded path {{item}}?',\r\n approveCaption: 'Remove path',\r\n rejectCaption: `Don't remove`,\r\n },\r\n handler: handleRemove,\r\n};\r\n\r\nconst ShareExcludeEditActions: UI.ActionListType<string> = {\r\n remove: ShareExcludeRemoveAction,\r\n};\r\n\r\nexport const ShareExcludeActionModule = {\r\n moduleId: UI.Modules.SETTINGS,\r\n subId: 'shareExclude',\r\n};\r\n\r\nexport const ShareExcludeEditMenu = {\r\n moduleData: ShareExcludeActionModule,\r\n actions: ShareExcludeEditActions,\r\n};\r\n","import SocketService from 'services/SocketService';\r\n\r\nimport FilelistSessionActions from 'actions/reflux/FilelistSessionActions';\r\nimport FilelistSessionStore from 'stores/FilelistSessionStore';\r\n\r\nimport ShareProfileConstants from 'constants/ShareProfileConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { MENU_DIVIDER } from 'constants/ActionConstants';\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\n\r\ntype Filter = UI.ActionFilter<API.ShareProfile>;\r\nconst notDefault: Filter = ({ itemData: profile }) => !profile.default;\r\n\r\nconst handleCreate: UI.ActionHandler<void> = (data, name: string) => {\r\n return SocketService.post<API.ShareProfile>(ShareProfileConstants.PROFILES_URL, {\r\n name: name,\r\n });\r\n};\r\n\r\ntype Handler = UI.ActionHandler<API.ShareProfile>;\r\nconst handleClone: Handler = async (data, name: string) => {\r\n // Create new profile\r\n const newProfile: API.ShareProfile = await handleCreate(\r\n data as unknown as UI.ActionHandlerData<void, void>,\r\n name,\r\n );\r\n\r\n const { itemData: sourceProfile } = data;\r\n\r\n // Fetch roots\r\n const roots = await SocketService.get<API.ShareRootEntry[]>(\r\n `${ShareRootConstants.MODULE_URL}`,\r\n );\r\n\r\n // Add new profile in all roots that include the source profile\r\n for (const root of roots) {\r\n const rootProfileIds = root.profiles.map((rootProfile) => rootProfile.id);\r\n if (!rootProfileIds.includes(sourceProfile.id)) {\r\n continue;\r\n }\r\n\r\n await SocketService.patch(`${ShareRootConstants.MODULE_URL}/${root.id}`, {\r\n profiles: [...rootProfileIds, newProfile.id],\r\n });\r\n }\r\n};\r\n\r\nconst handleDefault: Handler = ({ itemData: profile }) => {\r\n return SocketService.post(\r\n `${ShareProfileConstants.PROFILES_URL}/${profile.id}/default`,\r\n );\r\n};\r\n\r\nconst handleEdit: Handler = ({ itemData: profile }, name: string) => {\r\n return SocketService.patch(`${ShareProfileConstants.PROFILES_URL}/${profile.id}`, {\r\n name: name,\r\n });\r\n};\r\n\r\nconst handleRemove: Handler = ({ itemData: profile }) => {\r\n return SocketService.delete(ShareProfileConstants.PROFILES_URL + '/' + profile.id);\r\n};\r\n\r\nconst handleBrowse: Handler = ({ itemData: profile, location }) => {\r\n return FilelistSessionActions.ownList(location, profile.id, FilelistSessionStore);\r\n};\r\n\r\nexport const ShareProfileCreateAction = {\r\n id: 'create',\r\n displayName: 'Add profile',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.CREATE,\r\n input: {\r\n approveCaption: 'Create',\r\n content: 'Enter name for the profile',\r\n inputProps: {\r\n placeholder: 'Enter name',\r\n required: true,\r\n },\r\n },\r\n handler: handleCreate,\r\n};\r\n\r\nexport const ShareProfileCloneAction = {\r\n id: 'clone',\r\n displayName: 'Clone profile',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.COPY,\r\n input: {\r\n approveCaption: 'Create',\r\n content: 'Enter name for the profile (cloned from {{item.name}})',\r\n inputProps: {\r\n placeholder: 'Enter name',\r\n required: true,\r\n },\r\n },\r\n handler: handleClone,\r\n};\r\n\r\nexport const ShareProfileBrowseAction = {\r\n id: 'browse',\r\n displayName: 'Browse files',\r\n access: API.AccessEnum.FILELISTS_VIEW,\r\n icon: IconConstants.FILELIST,\r\n handler: handleBrowse,\r\n};\r\n\r\nexport const ShareProfileEditAction = {\r\n id: 'edit',\r\n displayName: 'Rename profile',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.EDIT,\r\n input: (profile: API.ShareProfile) => ({\r\n approveCaption: 'Rename',\r\n content: 'Enter new name for the profile {{item.name}}',\r\n inputProps: {\r\n placeholder: 'Enter name',\r\n defaultValue: profile.name,\r\n required: true,\r\n },\r\n }),\r\n handler: handleEdit,\r\n};\r\n\r\nexport const ShareProfileSetDefaultAction = {\r\n id: 'default',\r\n displayName: 'Set as default',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n filter: notDefault,\r\n icon: IconConstants.DEFAULT,\r\n handler: handleDefault,\r\n};\r\n\r\nexport const ShareProfileRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove profile',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the profile {{item.name}}?',\r\n approveCaption: 'Remove profile',\r\n rejectCaption: `Don't remove`,\r\n },\r\n handler: handleRemove,\r\n};\r\n\r\nconst ShareProfileEditActions: UI.ActionListType<API.ShareProfile> = {\r\n browse: ShareProfileBrowseAction,\r\n divider: MENU_DIVIDER,\r\n edit: ShareProfileEditAction,\r\n default: ShareProfileSetDefaultAction,\r\n remove: ShareProfileRemoveAction,\r\n};\r\n\r\nexport const ShareProfileActionModule = {\r\n moduleId: UI.Modules.SETTINGS,\r\n subId: 'profile',\r\n};\r\n\r\nexport const ShareProfileEditMenu = {\r\n moduleData: ShareProfileActionModule,\r\n actions: ShareProfileEditActions,\r\n};\r\n","import SocketService from 'services/SocketService';\r\n\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleCreate: UI.ActionHandler<void> = ({ navigate }) => {\r\n navigate(`directories`);\r\n};\r\n\r\ntype Handler = UI.ActionHandler<API.ShareRootEntry>;\r\nconst handleEdit: Handler = ({ itemData: root, navigate }) => {\r\n navigate(`directories/${root.id}`);\r\n};\r\n\r\nconst handleRemove: Handler = ({ itemData: root }) => {\r\n return SocketService.delete(ShareRootConstants.ROOTS_URL + '/' + root.id);\r\n};\r\n\r\nexport const ShareRootCreateAction = {\r\n id: 'create',\r\n displayName: 'Add directory',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.CREATE,\r\n handler: handleCreate,\r\n};\r\n\r\nexport const ShareRootEditAction = {\r\n id: 'edit',\r\n displayName: 'Edit directory',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.EDIT,\r\n handler: handleEdit,\r\n};\r\n\r\nexport const ShareRootRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove directory',\r\n access: API.AccessEnum.SETTINGS_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content:\r\n // eslint-disable-next-line max-len\r\n 'Are you sure that you want to remove the directory {{item.virtual_name}} from share? It will be removed from all share profiles.',\r\n approveCaption: 'Remove directory',\r\n rejectCaption: `Don't remove`,\r\n },\r\n handler: handleRemove,\r\n};\r\n\r\nconst ShareRootEditActions: UI.ActionListType<API.ShareRootEntry> = {\r\n edit: ShareRootEditAction,\r\n remove: ShareRootRemoveAction,\r\n};\r\n\r\nexport const ShareRootActionModule = {\r\n moduleId: UI.Modules.SHARE,\r\n subId: 'root',\r\n};\r\n\r\nexport const ShareRootEditActionMenu = {\r\n moduleData: ShareRootActionModule,\r\n actions: ShareRootEditActions,\r\n};\r\n","const MODULE_URL = 'share_profiles';\nexport default {\n MODULE_URL: MODULE_URL,\n PROFILES_URL: MODULE_URL,\n\n PROFILE_ADDED: 'share_profile_added',\n PROFILE_UPDATED: 'share_profile_updated',\n PROFILE_REMOVED: 'share_profile_removed',\n\n HIDDEN_PROFILE_ID: 1,\n};\n","const MODULE_URL = 'share_roots';\n\nexport default {\n MODULE_URL: MODULE_URL,\n ROOTS_URL: MODULE_URL,\n\n CREATED: 'share_root_created',\n UPDATED: 'share_root_updated',\n REMOVED: 'share_root_removed',\n};\n","import * as React from 'react';\r\n\r\nexport default function <PropsT>(\r\n Component: React.ComponentType<PropsT>,\r\n redrawIntervalSeconds = 60,\r\n) {\r\n class RedrawDecorator extends React.Component<PropsT> {\r\n redrawTimeout: number | undefined;\r\n\r\n componentDidMount() {\r\n this.scheduleComponentRefresh();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.redrawTimeout);\r\n }\r\n\r\n scheduleComponentRefresh = () => {\r\n this.redrawTimeout = window.setTimeout(() => {\r\n this.forceUpdate();\r\n this.scheduleComponentRefresh();\r\n }, redrawIntervalSeconds * 1000);\r\n };\r\n\r\n render() {\r\n return <Component {...this.props} />;\r\n }\r\n }\r\n\r\n return RedrawDecorator;\r\n}\r\n","import * as React from 'react';\r\nimport { merge } from 'lodash';\r\n\r\nimport ShareProfileConstants from 'constants/ShareProfileConstants';\r\n\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n DataProviderDecoratorSettings,\r\n DataConverter,\r\n} from 'decorators/DataProviderDecorator';\r\n\r\nimport * as API from 'types/api';\r\n\r\ninterface ShareProfileDecoratorDataProps {\r\n profiles: API.ShareProfile[];\r\n}\r\n\r\nexport type ShareProfileDecoratorChildProps = DataProviderDecoratorChildProps &\r\n ShareProfileDecoratorDataProps;\r\n\r\nconst ShareProfileDecorator = function <PropsT extends object>(\r\n Component: React.ComponentType<PropsT & ShareProfileDecoratorChildProps>,\r\n listHidden: boolean,\r\n dataProviderDecoratorSettings?: DataProviderDecoratorSettings<\r\n PropsT,\r\n ShareProfileDecoratorDataProps\r\n >,\r\n) {\r\n const convertProfiles: DataConverter<PropsT> = (data: API.ShareProfile[], { t }) => {\r\n const profiles = data.filter(\r\n (p) => listHidden || p.id !== ShareProfileConstants.HIDDEN_PROFILE_ID,\r\n );\r\n\r\n return profiles;\r\n };\r\n\r\n return DataProviderDecorator<PropsT, ShareProfileDecoratorDataProps>(\r\n Component,\r\n merge(dataProviderDecoratorSettings, {\r\n urls: {\r\n profiles: ShareProfileConstants.PROFILES_URL,\r\n },\r\n dataConverters: {\r\n profiles: convertProfiles,\r\n },\r\n onSocketConnected: (addSocketListener, { refetchData }) => {\r\n addSocketListener(\r\n ShareProfileConstants.MODULE_URL,\r\n ShareProfileConstants.PROFILE_ADDED,\r\n () => refetchData(),\r\n );\r\n addSocketListener(\r\n ShareProfileConstants.MODULE_URL,\r\n ShareProfileConstants.PROFILE_UPDATED,\r\n () => refetchData(),\r\n );\r\n addSocketListener(\r\n ShareProfileConstants.MODULE_URL,\r\n ShareProfileConstants.PROFILE_REMOVED,\r\n () => refetchData(),\r\n );\r\n },\r\n } as DataProviderDecoratorSettings<PropsT, ShareProfileDecoratorDataProps>),\r\n );\r\n};\r\n\r\nexport default ShareProfileDecorator;\r\n","import Reflux from 'reflux';\n\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\nimport ShareRootConstants from 'constants/ShareRootConstants';\n\nexport default Reflux.createStore({\n _viewName: 'share_root_view',\n _apiUrl: ShareRootConstants.MODULE_URL,\n mixins: [ViewStoreMixin('path')],\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 { Component } from 'react';\r\nimport RouteModal from 'components/semantic/RouteModal';\r\n\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport ShareRootConstants from 'constants/ShareRootConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport ModalRouteDecorator, {\r\n ModalRouteDecoratorChildProps,\r\n} from 'decorators/ModalRouteDecorator';\r\n\r\nimport ShareProfileDecorator, {\r\n ShareProfileDecoratorChildProps,\r\n} from 'decorators/ShareProfileDecorator';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport t from 'utils/tcomb-form';\r\n\r\nimport { getLastDirectory } from 'utils/FileUtils';\r\n\r\nimport Form, {\r\n FormSaveHandler,\r\n FormFieldSettingHandler,\r\n FormFieldChangeHandler,\r\n} from 'components/form/Form';\r\nimport FilesystemConstants from 'constants/FilesystemConstants';\r\nimport { AutoSuggestField } from 'components/form/fields';\r\n\r\nimport '../style.css';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { ShareRootEntryBase } from 'types/api';\r\nimport { translateForm } from 'utils/FormUtils';\r\nimport { Trans } from 'react-i18next';\r\nimport { profileToEnumValue } from 'utils/ShareProfileUtils';\r\n\r\nconst Fields: UI.FormFieldDefinition[] = [\r\n {\r\n key: 'path',\r\n title: 'Path',\r\n type: API.SettingTypeEnum.DIRECTORY_PATH,\r\n },\r\n {\r\n key: 'virtual_name',\r\n title: 'Virtual name',\r\n type: API.SettingTypeEnum.STRING,\r\n help: 'Directories with identical virtual names will be merged in filelist',\r\n },\r\n {\r\n key: 'profiles',\r\n type: API.SettingTypeEnum.LIST,\r\n item_type: API.SettingTypeEnum.NUMBER,\r\n title: 'Share profiles',\r\n help: 'New share profiles can be created from application settings',\r\n },\r\n {\r\n key: 'incoming',\r\n title: 'Incoming',\r\n type: API.SettingTypeEnum.BOOLEAN,\r\n },\r\n];\r\n\r\nexport interface ShareDirectoryDialogProps {\r\n shareT: UI.ModuleTranslator;\r\n}\r\n\r\nexport interface DataProps extends ShareProfileDecoratorChildProps {\r\n virtualNames: string[];\r\n rootEntry?: API.ShareRootEntryBase;\r\n}\r\n\r\ninterface Entry extends ShareRootEntryBase, UI.FormValueMap {}\r\n\r\n/*interface RouteProps {\r\n directoryId: string;\r\n}*/\r\n\r\ntype Props = ShareDirectoryDialogProps & DataProps & ModalRouteDecoratorChildProps;\r\n\r\nclass ShareDirectoryDialog extends Component<Props> {\r\n static displayName = 'ShareDirectoryDialog';\r\n\r\n fieldDefinitions: UI.FormFieldDefinition[];\r\n form: Form<Entry>;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.fieldDefinitions = translateForm(Fields, props.shareT);\r\n\r\n // Share profiles shouldn't be translated...\r\n const shareProfileDefinitions = this.fieldDefinitions.find(\r\n (def) => def.key === 'profiles',\r\n )!;\r\n Object.assign(shareProfileDefinitions, {\r\n options: props.profiles.map((p) => profileToEnumValue(p, this.props.shareT.plainT)),\r\n default_value: [props.profiles.find((profile) => profile.default)!.id],\r\n });\r\n }\r\n\r\n isNew = () => {\r\n return !this.props.rootEntry;\r\n };\r\n\r\n onFieldChanged: FormFieldChangeHandler<Entry> = (id, value, hasChanges) => {\r\n if (id.includes('path')) {\r\n const mergeFields = {\r\n virtual_name: !!value.path ? getLastDirectory(value.path) : undefined,\r\n };\r\n\r\n return Promise.resolve(mergeFields);\r\n }\r\n\r\n return null;\r\n };\r\n\r\n save = () => {\r\n return this.form.save();\r\n };\r\n\r\n onSave: FormSaveHandler<Entry> = (changedFields) => {\r\n if (this.isNew()) {\r\n return SocketService.post(ShareRootConstants.ROOTS_URL, changedFields);\r\n }\r\n\r\n return SocketService.patch(\r\n `${ShareRootConstants.ROOTS_URL}/${this.props.rootEntry!.id}`,\r\n changedFields,\r\n );\r\n };\r\n\r\n onFieldSetting: FormFieldSettingHandler<Entry> = (id, fieldOptions, formValue) => {\r\n if (id === 'path') {\r\n fieldOptions.disabled = !this.isNew();\r\n fieldOptions.config = {\r\n ...(fieldOptions.config || {}),\r\n historyId: FilesystemConstants.LOCATION_DOWNLOAD,\r\n };\r\n } else if (id === 'virtual_name') {\r\n fieldOptions.factory = t.form.Textbox;\r\n fieldOptions.template = AutoSuggestField;\r\n fieldOptions.config = {\r\n suggestionGetter: () => this.props.virtualNames,\r\n };\r\n }\r\n };\r\n\r\n render() {\r\n const { rootEntry, shareT, ...other } = this.props;\r\n const title = shareT.translate(\r\n this.isNew() ? 'Add share directory' : 'Edit share directory',\r\n );\r\n return (\r\n <RouteModal\r\n className=\"share-directory\"\r\n title={title}\r\n onApprove={this.save}\r\n closable={false}\r\n icon={IconConstants.FOLDER}\r\n {...other}\r\n >\r\n <Message\r\n title={shareT.translate('Hashing information')}\r\n icon={IconConstants.INFO}\r\n description={\r\n <Trans i18nKey={shareT.toI18nKey('hashingInformationDesc')}>\r\n <p>\r\n New files will appear in share only after they have finished hashing (the\r\n client has calculated checksums for them). Information about hashing\r\n progress will be posted to the event log.\r\n </p>\r\n </Trans>\r\n }\r\n />\r\n <Form<Entry>\r\n ref={(c) => (this.form = c!)}\r\n fieldDefinitions={this.fieldDefinitions}\r\n onFieldChanged={this.onFieldChanged}\r\n onFieldSetting={this.onFieldSetting}\r\n onSave={this.onSave}\r\n sourceValue={rootEntry as Entry}\r\n location={this.props.location}\r\n />\r\n </RouteModal>\r\n );\r\n }\r\n}\r\n\r\nexport default ModalRouteDecorator<ShareDirectoryDialogProps>(\r\n ShareProfileDecorator<Omit<Props, keyof DataProps>>(ShareDirectoryDialog, false, {\r\n urls: {\r\n virtualNames: ShareConstants.GROUPED_ROOTS_GET_URL,\r\n rootEntry: ({ params }, socket) => {\r\n if (!params.directoryId) {\r\n return Promise.resolve(undefined);\r\n }\r\n\r\n return socket.get(`${ShareRootConstants.ROOTS_URL}/${params.directoryId}`);\r\n },\r\n },\r\n dataConverters: {\r\n virtualNames: (data: API.GroupedPath[]) => data.map((item) => item.name, []),\r\n },\r\n }),\r\n '/directories/:directoryId?',\r\n);\r\n","import { memo, useState } from 'react';\r\n\r\nimport SectionedDropdown from 'components/semantic/SectionedDropdown';\r\nimport MenuSection from 'components/semantic/MenuSection';\r\nimport MenuItemLink from 'components/semantic/MenuItemLink';\r\n\r\nimport ShareProfileDecorator, {\r\n ShareProfileDecoratorChildProps,\r\n} from 'decorators/ShareProfileDecorator';\r\nimport TableFilterDecorator, {\r\n TableFilterDecoratorChildProps,\r\n TableFilterDecoratorProps,\r\n} from 'decorators/TableFilterDecorator';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport { useTranslation } from 'react-i18next';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { formatProfileNameWithSize } from 'utils/ShareProfileUtils';\r\n\r\nexport interface ShareProfileFilterProps {}\r\n\r\ntype Props = ShareProfileFilterProps &\r\n TableFilterDecoratorChildProps &\r\n ShareProfileDecoratorChildProps;\r\n\r\nconst formatItemName = (profile: API.ShareProfile | null, t: UI.TranslateF) =>\r\n profile\r\n ? formatProfileNameWithSize(profile, t)\r\n : translate('All profiles', t, 'table.filter');\r\n\r\nconst getDropdownItem = (\r\n profile: API.ShareProfile | null,\r\n onClick: (p: API.ShareProfile | null) => void,\r\n selectedProfile: API.ShareProfile | null,\r\n t: UI.TranslateF,\r\n) => {\r\n return (\r\n <MenuItemLink\r\n key={profile ? profile.id : 'all'}\r\n active={selectedProfile === profile}\r\n onClick={() => onClick(profile)}\r\n >\r\n {formatItemName(profile, t)}\r\n </MenuItemLink>\r\n );\r\n};\r\n\r\nconst ShareProfileFilter = memo<Props>(function ShareProfileFilter(props) {\r\n const { t } = useTranslation();\r\n const [selectedProfile, setSelectedProfile] = useState<API.ShareProfile | null>(null);\r\n\r\n const handleSelectItem = (profile: API.ShareProfile | null) => {\r\n props.onFilterUpdated(profile ? profile.id : null);\r\n setSelectedProfile(profile);\r\n };\r\n\r\n return (\r\n <SectionedDropdown\r\n className=\"top right pointing\"\r\n caption={formatItemName(selectedProfile, t)}\r\n triggerIcon=\"filter\"\r\n button={true}\r\n >\r\n <MenuSection\r\n caption={translate('Filter by profile', t, 'table.filter')}\r\n icon={IconConstants.FILTER}\r\n >\r\n {[null, ...props.profiles].map((p) =>\r\n getDropdownItem(p, handleSelectItem, selectedProfile, t),\r\n )}\r\n </MenuSection>\r\n </SectionedDropdown>\r\n );\r\n});\r\n\r\nexport default ShareProfileDecorator<ShareProfileFilterProps & TableFilterDecoratorProps>(\r\n TableFilterDecorator<ShareProfileFilterProps & ShareProfileDecoratorChildProps>(\r\n ShareProfileFilter,\r\n 'profiles',\r\n ),\r\n false,\r\n);\r\n","import * as React from 'react';\n\nimport RedrawDecorator from 'decorators/RedrawDecorator';\nimport { formatRelativeTime } from 'utils/ValueFormat';\nimport Loader from 'components/semantic/Loader';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { translate } from 'utils/TranslationUtils';\nimport { abortRefreshTask, refreshPaths } from 'services/api/ShareApi';\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\nimport Icon from 'components/semantic/Icon';\nimport IconConstants from 'constants/IconConstants';\n\ninterface RefreshCellProps extends RowWrapperCellChildProps<number, API.ShareRootEntry> {}\n\nconst RefreshCell: React.FC<RefreshCellProps> = ({ rowDataGetter, cellData, t }) => {\n const state = rowDataGetter!().status;\n if (state.id !== API.ShareRootStatusEnum.NORMAL) {\n return (\n <div style={{ display: 'flex' }}>\n <Icon\n icon={IconConstants.CANCEL}\n color=\"red\"\n size=\"large\"\n onClick={() => {\n const refreshTaskId = rowDataGetter!().status.refresh_task_id;\n if (!!refreshTaskId) {\n runBackgroundSocketAction(() => abortRefreshTask(refreshTaskId), t!);\n }\n }}\n />\n <Loader size=\"small\" inline={true} text={state.str} />\n </div>\n );\n }\n\n return (\n <div>\n <Icon\n icon={IconConstants.REFRESH_COLORED}\n size=\"large\"\n onClick={() =>\n runBackgroundSocketAction(() => refreshPaths([rowDataGetter!().path]), t!)\n }\n />\n {cellData === 0\n ? translate('Unknown', t!, UI.Modules.SHARE)\n : formatRelativeTime(cellData!)}\n </div>\n );\n};\n\nexport default RedrawDecorator(RefreshCell);\n","import { Component } from 'react';\n\nimport ShareRootStore from 'stores/ShareRootStore';\n\nimport VirtualTable from 'components/table/VirtualTable';\nimport { SizeCell, DurationCell, FileActionCell } from 'components/table/Cell';\nimport { Column } from 'fixed-data-table-2';\n\nimport ShareDirectoryDialog from 'routes/Share/components/ShareDirectoryDialog';\nimport ShareProfileFilter from 'components/table/ShareProfileFilter';\n\nimport { ActionMenu } from 'components/action-menu';\nimport RefreshCell from 'routes/Share/components/RefreshCell';\n\nimport LoginStore from 'stores/LoginStore';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { getModuleT } from 'utils/TranslationUtils';\nimport MenuConstants from 'constants/MenuConstants';\nimport {\n ShareActionMenu,\n ShareRootActionModule,\n ShareRootCreateAction,\n ShareRootEditActionMenu,\n} from 'actions/ui/share';\n\nconst ShareRootCreateMenu = {\n actions: {\n create: ShareRootCreateAction,\n },\n moduleData: ShareRootActionModule,\n};\n\nclass Share extends Component<WithTranslation> {\n static displayName = 'Share';\n rowClassNameGetter = (rowData: API.ShareRootEntry) => {\n if (rowData.incoming) {\n return 'incoming';\n }\n\n return '';\n };\n\n shareT = getModuleT(this.props.t, UI.Modules.SHARE);\n render() {\n const { translate } = this.shareT;\n const editAccess = LoginStore.hasAccess(API.AccessEnum.SETTINGS_EDIT);\n return (\n <>\n <VirtualTable\n store={ShareRootStore}\n customFilter={ShareProfileFilter}\n rowClassNameGetter={this.rowClassNameGetter}\n footerData={\n <ActionMenu\n className=\"top left pointing\"\n caption={translate('Actions...')}\n actions={ShareRootCreateMenu}\n header={translate('Share actions')}\n triggerIcon=\"chevron up\"\n ids={['create']}\n button={true}\n remoteMenuId=\"share_roots\"\n >\n <ActionMenu actions={ShareActionMenu} ids={['refresh']} />\n </ActionMenu>\n }\n moduleId={UI.Modules.SHARE}\n >\n <Column\n name=\"Path\"\n width={200}\n columnKey=\"path\"\n cell={\n <FileActionCell\n actions={ShareRootEditActionMenu}\n remoteMenuId={MenuConstants.SHARE_ROOT}\n />\n }\n flexGrow={10}\n />\n <Column\n name=\"Size\"\n width={60}\n columnKey=\"size\"\n cell={<SizeCell />}\n flexGrow={2}\n />\n <Column name=\"Content\" width={150} columnKey=\"type\" hideWidth={1000} />\n <Column\n name=\"Virtual name\"\n width={120}\n columnKey=\"virtual_name\"\n flexGrow={5}\n //hideWidth={600}\n />\n <Column name=\"Profiles\" width={65} columnKey=\"profiles\" />\n <Column\n name=\"Last refreshed\"\n width={80}\n flexGrow={3}\n columnKey=\"last_refresh_time\"\n cell={editAccess ? <RefreshCell /> : <DurationCell />}\n />\n </VirtualTable>\n <ShareDirectoryDialog shareT={this.shareT} />\n </>\n );\n }\n}\n\nexport default withTranslation()(Share);\n","import LoginStore from 'stores/LoginStore';\r\nimport { fetchData } from 'utils/HttpUtils';\r\n\r\nexport const uploadTempFile = async (file: File): Promise<string> => {\r\n // eslint-disable-next-line no-useless-catch\r\n try {\r\n const res = await fetchData(`${getBasePath()}temp`, {\r\n method: 'POST',\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n\r\n Authorization: LoginStore.authToken,\r\n },\r\n body: file,\r\n });\r\n\r\n return res.headers.get('Location')!;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\nconst toCorsSafeUrl = (url: string) => {\r\n const proxyUrl = `${\r\n window.location.origin\r\n }${getBasePath()}proxy?url=${encodeURIComponent(url)}`;\r\n return proxyUrl;\r\n};\r\n\r\nexport const fetchCorsSafeData = async (\r\n url: string,\r\n isJSON: boolean,\r\n options?: RequestInit,\r\n) => {\r\n try {\r\n //console.log(`CORS HTTP request started (${url})`);\r\n\r\n const res = await fetchData(toCorsSafeUrl(url), {\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n\r\n // Temp workaround for people upgrading from versions < 2.7.0\r\n // If the new UI was loaded before restarting the app, a cache expiration time of\r\n // one year would have been set for \"Not found\" errors...\r\n 'Cache-Control': 'no-store, must-revalidate, max-age=0',\r\n },\r\n ...options,\r\n });\r\n\r\n const data = (await isJSON) ? res.json() : res.text();\r\n return data;\r\n } catch (e) {\r\n console.error(`CORS HTTP request failed (${url})`, e);\r\n throw e;\r\n }\r\n};\r\n","import ShareConstants from 'constants/ShareConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport { uploadTempFile } from '../HttpService';\r\n\r\nimport * as API from 'types/api';\r\n\r\nexport interface AddTempShareResponse {\r\n magnet: string;\r\n}\r\n\r\nexport const shareTempFile = async (\r\n file: File,\r\n hubUrl: string,\r\n cid: string | undefined,\r\n): Promise<AddTempShareResponse> => {\r\n // eslint-disable-next-line no-useless-catch\r\n try {\r\n const fileId = await uploadTempFile(file);\r\n const res = await SocketService.post<AddTempShareResponse>(\r\n ShareConstants.TEMP_SHARES_URL,\r\n {\r\n name: file.name,\r\n file_id: fileId,\r\n hub_url: hubUrl,\r\n cid,\r\n },\r\n );\r\n\r\n return res;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\nexport const refresh = (incoming: boolean) => {\r\n return SocketService.post(ShareConstants.REFRESH_URL, {\r\n incoming,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshPaths = (paths: string[]) => {\r\n return SocketService.post(ShareConstants.REFRESH_PATHS_URL, {\r\n paths,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshVirtual = (path: string) => {\r\n return SocketService.post(ShareConstants.REFRESH_VIRTUAL_URL, {\r\n path,\r\n });\r\n};\r\n\r\nexport const abortRefreshTask = (id: number) => {\r\n return SocketService.delete(`${ShareConstants.REFRESH_TASKS_URL}/${id}`);\r\n};\r\n","import ShareProfileConstants from 'constants/ShareProfileConstants';\r\n\r\nimport { formatSize } from 'utils/ValueFormat';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nexport const formatProfileNameWithSize = (\r\n profile: API.ShareProfile,\r\n t: UI.TranslateF,\r\n) => {\r\n let str = profile.str;\r\n if (profile.id !== ShareProfileConstants.HIDDEN_PROFILE_ID) {\r\n str += ` (${formatSize(profile.size, t)})`;\r\n }\r\n\r\n return str;\r\n};\r\n\r\nexport const profileToEnumValue = (profile: API.ShareProfile, t: UI.TranslateF) => {\r\n return {\r\n id: profile.id,\r\n name: formatProfileNameWithSize(profile, t),\r\n };\r\n};\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","ShareRefreshAction","displayName","access","SETTINGS_EDIT","icon","REFRESH_COLORED","handler","post","REFRESH_URL","ShareActions","refresh","ShareActionModule","moduleId","SHARE","ShareActionMenu","moduleData","actions","ShareExcludeAddAction","CREATE","navigate","ShareExcludeEditActions","remove","REMOVE","confirmation","content","approveCaption","rejectCaption","itemData","path","EXCLUDES_REMOVE_URL","ShareExcludeActionModule","SETTINGS","subId","ShareExcludeEditMenu","handleCreate","data","name","PROFILES_URL","ShareProfileCreateAction","input","inputProps","placeholder","required","ShareProfileCloneAction","COPY","newProfile","sourceProfile","roots","get","MODULE_URL","root","rootProfileIds","profiles","map","rootProfile","includes","patch","ShareProfileBrowseAction","FILELISTS_VIEW","FILELIST","profile","location","ownList","ShareProfileEditAction","EDIT","defaultValue","ShareProfileSetDefaultAction","filter","default","DEFAULT","ShareProfileRemoveAction","delete","ShareProfileEditActions","browse","divider","edit","ShareProfileActionModule","ShareProfileEditMenu","ShareRootCreateAction","IconConstants","ShareRootEditActions","SocketService","ShareRootConstants","ROOTS_URL","ShareRootActionModule","ShareRootEditActionMenu","PROFILE_ADDED","PROFILE_UPDATED","PROFILE_REMOVED","HIDDEN_PROFILE_ID","CREATED","UPDATED","REMOVED","Component","redrawIntervalSeconds","RedrawDecorator","scheduleComponentRefresh","this","redrawTimeout","window","setTimeout","forceUpdate","componentDidMount","componentWillUnmount","clearTimeout","render","props","listHidden","dataProviderDecoratorSettings","merge","urls","dataConverters","t","p","onSocketConnected","addSocketListener","refetchData","_viewName","_apiUrl","mixins","ViewStoreMixin","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","Fields","key","title","type","DIRECTORY_PATH","STRING","help","LIST","item_type","NUMBER","BOOLEAN","ShareDirectoryDialog","constructor","super","isNew","rootEntry","onFieldChanged","value","hasChanges","mergeFields","virtual_name","undefined","Promise","resolve","save","form","onSave","changedFields","onFieldSetting","fieldOptions","formValue","disabled","config","historyId","FilesystemConstants","LOCATION_DOWNLOAD","factory","Textbox","template","suggestionGetter","virtualNames","fieldDefinitions","shareT","shareProfileDefinitions","find","def","Object","assign","plainT","default_value","other","translate","RouteModal","className","onApprove","closable","FOLDER","Message","INFO","description","i18nKey","toI18nKey","Form","ref","c","sourceValue","ModalRouteDecorator","ShareProfileDecorator","ShareConstants","GROUPED_ROOTS_GET_URL","params","socket","directoryId","item","formatItemName","ShareProfileFilter","memo","selectedProfile","setSelectedProfile","useState","handleSelectItem","onFilterUpdated","SectionedDropdown","caption","triggerIcon","button","MenuSection","FILTER","onClick","MenuItemLink","active","getDropdownItem","TableFilterDecorator","rowDataGetter","cellData","state","status","NORMAL","style","display","Icon","CANCEL","color","size","refreshTaskId","refresh_task_id","Loader","inline","text","str","ShareRootCreateMenu","create","Share","rowClassNameGetter","rowData","incoming","editAccess","LoginStore","hasAccess","VirtualTable","store","ShareRootStore","customFilter","footerData","header","ids","remoteMenuId","width","columnKey","cell","MenuConstants","SHARE_ROOT","flexGrow","hideWidth","uploadTempFile","file","getBasePath","method","headers","authToken","Authorization","body","e","fetchCorsSafeData","url","isJSON","res","origin","encodeURIComponent","toCorsSafeUrl","json","console","error","shareTempFile","hubUrl","cid","fileId","TEMP_SHARES_URL","file_id","hub_url","refreshPaths","paths","REFRESH_PATHS_URL","priority","MANUAL","refreshVirtual","REFRESH_VIRTUAL_URL","abortRefreshTask","REFRESH_TASKS_URL","formatProfileNameWithSize","profileToEnumValue"],"sourceRoot":""}