diff --git a/src/apis/APIDashboard.js b/src/apis/APIDashboard.js index a76568ca..5fce8e14 100644 --- a/src/apis/APIDashboard.js +++ b/src/apis/APIDashboard.js @@ -32,4 +32,31 @@ export const APIDashboard = { } }, + getDashboardIncome: async () => { + try { + const response = await axiosInstance.get("/doctors/dashboard/graph"); + return response.data; + } catch (error) { + if (error instanceof AxiosError) { + const { message } = error; + throw new AxiosError(message); + } + throw new Error(error); + } + }, + + getCountDataForOneDay: async () => { + try { + const result = await axiosInstance.get( + "/doctors/dashboard/data-count-one-day", + ); + return result.data; + } catch (err) { + if (err instanceof AxiosError) { + const { message } = err; + throw new AxiosError(message); + } + throw new Error(err); + } + }, }; diff --git a/src/components/layout-components/Footer.jsx b/src/components/layout-components/Footer.jsx index b57c7c17..98e5e5a0 100644 --- a/src/components/layout-components/Footer.jsx +++ b/src/components/layout-components/Footer.jsx @@ -3,7 +3,7 @@ import { Link } from "react-router-dom"; import { FaFacebookF, FaTwitter, FaYoutube } from "react-icons/fa"; import { AiFillInstagram } from "react-icons/ai"; -import Logo from "@/assets/logo-white.png"; +import logo from "@/assets/logo-white.png"; export function Footer() { return ( @@ -16,7 +16,7 @@ export function Footer() {
Sosial Media
@@ -115,7 +115,7 @@ export default function Chatbot() {
Selamat datang di Asisten Dokter! Saya adalah AI Bot yang
siap membantu Anda menjelajahi topik Kesehatan Reproduksi.
@@ -144,7 +144,7 @@ export default function Chatbot() {
src={
pesan.pengirim === "user"
? profileDoctor
- : ChatbotIcon
+ : chatbotIcon
}
className="hidden h-8 w-8 min-[500px]:block"
alt="chatbot icon"
diff --git a/src/views/app-views/dashboard/components/ChartIncome.jsx b/src/views/app-views/dashboard/components/ChartIncome.jsx
index 6c5b24fe..17826794 100644
--- a/src/views/app-views/dashboard/components/ChartIncome.jsx
+++ b/src/views/app-views/dashboard/components/ChartIncome.jsx
@@ -1,3 +1,8 @@
+import dayjs from "dayjs";
+import "dayjs/locale/id";
+
+dayjs.locale("id");
+
import { Card, Col, Row } from "antd";
import {
BarChart,
@@ -10,11 +15,16 @@ import {
Legend,
} from "recharts";
-import {
- DataIncome,
- DataIncomeDay,
- DataIncomeWeek,
-} from "@/views/app-views/dashboard/constant/graph-income";
+import // DataIncome,
+// DataIncomeDay,
+// DataIncomeWeek,
+// formatDateToStringDay,
+// formatDateToStringWeek,
+// formatDateToStringMonth,
+"@/views/app-views/dashboard/constant/graph-income";
+import { useEffect, useState } from "react";
+
+import { APIDashboard } from "@/apis/APIDashboard";
export function CustomTooltip({ active, payload, label }) {
if (active && payload && payload.length) {
@@ -38,15 +48,81 @@ export function CustomTooltip({ active, payload, label }) {
}
export function ChartIncome({ selectedFilter }) {
- const IncomeMonth = DataIncome.slice(DataIncome.length - 7);
- // const IncomeWeeks = DataIncomeWeek.slice(DataIncomeWeek.length - 7);
- const IncomeWeeks = DataIncomeWeek;
- const IncomeDays = DataIncomeDay.slice(DataIncomeDay.length - 7);
+ const [dataIncome, setDataIncome] = useState([]);
+ // const [isError, setIsError] = useState(null);
+ const today = dayjs();
const mobileSize = window.innerWidth <= 450;
- console.log("week", IncomeWeeks);
- console.log("month", IncomeMonth);
- console.log("days", IncomeDays);
+ useEffect(() => {
+ const fecthDataIncome = async () => {
+ try {
+ const result = await APIDashboard.getDashboardIncome();
+ console.log("data income", result);
+
+ setDataIncome(result?.response);
+ } catch (error) {
+ console.error(error);
+ // setIsError(error);
+ }
+ };
+
+ fecthDataIncome();
+ }, []);
+
+ const filterAndAggregateData = (startDate, endDate) => {
+ const filteredData = dataIncome.filter(
+ (data) => dayjs(data.date) >= startDate && dayjs(data.date) <= endDate,
+ );
+
+ const sortedData = filteredData.sort(
+ (a, b) => dayjs(a.date).toDate() - dayjs(b.date).toDate(),
+ );
+
+ const aggregatedData = sortedData.reduce((acc, data) => {
+ // const date = dayjs(data.date).format("dddd, DD MMMM YYYY");
+ let formattedDate = "";
+
+ if (selectedFilter === "hari") {
+ formattedDate = dayjs(data.date).format("dddd, DD MMMM YYYY");
+ }
+ if (selectedFilter === "minggu") {
+ const value = dayjs(data.date);
+ const startOfWeek = value.startOf("week");
+ const endOfWeek = value.endOf("week");
+
+ formattedDate = `Week ${value.week()}, ${startOfWeek.format(
+ "DD",
+ )} - ${endOfWeek.format("DD MMMM YYYY")}`;
+ }
+ if (selectedFilter === "bulan") {
+ formattedDate = dayjs(data.date).format("MMMM YYYY");
+ }
+
+ acc[formattedDate] = (acc[formattedDate] || 0) + parseFloat(data.income);
+ return acc;
+ }, {});
+
+ return Object.entries(aggregatedData).map(([date, income]) => ({
+ date,
+ income,
+ }));
+ };
+
+ let chartData = [];
+
+ switch (selectedFilter) {
+ case "hari":
+ chartData = filterAndAggregateData(today.subtract(7, "days"), today);
+ break;
+ case "minggu":
+ chartData = filterAndAggregateData(today.subtract(7, "weeks"), today);
+ break;
+ case "bulan":
+ chartData = filterAndAggregateData(today.subtract(7, "months"), today);
+ break;
+ default:
+ break;
+ }
// const customTickYAxis = (values) => `${values.toString().slice(0, 2)} jt`;
const customTickYAxis = (values) => {
@@ -97,13 +173,15 @@ export function ChartIncome({ selectedFilter }) {
)}
diff --git a/src/views/app-views/forum/misc/DiscussionDetail.jsx b/src/views/app-views/forum/misc/DiscussionDetail.jsx
index 93b34f1d..2444c5ef 100644
--- a/src/views/app-views/forum/misc/DiscussionDetail.jsx
+++ b/src/views/app-views/forum/misc/DiscussionDetail.jsx
@@ -108,7 +108,10 @@ export default function DiscussionDetail() {