Skip to content

Commit 4e2fcbe

Browse files
authored
Fix additional report issues (#303)
1 parent 7b2efe8 commit 4e2fcbe

8 files changed

Lines changed: 93 additions & 31 deletions

File tree

frontend/src/i18n/en.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,8 @@ const en = {
550550
},
551551
Sentiment: {
552552
averageSentiment: '[Sentiment] Average',
553-
date: '[Sentiment] Date'
553+
date: '[Sentiment] Date',
554+
platform: '[Sentiment] Platform'
554555
}
555556
}
556557
},

frontend/src/modules/report/report-charts.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,16 @@ export function chartOptions(widget, resultSet) {
9595
) {
9696
const platforms = (
9797
resultSet ? resultSet.tablePivot() : []
98-
).map((p) => p['Activities.platform'])
98+
)
99+
.map((p) => p['Activities.platform'])
100+
.filter((item, i, ar) => ar.indexOf(item) === i)
101+
99102
let mappedColors = platforms.map((p) => {
100-
if (p in platformColors) {
101-
return platformColors[p]
102-
}
103-
return null
103+
return platformColors[p]
104104
})
105105
const defaultColors =
106106
chartTypeOptions.colors || defaultChartOptions.colors
107+
107108
let restColors = defaultColors.filter(
108109
(c) => !mappedColors.includes(c)
109110
)
@@ -115,6 +116,7 @@ export function chartOptions(widget, resultSet) {
115116
}
116117
return c
117118
})
119+
118120
chartTypeOptions = {
119121
...chartTypeOptions,
120122
colors: [...mappedColors, ...restColors]

frontend/src/modules/widget/components/cube/_query_builder/ChartType.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ export default {
7474
computed: {
7575
model: {
7676
get() {
77-
return this.chartType
77+
return this.modelValue === 'line'
78+
? 'area'
79+
: this.modelValue
7880
},
7981
set(value) {
8082
this.updateChartType(value)

frontend/src/modules/widget/components/cube/_query_builder/DimensionSelect.vue

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
v-model="value"
1414
clearable
1515
filterable
16-
:disabled="measures.length === 0"
16+
:disabled="computedDimensions.length <= 1"
1717
class="w-full"
1818
@mouseleave="onSelectMouseLeave"
1919
>
@@ -94,7 +94,8 @@ export default {
9494
'Members.joinedAt',
9595
'Members.organization',
9696
'Tags.name'
97-
]
97+
],
98+
'Sentiment.averageSentiment': ['Sentiment.platform']
9899
}
99100
}
100101
},
@@ -111,8 +112,26 @@ export default {
111112
},
112113
value: {
113114
get() {
115+
const measure = this.measures[0]
116+
117+
// Select first option by default if measure changes
118+
if (measure) {
119+
const hasOption = this.measureDimensions[
120+
measure.name
121+
]?.includes(this.dimensions?.[0]?.name)
122+
123+
if (
124+
!hasOption &&
125+
this.measureDimensions[measure.name]?.[0]
126+
) {
127+
this.setDimensions([
128+
this.measureDimensions[measure.name][0]
129+
])
130+
}
131+
}
132+
114133
return this.translatedOptions(this.dimensions).map(
115-
(i) => i.label
134+
(i) => i.name
116135
)?.[0]
117136
},
118137
set(value) {

frontend/src/modules/widget/components/cube/_query_builder/FilterComponent.vue

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<template>
2-
<div class="widget-filter-container">
2+
<div
3+
v-if="!!computedFilters.length"
4+
class="widget-filter-container"
5+
>
36
<div class="flex items-center justify-between">
47
<div class="font-semibold text-sm">Filters</div>
58
</div>
@@ -130,6 +133,28 @@
130133
/>
131134
</el-option-group>
132135
</el-select>
136+
<el-select
137+
v-else-if="filter.select === 'Members.score'"
138+
v-model="filter.value"
139+
class="third-filter"
140+
placeholder="Value"
141+
@change="
142+
(value) =>
143+
handleFilterChange(
144+
'third-option',
145+
value,
146+
index
147+
)
148+
"
149+
>
150+
<el-option
151+
v-for="engagementLevel of computedEngagementLevelTypes"
152+
:key="engagementLevel.label"
153+
:label="engagementLevel.label"
154+
:value="engagementLevel.label"
155+
@mouseleave="onSelectMouseLeave"
156+
/>
157+
</el-select>
133158
<el-input
134159
v-else
135160
v-model="filter.value"
@@ -180,8 +205,10 @@ import { onSelectMouseLeave } from '@/utils/select'
180205
import { mapGetters, mapActions } from 'vuex'
181206
import { CrowdIntegrations } from '@/integrations/integrations-config'
182207
import { ActivityModel } from '@/modules/activity/activity-model'
208+
import { MemberModel } from '@/modules/member/member-model'
183209
184-
const { fields } = ActivityModel
210+
const { fields: activityFields } = ActivityModel
211+
const { fields: memberFields } = MemberModel
185212
186213
export default {
187214
name: 'FilterComponent',
@@ -296,28 +323,28 @@ export default {
296323
: this.availableDimensions.filter((d) => {
297324
return this.measureDimensionFilters[
298325
measure.name
299-
][dimension] === undefined
326+
]?.[dimension] === undefined
300327
? false
301328
: this.measureDimensionFilters[measure.name][
302329
dimension
303330
].includes(d.name)
304331
})
305332
},
306333
computedActivityTypes() {
307-
return fields.type
334+
return activityFields.type
308335
.dropdownOptions()
309336
.filter((i) =>
310337
Object.keys(this.activeIntegrationsList).includes(
311338
i.label.key
312339
)
313340
)
314341
},
342+
computedEngagementLevelTypes() {
343+
return memberFields.engagementLevel.dropdownOptions()
344+
},
315345
...mapGetters({
316346
activeIntegrationsList: 'integration/activeList'
317-
}),
318-
fields() {
319-
return fields
320-
}
347+
})
321348
},
322349
async created() {
323350
await this.doFetchIntegrations()
@@ -372,10 +399,19 @@ export default {
372399
].every((value) => value !== '' && value != null)
373400
})
374401
.map((filter) => {
402+
let values = [filter.value]
403+
404+
// Members engagement level needs to be parsed differently
405+
if (filter.select === 'Members.score') {
406+
values = this.computedEngagementLevelTypes
407+
.filter((t) => t.label === filter.value)?.[0]
408+
.value.map((v) => `${v}`)
409+
}
410+
375411
return {
376412
member: filter.select,
377413
operator: filter.operator,
378-
values: [filter.value]
414+
values
379415
}
380416
})
381417

