moved habits and quizzes to pet page

This commit is contained in:
masongga
2026-05-24 09:13:36 -06:00
parent e02468a9cc
commit c1b48c5e8d
10 changed files with 41 additions and 50 deletions

View File

@@ -2,6 +2,8 @@
import { useCallback, useEffect, useState } from "react";
import { DailyQuizForm } from "@/components/daily-quiz/daily-quiz-form";
import { HabitTracker } from "@/components/habits/habit-tracker";
import { PetHabitat } from "@/components/pet/pet-habitat";
import { HABIT_PET_DATA_UPDATED_EVENT } from "@/lib/app-events";
import {
@@ -45,5 +47,20 @@ export function AvatarPageContent() {
);
}
return <PetHabitat customization={customization} fillViewport />;
return (
<div className="flex w-full flex-col">
<div className="bit-home-pet-stage">
<PetHabitat customization={customization} fillViewport />
</div>
<section className="grid w-full gap-6 pt-6 lg:grid-cols-2 lg:items-start">
<div id="bit-daily-tasks">
<HabitTracker mode="daily" />
</div>
<div id="bit-daily-quiz">
<DailyQuizForm />
</div>
</section>
</div>
);
}

View File

@@ -108,7 +108,7 @@ export function AvatarStatusCard({ customization }: AvatarStatusCardProps) {
</p>
{!hasCheckedInToday ? (
<Button asChild className="w-full">
<Link href={routes.dailyQuiz}>Take today&apos;s quiz</Link>
<Link href={`${routes.avatar}#bit-daily-quiz`}>Take today&apos;s quiz</Link>
</Button>
) : null}
</CardContent>

View File

@@ -1,7 +1,6 @@
"use client";
import { CheckCircle2 } from "lucide-react";
import Link from "next/link";
import { useCallback, useEffect, useState } from "react";
import { WellnessSlider } from "@/components/daily-quiz/wellness-slider";
@@ -32,7 +31,6 @@ import {
import { HABIT_PET_DATA_UPDATED_EVENT } from "@/lib/app-events";
import { saveDailyEntry } from "@/lib/daily-quiz-storage";
import { JOURNAL_MAX_LENGTH } from "@/lib/journal-safety";
import { routes } from "@/lib/routes";
export function DailyQuizForm() {
const cachedQuiz = getCachedQuizTabData();
@@ -161,14 +159,7 @@ export function DailyQuizForm() {
</p>
<p className="text-sm text-muted-foreground">
Your answers are saved below. Come back tomorrow for your next
check-in. How you did today affects your bit. Spend time with{" "}
<Link
href={routes.avatar}
className="font-medium text-primary underline-offset-2 hover:underline"
>
your bit
</Link>{" "}
whenever you want to see how they are doing.
check-in. How you did today affects your bit.
</p>
<DailyQuizCountdown
onAvailable={() => {

View File

@@ -30,7 +30,7 @@ export function DailyQuizLinkButton() {
return (
<Button asChild className="w-full" variant="outline">
<Link href={routes.dailyQuiz}>Open daily quiz</Link>
<Link href={`${routes.avatar}#bit-daily-quiz`}>Open daily quiz</Link>
</Button>
);
}

View File

@@ -3,14 +3,7 @@
import Link from "next/link";
import { usePathname } from "next/navigation";
import { forwardRef } from "react";
import {
Home,
ListPlus,
Palette,
ShoppingBag,
Sparkles,
UserRound,
} from "lucide-react";
import { Home, Palette, ShoppingBag, UserRound } from "lucide-react";
import { cn } from "@/lib/utils";
import { appNavItems, routes, type NavItem } from "@/lib/routes";
@@ -31,17 +24,13 @@ const gridColsClass = {
const navIcons = {
[routes.avatar]: Home,
[routes.customize]: Palette,
[routes.habits]: ListPlus,
[routes.dailyQuiz]: Sparkles,
[routes.shop]: ShoppingBag,
[routes.profile]: UserRound,
} as const;
const prefetchByRoute: Partial<Record<string, () => void>> = {
[routes.habits]: () => {
[routes.avatar]: () => {
void prefetchHabitsTabData();
},
[routes.dailyQuiz]: () => {
void prefetchQuizTabData();
},
};