import React, { useState } from "react"; import { saveAs } from 'file-saver'; import jsPDF from 'jspdf'; import 'jspdf-autotable'; import './App.css'; // For extra custom styles like fonts, textures export default function App() { const [currentPage, setCurrentPage] = useState("Home"); // ================= PROFILES ================= const [profiles, setProfiles] = useState({ adults: [], kids: [], pets: [] }); // ================= CALENDAR ================= const [calendarEvents, setCalendarEvents] = useState([]); // ================= DAILY PLANNER ================= const [dailyTasks, setDailyTasks] = useState([]); // ================= CHORES & REWARDS ================= const [chores, setChores] = useState([]); const [rewards, setRewards] = useState([]); // ================= MEALS & SHOPPING ================= const [meals, setMeals] = useState({ weeklyPlan: [], allMeals: [] }); // ================= MUSIC ================= const [playlists, setPlaylists] = useState([]); // ================= TAROT ================= const [tarotHistory, setTarotHistory] = useState([]); // ================= POTTY TRAINING ================= const [pottyData, setPottyData] = useState({ entries: [], points: 0 }); const [pottyRewards, setPottyRewards] = useState([]); // ================= BABY CARE ================= const [babyData, setBabyData] = useState({ feedings: [], diapers: [], baths: [], pumping: [], milkStorage: { fridge: 0, freezer: 0 }, symptoms: [] }); // ================= EXPORT FUNCTIONS ================= const exportCSV = (data, filename) => { if (!data || data.length === 0) return; const csvRows = []; const headers = Object.keys(data[0]); csvRows.push(headers.join(',')); data.forEach(row => csvRows.push(headers.map(h => `\"${row[h]}\"`).join(','))); const csvData = new Blob([csvRows.join('\n')], { type: 'text/csv' }); saveAs(csvData, `${filename}.csv`); }; const exportPDF = (data, filename) => { if (!data || data.length === 0) return; const doc = new jsPDF(); const headers = [Object.keys(data[0])]; const rows = data.map(row => Object.values(row)); doc.autoTable({ head: headers, body: rows, styles: { font: 'times', fontSize: 10 }, headStyles: { fillColor: [220, 220, 220] } }); doc.save(`${filename}.pdf`); }; // ================= GALLERY BUTTONS ================= const galleryButtons = [ { name: "Profiles", page: "ProfilesPage", color: "bg-indigo-800/80" }, { name: "Calendar", page: "CalendarPage", color: "bg-green-800/80" }, { name: "Birthday Tree", page: "BirthdayTreePage", color: "bg-yellow-800/80" }, { name: "Chores & Rewards", page: "ChorePage", color: "bg-purple-800/80" }, { name: "Meals & Shopping", page: "MealPage", color: "bg-orange-800/80" }, { name: "Weekly Notes", page: "WeeklyPage", color: "bg-pink-800/80" }, { name: "Music", page: "MusicPage", color: "bg-blue-800/80" }, { name: "Tarot", page: "TarotPage", color: "bg-red-800/80" }, { name: "Potty & Baby", page: "BabyPottyPage", color: "bg-teal-800/80" }, ]; return (
{/* ================= DATE/TIME DISPLAY ================= */}
{new Date().toLocaleString("en-US", { dateStyle: "full", timeStyle: "short" })}
{/* ================= GALLERY BUTTONS ================= */}
{galleryButtons.map((btn) => (
setCurrentPage(btn.page)} className={`${btn.color} cursor-pointer p-8 rounded-2xl hover:scale-110 transition-transform transform shadow-xl shadow-black/50 text-center text-2xl font-bold backdrop-blur-sm border border-white/20`} > {btn.name}
))}
{/* ================= PAGE RENDER ================= */} {currentPage === "BabyPottyPage" && ( )} {/* Placeholder for other pages */}
); } // ================= BABY & POTTY PAGE ================= function BabyPottyPage({ pottyData, setPottyData, babyData, setBabyData, exportCSV, exportPDF }) { // ======= POTTY FUNCTIONS ======= const addPottyEntry = (type, success) => { const pointsChange = success ? 1 : -1; const entry = { type, success, time: new Date().toLocaleTimeString(), pointsChange }; setPottyData(prev => ({ entries: [entry, ...prev.entries], points: prev.points + pointsChange })); }; // ======= BABY FUNCTIONS ======= const addFeeding = (method, amount) => { const time = new Date().toLocaleTimeString(); setBabyData(prev => ({ ...prev, feedings: [...prev.feedings, { method, amount, time }], milkStorage: method === 'bottle' ? { fridge: prev.milkStorage.fridge - amount, freezer: prev.milkStorage.freezer } : prev.milkStorage })); }; const addDiaper = (type) => { const time = new Date().toLocaleTimeString(); setBabyData(prev => ({ ...prev, diapers: [...prev.diapers, { type, time }] })); }; const addBath = () => { const time = new Date().toLocaleTimeString(); setBabyData(prev => ({ ...prev, baths: [...prev.baths, { time }] })); }; const addPumping = (side, amount) => { const time = new Date().toLocaleTimeString(); setBabyData(prev => ({ ...prev, pumping: [...prev.pumping, { side, amount, time }], milkStorage: { fridge: prev.milkStorage.fridge + amount, freezer: prev.milkStorage.freezer } })); }; const addSymptom = (description, duration) => { const time = new Date().toLocaleTimeString(); setBabyData(prev => ({ ...prev, symptoms: [...prev.symptoms, { description, duration, time }] })); }; return (

Potty Training Tracker

Total Points: {pottyData.points}

Baby Care Tracker

); }