From 9813e5270890350d0a7cfa79897f8b93264b4177 Mon Sep 17 00:00:00 2001 From: Fed Date: Sun, 21 Jul 2024 16:48:03 +0700 Subject: [PATCH] add --- bun.lockb | Bin 168134 -> 182181 bytes package.json | 2 + src/app/page.tsx | 2 +- src/app/question/chart.tsx | 126 ++++++++++++ src/app/question/form.tsx | 160 +++++++++++++++ src/app/question/page.tsx | 10 + src/components/navbar.tsx | 6 +- src/components/ui/chart.tsx | 365 +++++++++++++++++++++++++++++++++ src/components/ui/checkbox.tsx | 30 +++ 9 files changed, 697 insertions(+), 4 deletions(-) create mode 100644 src/app/question/chart.tsx create mode 100644 src/app/question/form.tsx create mode 100644 src/app/question/page.tsx create mode 100644 src/components/ui/chart.tsx create mode 100644 src/components/ui/checkbox.tsx diff --git a/bun.lockb b/bun.lockb index c462704e90dca6f83403410721977748833ad32f..28eb9e90edf9c7991a8f884c53a8a7864b99c6a0 100755 GIT binary patch delta 39965 zcmeHwcR&HY5g{=T_;wz{gjtE;Q4dwO;U``|*eC6kLzajUi@Ch6v5zf*Sp zS&u%>JAE;KDc2$VZjHP-=q${hS>)Hef72v10i>8(=T z0Iva`9v&Y@O|?Ni3-Ap{pB@P>S#h#1B{8nQPL*J+Qk93iHz+9z0i}kc!&4FmB&bwb zCQ?IYa(+@wWI8E+t5&HjQLeJA&kmG2U?J0(6xXP@#9pdwSVMY^A=gu)IzGtqm$K!X zz>~$jlEWi(DJqpKv{1PeP%`8IDCIwt%PT!RFZVQFmmH<@KriKn4;7Po92uUH+82f< z>-wdT&6(z^GNKEcLo3Q;%m6I`x>?Zh}^{UJ(Iss3f8F2~0t#3Y5Mq}+gQ*^4Y6{R704oc;2$^4kB{z<$+Rx1YH_=RyE%Zs}uN9GK~X8 zm}In1mptasLG=%Sk|9cm)`F*o|MFI;5T6-yz?17&`$!$o zV;NLAK(O0arNS^}wDD7^96?urr;28^C71mPN`^fLEe^^+X)+H7C53z)$-oZ*672&y zdElGBRPPQb8891qu|8xhud7laJ~Q-g$gn|T1Tv_CC3suVB=DHh8M)x8M;k$DZ0F1L z_j-~cBS0y?k4!^A$)I|mRK9ov$^tSKm2#5Yo@DuU9a zBgJRIQ+_M(HlQ;a3ogdx^c|aF1qAC0iiw+HBhx>FCA+_Z(ll?Wm8$=^ZUwZEM!2`G zS3hbhJ_R4R?x7wva~zcXu@#gCf`O95OTZ39hFwN-Onh>9q)MeMultcf1-7&jZX3Jl zySI@X9~l>(nyTxq8Y9=Q)>g7FHpNxEFJg5`3QtbaIY3Sk)V`fWn}C{wzXhrRjfqM~ zOx8)wg~z3+rnHyjx|F139pt7RBtASMF*yPAS`{AKU+mCbWYB<~1f`C|zz~{a{gPu` zW6|lPehKLjiM@4cvb+muapboKC4(BuG%-|iSR^PJZQnl$K zHP~3DNv?5;5x66Q#>B^@sv38d@^vYF`|0W?r>n3`$Mt~$Z;?Sg!ZyMc!x1&NsT64| zn@Apc(p}0==^^zvwuf-Uw4DAX#54jQdrA WL3I2c9C>w3pQ0bI7g1XM?8*H^CN( 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 diff --git a/package.json b/package.json index 483310f..06648a5 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@radix-ui/react-accordion": "^1.2.0", + "@radix-ui/react-checkbox": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-slot": "^1.1.0", @@ -21,6 +22,7 @@ "react": "^18", "react-dom": "^18", "react-hook-form": "^7.52.1", + "recharts": "^2.12.7", "tailwind-merge": "^2.4.0", "tailwindcss-animate": "^1.0.7" }, diff --git a/src/app/page.tsx b/src/app/page.tsx index 09ccf28..8a69912 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -63,7 +63,7 @@ export default function Page() {
- Click to open ? + มีค่าใช้จ่ายในการบริการมั้ย ? เหมาะกับเพื่อน ๆ วัยมัธยมศึกษาที่มีปัญหาการบริหารจัดการเงินรายรับที่ได้จากผู้ปกครองที่ได้รับมาในแต่ละเดือน เช่น วางแผนสัดส่วนค่าใช้จ่ายไม่เป็น ไม่สามารถใช้จ่ายเงินตามที่ได้รับในแต่ละเดือนได้ diff --git a/src/app/question/chart.tsx b/src/app/question/chart.tsx new file mode 100644 index 0000000..79bd23f --- /dev/null +++ b/src/app/question/chart.tsx @@ -0,0 +1,126 @@ +"use client" + +import { Pie, PieChart } from "recharts" + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { + ChartConfig, + ChartContainer, + ChartTooltip, + ChartTooltipContent, + ChartLegend, + ChartLegendContent, +} from "@/components/ui/chart" +const chartData1 = [ + { expenses: "housing", amount: 3219, fill: "var(--color-housing)" }, + { expenses: "food", amount: 3432, fill: "var(--color-food)" }, + { expenses: "transportation", amount: 3214, fill: "var(--color-transportation)" }, + { expenses: "healthcare", amount: 3213, fill: "var(--color-healthcare)" }, + { expenses: "entertainment", amount: 3211, fill: "var(--color-entertainment)" }, +] +const chartData2 = [ + { expenses: "housing", amount: 3219, fill: "var(--color-housing)" }, + { expenses: "food", amount: 3432, fill: "var(--color-food)" }, + { expenses: "healthcare", amount: 3213, fill: "var(--color-healthcare)" }, +] + +const chartConfig1 = { + amount: { + label: "Amount", + }, + housing: { + label: "Housing", + color: "hsl(var(--chart-1))", + }, + food: { + label: "Food", + color: "hsl(var(--chart-2))", + }, + transportation: { + label: "Transportation", + color: "hsl(var(--chart-3))", + }, + healthcare: { + label: "Healthcare", + color: "hsl(var(--chart-4))", + }, + entertainment: { + label: "Entertainment", + color: "hsl(var(--chart-5))", + }, +} satisfies ChartConfig +const chartConfig2 = { + amount: { + label: "Amount", + }, + housing: { + label: "Housing", + color: "hsl(var(--chart-1))", + }, + food: { + label: "Food", + color: "hsl(var(--chart-2))", + }, + healthcare: { + label: "Healthcare", + color: "hsl(var(--chart-4))", + }, +} satisfies ChartConfig + +export function Chart1() { + return ( + + + Plan1 + 50 - 30 - 20 + + + + + } /> + + } + className="-translate-y-2 flex-wrap gap-2 [&>*]:basis-1/4 [&>*]:justify-center" + /> + + + + + ) +} + +export function Chart2() { + return ( + + + Plan 2 + 60 - 20 - 20 + + + + + } /> + + } + className="-translate-y-2 flex-wrap gap-2 [&>*]:basis-1/4 [&>*]:justify-center" + /> + + + + + ) +} \ No newline at end of file diff --git a/src/app/question/form.tsx b/src/app/question/form.tsx new file mode 100644 index 0000000..4401b91 --- /dev/null +++ b/src/app/question/form.tsx @@ -0,0 +1,160 @@ +"use client" + +import { useState } from "react" +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm } from "react-hook-form" +import { z } from "zod" +import { useRouter } from "next/navigation" +import Link from "next/link" + +const items = [ + { + id: "housing", + label: "Housing", + }, + { + id: "food", + label: "Food", + }, + { + id: "transportation", + label: "Transportation", + }, + { + id: "healthcare", + label: "Healthcare", + }, + { + id: "entertainment", + label: "Entertainment", + }, +] + +const formSchema = z.object({ + income: z.string() + .min(1, "Income is required.") + .regex(/^\d+$/, "Income must be a number."), + housing: z.string() + .min(1, "Housing expenses is required.") + .regex(/^\d+$/, "Housing expenses must be a number."), + food: z.string() + .min(1, "Food expenses is required.") + .regex(/^\d+$/, "Food expenses must be a number."), + transportation: z.string() + .min(1, "Transportation expenses is required.") + .regex(/^\d+$/, "Transportation expenses must be a number."), + healthcare: z.string() + .min(1, "Healthcare expenses is required.") + .regex(/^\d+$/, "Healthcare expenses must be a number."), + entertainment: z.string() + .min(1, "Entertainment expenses is required.") + .regex(/^\d+$/, "Entertainment expenses must be a number."), +}) + +import { Button } from "@/components/ui/button" +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import { Checkbox } from "@/components/ui/checkbox" +import { Chart1, Chart2 } from "./chart" + +export function QuestionForm() { + const router = useRouter() + const [selectedItems, setSelectedItems] = useState([]) + + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + income: "", + housing: "", + food: "", + transportation: "", + healthcare: "", + entertainment: "", + }, + }) + + function onSubmit(values: z.infer) { + console.log(values) + } + + return ( +
+
+ + ( + + What is your income? + + + + + Enter your income in THB. + + + + )} + /> + +
+ Expenses + Select your expenses. +
+ {items.map((item) => ( + +
+ + { + setSelectedItems((prev) => + checked + ? [...prev, item.id] + : prev.filter((value) => value !== item.id) + ) + form.setValue( + item.id as "housing" | "food" | "transportation" | "healthcare" | "entertainment" | "income", + checked ? form.getValues(item.id as "housing" | "food" | "transportation" | "healthcare" | "entertainment" | "income") : "" + ) + }} + /> + + {item.label} +
+ {selectedItems.includes(item.id) && ( + ( + + + + )} + /> + )} +
+ ))} + +
+
+ + +
+ + + + + +
+ ) +} \ No newline at end of file diff --git a/src/app/question/page.tsx b/src/app/question/page.tsx new file mode 100644 index 0000000..5b110e5 --- /dev/null +++ b/src/app/question/page.tsx @@ -0,0 +1,10 @@ +import { QuestionForm } from "./form"; + +export default function Page() { + return ( +
+

Question

+ +
+ ); +} \ No newline at end of file diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 88cc939..7621a4e 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -13,9 +13,9 @@ export function Navbar() {
- ABOUT US - FAQ - + ABOUT US + FAQ +
diff --git a/src/components/ui/chart.tsx b/src/components/ui/chart.tsx new file mode 100644 index 0000000..8620baa --- /dev/null +++ b/src/components/ui/chart.tsx @@ -0,0 +1,365 @@ +"use client" + +import * as React from "react" +import * as RechartsPrimitive from "recharts" + +import { cn } from "@/lib/utils" + +// Format: { THEME_NAME: CSS_SELECTOR } +const THEMES = { light: "", dark: ".dark" } as const + +export type ChartConfig = { + [k in string]: { + label?: React.ReactNode + icon?: React.ComponentType + } & ( + | { color?: string; theme?: never } + | { color?: never; theme: Record } + ) +} + +type ChartContextProps = { + config: ChartConfig +} + +const ChartContext = React.createContext(null) + +function useChart() { + const context = React.useContext(ChartContext) + + if (!context) { + throw new Error("useChart must be used within a ") + } + + return context +} + +const ChartContainer = React.forwardRef< + HTMLDivElement, + React.ComponentProps<"div"> & { + config: ChartConfig + children: React.ComponentProps< + typeof RechartsPrimitive.ResponsiveContainer + >["children"] + } +>(({ id, className, children, config, ...props }, ref) => { + const uniqueId = React.useId() + const chartId = `chart-${id || uniqueId.replace(/:/g, "")}` + + return ( + +
+ + + {children} + +
+
+ ) +}) +ChartContainer.displayName = "Chart" + +const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => { + const colorConfig = Object.entries(config).filter( + ([_, config]) => config.theme || config.color + ) + + if (!colorConfig.length) { + return null + } + + return ( +