|
1 | 1 | <template> |
2 | | - <div class="widget-filter-container"> |
| 2 | + <div |
| 3 | + v-if="!!computedFilters.length" |
| 4 | + class="widget-filter-container" |
| 5 | + > |
3 | 6 | <div class="flex items-center justify-between"> |
4 | 7 | <div class="font-semibold text-sm">Filters</div> |
5 | 8 | </div> |
|
130 | 133 | /> |
131 | 134 | </el-option-group> |
132 | 135 | </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> |
133 | 158 | <el-input |
134 | 159 | v-else |
135 | 160 | v-model="filter.value" |
@@ -180,8 +205,10 @@ import { onSelectMouseLeave } from '@/utils/select' |
180 | 205 | import { mapGetters, mapActions } from 'vuex' |
181 | 206 | import { CrowdIntegrations } from '@/integrations/integrations-config' |
182 | 207 | import { ActivityModel } from '@/modules/activity/activity-model' |
| 208 | +import { MemberModel } from '@/modules/member/member-model' |
183 | 209 |
|
184 | | -const { fields } = ActivityModel |
| 210 | +const { fields: activityFields } = ActivityModel |
| 211 | +const { fields: memberFields } = MemberModel |
185 | 212 |
|
186 | 213 | export default { |
187 | 214 | name: 'FilterComponent', |
@@ -296,28 +323,28 @@ export default { |
296 | 323 | : this.availableDimensions.filter((d) => { |
297 | 324 | return this.measureDimensionFilters[ |
298 | 325 | measure.name |
299 | | - ][dimension] === undefined |
| 326 | + ]?.[dimension] === undefined |
300 | 327 | ? false |
301 | 328 | : this.measureDimensionFilters[measure.name][ |
302 | 329 | dimension |
303 | 330 | ].includes(d.name) |
304 | 331 | }) |
305 | 332 | }, |
306 | 333 | computedActivityTypes() { |
307 | | - return fields.type |
| 334 | + return activityFields.type |
308 | 335 | .dropdownOptions() |
309 | 336 | .filter((i) => |
310 | 337 | Object.keys(this.activeIntegrationsList).includes( |
311 | 338 | i.label.key |
312 | 339 | ) |
313 | 340 | ) |
314 | 341 | }, |
| 342 | + computedEngagementLevelTypes() { |
| 343 | + return memberFields.engagementLevel.dropdownOptions() |
| 344 | + }, |
315 | 345 | ...mapGetters({ |
316 | 346 | activeIntegrationsList: 'integration/activeList' |
317 | | - }), |
318 | | - fields() { |
319 | | - return fields |
320 | | - } |
| 347 | + }) |
321 | 348 | }, |
322 | 349 | async created() { |
323 | 350 | await this.doFetchIntegrations() |
@@ -372,10 +399,19 @@ export default { |
372 | 399 | ].every((value) => value !== '' && value != null) |
373 | 400 | }) |
374 | 401 | .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 | +
|
375 | 411 | return { |
376 | 412 | member: filter.select, |
377 | 413 | operator: filter.operator, |
378 | | - values: [filter.value] |
| 414 | + values |
379 | 415 | } |
380 | 416 | }) |
381 | 417 |
|
|
0 commit comments