add chart tab to insights & explore page

This commit is contained in:
MaysWind
2025-12-28 23:58:38 +08:00
parent 28337ae228
commit e74d290016
27 changed files with 1423 additions and 15 deletions
+160 -4
View File
@@ -53,8 +53,8 @@ export class TransactionExploreConditionField implements NameValue {
return TransactionExploreConditionField.allInstances;
}
public static valueOf(type: string): TransactionExploreConditionField | undefined {
return TransactionExploreConditionField.allInstancesByValue[type];
public static valueOf(value: string): TransactionExploreConditionField | undefined {
return TransactionExploreConditionField.allInstancesByValue[value];
}
}
@@ -119,8 +119,164 @@ export class TransactionExploreConditionOperator implements NameValue {
return TransactionExploreConditionOperator.allInstances;
}
public static valueOf(type: string): TransactionExploreConditionOperator | undefined {
return TransactionExploreConditionOperator.allInstancesByValue[type];
public static valueOf(value: string): TransactionExploreConditionOperator | undefined {
return TransactionExploreConditionOperator.allInstancesByValue[value];
}
}
export enum TransactionExploreChartTypeValue {
Pie = 'pie',
ColumnStacked = 'columnStacked',
Column100PercentStacked = 'column100%Stacked',
ColumnGrouped = 'columnGrouped',
LineGrouped = 'lineGrouped',
AreaStacked = 'areaStacked',
Area100PercentStacked = 'area100%Stacked',
BubbleGrouped = 'bubbleGrouped',
Radar = 'radar'
}
export class TransactionExploreChartType implements NameValue {
private static readonly allInstances: TransactionExploreChartType[] = [];
private static readonly allInstancesByValue: Record<string, TransactionExploreChartType> = {};
public static readonly Pie = new TransactionExploreChartType('Pie Chart', TransactionExploreChartTypeValue.Pie, false);
public static readonly Radar = new TransactionExploreChartType('Radar Chart', TransactionExploreChartTypeValue.Radar, false);
public static readonly Default = TransactionExploreChartType.Pie;
public readonly name: string;
public readonly value: TransactionExploreChartTypeValue;
public readonly seriesDimensionRequired: boolean;
private constructor(name: string, value: TransactionExploreChartTypeValue, seriesDimensionRequired: boolean) {
this.name = name;
this.value = value;
this.seriesDimensionRequired = seriesDimensionRequired;
TransactionExploreChartType.allInstances.push(this);
TransactionExploreChartType.allInstancesByValue[value] = this;
}
public static values(): TransactionExploreChartType[] {
return TransactionExploreChartType.allInstances;
}
public static valueOf(value: string): TransactionExploreChartType | undefined {
return TransactionExploreChartType.allInstancesByValue[value];
}
}
export enum TransactionExploreDataDimensionType {
None = 'none',
Query = 'query',
DateTime = 'dateTime',
DateTimeByDay = 'dateTimeByDay',
DateTimeByMonth = 'dateTimeByMonth',
DateTimeByQuarter = 'dateTimeByQuarter',
DateTimeByYear = 'dateTimeByYear',
DateTimeByFiscalYear = 'dateTimeByFiscalYear',
TransactionType = 'transactionType',
SourceAccount = 'sourceAccount',
SourceAccountCategory = 'sourceAccountCategory',
SourceAccountCurrency = 'sourceAccountCurrency',
DestinationAccount = 'destinationAccount',
DestinationAccountCategory = 'destinationAccountCategory',
DestinationAccountCurrency = 'destinationAccountCurrency',
SourceAmount = 'sourceAmount',
DestinationAmount = 'destinationAmount',
PrimaryCategory = 'primaryCategory',
SecondaryCategory = 'secondaryCategory'
}
export class TransactionExploreDataDimension implements NameValue {
private static readonly allInstances: TransactionExploreDataDimension[] = [];
private static readonly allInstancesByValue: Record<string, TransactionExploreDataDimension> = {};
public static readonly None = new TransactionExploreDataDimension('None', TransactionExploreDataDimensionType.None);
public static readonly Query = new TransactionExploreDataDimension('Query', TransactionExploreDataDimensionType.Query);
public static readonly DateTime = new TransactionExploreDataDimension('Transaction Time', TransactionExploreDataDimensionType.DateTime);
public static readonly DateTimeByDay = new TransactionExploreDataDimension('Transaction Date', TransactionExploreDataDimensionType.DateTimeByDay);
public static readonly DateTimeByMonth = new TransactionExploreDataDimension('Transaction Month', TransactionExploreDataDimensionType.DateTimeByMonth);
public static readonly DateTimeByQuarter = new TransactionExploreDataDimension('Transaction Quarter', TransactionExploreDataDimensionType.DateTimeByQuarter);
public static readonly DateTimeByYear = new TransactionExploreDataDimension('Transaction Year', TransactionExploreDataDimensionType.DateTimeByYear);
public static readonly DateTimeByFiscalYear = new TransactionExploreDataDimension('Transaction Fiscal Year', TransactionExploreDataDimensionType.DateTimeByFiscalYear);
public static readonly TransactionType = new TransactionExploreDataDimension('Transaction Type', TransactionExploreDataDimensionType.TransactionType);
public static readonly SourceAccount = new TransactionExploreDataDimension('Source Account', TransactionExploreDataDimensionType.SourceAccount);
public static readonly SourceAccountCategory = new TransactionExploreDataDimension('Source Account Category', TransactionExploreDataDimensionType.SourceAccountCategory);
public static readonly SourceAccountCurrency = new TransactionExploreDataDimension('Source Account Currency', TransactionExploreDataDimensionType.SourceAccountCurrency);
public static readonly DestinationAccount = new TransactionExploreDataDimension('Destination Account', TransactionExploreDataDimensionType.DestinationAccount);
public static readonly DestinationAccountCategory = new TransactionExploreDataDimension('Destination Account Category', TransactionExploreDataDimensionType.DestinationAccountCategory);
public static readonly DestinationAccountCurrency = new TransactionExploreDataDimension('Destination Account Currency', TransactionExploreDataDimensionType.DestinationAccountCurrency);
public static readonly PrimaryCategory = new TransactionExploreDataDimension('Primary Category', TransactionExploreDataDimensionType.PrimaryCategory);
public static readonly SecondaryCategory = new TransactionExploreDataDimension('Secondary Category', TransactionExploreDataDimensionType.SecondaryCategory);
public static readonly SourceAmount = new TransactionExploreDataDimension('Amount', TransactionExploreDataDimensionType.SourceAmount);
public static readonly DestinationAmount = new TransactionExploreDataDimension('Transfer In Amount', TransactionExploreDataDimensionType.DestinationAmount);
public static readonly CategoryDimensionDefault = TransactionExploreDataDimension.Query;
public static readonly SeriesDimensionDefault = TransactionExploreDataDimension.None;
public readonly name: string;
public readonly value: TransactionExploreDataDimensionType;
private constructor(name: string, value: TransactionExploreDataDimensionType) {
this.name = name;
this.value = value;
TransactionExploreDataDimension.allInstances.push(this);
TransactionExploreDataDimension.allInstancesByValue[value] = this;
}
public static values(): TransactionExploreDataDimension[] {
return TransactionExploreDataDimension.allInstances;
}
public static valueOf(value: string): TransactionExploreDataDimension | undefined {
return TransactionExploreDataDimension.allInstancesByValue[value];
}
}
export enum TransactionExploreValueMetricType {
TransactionCount = 'transactionCount',
SourceAmountSum = 'sourceAmountSum',
SourceAmountAverage = 'sourceAmountAverage',
SourceAmountMedian = 'sourceAmountMedian',
SourceAmountMinimum = 'sourceAmountMinimum',
SourceAmountMaximum = 'sourceAmountMaximum'
}
export class TransactionExploreValueMetric implements NameValue {
private static readonly allInstances: TransactionExploreValueMetric[] = [];
private static readonly allInstancesByValue: Record<string, TransactionExploreValueMetric> = {};
public static readonly TransactionCount = new TransactionExploreValueMetric('Transaction Count', TransactionExploreValueMetricType.TransactionCount, false);
public static readonly SourceAmountSum = new TransactionExploreValueMetric('Total Amount', TransactionExploreValueMetricType.SourceAmountSum, true);
public static readonly SourceAmountAverage = new TransactionExploreValueMetric('Average Amount', TransactionExploreValueMetricType.SourceAmountAverage, true);
public static readonly SourceAmountMedian = new TransactionExploreValueMetric('Median Amount', TransactionExploreValueMetricType.SourceAmountMedian, true);
public static readonly SourceAmountMinimum = new TransactionExploreValueMetric('Minimum Amount', TransactionExploreValueMetricType.SourceAmountMinimum, true);
public static readonly SourceAmountMaximum = new TransactionExploreValueMetric('Maximum Amount', TransactionExploreValueMetricType.SourceAmountMaximum, true);
public static readonly Default = TransactionExploreValueMetric.SourceAmountSum;
public readonly name: string;
public readonly value: TransactionExploreValueMetricType;
public readonly isAmount: boolean;
private constructor(name: string, value: TransactionExploreValueMetricType, isAmount: boolean) {
this.name = name;
this.value = value;
this.isAmount = isAmount;
TransactionExploreValueMetric.allInstances.push(this);
TransactionExploreValueMetric.allInstancesByValue[value] = this;
}
public static values(): TransactionExploreValueMetric[] {
return TransactionExploreValueMetric.allInstances;
}
public static valueOf(value: string): TransactionExploreValueMetric | undefined {
return TransactionExploreValueMetric.allInstancesByValue[value];
}
}