From 79381b08ccf3f24d6ce0c3bacbf5d0bd80d8b221 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:07:29 +0530 Subject: [PATCH] feat: Move timeMixin to a helper (#9799) # Pull Request Template ## Description This PR will replace the usage of `timeMixin` with `timeHelper` Fixes https://linear.app/chatwoot/issue/CW-3451/move-time-mixin-to-a-helper ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? Please refer to this issue description. https://linear.app/chatwoot/issue/CW-3451/move-time-mixin-to-a-helper ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Sojan Jose --- .../dashboard/components/ChatList.vue | 2 - .../dashboard/components/ui/TimeAgo.vue | 35 ++--- .../widgets/conversation/ConversationCard.vue | 3 +- .../widgets/conversation/bubble/Actions.vue | 6 +- .../conversation/components/GalleryView.vue | 10 +- .../dashboard/mixins/specs/time.spec.js | 128 ------------------ app/javascript/dashboard/mixins/time.js | 64 --------- .../modules/notes/components/ContactNote.vue | 14 +- .../SearchResultConversationItem.vue | 7 +- .../contacts/components/ContactsTable.vue | 14 +- .../contacts/components/TimelineCard.vue | 6 +- .../conversation/contact/ContactInfo.vue | 17 +-- .../conversation/search/PopOverSearch.vue | 7 +- .../helpcenter/components/ArticleItem.vue | 20 +-- .../dashboard/inbox/components/InboxCard.vue | 19 ++- .../components/NotificationPanelItem.vue | 14 +- .../components/NotificationTable.vue | 12 +- .../dashboard/settings/auditlogs/Index.vue | 15 +- .../dashboard/settings/automation/Index.vue | 12 +- .../settings/campaigns/CampaignCard.vue | 7 +- .../settings/reports/components/CsatTable.vue | 8 +- .../shared/helpers/specs/timeHelper.spec.js | 92 +++++++++++++ app/javascript/shared/helpers/timeHelper.js | 93 +++++++++++++ .../widget/components/AgentMessage.vue | 8 +- .../widget/components/UserMessage.vue | 6 +- 25 files changed, 305 insertions(+), 314 deletions(-) delete mode 100644 app/javascript/dashboard/mixins/specs/time.spec.js delete mode 100644 app/javascript/dashboard/mixins/time.js create mode 100644 app/javascript/shared/helpers/specs/timeHelper.spec.js create mode 100644 app/javascript/shared/helpers/timeHelper.js diff --git a/app/javascript/dashboard/components/ChatList.vue b/app/javascript/dashboard/components/ChatList.vue index ee5354027..b25ca4bbb 100644 --- a/app/javascript/dashboard/components/ChatList.vue +++ b/app/javascript/dashboard/components/ChatList.vue @@ -122,7 +122,6 @@ import ChatListHeader from './ChatListHeader.vue'; import ConversationAdvancedFilter from './widgets/conversation/ConversationAdvancedFilter.vue'; import ChatTypeTabs from './widgets/ChatTypeTabs.vue'; import ConversationItem from './ConversationItem.vue'; -import timeMixin from '../mixins/time'; import keyboardEventListenerMixins from 'shared/mixins/keyboardEventListenerMixins'; import conversationMixin from '../mixins/conversations'; import wootConstants from 'dashboard/constants/globals'; @@ -159,7 +158,6 @@ export default { VirtualList, }, mixins: [ - timeMixin, conversationMixin, keyboardEventListenerMixins, alertMixin, diff --git a/app/javascript/dashboard/components/ui/TimeAgo.vue b/app/javascript/dashboard/components/ui/TimeAgo.vue index 787c53e1e..14dcc82d5 100644 --- a/app/javascript/dashboard/components/ui/TimeAgo.vue +++ b/app/javascript/dashboard/components/ui/TimeAgo.vue @@ -5,7 +5,7 @@ delay: { show: 1500, hide: 0 }, hideOnClick: true, }" - class="text-xxs text-slate-500 dark:text-slate-500 leading-4 ml-auto hover:text-slate-900 dark:hover:text-slate-100" + class="ml-auto leading-4 text-xxs text-slate-500 dark:text-slate-500 hover:text-slate-900 dark:hover:text-slate-100" > {{ `${createdAtTime} • ${lastActivityTime}` }} @@ -16,11 +16,14 @@ const MINUTE_IN_MILLI_SECONDS = 60000; const HOUR_IN_MILLI_SECONDS = MINUTE_IN_MILLI_SECONDS * 60; const DAY_IN_MILLI_SECONDS = HOUR_IN_MILLI_SECONDS * 24; -import timeMixin from 'dashboard/mixins/time'; +import { + dynamicTime, + dateFormat, + shortTimestamp, +} from 'shared/helpers/timeHelper'; export default { name: 'TimeAgo', - mixins: [timeMixin], props: { isAutoRefreshEnabled: { type: Boolean, @@ -37,17 +40,17 @@ export default { }, data() { return { - lastActivityAtTimeAgo: this.dynamicTime(this.lastActivityTimestamp), - createdAtTimeAgo: this.dynamicTime(this.createdAtTimestamp), + lastActivityAtTimeAgo: dynamicTime(this.lastActivityTimestamp), + createdAtTimeAgo: dynamicTime(this.createdAtTimestamp), timer: null, }; }, computed: { lastActivityTime() { - return this.shortTimestamp(this.lastActivityAtTimeAgo); + return shortTimestamp(this.lastActivityAtTimeAgo); }, createdAtTime() { - return this.shortTimestamp(this.createdAtTimeAgo); + return shortTimestamp(this.createdAtTimeAgo); }, createdAt() { const createdTimeDiff = Date.now() - this.createdAtTimestamp * 1000; @@ -56,9 +59,9 @@ export default { ? `${this.$t('CHAT_LIST.CHAT_TIME_STAMP.CREATED.LATEST')} ${ this.createdAtTimeAgo }` - : `${this.$t( - 'CHAT_LIST.CHAT_TIME_STAMP.CREATED.OLDEST' - )} ${this.dateFormat(this.createdAtTimestamp)}`; + : `${this.$t('CHAT_LIST.CHAT_TIME_STAMP.CREATED.OLDEST')} ${dateFormat( + this.createdAtTimestamp + )}`; }, lastActivity() { const lastActivityTimeDiff = @@ -70,7 +73,7 @@ export default { }` : `${this.$t( 'CHAT_LIST.CHAT_TIME_STAMP.LAST_ACTIVITY.NOT_ACTIVE' - )} ${this.dateFormat(this.lastActivityTimestamp)}`; + )} ${dateFormat(this.lastActivityTimestamp)}`; }, tooltipText() { return `${this.createdAt} @@ -79,10 +82,10 @@ export default { }, watch: { lastActivityTimestamp() { - this.lastActivityAtTimeAgo = this.dynamicTime(this.lastActivityTimestamp); + this.lastActivityAtTimeAgo = dynamicTime(this.lastActivityTimestamp); }, createdAtTimestamp() { - this.createdAtTimeAgo = this.dynamicTime(this.createdAtTimestamp); + this.createdAtTimeAgo = dynamicTime(this.createdAtTimestamp); }, }, mounted() { @@ -96,10 +99,8 @@ export default { methods: { createTimer() { this.timer = setTimeout(() => { - this.lastActivityAtTimeAgo = this.dynamicTime( - this.lastActivityTimestamp - ); - this.createdAtTimeAgo = this.dynamicTime(this.createdAtTimestamp); + this.lastActivityAtTimeAgo = dynamicTime(this.lastActivityTimestamp); + this.createdAtTimeAgo = dynamicTime(this.createdAtTimestamp); this.createTimer(); }, this.refreshTime()); }, diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue index 777c9fdcd..944ac369e 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue @@ -120,7 +120,6 @@ import { mapGetters } from 'vuex'; import Thumbnail from '../Thumbnail.vue'; import MessagePreview from './MessagePreview.vue'; import conversationMixin from '../../../mixins/conversations'; -import timeMixin from '../../../mixins/time'; import router from '../../../routes'; import { frontendURL, conversationUrl } from '../../../helper/URLHelper'; import InboxName from '../InboxName.vue'; @@ -144,7 +143,7 @@ export default { SLACardLabel, }, - mixins: [inboxMixin, timeMixin, conversationMixin, alertMixin], + mixins: [inboxMixin, conversationMixin, alertMixin], props: { activeLabel: { type: String, diff --git a/app/javascript/dashboard/components/widgets/conversation/bubble/Actions.vue b/app/javascript/dashboard/components/widgets/conversation/bubble/Actions.vue index 416af5d06..b7b8ce2e5 100644 --- a/app/javascript/dashboard/components/widgets/conversation/bubble/Actions.vue +++ b/app/javascript/dashboard/components/widgets/conversation/bubble/Actions.vue @@ -77,10 +77,10 @@ import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages'; import inboxMixin from 'shared/mixins/inboxMixin'; import { mapGetters } from 'vuex'; -import timeMixin from '../../../../mixins/time'; +import { messageTimestamp } from 'shared/helpers/timeHelper'; export default { - mixins: [inboxMixin, timeMixin], + mixins: [inboxMixin], props: { sender: { type: Object, @@ -159,7 +159,7 @@ export default { return MESSAGE_STATUS.SENT === this.messageStatus; }, readableTime() { - return this.messageTimestamp(this.createdAt, 'LLL d, h:mm a'); + return messageTimestamp(this.createdAt, 'LLL d, h:mm a'); }, screenName() { const { additional_attributes: additionalAttributes = {} } = diff --git a/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue b/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue index 08f77be9a..8684134ca 100644 --- a/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue +++ b/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue @@ -12,7 +12,7 @@ @click="onClose" >
-
+
@@ -182,7 +182,7 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/auditlogs/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/auditlogs/Index.vue index 709d70b25..414ea7911 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/auditlogs/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/auditlogs/Index.vue @@ -1,11 +1,11 @@