frontend/src/modules/widget/components/cube/_query_builder/TimeDimensionSelect.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"
1212
clearable
1313
filterable
14+
:disabled="computedTimeDimensions.length <= 1"
1415
class="w-full"
1516
@change="handleTimeChange"
1617
>

frontend/src/modules/widget/components/cube/widget-cube-builder.vue

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,18 @@
6060
<div class="w-full mb-6">
6161
<ChartType
6262
v-model="model.settings.chartType"
63-
:chart-type="
64-
chartType === 'line'
65-
? 'area'
66-
: chartType
67-
"
6863
:update-chart-type="updateChartType"
6964
></ChartType>
7065
</div>
7166
<div class="w-full mb-6">
7267
<MeasureSelect
7368
:translated-options="translatedOptions"
7469
:measures="measures"
75-
:available-measures="availableMeasures"
70+
:available-measures="
71+
availableMeasures.filter(
72+
(m) => m.name !== 'Identities.count'
73+
)
74+
"
7675
:set-measures="setMeasures"
7776
/>
7877
</div>
@@ -110,6 +109,7 @@
110109
<div
111110
v-if="
112111
model.settings.chartType === 'area' ||
112+
model.settings.chartType === 'line' ||
113113
model.settings.chartType === 'bar' ||
114114
model.settings.chartType === 'table'
115115
"
@@ -321,6 +321,7 @@ export default {
321321
322322
const initialCharType =
323323
this.widget.settings?.chartType || 'line'
324+
324325
return {
325326
mapWidget,
326327
chartOptions,

frontend/src/modules/widget/components/widget.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
<template>
22
<div class="widget">
3-
<div
4-
v-show="loading"
5-
v-loading="loading"
6-
class="app-page-spinner"
7-
></div>
83
<div
94
v-if="!number"
105
class="flex items-center leading-normal justify-between"
@@ -33,7 +28,12 @@
3328
</router-link>
3429
</div>
3530
<div class="pt-4">
36-
<slot></slot>
31+
<div
32+
v-if="loading"
33+
v-loading="loading"
34+
class="app-page-spinner !relative top-2"
35+
></div>
36+
<slot v-else></slot>
3737
</div>
3838
<el-dropdown
3939
v-if="config.settings"

0 commit comments

Comments
 (0)