From c634eff9d5fc0535a8c11577f87cd942a5e8ca30 Mon Sep 17 00:00:00 2001 From: Joana Maia Date: Tue, 22 Aug 2023 12:27:23 +0100 Subject: [PATCH 1/3] Make timestamps consistent --- .../activity/config/filters/date/options.ts | 11 ++++--- .../config/filters/dateStarted/options.ts | 11 ++++--- .../dashboard-conversation-list.vue | 19 +++++++++++ .../components/dashboard-activities.vue | 18 +++++++++- .../dashboard/components/dashboard-count.vue | 16 +++------ .../components/dashboard-members.vue | 8 +++-- .../components/dashboard-organizations.vue | 7 ++-- .../src/modules/dashboard/dashboard.cube.js | 4 +-- .../src/modules/dashboard/store/actions.js | 33 +++++++++---------- .../apiFilterRenderer/date.filter.renderer.ts | 4 +-- 10 files changed, 82 insertions(+), 49 deletions(-) diff --git a/frontend/src/modules/activity/config/filters/date/options.ts b/frontend/src/modules/activity/config/filters/date/options.ts index 763f1e6224..dc5569a399 100644 --- a/frontend/src/modules/activity/config/filters/date/options.ts +++ b/frontend/src/modules/activity/config/filters/date/options.ts @@ -1,28 +1,29 @@ import { SelectFilterOptionGroup } from '@/shared/modules/filters/types/filterTypes/SelectFilterConfig'; import moment from 'moment'; +// Days period is -1 to include today's data const options: SelectFilterOptionGroup[] = [ { options: [ { label: 'Last 24 hours', - value: moment().subtract(24, 'hour').format('YYYY-MM-DD'), + value: moment().utc().subtract(24, 'hour').format('YYYY-MM-DD'), }, { label: 'Last 7 days', - value: moment().subtract(7, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(6, 'day').format('YYYY-MM-DD'), }, { label: 'Last 14 days', - value: moment().subtract(14, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(13, 'day').format('YYYY-MM-DD'), }, { label: 'Last 30 days', - value: moment().subtract(30, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(29, 'day').format('YYYY-MM-DD'), }, { label: 'Last 90 days', - value: moment().subtract(90, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(89, 'day').format('YYYY-MM-DD'), }, ], }, diff --git a/frontend/src/modules/conversation/config/filters/dateStarted/options.ts b/frontend/src/modules/conversation/config/filters/dateStarted/options.ts index 763f1e6224..dc5569a399 100644 --- a/frontend/src/modules/conversation/config/filters/dateStarted/options.ts +++ b/frontend/src/modules/conversation/config/filters/dateStarted/options.ts @@ -1,28 +1,29 @@ import { SelectFilterOptionGroup } from '@/shared/modules/filters/types/filterTypes/SelectFilterConfig'; import moment from 'moment'; +// Days period is -1 to include today's data const options: SelectFilterOptionGroup[] = [ { options: [ { label: 'Last 24 hours', - value: moment().subtract(24, 'hour').format('YYYY-MM-DD'), + value: moment().utc().subtract(24, 'hour').format('YYYY-MM-DD'), }, { label: 'Last 7 days', - value: moment().subtract(7, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(6, 'day').format('YYYY-MM-DD'), }, { label: 'Last 14 days', - value: moment().subtract(14, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(13, 'day').format('YYYY-MM-DD'), }, { label: 'Last 30 days', - value: moment().subtract(30, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(29, 'day').format('YYYY-MM-DD'), }, { label: 'Last 90 days', - value: moment().subtract(90, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(89, 'day').format('YYYY-MM-DD'), }, ], }, diff --git a/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue b/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue index 834ea5dc7d..f9ceec305d 100644 --- a/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue +++ b/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue @@ -37,6 +37,7 @@ :to="{ name: 'activity', hash: '#conversation', + query: filterQueryService().setQuery(allConversationsFilter), }" class="text-red font-medium text-center text-xs leading-5" > @@ -57,6 +58,8 @@ import { mapGetters } from 'vuex'; import AppDashboardEmptyState from '@/modules/dashboard/components/dashboard-empty-state.vue'; import AppDashboardConversationItem from '@/modules/dashboard/components/conversations/dashboard-conversation-item.vue'; import AppConversationDrawer from '@/modules/conversation/components/conversation-drawer.vue'; +import { filterQueryService } from '@/shared/modules/filters/services/filter-query.service'; +import moment from 'moment'; export default { name: 'AppDashboardConversationList', @@ -68,6 +71,7 @@ export default { data() { return { conversationId: null, + filterQueryService, }; }, computed: { @@ -75,6 +79,21 @@ export default { 'trendingConversations', 'conversations', ]), + allConversationsFilter() { + return { + search: '', + relation: 'and', + order: { + prop: 'activityCount', + order: 'descending', + }, + lastActivityDate: { + operator: 'gt', + value: moment().utc().subtract(7, 'day').format('YYYY-MM-DD'), + include: true, + }, + }; + }, }, methods: { refreshConversations() { diff --git a/frontend/src/modules/dashboard/components/dashboard-activities.vue b/frontend/src/modules/dashboard/components/dashboard-activities.vue index a4b8d96e11..fbba92a2c1 100644 --- a/frontend/src/modules/dashboard/components/dashboard-activities.vue +++ b/frontend/src/modules/dashboard/components/dashboard-activities.vue @@ -5,7 +5,11 @@ title="Activities" :total-loading="activities.loading" :total="activities.total" - :route="{ name: 'activity', hash: '#activity' }" + :route="{ + name: 'activity', + hash: '#activity', + query: filterQueryService().setQuery(allActivitiesFilter), + }" button-title="All activities" report-name="Activities report" /> @@ -87,6 +91,7 @@ import AppDashboardConversationList from '@/modules/dashboard/components/convers import AppDashboardActivityList from '@/modules/dashboard/components/activity/dashboard-activity-list.vue'; import AppDashboardActivitySentiment from '@/modules/dashboard/components/activity/dashboard-activity-sentiment.vue'; import AppDashboardCount from '@/modules/dashboard/components/dashboard-count.vue'; +import { filterQueryService } from '@/shared/modules/filters/services/filter-query.service'; export default { name: 'AppDashboardActivities', @@ -104,6 +109,7 @@ export default { tab: 'trending', activitiesChart, activitiesCount, + filterQueryService, }; }, computed: { @@ -118,6 +124,16 @@ export default { }, ]; }, + allActivitiesFilter() { + return { + search: '', + relation: 'and', + order: { + prop: 'timestamp', + order: 'descending', + }, + }; + }, }, }; diff --git a/frontend/src/modules/dashboard/components/dashboard-count.vue b/frontend/src/modules/dashboard/components/dashboard-count.vue index bf77a7c22f..42b46336a4 100644 --- a/frontend/src/modules/dashboard/components/dashboard-count.vue +++ b/frontend/src/modules/dashboard/components/dashboard-count.vue @@ -96,9 +96,7 @@ export default { .utc() .startOf('day') .subtract( - this.period.granularity === 'day' - ? this.period.value - 1 - : this.period.value, + this.period.value - 1, this.period.granularity, ) .toISOString(), @@ -111,17 +109,13 @@ export default { .utc() .startOf('day') .subtract( - this.period.granularity === 'day' - ? this.period.value - 1 - : this.period.value, + this.period.value - 1, this.period.granularity, ) .subtract(1, 'ms') .startOf('day') .subtract( - this.period.granularity === 'day' - ? this.period.value - 1 - : this.period.value, + this.period.value - 1, this.period.granularity, ) .toISOString(), @@ -129,9 +123,7 @@ export default { .utc() .startOf('day') .subtract( - this.period.granularity === 'day' - ? this.period.value - 1 - : this.period.value, + this.period.value - 1, this.period.granularity, ) .subtract(1, 'ms') diff --git a/frontend/src/modules/dashboard/components/dashboard-members.vue b/frontend/src/modules/dashboard/components/dashboard-members.vue index 3dc6f0e323..a78b6ca5c5 100644 --- a/frontend/src/modules/dashboard/components/dashboard-members.vue +++ b/frontend/src/modules/dashboard/components/dashboard-members.vue @@ -5,7 +5,10 @@ title="Members" :total-loading="members.loadingRecent" :total="members.total" - :route="{ name: 'member' }" + :route="{ + name: 'member', + query: filterQueryService().setQuery(allMembers.filter), + }" button-title="All members" report-name="Members report" /> @@ -93,7 +96,7 @@ :to="{ name: 'member', query: filterQueryService().setQuery({ - ...newAndActive.filter, + ...allMembers.filter, joinedDate: { value: periodStartDate, operator: 'gt', @@ -251,6 +254,7 @@ export default { ]), periodStartDate() { return moment() + .utc() .subtract(this.period.value, 'day') .format('YYYY-MM-DD'); }, diff --git a/frontend/src/modules/dashboard/components/dashboard-organizations.vue b/frontend/src/modules/dashboard/components/dashboard-organizations.vue index 9883d1f1a0..6b9a478d1e 100644 --- a/frontend/src/modules/dashboard/components/dashboard-organizations.vue +++ b/frontend/src/modules/dashboard/components/dashboard-organizations.vue @@ -5,7 +5,10 @@ title="Organizations" :total-loading="organizations.loadingRecent" :total="organizations.total" - :route="{ name: 'organization' }" + :route="{ + name: 'organization', + query: filterQueryService().setQuery(allOrganizations.filter), + }" button-title="All organizations" report-name="Organizations report" /> @@ -76,7 +79,7 @@ :to="{ name: 'organization', query: filterQueryService().setQuery({ - ...newAndActive.filter, + ...allOrganizations.filter, joinedDate: { value: periodStartDate, operator: 'gt', diff --git a/frontend/src/modules/dashboard/dashboard.cube.js b/frontend/src/modules/dashboard/dashboard.cube.js index e303d4104a..22d269e080 100644 --- a/frontend/src/modules/dashboard/dashboard.cube.js +++ b/frontend/src/modules/dashboard/dashboard.cube.js @@ -28,9 +28,7 @@ export function dateRange(period) { const end = moment().utc().endOf('day'); const start = moment() .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .utc() diff --git a/frontend/src/modules/dashboard/store/actions.js b/frontend/src/modules/dashboard/store/actions.js index 9da6ea91b8..c155df0713 100644 --- a/frontend/src/modules/dashboard/store/actions.js +++ b/frontend/src/modules/dashboard/store/actions.js @@ -39,17 +39,17 @@ export default { async getTrendingConversations({ commit, state }) { state.conversations.loading = true; const { platform, period } = state.filters; + return ConversationService.query({ filter: { and: [ { lastActive: { gte: moment() + .utc() .startOf('day') .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .toISOString(), @@ -104,6 +104,7 @@ export default { async getRecentActivities({ commit, state }) { state.activities.loading = true; const { platform, period } = state.filters; + return ActivityService.query({ filter: { ...DEFAULT_ACTIVITY_FILTERS, @@ -111,11 +112,10 @@ export default { { timestamp: { gte: moment() + .utc() .startOf('day') .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .toISOString(), @@ -191,9 +191,10 @@ export default { activityIsContribution: null, activityTimestampFrom: moment() .utc() - .subtract(period.value, period.granularity) + .subtract(period.value - 1, period.granularity) + .startOf('day') .toISOString(), - activityTimestampTo: moment().utc(), + activityTimestampTo: moment().utc().endOf('day'), orderBy: 'activityCount_DESC', offset: 0, limit: 5, @@ -211,6 +212,7 @@ export default { async getRecentMembers({ commit, state }) { state.members.loadingRecent = true; const { platform, period } = state.filters; + return MemberService.listMembers({ filter: { and: [ @@ -218,11 +220,10 @@ export default { { joinedAt: { gte: moment() + .utc() .startOf('day') .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .toISOString(), @@ -304,11 +305,10 @@ export default { { lastActive: { gte: moment() + .utc() .startOf('day') .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .toISOString(), @@ -349,11 +349,10 @@ export default { { joinedAt: { gte: moment() + .utc() .startOf('day') .subtract( - period.granularity === 'day' - ? period.value - 1 - : period.value, + period.value - 1, period.granularity, ) .toISOString(), diff --git a/frontend/src/shared/modules/filters/config/apiFilterRenderer/date.filter.renderer.ts b/frontend/src/shared/modules/filters/config/apiFilterRenderer/date.filter.renderer.ts index 1fb7f699d5..19c98e0f3e 100644 --- a/frontend/src/shared/modules/filters/config/apiFilterRenderer/date.filter.renderer.ts +++ b/frontend/src/shared/modules/filters/config/apiFilterRenderer/date.filter.renderer.ts @@ -21,8 +21,8 @@ export const dateApiFilterRenderer = (property: string, { value, operator }: Dat filter = { [property]: { between: [ - moment(value).startOf('day').toISOString(), - moment(value).endOf('day').toISOString(), + moment.utc(value).startOf('day').toISOString(), + moment.utc(value).endOf('day').toISOString(), ], }, }; From 840cefb5dd9d27fcff830802b8028c04199380d2 Mon Sep 17 00:00:00 2001 From: Joana Maia Date: Tue, 22 Aug 2023 12:37:49 +0100 Subject: [PATCH 2/3] Fix 7 day period count --- .../components/conversations/dashboard-conversation-list.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue b/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue index f9ceec305d..80f80a9df7 100644 --- a/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue +++ b/frontend/src/modules/dashboard/components/conversations/dashboard-conversation-list.vue @@ -89,7 +89,7 @@ export default { }, lastActivityDate: { operator: 'gt', - value: moment().utc().subtract(7, 'day').format('YYYY-MM-DD'), + value: moment().utc().subtract(6, 'day').format('YYYY-MM-DD'), include: true, }, }; From f365c5ff99d4a3bf2cf9dc61e8a3563518c530d8 Mon Sep 17 00:00:00 2001 From: Joana Maia Date: Tue, 22 Aug 2023 18:16:06 +0100 Subject: [PATCH 3/3] Update queries in reports --- .../activity/widget-activities-kpi.vue | 5 ++- .../activity/widget-total-activities.vue | 1 + .../member/widget-active-members-kpi.vue | 5 ++- .../member/widget-total-members.vue | 34 ++----------------- .../widget/components/shared/widget-area.vue | 11 +++++- frontend/src/modules/widget/widget-queries.js | 16 ++++----- 6 files changed, 28 insertions(+), 44 deletions(-) diff --git a/frontend/src/modules/widget/components/activity/widget-activities-kpi.vue b/frontend/src/modules/widget/components/activity/widget-activities-kpi.vue index be11cf1ba6..d381a0e5b0 100644 --- a/frontend/src/modules/widget/components/activity/widget-activities-kpi.vue +++ b/frontend/src/modules/widget/components/activity/widget-activities-kpi.vue @@ -89,7 +89,10 @@ const widgets = computed(() => [ { title: `${ACTIVITIES_KPI_WIDGET.name} today`, query: query( - ONE_DAY_PERIOD_FILTER, + { + ...ONE_DAY_PERIOD_FILTER, + value: 2, + }, DAILY_GRANULARITY_FILTER, ), period: 'day', diff --git a/frontend/src/modules/widget/components/activity/widget-total-activities.vue b/frontend/src/modules/widget/components/activity/widget-total-activities.vue index 041e62af51..8767481a4d 100644 --- a/frontend/src/modules/widget/components/activity/widget-total-activities.vue +++ b/frontend/src/modules/widget/components/activity/widget-total-activities.vue @@ -50,6 +50,7 @@ :chart-options="widgetChartOptions" :granularity="granularity" :is-grid-min-max="true" + :pivot-modifier="(pivot) => pivot.splice(0, 1)" :show-min-as-value="true" /> diff --git a/frontend/src/modules/widget/components/member/widget-active-members-kpi.vue b/frontend/src/modules/widget/components/member/widget-active-members-kpi.vue index 1144558ca6..3c4f6da507 100644 --- a/frontend/src/modules/widget/components/member/widget-active-members-kpi.vue +++ b/frontend/src/modules/widget/components/member/widget-active-members-kpi.vue @@ -130,7 +130,10 @@ const widgets = computed(() => [ { title: `${ACTIVE_MEMBERS_KPI_WIDGET.name} today`, query: query( - ONE_DAY_PERIOD_FILTER, + { + ...ONE_DAY_PERIOD_FILTER, + value: 2, + }, DAILY_GRANULARITY_FILTER, ), period: 'day', diff --git a/frontend/src/modules/widget/components/member/widget-total-members.vue b/frontend/src/modules/widget/components/member/widget-total-members.vue index 1138a9018a..85e915f90d 100644 --- a/frontend/src/modules/widget/components/member/widget-total-members.vue +++ b/frontend/src/modules/widget/components/member/widget-total-members.vue @@ -46,12 +46,13 @@
@@ -78,8 +79,6 @@