mirror of
https://github.com/urosran/cally.git
synced 2025-07-09 22:57:16 +00:00
96 lines
2.5 KiB
TypeScript
96 lines
2.5 KiB
TypeScript
import React, {useEffect, useState} from "react";
|
|
import { BarChart } from "react-native-gifted-charts";
|
|
import { UserProfile } from "@/hooks/firebase/types/profileTypes";
|
|
import {chartDayMap} from "@/constants/common";
|
|
|
|
const FamilyChart = ({ children }: {
|
|
children: Array<UserProfile>;
|
|
}) => {
|
|
const [dataList, setDataList] = useState([]);
|
|
|
|
useEffect(() => {
|
|
let dayPointsMap = {
|
|
Monday: {},
|
|
Tuesday: {},
|
|
Wednesday: {},
|
|
Thursday: {},
|
|
Friday: {},
|
|
Saturday: {},
|
|
Sunday: {},
|
|
};
|
|
children?.forEach((child) => {
|
|
let weeklyDayPoints = child.weeklyDayPoints || {
|
|
Monday: 0,
|
|
Tuesday: 0,
|
|
Wednesday: 0,
|
|
Thursday: 0,
|
|
Friday: 0,
|
|
Saturday: 0,
|
|
Sunday: 0,
|
|
};
|
|
|
|
Object.keys(weeklyDayPoints).forEach((day) => {
|
|
dayPointsMap = {
|
|
...dayPointsMap,
|
|
[day]: {
|
|
...dayPointsMap[day],
|
|
[child.uid]: weeklyDayPoints[day]
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
const data = Object.keys(dayPointsMap).map((day) => {
|
|
const userMap = dayPointsMap[day];
|
|
let stacks = Object.keys(userMap).map((userId) => {
|
|
|
|
let userProfile = children?.find((child) => child.uid === userId);
|
|
return {
|
|
value: userMap[userId],
|
|
color: userProfile.eventColor
|
|
}
|
|
});
|
|
|
|
return {
|
|
stacks: stacks,
|
|
label: chartDayMap[day],
|
|
}
|
|
});
|
|
setDataList(data);
|
|
}, [children])
|
|
|
|
return (
|
|
<BarChart
|
|
stackData={dataList}
|
|
width={250}
|
|
height={150} // Height of the chart
|
|
barWidth={20} // Width of each bar
|
|
noOfSections={5} // Number of horizontal sections (for 0 to 1000 in steps of 200)
|
|
maxValue={1000} // Max value on the chart
|
|
stepValue={200} // Step size for horizontal lines
|
|
yAxisThickness={0} // Hide the Y-axis line
|
|
// yAxisLabelTexts={["0", "100", "200", "300", "400", "500"]} // Custom Y-axis labels
|
|
hideRules={false} // Show the horizontal lines
|
|
rulesType="solid"
|
|
rulesThickness={1.2}
|
|
rulesColor="#DADADA" // Color for the horizontal lines
|
|
stackBorderTopLeftRadius={5} // Round the bars
|
|
stackBorderTopRightRadius={5} // Round the bars
|
|
spacing={16}
|
|
xAxisLabelTextStyle={{
|
|
fontSize: 10.41,
|
|
fontFamily: "Manrope_600SemiBold",
|
|
color: "#7f7f7f",
|
|
}}
|
|
yAxisTextStyle={{
|
|
fontSize: 9.61,
|
|
fontFamily: "Manrope_400Regular",
|
|
color: "#7f7f7f",
|
|
}}
|
|
disableScroll
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default FamilyChart;
|