From 892404924c9c8e1ea016bc2dc088535a906f7c91 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 19 Apr 2026 16:29:05 +0800 Subject: [PATCH] add calendar heat map chart in insights explorer --- .../desktop/CalendarHeatMapChart.vue | 268 ++++++++++++++++++ src/core/explorer.ts | 111 ++++---- src/desktop-main.ts | 4 + src/lib/common.ts | 18 +- src/locales/de.json | 1 + src/locales/en.json | 1 + src/locales/es.json | 1 + src/locales/fr.json | 1 + src/locales/helpers.ts | 1 + src/locales/it.json | 1 + src/locales/ja.json | 1 + src/locales/kn.json | 1 + src/locales/ko.json | 1 + src/locales/nl.json | 1 + src/locales/pt_BR.json | 1 + src/locales/ru.json | 1 + src/locales/sl.json | 1 + src/locales/ta.json | 1 + src/locales/th.json | 1 + src/locales/tr.json | 1 + src/locales/uk.json | 1 + src/locales/vi.json | 1 + src/locales/zh_Hans.json | 1 + src/locales/zh_Hant.json | 1 + .../insights/tabs/ExplorerChartTab.vue | 59 +++- 25 files changed, 420 insertions(+), 60 deletions(-) create mode 100644 src/components/desktop/CalendarHeatMapChart.vue diff --git a/src/components/desktop/CalendarHeatMapChart.vue b/src/components/desktop/CalendarHeatMapChart.vue new file mode 100644 index 00000000..4e3da781 --- /dev/null +++ b/src/components/desktop/CalendarHeatMapChart.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/src/core/explorer.ts b/src/core/explorer.ts index 0feefff5..623881ad 100644 --- a/src/core/explorer.ts +++ b/src/core/explorer.ts @@ -1,5 +1,6 @@ import { type NameValue } from '@/core/base.ts'; import { DateRange } from '@/core/datetime.ts'; +import { ChartSortingType } from '@/core/statistics.ts'; export enum TransactionExplorerConditionRelation { First = 'first', @@ -166,58 +167,6 @@ export class TransactionExplorerConditionOperator implements NameValue { } } -export enum TransactionExplorerChartTypeValue { - Pie = 'pie', - ColumnStacked = 'columnStacked', - Column100PercentStacked = 'column100%Stacked', - ColumnGrouped = 'columnGrouped', - LineGrouped = 'lineGrouped', - AreaStacked = 'areaStacked', - Area100PercentStacked = 'area100%Stacked', - BubbleGrouped = 'bubbleGrouped', - Radar = 'radar', - Heatmap = 'heatmap' -} - -export class TransactionExplorerChartType implements NameValue { - private static readonly allInstances: TransactionExplorerChartType[] = []; - private static readonly allInstancesByValue: Record = {}; - - public static readonly Pie = new TransactionExplorerChartType('Pie Chart', TransactionExplorerChartTypeValue.Pie, false); - public static readonly Radar = new TransactionExplorerChartType('Radar Chart', TransactionExplorerChartTypeValue.Radar, false); - public static readonly ColumnStacked = new TransactionExplorerChartType('Column Chart (Stacked)', TransactionExplorerChartTypeValue.ColumnStacked, true); - public static readonly Column100PercentStacked = new TransactionExplorerChartType('Column Chart (100% Stacked)', TransactionExplorerChartTypeValue.Column100PercentStacked, true); - public static readonly ColumnGrouped = new TransactionExplorerChartType('Column Chart (Grouped)', TransactionExplorerChartTypeValue.ColumnGrouped, true); - public static readonly LineGrouped = new TransactionExplorerChartType('Line Chart (Grouped)', TransactionExplorerChartTypeValue.LineGrouped, true); - public static readonly AreaStacked = new TransactionExplorerChartType('Area Chart (Stacked)', TransactionExplorerChartTypeValue.AreaStacked, true); - public static readonly Area100PercentStacked = new TransactionExplorerChartType('Area Chart (100% Stacked)', TransactionExplorerChartTypeValue.Area100PercentStacked, true); - public static readonly BubbleGrouped = new TransactionExplorerChartType('Bubble Chart (Grouped)', TransactionExplorerChartTypeValue.BubbleGrouped, true); - public static readonly Heatmap = new TransactionExplorerChartType('Heatmap Chart', TransactionExplorerChartTypeValue.Heatmap, true); - - public static readonly Default = TransactionExplorerChartType.Pie; - - public readonly name: string; - public readonly value: TransactionExplorerChartTypeValue; - public readonly seriesDimensionRequired: boolean; - - private constructor(name: string, value: TransactionExplorerChartTypeValue, seriesDimensionRequired: boolean) { - this.name = name; - this.value = value; - this.seriesDimensionRequired = seriesDimensionRequired; - - TransactionExplorerChartType.allInstances.push(this); - TransactionExplorerChartType.allInstancesByValue[value] = this; - } - - public static values(): TransactionExplorerChartType[] { - return TransactionExplorerChartType.allInstances; - } - - public static valueOf(value: string): TransactionExplorerChartType | undefined { - return TransactionExplorerChartType.allInstancesByValue[value]; - } -} - export enum TransactionExplorerDataDimensionType { None = 'none', Query = 'query', @@ -421,4 +370,62 @@ export class TransactionExplorerValueMetric implements NameValue { } } +export enum TransactionExplorerChartTypeValue { + Pie = 'pie', + ColumnStacked = 'columnStacked', + Column100PercentStacked = 'column100%Stacked', + ColumnGrouped = 'columnGrouped', + LineGrouped = 'lineGrouped', + AreaStacked = 'areaStacked', + Area100PercentStacked = 'area100%Stacked', + BubbleGrouped = 'bubbleGrouped', + Radar = 'radar', + Heatmap = 'heatmap', + CalendarHeatmap = 'calendarHeatmap' +} + +export class TransactionExplorerChartType implements NameValue { + private static readonly allInstances: TransactionExplorerChartType[] = []; + private static readonly allInstancesByValue: Record = {}; + + public static readonly Pie = new TransactionExplorerChartType('Pie Chart', TransactionExplorerChartTypeValue.Pie, undefined, false, undefined); + public static readonly Radar = new TransactionExplorerChartType('Radar Chart', TransactionExplorerChartTypeValue.Radar, undefined, false, undefined); + public static readonly ColumnStacked = new TransactionExplorerChartType('Column Chart (Stacked)', TransactionExplorerChartTypeValue.ColumnStacked, undefined, true, undefined); + public static readonly Column100PercentStacked = new TransactionExplorerChartType('Column Chart (100% Stacked)', TransactionExplorerChartTypeValue.Column100PercentStacked, undefined, true, undefined); + public static readonly ColumnGrouped = new TransactionExplorerChartType('Column Chart (Grouped)', TransactionExplorerChartTypeValue.ColumnGrouped, undefined, true, undefined); + public static readonly LineGrouped = new TransactionExplorerChartType('Line Chart (Grouped)', TransactionExplorerChartTypeValue.LineGrouped, undefined, true, undefined); + public static readonly AreaStacked = new TransactionExplorerChartType('Area Chart (Stacked)', TransactionExplorerChartTypeValue.AreaStacked, undefined, true, undefined); + public static readonly Area100PercentStacked = new TransactionExplorerChartType('Area Chart (100% Stacked)', TransactionExplorerChartTypeValue.Area100PercentStacked, undefined, true, undefined); + public static readonly BubbleGrouped = new TransactionExplorerChartType('Bubble Chart (Grouped)', TransactionExplorerChartTypeValue.BubbleGrouped, undefined, true, undefined); + public static readonly Heatmap = new TransactionExplorerChartType('Heatmap Chart', TransactionExplorerChartTypeValue.Heatmap, undefined, true, undefined); + public static readonly CalendarHeatmap = new TransactionExplorerChartType('Calendar Heatmap Chart', TransactionExplorerChartTypeValue.CalendarHeatmap, TransactionExplorerDataDimensionType.DateTimeByYearMonthDay, false, ChartSortingType.DisplayOrder.type); + + public static readonly Default = TransactionExplorerChartType.Pie; + + public readonly name: string; + public readonly value: TransactionExplorerChartTypeValue; + public readonly fixedCategoryDimension: TransactionExplorerDataDimensionType | undefined; + public readonly seriesDimensionRequired: boolean; + public readonly fixedSortingType: number | undefined; + + private constructor(name: string, value: TransactionExplorerChartTypeValue, fixedCategoryDimension: TransactionExplorerDataDimensionType | undefined, seriesDimensionRequired: boolean, fixedSortingType: number | undefined) { + this.name = name; + this.value = value; + this.fixedCategoryDimension = fixedCategoryDimension; + this.seriesDimensionRequired = seriesDimensionRequired; + this.fixedSortingType = fixedSortingType; + + TransactionExplorerChartType.allInstances.push(this); + TransactionExplorerChartType.allInstancesByValue[value] = this; + } + + public static values(): TransactionExplorerChartType[] { + return TransactionExplorerChartType.allInstances; + } + + public static valueOf(value: string): TransactionExplorerChartType | undefined { + return TransactionExplorerChartType.allInstancesByValue[value]; + } +} + export const DEFAULT_TRANSACTION_EXPLORER_DATE_RANGE: DateRange = DateRange.ThisMonth; diff --git a/src/desktop-main.ts b/src/desktop-main.ts index 73158480..77bac5a3 100644 --- a/src/desktop-main.ts +++ b/src/desktop-main.ts @@ -65,6 +65,7 @@ import { } from 'echarts/charts'; import { GridComponent, + CalendarComponent, TooltipComponent, LegendComponent, VisualMapComponent @@ -115,6 +116,7 @@ import RadarChartComponent from '@/components/desktop/RadarChart.vue'; import AxisChart from '@/components/desktop/AxisChart.vue'; import TrendsChart from '@/components/desktop/TrendsChart.vue'; import HeatMapChart from '@/components/desktop/HeatMapChart.vue'; +import CalendarHeatMapChart from '@/components/desktop/CalendarHeatMapChart.vue'; import RenameDialog from '@/components/desktop/RenameDialog.vue'; import DateRangeSelectionDialog from '@/components/desktop/DateRangeSelectionDialog.vue'; import MonthSelectionDialog from '@/components/desktop/MonthSelectionDialog.vue'; @@ -521,6 +523,7 @@ echarts.use([ HeatmapChart, SankeyChart, GridComponent, + CalendarComponent, TooltipComponent, LegendComponent, VisualMapComponent @@ -566,6 +569,7 @@ app.component('RadarChart', RadarChartComponent); app.component('AxisChart', AxisChart); app.component('TrendsChart', TrendsChart); app.component('HeatMapChart', HeatMapChart); +app.component('CalendarHeatMapChart', CalendarHeatMapChart); app.component('RenameDialog', RenameDialog); app.component('DateRangeSelectionDialog', DateRangeSelectionDialog); app.component('MonthSelectionDialog', MonthSelectionDialog); diff --git a/src/lib/common.ts b/src/lib/common.ts index 805fc31f..819dba1b 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -2,9 +2,10 @@ import { type GenericNameValue, type TypeAndName, type TypeAndDisplayName, + entries, keys, keysIfValueEquals, - values + values, } from '@/core/base.ts'; // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type @@ -387,6 +388,21 @@ export function objectFieldToArrayItem(object: object): string[] { return ret; } +export function mapObjectToArray(object: Record, mapFunc: (value: V, key: string | number | symbol, index: number) => R): R[] { + const ret: R[] = []; + let index = 0; + + for (const [key, value] of entries(object)) { + const mappedValue = mapFunc(value, key, index++); + + if (isDefined(mappedValue)) { + ret.push(mappedValue); + } + } + + return ret; +} + export function objectFieldWithValueToArrayItem(object: Record, value: T): string[] { const ret: string[] = []; diff --git a/src/locales/de.json b/src/locales/de.json index d3d41eae..39f7c730 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Flächendiagramm (100% Gestapelt)", "Bubble Chart (Grouped)": "Blasendiagramm (Gruppiert)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Sortieren nach", "Map": "Karte", "Provider": "Anbieter", diff --git a/src/locales/en.json b/src/locales/en.json index 35c65d6d..2b801894 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Sort by", "Map": "Map", "Provider": "Provider", diff --git a/src/locales/es.json b/src/locales/es.json index e88e4e68..f0ba96aa 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Gráfico de área (100 % apilado)", "Bubble Chart (Grouped)": "Gráfico de burbujas (agrupado)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Ordenar por", "Map": "Mapa", "Provider": "Proveedor", diff --git a/src/locales/fr.json b/src/locales/fr.json index 986f161a..b66eecc5 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Trier par", "Map": "Carte", "Provider": "Fournisseur", diff --git a/src/locales/helpers.ts b/src/locales/helpers.ts index 3010cc55..c47cb534 100644 --- a/src/locales/helpers.ts +++ b/src/locales/helpers.ts @@ -2617,6 +2617,7 @@ export function useI18n() { isLongTimeMinuteTwoDigits, isLongTimeSecondTwoDigits, // format date time (by calendar display type) functions + getCalendarDisplayLongYearFromDateTime: (dateTime: DateTime, numeralSystem?: NumeralSystem) => formatDateTime(dateTime, getLocalizedLongYearFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem })), getCalendarDisplayShortYearFromDateTime: (dateTime: DateTime, numeralSystem?: NumeralSystem) => formatDateTime(dateTime, getLocalizedShortYearFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem })), getCalendarDisplayShortMonthFromDateTime: (dateTime: DateTime, numeralSystem?: NumeralSystem) => formatDateTime(dateTime, 'MMM', getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem })), getCalendarDisplayDayOfMonthFromDateTime: (dateTime: DateTime, numeralSystem?: NumeralSystem) => formatDateTime(dateTime, getLocalizedShortDayFormat(), getDateTimeFormatOptions({ calendarType: getCurrentCalendarDisplayType().primaryCalendarType, numeralSystem: numeralSystem })), diff --git a/src/locales/it.json b/src/locales/it.json index c90e9c24..86e51c0e 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Ordina per", "Map": "Mappa", "Provider": "Fornitore", diff --git a/src/locales/ja.json b/src/locales/ja.json index df2230b8..a73c5902 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "ソート順", "Map": "地図", "Provider": "プロバイダー", diff --git a/src/locales/kn.json b/src/locales/kn.json index 7088a689..7a483b4f 100644 --- a/src/locales/kn.json +++ b/src/locales/kn.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "ಇದರ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ", "Map": "ನಕ್ಷೆ", "Provider": "ಪ್ರದಾತ", diff --git a/src/locales/ko.json b/src/locales/ko.json index c7875652..2258fbf7 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "100% 누적 영역 차트", "Bubble Chart (Grouped)": "그룹화된 버블 차트", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "정렬 기준", "Map": "지도", "Provider": "제공자", diff --git a/src/locales/nl.json b/src/locales/nl.json index dbe8ae85..51a7971c 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Sorteren op", "Map": "Kaart", "Provider": "Provider", diff --git a/src/locales/pt_BR.json b/src/locales/pt_BR.json index b1d485fe..b3e51acb 100644 --- a/src/locales/pt_BR.json +++ b/src/locales/pt_BR.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Gráfico de Área (100% Empilhado)", "Bubble Chart (Grouped)": "Gráfico de Bolhas (Agrupado)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Ordenar por", "Map": "Mapa", "Provider": "Provedor", diff --git a/src/locales/ru.json b/src/locales/ru.json index fd92ebbe..9c110eab 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Диаграмма с областями (с 100% накоплением)", "Bubble Chart (Grouped)": "Пузырьковая диаграмма (сгрупированная)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Сортировать по", "Map": "Карта", "Provider": "Провайдер", diff --git a/src/locales/sl.json b/src/locales/sl.json index 11f85970..684a81c2 100644 --- a/src/locales/sl.json +++ b/src/locales/sl.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "100-odstotno naložen ploskovni grafikon", "Bubble Chart (Grouped)": "Grupiran mehurčni grafikon", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Razvrsti po", "Map": "Zemljevid", "Provider": "Ponudnik", diff --git a/src/locales/ta.json b/src/locales/ta.json index 85c235e4..a073eda5 100644 --- a/src/locales/ta.json +++ b/src/locales/ta.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "பரப்பு வரைபடம் (100% அடுக்கப்பட்ட)", "Bubble Chart (Grouped)": "குமிழி வரைபடம் (குழுவாக்கப்பட்ட)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "இதன் வகை வரிசைப்படுத்து", "Map": "வரைபடம்", "Provider": "வழங்குநர்", diff --git a/src/locales/th.json b/src/locales/th.json index e38cc052..0dfaec0f 100644 --- a/src/locales/th.json +++ b/src/locales/th.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "จัดเรียงตาม", "Map": "แผนที่", "Provider": "ผู้ให้บริการ", diff --git a/src/locales/tr.json b/src/locales/tr.json index d4833240..8584e729 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Sıralama ölçütü", "Map": "Harita", "Provider": "Sağlayıcı", diff --git a/src/locales/uk.json b/src/locales/uk.json index f96f10e7..15b78284 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Сортувати за", "Map": "Карта", "Provider": "Провайдер", diff --git a/src/locales/vi.json b/src/locales/vi.json index a34d3a08..492c85df 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "Area Chart (100% Stacked)", "Bubble Chart (Grouped)": "Bubble Chart (Grouped)", "Heatmap Chart": "Heatmap Chart", + "Calendar Heatmap Chart": "Calendar Heatmap Chart", "Sort by": "Sắp xếp theo", "Map": "Bản đồ", "Provider": "Nhà cung cấp", diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json index 9745c912..c87eca40 100644 --- a/src/locales/zh_Hans.json +++ b/src/locales/zh_Hans.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "面积图(100%堆叠)", "Bubble Chart (Grouped)": "气泡图(分组)", "Heatmap Chart": "热力图", + "Calendar Heatmap Chart": "日历热力图", "Sort by": "排序方式", "Map": "地图", "Provider": "提供者", diff --git a/src/locales/zh_Hant.json b/src/locales/zh_Hant.json index 29371b3d..6e20acb5 100644 --- a/src/locales/zh_Hant.json +++ b/src/locales/zh_Hant.json @@ -1604,6 +1604,7 @@ "Area Chart (100% Stacked)": "面積圖(100%堆疊)", "Bubble Chart (Grouped)": "氣泡圖(分組)", "Heatmap Chart": "熱力圖", + "Calendar Heatmap Chart": "日曆熱力圖", "Sort by": "排序方式", "Map": "地圖", "Provider": "提供者", diff --git a/src/views/desktop/insights/tabs/ExplorerChartTab.vue b/src/views/desktop/insights/tabs/ExplorerChartTab.vue index 38d90edb..4a41294a 100644 --- a/src/views/desktop/insights/tabs/ExplorerChartTab.vue +++ b/src/views/desktop/insights/tabs/ExplorerChartTab.vue @@ -12,7 +12,8 @@ :disabled="loading || disabled" :label="tt('Chart Type')" :items="allTransactionExplorerChartTypes" - v-model="currentExplorer.chartType" + :model-value="currentExplorer.chartType" + @update:model-value="updateChartType" /> + + + +