mirror of
https://github.com/documenso/documenso.git
synced 2025-11-10 04:22:32 +10:00
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { DateTime } from 'luxon';
|
|
|
|
export interface TransformedData {
|
|
labels: string[];
|
|
datasets: Array<{
|
|
label: string;
|
|
data: number[];
|
|
}>;
|
|
}
|
|
|
|
export function addZeroMonth(transformedData: TransformedData): TransformedData {
|
|
const result = {
|
|
labels: [...transformedData.labels],
|
|
datasets: transformedData.datasets.map((dataset) => ({
|
|
label: dataset.label,
|
|
data: [...dataset.data],
|
|
})),
|
|
};
|
|
|
|
if (result.labels.length === 0) {
|
|
return result;
|
|
}
|
|
|
|
if (result.datasets.every((dataset) => dataset.data[0] === 0)) {
|
|
return result;
|
|
}
|
|
|
|
try {
|
|
let firstMonth = DateTime.fromFormat(result.labels[0], 'MMM yyyy');
|
|
if (!firstMonth.isValid) {
|
|
const formats = ['MMM yyyy', 'MMMM yyyy', 'MM/yyyy', 'yyyy-MM'];
|
|
|
|
for (const format of formats) {
|
|
firstMonth = DateTime.fromFormat(result.labels[0], format);
|
|
if (firstMonth.isValid) break;
|
|
}
|
|
|
|
if (!firstMonth.isValid) {
|
|
console.warn(`Could not parse date: "${result.labels[0]}"`);
|
|
return transformedData;
|
|
}
|
|
}
|
|
|
|
const zeroMonth = firstMonth.minus({ months: 1 }).toFormat('MMM yyyy');
|
|
result.labels.unshift(zeroMonth);
|
|
result.datasets.forEach((dataset) => {
|
|
dataset.data.unshift(0);
|
|
});
|
|
|
|
return result;
|
|
} catch (error) {
|
|
return transformedData;
|
|
}
|
|
}
|