diff --git a/apps/user_status/src/mixins/OnlineStatusMixin.js b/apps/user_status/src/mixins/OnlineStatusMixin.js index 5670eb4dc0633..31892740ff2ad 100644 --- a/apps/user_status/src/mixins/OnlineStatusMixin.js +++ b/apps/user_status/src/mixins/OnlineStatusMixin.js @@ -35,9 +35,11 @@ export default { return this.$t('user_status', 'Online') case 'away': - case 'busy': return this.$t('user_status', 'Away') + case 'busy': + return this.$t('user_status', 'Busy') + case 'dnd': return this.$t('user_status', 'Do not disturb') diff --git a/dist/user_status-menu.js b/dist/user_status-menu.js index f191f34b36d41..ba4beb74ae3f9 100644 --- a/dist/user_status-menu.js +++ b/dist/user_status-menu.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e,s,a,r={26291:(e,s,a)=>{var r=a(21777),n=a(61338),u=a(85471),o=a(54914),i=a(74095),c=a(1522),d=a(53611),l=a(17334),m=a.n(l),p=a(19051),g=a(63814),f=a(33114);const h={name:"UserStatus",components:{Fragment:o.F,NcButton:i.A,NcListItem:c.A,NcUserStatusIcon:d.A,SetStatusModal:()=>Promise.all([a.e(4208),a.e(5133)]).then(a.bind(a,83706))},mixins:[f.A],props:{inline:{type:Boolean,default:!1}},data:()=>({heartbeatInterval:null,isAway:!1,isModalOpen:!1,mouseMoveListener:null,setAwayTimeout:null}),mounted(){this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=()=>{this.isAway=!0},this.mouseMoveListener=m()(()=>{const e=this.isAway;this.isAway=!1,clearTimeout(this.setAwayTimeout),setTimeout(this.setAwayTimeout,12e4),e&&this._backgroundHeartbeat()},2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,n.B1)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy(){window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,n.al)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{openModal(){this.isModalOpen=!0},closeModal(){this.isModalOpen=!1},async _backgroundHeartbeat(){try{const e=await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/heartbeat?format=json");return(await p.Ay.put(t,{status:e?"away":"online"})).data.ocs.data})(this.isAway);e?.userId?this.$store.dispatch("setStatusFromHeartbeat",e):await this.$store.dispatch("reFetchStatusFromServer")}catch(e){console.debug("Failed sending heartbeat, got: "+e.response?.status)}},handleUserStatusUpdated(e){(0,r.HW)()?.uid===e.userId&&this.$store.dispatch("setStatusFromObject",{status:e.status,icon:e.icon,message:e.message})}}};var v=a(85072),A=a.n(v),y=a(97825),S=a.n(y),b=a(77659),I=a.n(b),w=a(55056),_=a.n(w),T=a(10540),M=a.n(T),C=a(41113),k=a.n(C),O=a(99453),P={};P.styleTagTransform=k(),P.setAttributes=_(),P.insert=I().bind(null,"head"),P.domAPI=S(),P.insertStyleElement=M(),A()(O.A,P),O.A&&O.A.locals&&O.A.locals;const F=(0,a(14486).A)(h,function(){var e=this,t=e._self._c;return t("Fragment",[e.inline?t("div",[t("NcButton",{on:{click:function(t){return t.stopPropagation(),e.openModal.apply(null,arguments)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("NcUserStatusIcon",{staticClass:"user-status-icon",attrs:{status:e.statusType,"aria-hidden":"true"}})]},proxy:!0}])},[e._v("\n\t\t\t"+e._s(e.visibleMessage)+"\n\t\t")])],1):t("NcListItem",{staticClass:"user-status-menu-item",attrs:{compact:"",name:e.visibleMessage},on:{click:function(t){return t.stopPropagation(),e.openModal.apply(null,arguments)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("NcUserStatusIcon",{staticClass:"user-status-icon",attrs:{status:e.statusType,"aria-hidden":"true"}})]},proxy:!0}],null,!1,2300440294)}),e._v(" "),e.isModalOpen?t("SetStatusModal",{attrs:{inline:e.inline},on:{close:e.closeModal}}):e._e()],1)},[],!1,null,"93a016e0",null).exports;var U=a(95353);const x={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus(e,t){e.predefinedStatuses=[...e.predefinedStatuses,t]}},getters:{statusesHaveLoaded:e=>e.predefinedStatuses.length>0},actions:{async loadAllPredefinedStatuses({state:e,commit:t}){if(e.predefinedStatuses.length>0)return;const s=await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/predefined_statuses?format=json");return(await p.Ay.get(e)).data.ocs.data})();for(const e of s)t("addPredefinedStatus",e)}}};var $=a(81222),D=a(61913),j=a(51651);const B=e=>{if(null===e)return null;const t=(0,D.R)();if("period"===e.type)return t.setSeconds(t.getSeconds()+e.time),Math.floor(t.getTime()/1e3);if("end-of"===e.type)switch(e.time){case"day":case"week":return Number((0,j.A)(t).endOf(e.time).format("X"))}return"_time"===e.type?e.time:null},H={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus(e,{statusType:t}){e.status=t,e.statusIsUserDefined=!0},setPredefinedMessage(e,{messageId:t,clearAt:s,message:a,icon:r}){e.messageId=t,e.messageIsPredefined=!0,e.message=a,e.icon=r,e.clearAt=s},setCustomMessage(e,{message:t,icon:s,clearAt:a}){e.messageId=null,e.messageIsPredefined=!1,e.message=t,e.icon=s,e.clearAt=a},clearMessage(e){e.messageId=null,e.messageIsPredefined=!1,e.message=null,e.icon=null,e.clearAt=null},loadStatusFromServer(e,{status:t,statusIsUserDefined:s,message:a,icon:r,clearAt:n,messageIsPredefined:u,messageId:o}){e.status=t,e.message=a,e.icon=r,void 0!==s&&(e.statusIsUserDefined=s),void 0!==n&&(e.clearAt=n),void 0!==u&&(e.messageIsPredefined=u),void 0!==o&&(e.messageId=o)}},getters:{},actions:{async setStatus({commit:e,state:t},{statusType:s}){await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/user_status/status");await p.Ay.put(t,{statusType:e})})(s),e("setStatus",{statusType:s}),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async setStatusFromObject({commit:e,state:t},s){e("loadStatusFromServer",s)},async setPredefinedMessage({commit:e,rootState:t,state:s},{messageId:a,clearAt:u}){const o=B(u);await(async(e,t=null)=>{const s=(0,g.KT)("apps/user_status/api/v1/user_status/message/predefined?format=json");await p.Ay.put(s,{messageId:e,clearAt:t})})(a,o);const i=t.predefinedStatuses.predefinedStatuses.find(e=>e.id===a),{message:c,icon:d}=i;e("setPredefinedMessage",{messageId:a,clearAt:o,message:c,icon:d}),(0,n.Ic)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:(0,r.HW)()?.uid})},async setCustomMessage({commit:e,state:t},{message:s,icon:a,clearAt:u}){const o=B(u);await(async(e,t=null,s=null)=>{const a=(0,g.KT)("apps/user_status/api/v1/user_status/message/custom?format=json");await p.Ay.put(a,{message:e,statusIcon:t,clearAt:s})})(s,a,o),e("setCustomMessage",{message:s,icon:a,clearAt:o}),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async clearMessage({commit:e,state:t}){await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/user_status/message?format=json");await p.Ay.delete(e)})(),e("clearMessage"),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async reFetchStatusFromServer({commit:e}){e("loadStatusFromServer",await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/user_status");return(await p.Ay.get(e)).data.ocs.data})())},async setStatusFromHeartbeat({commit:e},t){e("loadStatusFromServer",t)},loadStatusFromInitialState({commit:e}){e("loadStatusFromServer",(0,$.C)("user_status","status"))}}},E={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{loadBackupStatusFromServer(e,{status:t,statusIsUserDefined:s,message:a,icon:r,clearAt:n,messageIsPredefined:u,messageId:o}){e.status=t,e.message=a,e.icon=r,void 0!==s&&(e.statusIsUserDefined=s),void 0!==n&&(e.clearAt=n),void 0!==u&&(e.messageIsPredefined=u),void 0!==o&&(e.messageId=o)}},getters:{},actions:{async fetchBackupFromServer({commit:e}){try{e("loadBackupStatusFromServer",await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/statuses/{userId}",{userId:"_"+e});return(await p.Ay.get(t)).data.ocs.data})((0,r.HW)()?.uid))}catch(e){}},async revertBackupFromServer({commit:e},{messageId:t}){const s=await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/user_status/revert/{messageId}",{messageId:e});return(await p.Ay.delete(t)).data.ocs.data})(t);s&&(e("loadBackupStatusFromServer",{}),e("loadStatusFromServer",s),(0,n.Ic)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:(0,r.HW)()?.uid}))}}};u.Ay.use(U.Ay);const N=new U.il({modules:{predefinedStatuses:x,userStatus:H,userBackupStatus:E},strict:!0});a.nc=(0,r.aV)(),u.Ay.prototype.t=t,u.Ay.prototype.$t=t;const L=()=>{const e=document.getElementById("user_status-menu-entry");new u.Ay({el:e,render:e=>e(F),store:N})};document.getElementById("user_status-menu-entry")?L():(0,n.B1)("core:user-menu:mounted",L),document.addEventListener("DOMContentLoaded",function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",e=>new(u.Ay.extend(F))({propsData:{inline:!0},store:N}).$mount(e))})},33114:(e,t,s)=>{s.d(t,{A:()=>n});var a=s(95353),r=s(85168);const n={computed:{...(0,a.aH)({statusType:e=>e.userStatus.status,statusIsUserDefined:e=>e.userStatus.statusIsUserDefined,customIcon:e=>e.userStatus.icon,customMessage:e=>e.userStatus.message}),visibleMessage(){if(this.customIcon&&this.customMessage)return`${this.customIcon} ${this.customMessage}`;if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":case"busy":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")}},methods:{async changeStatus(e){try{await this.$store.dispatch("setStatus",{statusType:e})}catch(e){(0,r.Qg)(this.$t("user_status","There was an error saving the new status")),console.debug(e)}}}}},53611:(e,t,s)=>{s.d(t,{A:()=>a.N});var a=s(49313)},61913:(e,t,s)=>{s.d(t,{R:()=>a});const a=()=>new Date},99453:(e,t,s)=>{s.d(t,{A:()=>o});var a=s(71354),r=s.n(a),n=s(76314),u=s.n(n)()(r());u.push([e.id,".user-status-icon[data-v-93a016e0]{width:20px;height:20px;margin:calc((var(--default-clickable-area) - 20px)/2);opacity:1 !important;background-size:20px;vertical-align:middle !important}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AACA,mCACC,UAAA,CACA,WAAA,CACA,qDAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA",sourcesContent:["\n.user-status-icon {\n\twidth: 20px;\n\theight: 20px;\n\tmargin: calc((var(--default-clickable-area) - 20px) / 2); // 20px icon size\n\topacity: 1 !important;\n\tbackground-size: 20px;\n\tvertical-align: middle !important;\n}\n"],sourceRoot:""}]);const o=u}},n={};function u(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={id:e,loaded:!1,exports:{}};return r[e].call(s.exports,s,s.exports,u),s.loaded=!0,s.exports}u.m=r,e=[],u.O=(t,s,a,r)=>{if(!s){var n=1/0;for(d=0;d=r)&&Object.keys(u.O).every(e=>u.O[e](s[i]))?s.splice(i--,1):(o=!1,r0&&e[d-1][2]>r;d--)e[d]=e[d-1];e[d]=[s,a,r]},u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},u.d=(e,t)=>{for(var s in t)u.o(t,s)&&!u.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,s)=>(u.f[s](e,t),t),[])),u.u=e=>(5133===e?"user-status-modal":e)+"-"+e+".js?v="+{3278:"c97a360506d6ebb6afd2",3564:"1f97cb34040f17de0c20",5133:"3ebaabbf50ec7fc6bf52",7471:"428f6893ae52e7aca00b",8790:"9fd8f6ad2d5d29ec25ad"}[e],u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s={},a="nextcloud:",u.l=(e,t,r,n)=>{if(s[e])s[e].push(t);else{var o,i;if(void 0!==r)for(var c=document.getElementsByTagName("script"),d=0;d{o.onerror=o.onload=null,clearTimeout(p);var r=s[e];if(delete s[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(e=>e(a)),t)return t(a)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=m.bind(null,o.onerror),o.onload=m.bind(null,o.onload),i&&document.head.appendChild(o)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.j=9953,(()=>{var e;globalThis.importScripts&&(e=globalThis.location+"");var t=globalThis.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var s=t.getElementsByTagName("script");if(s.length)for(var a=s.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=s[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),u.p=e})(),(()=>{u.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={9953:0};u.f.j=(t,s)=>{var a=u.o(e,t)?e[t]:void 0;if(0!==a)if(a)s.push(a[2]);else{var r=new Promise((s,r)=>a=e[t]=[s,r]);s.push(a[2]=r);var n=u.p+u.u(t),o=new Error;u.l(n,s=>{if(u.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var r=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;o.message="Loading chunk "+t+" failed.\n("+r+": "+n+")",o.name="ChunkLoadError",o.type=r,o.request=n,a[1](o)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,s)=>{var a,r,[n,o,i]=s,c=0;if(n.some(t=>0!==e[t])){for(a in o)u.o(o,a)&&(u.m[a]=o[a]);if(i)var d=i(u)}for(t&&t(s);cu(26291));o=u.O(o)})(); -//# sourceMappingURL=user_status-menu.js.map?v=4c905d814e8414ef7e8e \ No newline at end of file +(()=>{"use strict";var e,s,a,r={26291:(e,s,a)=>{var r=a(21777),n=a(61338),u=a(85471),o=a(54914),i=a(74095),c=a(1522),d=a(53611),l=a(17334),m=a.n(l),p=a(19051),g=a(63814),f=a(33114);const h={name:"UserStatus",components:{Fragment:o.F,NcButton:i.A,NcListItem:c.A,NcUserStatusIcon:d.A,SetStatusModal:()=>Promise.all([a.e(4208),a.e(5133)]).then(a.bind(a,83706))},mixins:[f.A],props:{inline:{type:Boolean,default:!1}},data:()=>({heartbeatInterval:null,isAway:!1,isModalOpen:!1,mouseMoveListener:null,setAwayTimeout:null}),mounted(){this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=()=>{this.isAway=!0},this.mouseMoveListener=m()(()=>{const e=this.isAway;this.isAway=!1,clearTimeout(this.setAwayTimeout),setTimeout(this.setAwayTimeout,12e4),e&&this._backgroundHeartbeat()},2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,n.B1)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy(){window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,n.al)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{openModal(){this.isModalOpen=!0},closeModal(){this.isModalOpen=!1},async _backgroundHeartbeat(){try{const e=await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/heartbeat?format=json");return(await p.Ay.put(t,{status:e?"away":"online"})).data.ocs.data})(this.isAway);e?.userId?this.$store.dispatch("setStatusFromHeartbeat",e):await this.$store.dispatch("reFetchStatusFromServer")}catch(e){console.debug("Failed sending heartbeat, got: "+e.response?.status)}},handleUserStatusUpdated(e){(0,r.HW)()?.uid===e.userId&&this.$store.dispatch("setStatusFromObject",{status:e.status,icon:e.icon,message:e.message})}}};var v=a(85072),A=a.n(v),y=a(97825),S=a.n(y),b=a(77659),I=a.n(b),w=a(55056),_=a.n(w),T=a(10540),M=a.n(T),C=a(41113),k=a.n(C),O=a(99453),P={};P.styleTagTransform=k(),P.setAttributes=_(),P.insert=I().bind(null,"head"),P.domAPI=S(),P.insertStyleElement=M(),A()(O.A,P),O.A&&O.A.locals&&O.A.locals;const F=(0,a(14486).A)(h,function(){var e=this,t=e._self._c;return t("Fragment",[e.inline?t("div",[t("NcButton",{on:{click:function(t){return t.stopPropagation(),e.openModal.apply(null,arguments)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("NcUserStatusIcon",{staticClass:"user-status-icon",attrs:{status:e.statusType,"aria-hidden":"true"}})]},proxy:!0}])},[e._v("\n\t\t\t"+e._s(e.visibleMessage)+"\n\t\t")])],1):t("NcListItem",{staticClass:"user-status-menu-item",attrs:{compact:"",name:e.visibleMessage},on:{click:function(t){return t.stopPropagation(),e.openModal.apply(null,arguments)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("NcUserStatusIcon",{staticClass:"user-status-icon",attrs:{status:e.statusType,"aria-hidden":"true"}})]},proxy:!0}],null,!1,2300440294)}),e._v(" "),e.isModalOpen?t("SetStatusModal",{attrs:{inline:e.inline},on:{close:e.closeModal}}):e._e()],1)},[],!1,null,"93a016e0",null).exports;var U=a(95353);const x={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus(e,t){e.predefinedStatuses=[...e.predefinedStatuses,t]}},getters:{statusesHaveLoaded:e=>e.predefinedStatuses.length>0},actions:{async loadAllPredefinedStatuses({state:e,commit:t}){if(e.predefinedStatuses.length>0)return;const s=await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/predefined_statuses?format=json");return(await p.Ay.get(e)).data.ocs.data})();for(const e of s)t("addPredefinedStatus",e)}}};var $=a(81222),B=a(61913),D=a(51651);const j=e=>{if(null===e)return null;const t=(0,B.R)();if("period"===e.type)return t.setSeconds(t.getSeconds()+e.time),Math.floor(t.getTime()/1e3);if("end-of"===e.type)switch(e.time){case"day":case"week":return Number((0,D.A)(t).endOf(e.time).format("X"))}return"_time"===e.type?e.time:null},H={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus(e,{statusType:t}){e.status=t,e.statusIsUserDefined=!0},setPredefinedMessage(e,{messageId:t,clearAt:s,message:a,icon:r}){e.messageId=t,e.messageIsPredefined=!0,e.message=a,e.icon=r,e.clearAt=s},setCustomMessage(e,{message:t,icon:s,clearAt:a}){e.messageId=null,e.messageIsPredefined=!1,e.message=t,e.icon=s,e.clearAt=a},clearMessage(e){e.messageId=null,e.messageIsPredefined=!1,e.message=null,e.icon=null,e.clearAt=null},loadStatusFromServer(e,{status:t,statusIsUserDefined:s,message:a,icon:r,clearAt:n,messageIsPredefined:u,messageId:o}){e.status=t,e.message=a,e.icon=r,void 0!==s&&(e.statusIsUserDefined=s),void 0!==n&&(e.clearAt=n),void 0!==u&&(e.messageIsPredefined=u),void 0!==o&&(e.messageId=o)}},getters:{},actions:{async setStatus({commit:e,state:t},{statusType:s}){await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/user_status/status");await p.Ay.put(t,{statusType:e})})(s),e("setStatus",{statusType:s}),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async setStatusFromObject({commit:e,state:t},s){e("loadStatusFromServer",s)},async setPredefinedMessage({commit:e,rootState:t,state:s},{messageId:a,clearAt:u}){const o=j(u);await(async(e,t=null)=>{const s=(0,g.KT)("apps/user_status/api/v1/user_status/message/predefined?format=json");await p.Ay.put(s,{messageId:e,clearAt:t})})(a,o);const i=t.predefinedStatuses.predefinedStatuses.find(e=>e.id===a),{message:c,icon:d}=i;e("setPredefinedMessage",{messageId:a,clearAt:o,message:c,icon:d}),(0,n.Ic)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:(0,r.HW)()?.uid})},async setCustomMessage({commit:e,state:t},{message:s,icon:a,clearAt:u}){const o=j(u);await(async(e,t=null,s=null)=>{const a=(0,g.KT)("apps/user_status/api/v1/user_status/message/custom?format=json");await p.Ay.put(a,{message:e,statusIcon:t,clearAt:s})})(s,a,o),e("setCustomMessage",{message:s,icon:a,clearAt:o}),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async clearMessage({commit:e,state:t}){await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/user_status/message?format=json");await p.Ay.delete(e)})(),e("clearMessage"),(0,n.Ic)("user_status:status.updated",{status:t.status,message:t.message,icon:t.icon,clearAt:t.clearAt,userId:(0,r.HW)()?.uid})},async reFetchStatusFromServer({commit:e}){e("loadStatusFromServer",await(async()=>{const e=(0,g.KT)("apps/user_status/api/v1/user_status");return(await p.Ay.get(e)).data.ocs.data})())},async setStatusFromHeartbeat({commit:e},t){e("loadStatusFromServer",t)},loadStatusFromInitialState({commit:e}){e("loadStatusFromServer",(0,$.C)("user_status","status"))}}},E={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{loadBackupStatusFromServer(e,{status:t,statusIsUserDefined:s,message:a,icon:r,clearAt:n,messageIsPredefined:u,messageId:o}){e.status=t,e.message=a,e.icon=r,void 0!==s&&(e.statusIsUserDefined=s),void 0!==n&&(e.clearAt=n),void 0!==u&&(e.messageIsPredefined=u),void 0!==o&&(e.messageId=o)}},getters:{},actions:{async fetchBackupFromServer({commit:e}){try{e("loadBackupStatusFromServer",await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/statuses/{userId}",{userId:"_"+e});return(await p.Ay.get(t)).data.ocs.data})((0,r.HW)()?.uid))}catch(e){}},async revertBackupFromServer({commit:e},{messageId:t}){const s=await(async e=>{const t=(0,g.KT)("apps/user_status/api/v1/user_status/revert/{messageId}",{messageId:e});return(await p.Ay.delete(t)).data.ocs.data})(t);s&&(e("loadBackupStatusFromServer",{}),e("loadStatusFromServer",s),(0,n.Ic)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:(0,r.HW)()?.uid}))}}};u.Ay.use(U.Ay);const N=new U.il({modules:{predefinedStatuses:x,userStatus:H,userBackupStatus:E},strict:!0});a.nc=(0,r.aV)(),u.Ay.prototype.t=t,u.Ay.prototype.$t=t;const L=()=>{const e=document.getElementById("user_status-menu-entry");new u.Ay({el:e,render:e=>e(F),store:N})};document.getElementById("user_status-menu-entry")?L():(0,n.B1)("core:user-menu:mounted",L),document.addEventListener("DOMContentLoaded",function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",e=>new(u.Ay.extend(F))({propsData:{inline:!0},store:N}).$mount(e))})},33114:(e,t,s)=>{s.d(t,{A:()=>n});var a=s(95353),r=s(85168);const n={computed:{...(0,a.aH)({statusType:e=>e.userStatus.status,statusIsUserDefined:e=>e.userStatus.statusIsUserDefined,customIcon:e=>e.userStatus.icon,customMessage:e=>e.userStatus.message}),visibleMessage(){if(this.customIcon&&this.customMessage)return`${this.customIcon} ${this.customMessage}`;if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"busy":return this.$t("user_status","Busy");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")}},methods:{async changeStatus(e){try{await this.$store.dispatch("setStatus",{statusType:e})}catch(e){(0,r.Qg)(this.$t("user_status","There was an error saving the new status")),console.debug(e)}}}}},53611:(e,t,s)=>{s.d(t,{A:()=>a.N});var a=s(49313)},61913:(e,t,s)=>{s.d(t,{R:()=>a});const a=()=>new Date},99453:(e,t,s)=>{s.d(t,{A:()=>o});var a=s(71354),r=s.n(a),n=s(76314),u=s.n(n)()(r());u.push([e.id,".user-status-icon[data-v-93a016e0]{width:20px;height:20px;margin:calc((var(--default-clickable-area) - 20px)/2);opacity:1 !important;background-size:20px;vertical-align:middle !important}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AACA,mCACC,UAAA,CACA,WAAA,CACA,qDAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA",sourcesContent:["\n.user-status-icon {\n\twidth: 20px;\n\theight: 20px;\n\tmargin: calc((var(--default-clickable-area) - 20px) / 2); // 20px icon size\n\topacity: 1 !important;\n\tbackground-size: 20px;\n\tvertical-align: middle !important;\n}\n"],sourceRoot:""}]);const o=u}},n={};function u(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={id:e,loaded:!1,exports:{}};return r[e].call(s.exports,s,s.exports,u),s.loaded=!0,s.exports}u.m=r,e=[],u.O=(t,s,a,r)=>{if(!s){var n=1/0;for(d=0;d=r)&&Object.keys(u.O).every(e=>u.O[e](s[i]))?s.splice(i--,1):(o=!1,r0&&e[d-1][2]>r;d--)e[d]=e[d-1];e[d]=[s,a,r]},u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},u.d=(e,t)=>{for(var s in t)u.o(t,s)&&!u.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,s)=>(u.f[s](e,t),t),[])),u.u=e=>(5133===e?"user-status-modal":e)+"-"+e+".js?v="+{3278:"c97a360506d6ebb6afd2",3564:"1f97cb34040f17de0c20",5133:"3ebaabbf50ec7fc6bf52",7471:"428f6893ae52e7aca00b",8790:"9fd8f6ad2d5d29ec25ad"}[e],u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s={},a="nextcloud:",u.l=(e,t,r,n)=>{if(s[e])s[e].push(t);else{var o,i;if(void 0!==r)for(var c=document.getElementsByTagName("script"),d=0;d{o.onerror=o.onload=null,clearTimeout(p);var r=s[e];if(delete s[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(e=>e(a)),t)return t(a)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=m.bind(null,o.onerror),o.onload=m.bind(null,o.onload),i&&document.head.appendChild(o)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.j=9953,(()=>{var e;globalThis.importScripts&&(e=globalThis.location+"");var t=globalThis.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var s=t.getElementsByTagName("script");if(s.length)for(var a=s.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=s[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),u.p=e})(),(()=>{u.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={9953:0};u.f.j=(t,s)=>{var a=u.o(e,t)?e[t]:void 0;if(0!==a)if(a)s.push(a[2]);else{var r=new Promise((s,r)=>a=e[t]=[s,r]);s.push(a[2]=r);var n=u.p+u.u(t),o=new Error;u.l(n,s=>{if(u.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var r=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;o.message="Loading chunk "+t+" failed.\n("+r+": "+n+")",o.name="ChunkLoadError",o.type=r,o.request=n,a[1](o)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,s)=>{var a,r,[n,o,i]=s,c=0;if(n.some(t=>0!==e[t])){for(a in o)u.o(o,a)&&(u.m[a]=o[a]);if(i)var d=i(u)}for(t&&t(s);cu(26291));o=u.O(o)})(); +//# sourceMappingURL=user_status-menu.js.map?v=381574f8fe13ead55aef \ No newline at end of file diff --git a/dist/user_status-menu.js.map b/dist/user_status-menu.js.map index 5a4e010ad6426..e9c201ffe5fd1 100644 --- a/dist/user_status-menu.js.map +++ b/dist/user_status-menu.js.map @@ -1 +1 @@ -{"version":3,"file":"user_status-menu.js?v=4c905d814e8414ef7e8e","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?f24c","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?e2b3","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/store/userBackupStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js\"","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/heartbeat?format=json')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data.ocs.data\n}\n\nexport {\n\tsendHeartbeat,\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!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\";\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!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=93a016e0&scoped=true\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"93a016e0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Fragment',[(!_vm.inline)?_c('NcListItem',{staticClass:\"user-status-menu-item\",attrs:{\"compact\":\"\",\"name\":_vm.visibleMessage},on:{\"click\":function($event){$event.stopPropagation();return _vm.openModal.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcUserStatusIcon',{staticClass:\"user-status-icon\",attrs:{\"status\":_vm.statusType,\"aria-hidden\":\"true\"}})]},proxy:true}],null,false,2300440294)}):_c('div',[_c('NcButton',{on:{\"click\":function($event){$event.stopPropagation();return _vm.openModal.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcUserStatusIcon',{staticClass:\"user-status-icon\",attrs:{\"status\":_vm.statusType,\"aria-hidden\":\"true\"}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{attrs:{\"inline\":_vm.inline},on:{\"close\":_vm.closeModal}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService.js'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses = [...state.predefinedStatuses, status]\n\t},\n}\n\nconst getters = {\n\tstatusesHaveLoaded(state) {\n\t\treturn state.predefinedStatuses.length > 0\n\t},\n}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tdateFactory,\n} from './dateService.js'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService.js'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService.js'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Fetches the current user-status\n *\n * @param {string} userId Id of the user to fetch the status\n * @return {Promise}\n */\nconst fetchBackupStatus = async (userId) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/statuses/{userId}', { userId: '_' + userId })\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\n/**\n * Revert the automated status\n *\n * @param {string} messageId ID of the message to revert\n * @return {Promise}\n */\nconst revertToBackupStatus = async (messageId) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/revert/{messageId}', { messageId })\n\tconst response = await HttpClient.delete(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchCurrentStatus,\n\tfetchBackupStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n\trevertToBackupStatus,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tfetchBackupStatus,\n\trevertToBackupStatus,\n} from '../services/statusService.js'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadBackupStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise}\n\t */\n\tasync fetchBackupFromServer({ commit }) {\n\t\ttry {\n\t\t\tconst status = await fetchBackupStatus(getCurrentUser()?.uid)\n\t\t\tcommit('loadBackupStatusFromServer', status)\n\t\t} catch (e) {\n\t\t\t// Ignore missing user backup status\n\t\t}\n\t},\n\n\tasync revertBackupFromServer({ commit }, { messageId }) {\n\t\tconst status = await revertToBackupStatus(messageId)\n\t\tif (status) {\n\t\t\tcommit('loadBackupStatusFromServer', {})\n\t\t\tcommit('loadStatusFromServer', status)\n\t\t\temit('user_status:status.updated', {\n\t\t\t\tstatus: status.status,\n\t\t\t\tmessage: status.message,\n\t\t\t\ticon: status.icon,\n\t\t\t\tclearAt: status.clearAt,\n\t\t\t\tuserId: getCurrentUser()?.uid,\n\t\t\t})\n\t\t}\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses.js'\nimport userStatus from './userStatus.js'\nimport userBackupStatus from './userBackupStatus.js'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t\tuserBackupStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getCSPNonce } from '@nextcloud/auth'\nimport { subscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\n\nimport UserStatus from './UserStatus.vue'\nimport store from './store/index.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce()\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst mountPoint = document.getElementById('user_status-menu-entry')\n\nconst mountMenuEntry = () => {\n\tconst mountPoint = document.getElementById('user_status-menu-entry')\n\t// eslint-disable-next-line no-new\n\tnew Vue({\n\t\tel: mountPoint,\n\t\trender: h => h(UserStatus),\n\t\tstore,\n\t})\n}\n\nif (mountPoint) {\n\tmountMenuEntry()\n} else {\n\tsubscribe('core:user-menu:mounted', mountMenuEntry)\n}\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\tcase 'busy':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.user-status-icon[data-v-93a016e0]{width:20px;height:20px;margin:calc((var(--default-clickable-area) - 20px)/2);opacity:1 !important;background-size:20px;vertical-align:middle !important}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,UAAA,CACA,WAAA,CACA,qDAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA\",\"sourcesContent\":[\"\\n.user-status-icon {\\n\\twidth: 20px;\\n\\theight: 20px;\\n\\tmargin: calc((var(--default-clickable-area) - 20px) / 2); // 20px icon size\\n\\topacity: 1 !important;\\n\\tbackground-size: 20px;\\n\\tvertical-align: middle !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + (chunkId === 5133 ? \"user-status-modal\" : chunkId) + \"-\" + chunkId + \".js?v=\" + {\"3278\":\"c97a360506d6ebb6afd2\",\"3564\":\"1f97cb34040f17de0c20\",\"5133\":\"3ebaabbf50ec7fc6bf52\",\"7471\":\"428f6893ae52e7aca00b\",\"8790\":\"9fd8f6ad2d5d29ec25ad\"}[chunkId] + \"\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9953;","var scriptUrl;\nif (globalThis.importScripts) scriptUrl = globalThis.location + \"\";\nvar document = globalThis.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9953: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunknextcloud\"] = globalThis[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(26291)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","name","components","Fragment","NcButton","NcListItem","NcUserStatusIcon","SetStatusModal","mixins","OnlineStatusMixin","props","inline","type","Boolean","default","data","heartbeatInterval","isAway","isModalOpen","mouseMoveListener","setAwayTimeout","mounted","$store","dispatch","OC","config","session_keepalive","setInterval","_backgroundHeartbeat","bind","debounce","wasAway","clearTimeout","setTimeout","window","addEventListener","capture","passive","subscribe","handleUserStatusUpdated","beforeDestroy","removeEventListener","clearInterval","unsubscribe","methods","openModal","closeModal","status","async","url","generateOcsUrl","HttpClient","put","ocs","sendHeartbeat","userId","error","console","debug","response","state","getCurrentUser","uid","icon","message","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","this","_c","_self","on","$event","stopPropagation","apply","arguments","scopedSlots","_u","key","fn","staticClass","attrs","statusType","proxy","_v","_s","visibleMessage","_e","predefinedStatuses","mutations","addPredefinedStatus","getters","statusesHaveLoaded","length","actions","loadAllPredefinedStatuses","commit","statuses","get","fetchAllPredefinedStatuses","getTimestampForClearAt","clearAt","date","dateFactory","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","messageIsPredefined","messageId","setStatus","setPredefinedMessage","setCustomMessage","clearMessage","loadStatusFromServer","emit","setStatusFromObject","rootState","resolvedClearAt","find","id","statusIcon","delete","reFetchStatusFromServer","fetchCurrentStatus","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","loadBackupStatusFromServer","fetchBackupFromServer","fetchBackupStatus","e","revertBackupFromServer","revertToBackupStatus","Vue","use","Vuex","Store","modules","userStatus","userBackupStatus","strict","__webpack_nonce__","getCSPNonce","prototype","t","$t","mountMenuEntry","mountPoint","document","getElementById","el","render","h","UserStatus","store","OCA","Dashboard","registerStatus","extend","propsData","$mount","computed","mapState","customIcon","customMessage","changeStatus","err","showError","Date","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","chunkId","Promise","all","reduce","promises","u","obj","prop","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","timeout","doneFns","parentNode","removeChild","forEach","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","globalThis","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"user_status-menu.js?v=381574f8fe13ead55aef","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?f24c","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?e2b3","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/store/userBackupStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js\"","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/heartbeat?format=json')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data.ocs.data\n}\n\nexport {\n\tsendHeartbeat,\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!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\";\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!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=93a016e0&scoped=true\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=93a016e0&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"93a016e0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Fragment',[(!_vm.inline)?_c('NcListItem',{staticClass:\"user-status-menu-item\",attrs:{\"compact\":\"\",\"name\":_vm.visibleMessage},on:{\"click\":function($event){$event.stopPropagation();return _vm.openModal.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcUserStatusIcon',{staticClass:\"user-status-icon\",attrs:{\"status\":_vm.statusType,\"aria-hidden\":\"true\"}})]},proxy:true}],null,false,2300440294)}):_c('div',[_c('NcButton',{on:{\"click\":function($event){$event.stopPropagation();return _vm.openModal.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcUserStatusIcon',{staticClass:\"user-status-icon\",attrs:{\"status\":_vm.statusType,\"aria-hidden\":\"true\"}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{attrs:{\"inline\":_vm.inline},on:{\"close\":_vm.closeModal}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService.js'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses = [...state.predefinedStatuses, status]\n\t},\n}\n\nconst getters = {\n\tstatusesHaveLoaded(state) {\n\t\treturn state.predefinedStatuses.length > 0\n\t},\n}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tdateFactory,\n} from './dateService.js'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService.js'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService.js'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Fetches the current user-status\n *\n * @param {string} userId Id of the user to fetch the status\n * @return {Promise}\n */\nconst fetchBackupStatus = async (userId) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/statuses/{userId}', { userId: '_' + userId })\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\n/**\n * Revert the automated status\n *\n * @param {string} messageId ID of the message to revert\n * @return {Promise}\n */\nconst revertToBackupStatus = async (messageId) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/revert/{messageId}', { messageId })\n\tconst response = await HttpClient.delete(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchCurrentStatus,\n\tfetchBackupStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n\trevertToBackupStatus,\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tfetchBackupStatus,\n\trevertToBackupStatus,\n} from '../services/statusService.js'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadBackupStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise}\n\t */\n\tasync fetchBackupFromServer({ commit }) {\n\t\ttry {\n\t\t\tconst status = await fetchBackupStatus(getCurrentUser()?.uid)\n\t\t\tcommit('loadBackupStatusFromServer', status)\n\t\t} catch (e) {\n\t\t\t// Ignore missing user backup status\n\t\t}\n\t},\n\n\tasync revertBackupFromServer({ commit }, { messageId }) {\n\t\tconst status = await revertToBackupStatus(messageId)\n\t\tif (status) {\n\t\t\tcommit('loadBackupStatusFromServer', {})\n\t\t\tcommit('loadStatusFromServer', status)\n\t\t\temit('user_status:status.updated', {\n\t\t\t\tstatus: status.status,\n\t\t\t\tmessage: status.message,\n\t\t\t\ticon: status.icon,\n\t\t\t\tclearAt: status.clearAt,\n\t\t\t\tuserId: getCurrentUser()?.uid,\n\t\t\t})\n\t\t}\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses.js'\nimport userStatus from './userStatus.js'\nimport userBackupStatus from './userBackupStatus.js'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t\tuserBackupStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getCSPNonce } from '@nextcloud/auth'\nimport { subscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\n\nimport UserStatus from './UserStatus.vue'\nimport store from './store/index.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce()\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst mountPoint = document.getElementById('user_status-menu-entry')\n\nconst mountMenuEntry = () => {\n\tconst mountPoint = document.getElementById('user_status-menu-entry')\n\t// eslint-disable-next-line no-new\n\tnew Vue({\n\t\tel: mountPoint,\n\t\trender: h => h(UserStatus),\n\t\tstore,\n\t})\n}\n\nif (mountPoint) {\n\tmountMenuEntry()\n} else {\n\tsubscribe('core:user-menu:mounted', mountMenuEntry)\n}\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'busy':\n\t\t\t\t\treturn this.$t('user_status', 'Busy')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.user-status-icon[data-v-93a016e0]{width:20px;height:20px;margin:calc((var(--default-clickable-area) - 20px)/2);opacity:1 !important;background-size:20px;vertical-align:middle !important}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,UAAA,CACA,WAAA,CACA,qDAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA\",\"sourcesContent\":[\"\\n.user-status-icon {\\n\\twidth: 20px;\\n\\theight: 20px;\\n\\tmargin: calc((var(--default-clickable-area) - 20px) / 2); // 20px icon size\\n\\topacity: 1 !important;\\n\\tbackground-size: 20px;\\n\\tvertical-align: middle !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + (chunkId === 5133 ? \"user-status-modal\" : chunkId) + \"-\" + chunkId + \".js?v=\" + {\"3278\":\"c97a360506d6ebb6afd2\",\"3564\":\"1f97cb34040f17de0c20\",\"5133\":\"3ebaabbf50ec7fc6bf52\",\"7471\":\"428f6893ae52e7aca00b\",\"8790\":\"9fd8f6ad2d5d29ec25ad\"}[chunkId] + \"\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9953;","var scriptUrl;\nif (globalThis.importScripts) scriptUrl = globalThis.location + \"\";\nvar document = globalThis.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9953: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunknextcloud\"] = globalThis[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(26291)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","name","components","Fragment","NcButton","NcListItem","NcUserStatusIcon","SetStatusModal","mixins","OnlineStatusMixin","props","inline","type","Boolean","default","data","heartbeatInterval","isAway","isModalOpen","mouseMoveListener","setAwayTimeout","mounted","$store","dispatch","OC","config","session_keepalive","setInterval","_backgroundHeartbeat","bind","debounce","wasAway","clearTimeout","setTimeout","window","addEventListener","capture","passive","subscribe","handleUserStatusUpdated","beforeDestroy","removeEventListener","clearInterval","unsubscribe","methods","openModal","closeModal","status","async","url","generateOcsUrl","HttpClient","put","ocs","sendHeartbeat","userId","error","console","debug","response","state","getCurrentUser","uid","icon","message","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","this","_c","_self","on","$event","stopPropagation","apply","arguments","scopedSlots","_u","key","fn","staticClass","attrs","statusType","proxy","_v","_s","visibleMessage","_e","predefinedStatuses","mutations","addPredefinedStatus","getters","statusesHaveLoaded","length","actions","loadAllPredefinedStatuses","commit","statuses","get","fetchAllPredefinedStatuses","getTimestampForClearAt","clearAt","date","dateFactory","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","messageIsPredefined","messageId","setStatus","setPredefinedMessage","setCustomMessage","clearMessage","loadStatusFromServer","emit","setStatusFromObject","rootState","resolvedClearAt","find","id","statusIcon","delete","reFetchStatusFromServer","fetchCurrentStatus","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","loadBackupStatusFromServer","fetchBackupFromServer","fetchBackupStatus","e","revertBackupFromServer","revertToBackupStatus","Vue","use","Vuex","Store","modules","userStatus","userBackupStatus","strict","__webpack_nonce__","getCSPNonce","prototype","t","$t","mountMenuEntry","mountPoint","document","getElementById","el","render","h","UserStatus","store","OCA","Dashboard","registerStatus","extend","propsData","$mount","computed","mapState","customIcon","customMessage","changeStatus","err","showError","Date","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","chunkId","Promise","all","reduce","promises","u","obj","prop","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","timeout","doneFns","parentNode","removeChild","forEach","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","globalThis","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file