68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { computed } from 'vue';
|
|
|
|
import { useI18n } from '@/locales/helpers.ts';
|
|
|
|
import type {
|
|
TextualYearMonth,
|
|
Year1BasedMonth,
|
|
TimeRangeAndDateType,
|
|
YearUnixTime,
|
|
YearQuarterUnixTime,
|
|
YearMonthUnixTime
|
|
} from '@/core/datetime.ts';
|
|
import type { FiscalYearUnixTime } from '@/core/fiscalyear.ts';
|
|
import type { ColorValue } from '@/core/color.ts';
|
|
import { DEFAULT_ICON_COLOR } from '@/consts/color.ts';
|
|
import type { YearMonthItems } from '@/models/transaction.ts';
|
|
|
|
import { getAllDateRangesFromItems } from '@/lib/statistics.ts';
|
|
|
|
export interface CommonMonthlyTrendsChartProps<T extends Year1BasedMonth> {
|
|
items: YearMonthItems<T>[];
|
|
startYearMonth: TextualYearMonth | '';
|
|
endYearMonth: TextualYearMonth | '';
|
|
fiscalYearStart: number;
|
|
sortingType: number;
|
|
dateAggregationType: number;
|
|
idField?: string;
|
|
nameField: string;
|
|
valueField: string;
|
|
colorField?: string;
|
|
hiddenField?: string;
|
|
displayOrdersField?: string;
|
|
translateName?: boolean;
|
|
defaultCurrency?: string;
|
|
enableClickItem?: boolean;
|
|
}
|
|
|
|
export interface MonthlyTrendsBarChartClickEvent {
|
|
itemId: string;
|
|
dateRange: TimeRangeAndDateType;
|
|
}
|
|
|
|
export function useMonthlyTrendsChartBase<T extends Year1BasedMonth>(props: CommonMonthlyTrendsChartProps<T>) {
|
|
const { tt } = useI18n();
|
|
|
|
const allDateRanges = computed<YearUnixTime[] | FiscalYearUnixTime[] | YearQuarterUnixTime[] | YearMonthUnixTime[]>(() => getAllDateRangesFromItems(props.items, props.startYearMonth, props.endYearMonth, props.fiscalYearStart, props.dateAggregationType));
|
|
|
|
function getItemName(name: string): string {
|
|
return props.translateName ? tt(name) : name;
|
|
}
|
|
|
|
function getColor(color: string): ColorValue {
|
|
if (color && color !== DEFAULT_ICON_COLOR) {
|
|
color = '#' + color;
|
|
}
|
|
|
|
return color;
|
|
}
|
|
|
|
return {
|
|
// computed states
|
|
allDateRanges,
|
|
// functions
|
|
getItemName,
|
|
getColor
|
|
}
|
|
}
|