From e6dc50a2221d73d1257a96de11ad2e3fe134df56 Mon Sep 17 00:00:00 2001 From: Gasper Grom Date: Tue, 6 Jun 2023 15:44:29 +0200 Subject: [PATCH 1/5] Activity & Conversation filters --- frontend/components.d.ts | 2 +- .../src/modules/activity/activity-service.js | 19 +++ .../activity/components/activity-list.vue | 101 ++++++------- .../activityType/ActivityTypeFilter.vue | 40 ++++- .../config/filters/activityType/config.ts | 21 ++- .../config/filters/channel/ChannelFilter.vue | 42 +++++- .../activity/config/filters/channel/config.ts | 19 ++- .../activity/config/filters/date/config.ts | 21 ++- .../modules/activity/config/filters/main.ts | 14 ++ .../activity/config/filters/member/config.ts | 10 +- .../config/filters/platform/config.ts | 23 ++- .../config/filters/sentiment/config.ts | 25 +++- .../activity/pages/activity-list-page.vue | 106 ++++++-------- .../modules/activity/store/pinia/actions.ts | 21 +++ .../modules/activity/store/pinia/getters.ts | 2 + .../src/modules/activity/store/pinia/index.ts | 13 ++ .../src/modules/activity/store/pinia/state.ts | 26 ++++ .../components/layout/auth-layout-side.vue | 2 +- .../components/conversation-list.vue | 137 +++++++----------- .../config/filters/channel/ChannelFilter.vue | 49 +++++++ .../config/filters/channel/config.ts | 30 ++++ .../config/filters/dateStarted/config.ts | 31 ++++ .../config/filters/dateStarted/options.ts | 31 ++++ .../config/filters/lastActivityDate/config.ts | 24 +++ .../conversation/config/filters/main.ts | 27 ++++ .../config/filters/noOfActivities/config.ts | 24 +++ .../config/filters/platform/config.ts | 44 ++++++ .../conversation/conversation-service.js | 17 +++ .../src/modules/conversation/store/actions.ts | 21 +++ .../src/modules/conversation/store/getters.ts | 2 + .../src/modules/conversation/store/index.ts | 13 ++ .../src/modules/conversation/store/state.ts | 31 ++++ .../modules/filters/components/Filter.vue | 5 +- .../multiselect/MultiSelectTagsFilter.vue | 70 +++++---- .../modules/filters/types/FilterConfig.ts | 2 +- 35 files changed, 772 insertions(+), 293 deletions(-) create mode 100644 frontend/src/modules/activity/store/pinia/actions.ts create mode 100644 frontend/src/modules/activity/store/pinia/getters.ts create mode 100644 frontend/src/modules/activity/store/pinia/index.ts create mode 100644 frontend/src/modules/activity/store/pinia/state.ts create mode 100644 frontend/src/modules/conversation/config/filters/channel/ChannelFilter.vue create mode 100644 frontend/src/modules/conversation/config/filters/channel/config.ts create mode 100644 frontend/src/modules/conversation/config/filters/dateStarted/config.ts create mode 100644 frontend/src/modules/conversation/config/filters/dateStarted/options.ts create mode 100644 frontend/src/modules/conversation/config/filters/lastActivityDate/config.ts create mode 100644 frontend/src/modules/conversation/config/filters/main.ts create mode 100644 frontend/src/modules/conversation/config/filters/noOfActivities/config.ts create mode 100644 frontend/src/modules/conversation/config/filters/platform/config.ts create mode 100644 frontend/src/modules/conversation/store/actions.ts create mode 100644 frontend/src/modules/conversation/store/getters.ts create mode 100644 frontend/src/modules/conversation/store/index.ts create mode 100644 frontend/src/modules/conversation/store/state.ts diff --git a/frontend/components.d.ts b/frontend/components.d.ts index adcc186b5e..a4a0d738ae 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -13,13 +13,13 @@ declare module '@vue/runtime-core' { ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElButton: typeof import('element-plus/es')['ElButton'] ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] + ElCard: typeof import('element-plus/es')['ElCard'] ElCarousel: typeof import('element-plus/es')['ElCarousel'] ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCol: typeof import('element-plus/es')['ElCol'] ElCollapse: typeof import('element-plus/es')['ElCollapse'] ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] - ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] ElContainer: typeof import('element-plus/es')['ElContainer'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDialog: typeof import('element-plus/es')['ElDialog'] diff --git a/frontend/src/modules/activity/activity-service.js b/frontend/src/modules/activity/activity-service.js index 53f38321ae..607761656d 100644 --- a/frontend/src/modules/activity/activity-service.js +++ b/frontend/src/modules/activity/activity-service.js @@ -121,6 +121,25 @@ export class ActivityService { return response.data; } + static async listActivities( + body, + ) { + const sampleTenant = AuthCurrentTenant.getSampleTenantData(); + const tenantId = sampleTenant?.id || AuthCurrentTenant.get(); + + const response = await authAxios.post( + `/tenant/${tenantId}/activity/query`, + body, + { + headers: { + Authorization: sampleTenant?.token, + }, + }, + ); + + return response.data; + } + static async listAutocomplete(query, limit) { const params = { query, diff --git a/frontend/src/modules/activity/components/activity-list.vue b/frontend/src/modules/activity/components/activity-list.vue index e0d2dce792..8598a9ce9c 100644 --- a/frontend/src/modules/activity/components/activity-list.vue +++ b/frontend/src/modules/activity/components/activity-list.vue @@ -1,5 +1,12 @@ - diff --git a/frontend/src/modules/activity/store/pinia/actions.ts b/frontend/src/modules/activity/store/pinia/actions.ts new file mode 100644 index 0000000000..b8e67eb6ea --- /dev/null +++ b/frontend/src/modules/activity/store/pinia/actions.ts @@ -0,0 +1,21 @@ +import { ActivityState } from '@/modules/activity/store/pinia/state'; +import { ActivityService } from '@/modules/activity/activity-service'; + +export default { + fetchActivities(this: ActivityState, body: any, reload = false): Promise { + const mappedBody = reload ? this.savedFilterBody : body; + this.activities = []; + return ActivityService.listActivities(mappedBody) + .then((data: any) => { + this.activities = data.rows; + this.totalActivities = data.count; + this.savedFilterBody = mappedBody; + return Promise.resolve(data); + }) + .catch((err) => { + this.activities = []; + this.totalActivities = 0; + return Promise.reject(err); + }); + }, +}; diff --git a/frontend/src/modules/activity/store/pinia/getters.ts b/frontend/src/modules/activity/store/pinia/getters.ts new file mode 100644 index 0000000000..02a61bed5e --- /dev/null +++ b/frontend/src/modules/activity/store/pinia/getters.ts @@ -0,0 +1,2 @@ +export default { +}; diff --git a/frontend/src/modules/activity/store/pinia/index.ts b/frontend/src/modules/activity/store/pinia/index.ts new file mode 100644 index 0000000000..5b4989cd13 --- /dev/null +++ b/frontend/src/modules/activity/store/pinia/index.ts @@ -0,0 +1,13 @@ +import { defineStore } from 'pinia'; +import state from './state'; +import getters from './getters'; +import actions from './actions'; + +export const useActivityStore = defineStore( + 'activity', + { + state, + getters, + actions, + }, +); diff --git a/frontend/src/modules/activity/store/pinia/state.ts b/frontend/src/modules/activity/store/pinia/state.ts new file mode 100644 index 0000000000..3aea281541 --- /dev/null +++ b/frontend/src/modules/activity/store/pinia/state.ts @@ -0,0 +1,26 @@ +import { Filter } from '@/shared/modules/filters/types/FilterConfig'; + +export interface ActivityState { + filters: Filter, + savedFilterBody: any, + activities: [], + totalActivities: number +} + +export default () => ({ + filters: { + search: '', + relation: 'and', + pagination: { + page: 1, + perPage: 20, + }, + order: { + prop: 'timestamp', + order: 'descending', + }, + } as Filter, + savedFilterBody: {}, + activities: [], + totalActivities: 0, +} as ActivityState); diff --git a/frontend/src/modules/auth/components/layout/auth-layout-side.vue b/frontend/src/modules/auth/components/layout/auth-layout-side.vue index 44536a9f5a..e46481dbe5 100644 --- a/frontend/src/modules/auth/components/layout/auth-layout-side.vue +++ b/frontend/src/modules/auth/components/layout/auth-layout-side.vue @@ -13,7 +13,7 @@ Find revenue opportunities in your open source data

- Centralize community, product, and customer data to understand which companies are engaging with your open source project. + Centralize community, product, and customer data to understand which companies are engaging with your open source project.

diff --git a/frontend/src/modules/conversation/components/conversation-list.vue b/frontend/src/modules/conversation/components/conversation-list.vue index 9cabbfe809..ce8b2e380d 100644 --- a/frontend/src/modules/conversation/components/conversation-list.vue +++ b/frontend/src/modules/conversation/components/conversation-list.vue @@ -1,5 +1,12 @@