From fac18897766efc5aa5c482c189975f7a1315429a Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Fri, 13 Oct 2017 06:40:53 +0200 Subject: [PATCH] Oct 11 fxes (#9181) * Added unqequip for hair styles * Added quest rewards to quest completed modal * Fixed display of task approvals * Ensured the user is welcomed before showing login notification * Added new message modal * fixed manager functions * Fixed group edit on group plan --- .../achievements/questCompleted.vue | 12 +++- website/client/components/creatorIntro.vue | 2 + .../client/components/group-plans/index.vue | 3 + .../group-plans/taskInformation.vue | 4 +- website/client/components/groups/index.vue | 2 - .../client/components/groups/membersModal.vue | 31 +++++---- website/client/components/notifications.vue | 6 +- .../components/private-message-modal.vue | 63 ------------------- .../shops/quests/questDialogDrops.vue | 2 + website/client/components/userMenu/inbox.vue | 50 +++++++++++---- .../client/components/userMenu/profile.vue | 9 ++- website/client/store/index.js | 1 - website/common/locales/en/groups.json | 4 +- website/common/locales/en/messages.json | 3 +- 14 files changed, 83 insertions(+), 109 deletions(-) delete mode 100644 website/client/components/private-message-modal.vue diff --git a/website/client/components/achievements/questCompleted.vue b/website/client/components/achievements/questCompleted.vue index 8b1d11e5c1..86d2cd6378 100644 --- a/website/client/components/achievements/questCompleted.vue +++ b/website/client/components/achievements/questCompleted.vue @@ -3,8 +3,10 @@ size='md', :hide-footer="true") .modal-body.text-center .quest(:class='`quest_${user.party.quest.completed}`') - p(v-html='this.questData.completion()') - .quest-rewards(key='user.party.quest.completed', header-participant="$t('youReceived')", header-quest-owner="$t('questOwnerReceived')") + p(v-html='questData.completion()') + .quest-rewards.text-center + h3 {{ $t('youReceived') }} + questDialogDrops(:item="questData") .modal-footer button.btn.btn-primary(@click='setQuestCompleted()') {{ $t('ok') }} @@ -13,11 +15,16 @@ .quest { margin: 0 auto; } + + .quest-rewards .questRewards { + margin: 0 auto; + } diff --git a/website/client/components/shops/quests/questDialogDrops.vue b/website/client/components/shops/quests/questDialogDrops.vue index 270f1fe2ad..703966456e 100644 --- a/website/client/components/shops/quests/questDialogDrops.vue +++ b/website/client/components/shops/quests/questDialogDrops.vue @@ -100,6 +100,8 @@ return drop.text(); }, getDropsList (drops, ownerOnly) { + if (!drops) return []; + return drops.filter(function dropsList (drop) { if (ownerOnly) { return drop.onlyOwner; diff --git a/website/client/components/userMenu/inbox.vue b/website/client/components/userMenu/inbox.vue index acc31d3f12..cbdacfe976 100644 --- a/website/client/components/userMenu/inbox.vue +++ b/website/client/components/userMenu/inbox.vue @@ -26,21 +26,23 @@ p(v-once) {{$t('emptyMessagesLine2')}} .conversations(v-if='filtersConversations.length > 0') .conversation(v-for='conversation in filtersConversations', @click='selectConversation(conversation.key)', - :class="{active: selectedConversation === conversation.key}") + :class="{active: selectedConversation.key === conversation.key}") div span(:class="userLevelStyle(conversation)") {{conversation.name}} span.timeago {{conversation.date | timeAgo}} div {{conversation.lastMessageText.substring(0, 30)}} .col-8.messages - .empty-messages.text-center(v-if='activeChat.length === 0') + .empty-messages.text-center(v-if='activeChat.length === 0 && !selectedConversation.key') .svg-icon.envelope(v-html="icons.messageIcon") h4(v-once) Nothing Here Yet p(v-once) Select a conversation on the left + .empty-messages.text-center(v-if='activeChat.length === 0 && selectedConversation.key') + p {{ $t('beginningOfConversation', {userName: selectedConversation.name})}} chat-message.message-scroll(:chat.sync='activeChat', :inbox='true', ref="chatscroll") // @TODO: Implement new message header here when we fix the above - .new-message-row(v-if='selectedConversation') + .new-message-row(v-if='selectedConversation.key') textarea(v-model='newMessage') button.btn.btn-secondary(@click='sendPrivateMessage()') Send @@ -175,6 +177,33 @@ export default { bFormInput, chatMessage, }, + mounted () { + this.$root.$on('habitica::new-inbox-message', (data) => { + this.$root.$emit('show::modal', 'inbox-modal'); + + const conversation = this.conversations.find(convo => { + return convo.key === data.userIdToMessage; + }); + + if (conversation) { + this.selectConversation(data.userIdToMessage); + return; + } + + const newMessage = { + text: '', + timestamp: new Date(), + user: data.userName, + uuid: data.userIdToMessage, + id: '', + }; + this.$set(this.user.inbox.messages, data.userIdToMessage, newMessage); + this.selectConversation(data.userIdToMessage); + }); + }, + destroyed () { + this.$root.$off('habitica::new-inbox-message'); + }, data () { return { icons: Object.freeze({ @@ -182,7 +211,7 @@ export default { svgClose, }), displayCreate: true, - selectedConversation: '', + selectedConversation: {}, search: '', newMessage: '', activeChat: [], @@ -222,7 +251,7 @@ export default { newMessage.uuid = this.user._id; } - conversations[userId].messages.push(newMessage); + if (newMessage.text) conversations[userId].messages.push(newMessage); conversations[userId].lastMessageText = message.text; conversations[userId].date = message.timestamp; } @@ -234,10 +263,6 @@ export default { return conversations; }, - currentMessages () { - if (!this.selectedConversation) return; - return this.conversations[this.selectedConversation].messages; - }, filtersConversations () { if (!this.search) return this.conversations; return filter(this.conversations, (conversation) => { @@ -250,12 +275,11 @@ export default { this.displayCreate = !this.displayCreate; }, selectConversation (key) { - this.selectedConversation = key; - let convoFound = this.conversations.find((conversation) => { return conversation.key === key; }); + this.selectedConversation = convoFound; let activeChat = convoFound.messages; activeChat = sortBy(activeChat, [(o) => { @@ -273,11 +297,11 @@ export default { if (!this.newMessage) return; let convoFound = this.conversations.find((conversation) => { - return conversation.key === this.selectedConversation; + return conversation.key === this.selectedConversation.key; }); this.$store.dispatch('members:sendPrivateMessage', { - toUserId: this.selectedConversation, + toUserId: this.selectedConversation.key, message: this.newMessage, }); diff --git a/website/client/components/userMenu/profile.vue b/website/client/components/userMenu/profile.vue index 94d80efa90..f2585a206a 100644 --- a/website/client/components/userMenu/profile.vue +++ b/website/client/components/userMenu/profile.vue @@ -279,7 +279,6 @@ div .points {{$t('pts')}} .col-4 .up(v-if='user.stats.points', @click='allocate(stat)') - private-message-modal send-gems-modal(:userReceivingGems='userReceivingGems') @@ -559,7 +558,6 @@ import allocate from '../../../common/script/ops/allocate'; import MemberDetails from '../memberDetails'; import bPopover from 'bootstrap-vue/lib/components/popover'; -import privateMessageModal from 'client/components/private-message-modal'; import sendGemsModal from 'client/components/payments/sendGemsModal'; import markdown from 'client/directives/markdown'; import toggleSwitch from 'client/components/ui/toggleSwitch'; @@ -580,7 +578,6 @@ export default { }, components: { bModal, - privateMessageModal, sendGemsModal, MemberDetails, toggleSwitch, @@ -710,8 +707,10 @@ export default { this.$store.state.profileOptions.startingPage = page; }, sendMessage () { - this.$store.state.userIdToMessage = this.user._id; - this.$root.$emit('show::modal', 'private-message'); + this.$root.$emit('habitica::new-inbox-message', { + userIdToMessage: this.user._id, + userName: this.user.profile.name, + }); }, getProgressDisplay () { // let currentLoginDay = Content.loginIncentives[this.user.loginIncentives]; diff --git a/website/client/store/index.js b/website/client/store/index.js index 83828c8472..c9cb5465a4 100644 --- a/website/client/store/index.js +++ b/website/client/store/index.js @@ -132,7 +132,6 @@ export default function () { upgradingGroup: {}, notificationStore: [], modalStack: [], - userIdToMessage: '', brokenChallengeTask: {}, equipmentDrawerOpen: true, recentlyPurchased: {}, diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index 79c390ba2e..96e2b9771c 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -397,5 +397,7 @@ "groupTaskBoard": "Task Board", "groupInformation": "Group Information", "groupBilling": "Group Billing", - "wouldYouParticipate": "Would you like to participate?" + "wouldYouParticipate": "Would you like to participate?", + "managerAdded": "Manager added successfully", + "managerRemoved": "Manager removed successfully" } diff --git a/website/common/locales/en/messages.json b/website/common/locales/en/messages.json index 793a4c4595..2bef686376 100644 --- a/website/common/locales/en/messages.json +++ b/website/common/locales/en/messages.json @@ -64,5 +64,6 @@ "messageUserOperationNotFound": "<%= operation %> operation not found", "messageNotificationNotFound": "Notification not found.", - "notificationsRequired": "Notification ids are required." + "notificationsRequired": "Notification ids are required.", + "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!" }