import React from "react";
import Chart from "react-apexcharts";
import { useGetCollectionOverview } from "../../hooks/useDashboard_Data";
import { formatFigure } from "../../utils/appUtils";
const CollectionOverview = ({ data, isLoading }) => {
const borderColor = "#ddd";
const labelColor = "#6c757d";
// Extract bucket values
const labels = ["0–30 Days", "30–60 Days", "60–90 Days", "90+ Days"];
const amounts = [
data.bucket0To30Amount,
data.bucket30To60Amount,
data.bucket60To90Amount,
data.bucket90PlusAmount,
];
// Colors (Zoho-style distributed)
const colors = ["#7367F0", "#00cfe8", "#28c76f", "#ea5455"];
const options = {
chart: {
type: "bar",
height: 260,
toolbar: { show: false },
},
plotOptions: {
bar: {
horizontal: true,
barHeight: "65%",
distributed: true,
borderRadius: 8,
startingShape: "rounded",
},
},
colors: colors,
grid: {
borderColor: borderColor,
strokeDashArray: 6,
padding: { top: -10, bottom: -10 },
xaxis: { lines: { show: true } },
},
dataLabels: {
enabled: true,
formatter: (_, opts) => labels[opts.dataPointIndex],
style: {
colors: ["#fff"],
fontSize: "13px",
fontWeight: 500,
},
offsetX: 0,
},
xaxis: {
categories: amounts.map((a) => a),
labels: {
style: { colors: labelColor, fontSize: "12px" },
formatter: (val) => `₹${val.toLocaleString()}`,
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: "13px",
},
formatter: () => "", // hide duplicate labels
},
},
tooltip: {
custom: ({ series, seriesIndex, dataPointIndex }) => {
return `
${labels[dataPointIndex]}
₹${series[seriesIndex][dataPointIndex].toLocaleString()}
`;
},
},
legend: { show: false },
};
const series = [
{
name: "Amount",
data: amounts,
},
];
return (
);
};
export default CollectionOverview;
export const TopicBarChart = ({ data,isLoading }) => {
const data1 = {
totalDueAmount: 213590,
totalCollectedAmount: 5000,
totalValue: 218590,
pendingPercentage: 97.71,
collectedPercentage: 2.29,
bucket0To30Invoices: 10,
bucket30To60Invoices: 4,
bucket60To90Invoices: 2,
bucket90PlusInvoices: 1,
bucket0To30Amount: 2130,
bucket30To60Amount: 2003,
bucket60To90Amount: 4500,
bucket90PlusAmount: 8800,
topClientBalance: 55300,
topClient: {
id: "4e3a6d31-c640-40f7-8d67-6c109fcdb9ea",
name: "Marco Secure Solutions Ltd.",
email: "admin@marcoaiot.com",
contactPerson: "Admin",
address:
"2nd Floor, Fullora Building, Tejas CHS, behind Kothrud Stand, Tejas Society, Dahanukar Colony, Kothrud, Pune, Maharashtra 411038",
gstNumber: null,
contactNumber: "123456789",
sprid: 5400,
},
};
const borderColor = "#ddd";
const labelColor = "#6c757d";
// COLORS
const config = {
colors: {
b0: "#7367F0",
b30: "#00cfe8",
b60: "#28c76f",
b90: "#ea5455",
},
};
// NEW LABELS (BUCKETS)
const chartLabels = ["0–30 Days", "30–60 Days", "60–90 Days", "90+ Days"];
// NEW VALUES (BUCKET AMOUNT)
const chartValues = [
data.bucket0To30Amount,
data.bucket30To60Amount,
data.bucket60To90Amount,
data.bucket90PlusAmount,
];
const options = {
chart: {
height: 300,
type: "bar",
toolbar: { show: false },
},
plotOptions: {
bar: {
horizontal: true,
barHeight: "40%",
distributed: true,
startingShape: "rounded",
borderRadius: 7,
},
},
grid: {
strokeDashArray: 10,
borderColor,
xaxis: { lines: { show: true } },
yaxis: { lines: { show: false } },
padding: { top: -35, bottom: -12 },
},
colors: [
config.colors.b0,
config.colors.b30,
config.colors.b60,
config.colors.b90,
],
labels: chartLabels,
fill: { opacity: 1 },
dataLabels: {
enabled: true,
style: {
colors: ["#fff"],
fontWeight: 400,
fontSize: "13px",
fontFamily: "Public Sans",
},
formatter: (_, opts) => chartLabels[opts.dataPointIndex],
},
xaxis: {
categories: chartValues.map((x) => formatFigure(x, { type: "currency" })),
axisBorder: { show: false },
axisTicks: { show: false },
labels: {
style: {
colors: labelColor,
fontFamily: "Public Sans",
fontSize: "13px",
},
formatter: (val) => `₹${Number(val).toLocaleString()}`,
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontFamily: "Public Sans",
fontSize: "13px",
},
},
},
tooltip: {
enabled: true,
custom: ({ series, seriesIndex, dataPointIndex }) => {
return `
₹${series[seriesIndex][
dataPointIndex
].toLocaleString()}
`;
},
},
legend: { show: false },
};
const series = [
{
data: chartValues,
},
];
return (
Due Amount
{formatFigure(data.totalDueAmount, { type: "currency" })}
Collected Amount
{formatFigure(data.totalCollectedAmount, { type: "currency" })}
{/*
Top Client
{data.topClient.name} */}
{/* 0–30 Days */}
{formatFigure(data.bucket0To30Amount, { type: "currency" })}
0–30 Days
{/* 30–60 Days */}
{formatFigure(data.bucket30To60Amount, { type: "currency" })}
30–60 Days
{/* 60–90 Days */}
{formatFigure(data.bucket60To90Amount, { type: "currency" })}
60–90 Days
{/* 90+ Days */}
{formatFigure(data.bucket90PlusAmount, { type: "currency" })}
90+ Days
);
};