From fd86dc15734f3b7126d88f0130897c597100e30a Mon Sep 17 00:00:00 2001 From: polwex Date: Thu, 15 May 2025 20:32:25 +0700 Subject: m --- src/pages/_layout.tsx | 18 +- src/pages/api/proxy.ts | 2 +- src/pages/picker.tsx | 29 +++ src/pages/test/index.tsx | 21 +- src/pages/test/product-details-server.tsx | 340 ------------------------------ src/pages/zoom.tsx | 29 +++ 6 files changed, 71 insertions(+), 368 deletions(-) create mode 100644 src/pages/picker.tsx delete mode 100644 src/pages/test/product-details-server.tsx create mode 100644 src/pages/zoom.tsx (limited to 'src/pages') diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index 6d227c9..7f6a434 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -1,9 +1,9 @@ -import '../styles.css'; +import "../styles.css"; -import type { ReactNode } from 'react'; +import type { ReactNode } from "react"; -import { Header } from '../components/header'; -import { Footer } from '../components/footer'; +import { Header } from "../components/header"; +import { Footer } from "../components/footer"; type RootLayoutProps = { children: ReactNode }; @@ -14,19 +14,17 @@ export default async function RootLayout({ children }: RootLayoutProps) {
-
-
+
{children}
-
); } const getData = async () => { const data = { - description: 'An internet website!', - icon: '/images/favicon.png', + description: "An internet website!", + icon: "/images/favicon.png", }; return data; @@ -34,6 +32,6 @@ const getData = async () => { export const getConfig = async () => { return { - render: 'static', + render: "static", } as const; }; diff --git a/src/pages/api/proxy.ts b/src/pages/api/proxy.ts index 3114f6b..72e5fec 100644 --- a/src/pages/api/proxy.ts +++ b/src/pages/api/proxy.ts @@ -1,7 +1,7 @@ // import db from "../../lib/db"; import { z } from "zod"; -export const proxySchema = z.object({ +const proxySchema = z.object({ path: z.string().startsWith("/").optional(), url: z.string().url("Invalid urladdress"), body: z.any().optional(), diff --git a/src/pages/picker.tsx b/src/pages/picker.tsx new file mode 100644 index 0000000..9cd86f5 --- /dev/null +++ b/src/pages/picker.tsx @@ -0,0 +1,29 @@ +import { getContextData } from "waku/middleware/context"; +import App from "@/picker/App"; + +export default async function HomePage() { + const { user } = getContextData(); + + return ( +
+

Interactive Language Explorer

+ ; +
+ ); +} + +const getData = async () => { + const data = { + title: "Waku", + headline: "Waku", + body: "Hello world!", + }; + + return data; +}; + +export const getConfig = async () => { + return { + render: "dynamic", + } as const; +}; diff --git a/src/pages/test/index.tsx b/src/pages/test/index.tsx index 35ce5db..4c9325c 100644 --- a/src/pages/test/index.tsx +++ b/src/pages/test/index.tsx @@ -1,21 +1,12 @@ // This is a Server Component by default -import ProductDetailsServer from "./product-details-server"; +import ServerWord from "@/zoom/ServerWord"; import TriggerModalButton from "./trigger-modal-button"; // We'll make this a client component to manage state export default function SomePage() { const productIdForModal = "123"; // Or get this dynamically return ( -
-

- Modal with Server Component Content -

-

- This page demonstrates opening a modal whose content is rendered by a - Server Component. The modal shell (open/close logic) is a Client - Component. -

- +
{/* The TriggerModalButton will manage the modal's open/close state. It will receive the Server Component as a child to pass to ClientModal. @@ -23,12 +14,8 @@ export default function SomePage() { - + - -
-

Other content on the page...

-
-
+ ); } diff --git a/src/pages/test/product-details-server.tsx b/src/pages/test/product-details-server.tsx deleted file mode 100644 index 552ff21..0000000 --- a/src/pages/test/product-details-server.tsx +++ /dev/null @@ -1,340 +0,0 @@ -// This is a Server Component -import React from "react"; -import db from "@/lib/db"; -import { - Card, - CardHeader, - CardDescription, - CardContent, - CardFooter, - CardTitle, -} from "@/components/ui/card"; -import { NLP } from "sortug-ai"; -import { - BookOpen, - Volume2, - Link as LinkIcon, - ChevronDown, - ChevronUp, - Search, - Info, - MessageSquareQuote, - Tags, - ListTree, - Lightbulb, -} from "lucide-react"; -import { - Example, - SubSense, - RelatedEntry, - Sense, - WordData, -} from "@/zoom/logic/types"; - -export default async function Wordd({ - word, - lang, -}: { - word: string; - lang: string; -}) { - const data = db.fetchWordBySpelling(word, "en"); - console.log({ data }); - - if (!data) return

oh...

; - return ( - - - -

{word}

-
- - - -
- - {/* Senses */} -

