diff options
Diffstat (limited to 'apps/user_status/src/mixins/OnlineStatusMixin.js')
-rw-r--r-- | apps/user_status/src/mixins/OnlineStatusMixin.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/apps/user_status/src/mixins/OnlineStatusMixin.js b/apps/user_status/src/mixins/OnlineStatusMixin.js new file mode 100644 index 00000000000..5670eb4dc06 --- /dev/null +++ b/apps/user_status/src/mixins/OnlineStatusMixin.js @@ -0,0 +1,71 @@ +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { mapState } from 'vuex' +import { showError } from '@nextcloud/dialogs' + +export default { + computed: { + ...mapState({ + statusType: state => state.userStatus.status, + statusIsUserDefined: state => state.userStatus.statusIsUserDefined, + customIcon: state => state.userStatus.icon, + customMessage: state => state.userStatus.message, + }), + + /** + * The message displayed in the top right corner + * + * @return {string} + */ + 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: { + /** + * Changes the user-status + * + * @param {string} statusType (online / away / dnd / invisible) + */ + async changeStatus(statusType) { + try { + await this.$store.dispatch('setStatus', { statusType }) + } catch (err) { + showError(this.$t('user_status', 'There was an error saving the new status')) + console.debug(err) + } + }, + }, +} |