add loading screen

This commit is contained in:
2025-10-17 22:57:09 +02:00
parent 0fe6d3b87a
commit 8c1bd0426f

View File

@@ -15,6 +15,8 @@ const HomePage = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { toast } = useToast(); const { toast } = useToast();
const [habits, setHabits] = useState([]); const [habits, setHabits] = useState([]);
const [loading, setLoading] = useState(true);
const [loggedIn, setLoggedIn] = useState(false);
const [collapsedGroups, setCollapsedGroups] = useState({}); const [collapsedGroups, setCollapsedGroups] = useState({});
const [gitEnabled, setGitEnabled] = useState(getGitEnabled()); const [gitEnabled, setGitEnabled] = useState(getGitEnabled());
const [darkMode, setDarkMode] = useState(() => { const [darkMode, setDarkMode] = useState(() => {
@@ -23,13 +25,16 @@ const HomePage = () => {
useEffect(() => { useEffect(() => {
(async () => { (async () => {
setLoading(true);
// On login, pull remote habits into localStorage // On login, pull remote habits into localStorage
const user = await getAuthUser(); const user = await getAuthUser();
setLoggedIn(!!user);
if (user) { if (user) {
await syncRemoteToLocal(); await syncRemoteToLocal();
} }
await loadHabits(); await loadHabits();
setGitEnabled(getGitEnabled()); setGitEnabled(getGitEnabled());
setLoading(false);
})(); })();
// Background sync every 10s if logged in // Background sync every 10s if logged in
const interval = setInterval(() => { const interval = setInterval(() => {
@@ -326,8 +331,20 @@ const HomePage = () => {
</div> </div>
</DragDropContext> </DragDropContext>
{/* Empty State */} {/* Empty State or Loading Buffer */}
{habits.length === 0 && ( {habits.length === 0 && (
loading && loggedIn ? (
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
className="flex flex-col items-center justify-center py-20"
>
<div className="w-16 h-16 mb-6 flex items-center justify-center">
<span className="inline-block w-12 h-12 border-4 border-emerald-400 border-t-transparent rounded-full animate-spin"></span>
</div>
<h2 className="text-xl font-semibold text-muted-foreground">Loading your habits...</h2>
</motion.div>
) : (
<motion.div <motion.div
initial={{ opacity: 0, scale: 0.95 }} initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }} animate={{ opacity: 1, scale: 1 }}
@@ -349,6 +366,7 @@ const HomePage = () => {
Create First Habit Create First Habit
</Button> </Button>
</motion.div> </motion.div>
)
)} )}
{/* Add Button */} {/* Add Button */}