- Meanings & Definitions -

- {data.senses.map((sense, index) => ( - - ))} -
- -
- ); - // return ( - //
- //

{word}

- //

${word.}

- //

{word}

- //

- // Content rendered on the server at: {new Date().toLocaleTimeString()} - //

- //
- // ); -} - -// Helper component for IPA display -const IpaDisplay = ({ - ipaEntries, -}: { - ipaEntries: Array<{ ipa: string; tags?: string[] }>; -}) => { - if (!ipaEntries || ipaEntries.length === 0) return null; - return ( -
- {ipaEntries.map((entry, index) => { - const tags = entry.tags ? entry.tags : []; - return ( - - {entry.ipa}{" "} - {tags.length > 0 && ( - ({tags.join(", ")}) - )} - - ); - })} - -
- ); -}; - -// Component for displaying examples -const ExampleDisplay = ({ examples }: { examples: Example[] }) => { - if (!examples || examples.length === 0) return null; - return ( -
-
- - Examples: -
- -
- ); -}; - -// Component for displaying related terms (synonyms, antonyms, etc.) -const RelatedTermsDisplay = ({ - terms, - type, -}: { - terms: RelatedEntry[] | undefined; - type: string; -}) => { - if (!terms || terms.length === 0) return null; - return ( -
- - {type}:{" "} - - {terms.map((term, idx) => ( - - - {term.word} - - {term.source && ( - ({term.source}) - )} - {idx < terms.length - 1 && ", "} - - ))} -
- ); -}; - -// Component for displaying a SubSense -const SubSenseDisplay = ({ - subSense, - subSenseNumber, -}: { - subSense: SubSense; - subSenseNumber: number; -}) => { - return ( -
- {subSense.glosses.map((gloss, glossIdx) => ( -

- - {subSenseNumber}.{glossIdx + 1} - {" "} - {gloss} -

- ))} - {subSense.raw_glosses && - subSense.raw_glosses.length > 0 && - subSense.raw_glosses.join("") !== subSense.glosses.join("") && ( -

- (Raw: {subSense.raw_glosses.join("; ")}) -

- )} - - {subSense.categories && subSense.categories.length > 0 && ( -
-
- - Categories: -
-
- {subSense.categories.map((cat, idx) => ( - - {cat} - - ))} -
-
- )} - - - - - {subSense.tags && subSense.tags.length > 0 && ( -
-
- - Tags: -
-
- {subSense.tags.map((tag, idx) => ( - - {tag} - - ))} -
-
- )} - - {subSense.links && subSense.links.length > 0 && ( -
- {subSense.links.map(([type, target], linkIdx) => ( - - {type} - - ))} -
- )} -
- ); -}; - -// Component for individual sense -const SenseCard = ({ - senseData, - senseNumber, -}: { - senseData: Sense; - senseNumber: number; -}) => { - return ( -
-
-

- {senseNumber}. {senseData.pos} -

-
- - {senseData.etymology && ( -
- - Etymology - - - -

- {senseData.etymology} -

-
- )} - - {senseData.forms && senseData.forms.length > 0 && ( -
-

Forms:

-
- {senseData.forms.map((form, idx) => ( - - {form.form}{" "} - {form.tags.length > 0 && `(${form.tags.join(", ")})`} - - ))} -
-
- )} - - {senseData.senses.map((subSense, idx) => ( - - ))} - - {senseData.related && ( -
-

- - Related Terms: -

- - - - -
- )} -
- ); -}; diff --git a/src/pages/zoom.tsx b/src/pages/zoom.tsx new file mode 100644 index 0000000..d088553 --- /dev/null +++ b/src/pages/zoom.tsx @@ -0,0 +1,29 @@ +import { getContextData } from "waku/middleware/context"; +import * as Zoom from "@/zoom"; + +export default async function HomePage() { + const { user } = getContextData(); + + return ( +
+

Interactive Language Explorer

+ ; +
+ ); +} + +const getData = async () => { + const data = { + title: "Waku", + headline: "Waku", + body: "Hello world!", + }; + + return data; +}; + +export const getConfig = async () => { + return { + render: "dynamic", + } as const; +}; -- cgit v1.2.3