Skip to content

Commit

Permalink
Add case priority bar chart to Case dashboard.
Browse files Browse the repository at this point in the history
  • Loading branch information
metroid-samus committed Jan 23, 2025
1 parent a889722 commit 150519d
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/dispatch/static/dispatch/src/dashboard/case/CaseOverview.vue
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
</v-col>
<!-- Widgets Ends -->
<!-- Statistics Start -->
<v-col cols="12" sm="6">
<v-col cols="12">
<case-type-bar-chart-card
v-model="groupedItems"
:loading="loading"
Expand All @@ -54,6 +54,13 @@
@details-selected="detailsSelected($event)"
/>
</v-col>
<v-col cols="12" sm="6">
<case-priority-bar-chart-card
v-model="groupedItems"
:loading="loading"
@details-selected="detailsSelected($event)"
/>
</v-col>
<v-col cols="12" sm="6">
<case-new-triage-average-time-card v-model="groupedItems" :loading="loading" />
</v-col>
Expand Down Expand Up @@ -83,6 +90,7 @@ import CaseDialogFilter from "@/dashboard/case/CaseDialogFilter.vue"
import CaseEscalatedClosedAverageTimeCard from "@/dashboard/case/CaseEscalatedClosedAverageTimeCard.vue"
import CaseNewClosedAverageTimeCard from "@/dashboard/case/CaseNewClosedAverageTimeCard.vue"
import CaseNewTriageAverageTimeCard from "@/dashboard/case/CaseNewTriageAverageTimeCard.vue"
import CasePriorityBarChartCard from "@/dashboard/case/CasePriorityBarChartCard.vue"
import CaseSeverityBarChartCard from "@/dashboard/case/CaseSeverityBarChartCard.vue"
import CaseTriageEscalatedAverageTimeCard from "@/dashboard/case/CaseTriageEscalatedAverageTimeCard.vue"
import CaseTypeBarChartCard from "@/dashboard/case/CaseTypeBarChartCard.vue"
Expand All @@ -96,6 +104,7 @@ export default {
CaseEscalatedClosedAverageTimeCard,
CaseNewClosedAverageTimeCard,
CaseNewTriageAverageTimeCard,
CasePriorityBarChartCard,
CaseSeverityBarChartCard,
CaseTriageEscalatedAverageTimeCard,
CaseTypeBarChartCard,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<template>
<dashboard-card
:loading="loading"
type="bar"
:options="chartOptions"
:series="series"
title="Priorities"
/>
</template>

<script>
import { map, sortBy } from "lodash"
import DashboardCard from "@/dashboard/DashboardCard.vue"
import DashboardUtils from "@/dashboard/utils"
import CasePriorityApi from "@/case/priority/api"
export default {
name: "CasePriorityBarChartCard",
props: {
modelValue: {
type: Object,
default: function () {
return {}
},
},
loading: {
type: [String, Boolean],
default: function () {
return false
},
},
},
components: {
DashboardCard,
},
data() {
return {
priorities: [],
}
},
created: function () {
let filterOptions = {
itemsPerPage: -1,
}
CasePriorityApi.getAll(filterOptions).then((response) => {
this.priorities = [
...new Set(
map(
sortBy(response.data.items, function (value) {
return value.view_order
}),
"name"
)
),
]
})
},
computed: {
chartOptions() {
return {
chart: {
type: "bar",
height: 350,
stacked: true,
animations: {
enabled: false,
},
events: {
dataPointSelection: (event, chartContext, config) => {
var data = config.w.config.series[config.seriesIndex].data[config.dataPointIndex]
this.$emit("detailsSelected", data.items)
},
},
},
// colors: DashboardUtils.defaultColorTheme(),
responsive: [
{
options: {
legend: {
position: "top",
},
},
},
],
colors: [
function ({ seriesIndex, w }) {
for (let i = 0; i < w.config.series[seriesIndex].data.length; i++) {
if (w.config.series[seriesIndex].data[i].items.length > 0) {
if (w.config.series[seriesIndex].data[i].items[0].case_priority.color) {
return w.config.series[seriesIndex].data[i].items[0].case_priority.color
}
}
}
return "#008FFB"
},
],
xaxis: {
categories: this.categoryData || [],
title: {
text: "Month",
},
},
fill: {
opacity: 1,
},
legend: {
position: "top",
},
}
},
// series() {
// return DashboardUtils.createCountedSeriesData(this.modelValue, "case_type.name", this.types)
// },
series() {
return DashboardUtils.createCountedSeriesData(
this.modelValue,
"case_priority.name",
this.priorities
)
},
categoryData() {
return Object.keys(this.modelValue)
},
},
}
</script>

0 comments on commit 150519d

Please sign in to comment.