41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import * as React from "react";
|
|
import MonetizationOnIcon from "@mui/icons-material/MonetizationOn";
|
|
import { LatestItem } from "../../components/LatestItems";
|
|
|
|
const DEFAULT_ICON = React.createElement(MonetizationOnIcon, {
|
|
sx: { color: "#388e3c" }
|
|
});
|
|
|
|
export function mapToLatestItems(
|
|
items: any[],
|
|
type: "expense" | "income"
|
|
): LatestItem[] {
|
|
const isValid = (amt: number) =>
|
|
type === "expense" ? amt < 0 : amt > 0;
|
|
|
|
return items
|
|
.filter((item: any) => isValid(Number(item.amount) || 0))
|
|
.slice(0, 5)
|
|
.map((exp: any, index: number) => {
|
|
const time = new Date(
|
|
exp.occurred_at || exp.created_at || Date.now()
|
|
).getTime();
|
|
|
|
const diffDays = Math.floor(
|
|
Math.abs(Date.now() - time) / (1000 * 60 * 60 * 24)
|
|
);
|
|
|
|
return {
|
|
id: exp.id || index,
|
|
icon: DEFAULT_ICON,
|
|
iconBgColor:
|
|
type === "expense" ? "#ffebee" : "#e8f5e9",
|
|
title: exp.payee?.name || exp.payee || "Unknown Payee",
|
|
subtitle:
|
|
exp.category?.name || exp.account?.name || "Transaction",
|
|
amount: `Rs ${Math.abs(exp.amount || 0)}`,
|
|
timeAgo: diffDays === 0 ? "Today" : `${diffDays} days ago`
|
|
};
|
|
});
|
|
}
|