From cb899d416c2986f1411f72efd57789c657fe89ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= <43091603+glazk0@users.noreply.github.com> Date: Sun, 12 Feb 2023 18:39:34 +0100 Subject: [PATCH] Added basic data fetch & ui update --- app/dashboard/layout.tsx | 9 +- app/dashboard/puzzles/[id]/page.tsx | 16 +++ app/dashboard/puzzles/page.tsx | 43 +++----- app/fonts/Karrik-Regular.woff2 | Bin 0 -> 31180 bytes app/fonts/Typefesse_Claire-Obscure.woff2 | Bin 0 -> 31460 bytes app/fonts/Typefesse_Pleine.woff2 | Bin 0 -> 19332 bytes app/layout.tsx | 24 ++++- lib/hooks/use-puzzles.ts | 14 +++ lib/puzzles.ts | 74 ++++++++++++++ next.config.js | 2 +- package.json | 1 + pnpm-lock.yaml | 11 +++ tailwind.config.js | 81 ++++++++++++++- ui/Button.tsx | 9 +- ui/Input.tsx | 2 +- ui/Puzzle.tsx | 52 ++++++++++ ui/Puzzles.tsx | 42 ++++++++ ui/SWRFallback.tsx | 15 +++ ui/UserAuthForm.tsx | 119 +++++++++++++++++++++++ ui/dashboard/Sidenav.tsx | 104 ++++++++++---------- ui/dashboard/Usernav.tsx | 42 ++++++++ ui/dashboard/Wrapper.tsx | 22 +++++ 22 files changed, 579 insertions(+), 103 deletions(-) create mode 100644 app/dashboard/puzzles/[id]/page.tsx create mode 100644 app/fonts/Karrik-Regular.woff2 create mode 100644 app/fonts/Typefesse_Claire-Obscure.woff2 create mode 100644 app/fonts/Typefesse_Pleine.woff2 create mode 100644 lib/hooks/use-puzzles.ts create mode 100644 lib/puzzles.ts create mode 100644 ui/Puzzle.tsx create mode 100644 ui/Puzzles.tsx create mode 100644 ui/SWRFallback.tsx create mode 100644 ui/UserAuthForm.tsx create mode 100644 ui/dashboard/Usernav.tsx create mode 100644 ui/dashboard/Wrapper.tsx diff --git a/app/dashboard/layout.tsx b/app/dashboard/layout.tsx index cc82104..d132f03 100644 --- a/app/dashboard/layout.tsx +++ b/app/dashboard/layout.tsx @@ -1,16 +1,11 @@ import { type ReactNode } from 'react'; -import Sidenav from '@/ui/dashboard/Sidenav'; +import Wrapper from '@/ui/dashboard/Wrapper'; export default function Layout({ children }: { children: ReactNode }) { return (
-
- -
- {children} -
-
+ {children}
); } diff --git a/app/dashboard/puzzles/[id]/page.tsx b/app/dashboard/puzzles/[id]/page.tsx new file mode 100644 index 0000000..659f9ca --- /dev/null +++ b/app/dashboard/puzzles/[id]/page.tsx @@ -0,0 +1,16 @@ +import Puzzle from '@/ui/Puzzle'; + +export default async function Page({ params }: { params: { id: string } }) { + const { id } = params; + + return ( + // + + // + ); +} + +// export async function generateStaticParams() { +// const { puzzles } = await getPuzzles(); +// return puzzles.map(({ id }) => ({ params: { id } })); +// } diff --git a/app/dashboard/puzzles/page.tsx b/app/dashboard/puzzles/page.tsx index e5e4acf..ac633e1 100644 --- a/app/dashboard/puzzles/page.tsx +++ b/app/dashboard/puzzles/page.tsx @@ -1,39 +1,18 @@ -import Button from '@/ui/Button'; -import Input from '@/ui/Input'; -import ToHTML from '@/ui/ToHTML'; +import Puzzles from '@/ui/Puzzles'; +import SWRFallback from '@/ui/SWRFallback'; + +export default async function Page() { + // const puzzles = await getPuzzles(); -export default function Page() { - // on va utiliser react-hook-form https://react-hook-form.com/ return (
-
-

Titre du puzzle

-

Chapitre 2 - Les boucles à boucler

+
+
+ {/* */} + + {/* */} +
-
- -
-
-
- - -
- -
); } diff --git a/app/fonts/Karrik-Regular.woff2 b/app/fonts/Karrik-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..875481531cbacba59a5c264c55724cf0eafde8fe GIT binary patch literal 31180 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 literal 0 HcmV?d00001 diff --git a/app/fonts/Typefesse_Claire-Obscure.woff2 b/app/fonts/Typefesse_Claire-Obscure.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..42a7dce62b734d329aa1ac4190c808c45de1a1ea GIT binary patch literal 31460 zcmV(@K-Rx^Pew9NR8&s@0D9yA3IG5A0GCt%0D77L0RR9100000000000000000000 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

e_v#xX~^fpJq7?Y6yN~; zFP(FM{i6f^^}t6N004|tw1#-z{aB~4@1Ih$KB*=?&NPeq{rf?|`~mECCVsz9-jNv+ z0|u_X(NxD7b;PU+u` z*-K5q_6C$r$7?otA=E#FZRy?vz^8>Fdt^&cIs$=DQ-CvKaBA20od=k<9mn9zO$!qJ zizhT61*AqnGN^{E?SAO^72x1^0t8}d4}+89@9MNtQsdaoV%xUv{bn^R+m21?1u{*N zZy*kmVR@P?ARyyR0QhtY_LO7hKOOhrzWSqjWuNDJ6WeE*RqKL2oDkX zhb|CEa2OOZ1{>E2N(YXl7AG`)>?)sQp2Oq~0R3L@8EV03;6_)SSUqGVSalf!jJDcy|cQ0XFZcJHW2$VBcPNO~da$ zxyM5O0^yyvnc(wHo(W*Q7d)y#S^glA^J7>b1{ebXE5a1M8JS@TK@nJkLXiZTr5rF= zdcYDJ1c&7ocqU##Kr#;zJH-1WRnZ5U^SZk+}UJk#_|&^d7%3WZIYiPo!ky|A^$;6*E?)Lt9t0jCQiygF65F(n9}T z(!dRf&|wr=ueF&ZjK+%prRZ9#6JQURG$93KC^e;CtF`LH7hrbEr=7NxJZ!6Kk_9C; zd8U{`)vVisjVTF(gc>bh-8CwWy$OcP2o8%)Lcfrq>8%nvMf_tFKx>hBd5c0_h5-Cy zW!I1ochk9KND$Z(bkgs%pm3E`?kxKuv1T~>)m zS$_doB3%zgSG3n(b*^pPI?*9#e_7p#5ULIq)G31XHbx@YWGt2yU6htsAHY0d!k9qH zycj^$r2Z+j$J5u@SxNLQlxSiL-4YjStFN|1D+Fhdy`EwcRMTp!ZQ`3Gp?9lk!rEz6 P-sc2#;dS=##of>wlJ6w` literal 0 HcmV?d00001 diff --git a/app/fonts/Typefesse_Pleine.woff2 b/app/fonts/Typefesse_Pleine.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4b47d54f062ecae1c5ae1e0dd280fda3234ff60c GIT binary patch literal 19332 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 D)ZNsK literal 0 HcmV?d00001 diff --git a/app/layout.tsx b/app/layout.tsx index 379035b..6e68694 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,12 +1,34 @@ import '@/styles/globals.css'; import 'remixicon/fonts/remixicon.css'; +import { Fira_Code } from '@next/font/google'; +import localFont from '@next/font/local'; import { cn } from '@/lib/utils'; import { type ReactNode } from 'react'; +const sans = localFont({ + variable: '--font-sans', + src: './fonts/Karrik-Regular.woff2', + weight: 'variable' +}); + +const code = Fira_Code({ + variable: '--font-code', + subsets: ['latin'], + weight: 'variable' +}); + export default function RootLayout({ children }: { children: ReactNode }) { return ( - +
{children}
diff --git a/lib/hooks/use-puzzles.ts b/lib/hooks/use-puzzles.ts new file mode 100644 index 0000000..5179084 --- /dev/null +++ b/lib/hooks/use-puzzles.ts @@ -0,0 +1,14 @@ +import useSWR from 'swr'; +import { getChapters, getPuzzle, getPuzzles } from '../puzzles'; + +export function useChapters() { + return useSWR('chapters', () => getChapters()); +} + +export function usePuzzles() { + return useSWR('puzzles', () => getPuzzles()); +} + +export function usePuzzle(id: string) { + return useSWR(`puzzles/${id}`, () => getPuzzle(id)); +} diff --git a/lib/puzzles.ts b/lib/puzzles.ts new file mode 100644 index 0000000..b0cd355 --- /dev/null +++ b/lib/puzzles.ts @@ -0,0 +1,74 @@ +export const getChapters = async (): Promise => { + const req = await fetch(`http://170.75.166.204/chapters`); + + const chapters = await req.json(); + + if (!req.ok) { + throw new Error('Failed to fetch puzzles'); + } + + if (!chapters) { + return []; + } + + return chapters as Chapter[]; +}; + +export const getPuzzlesByChapter = async (chapitre: string): Promise => { + const req = await fetch(`http://170.75.166.204/chapter/${chapitre}`); + + const { puzzles } = await req.json(); + + if (!req.ok) { + throw new Error('Failed to fetch puzzles'); + } + + if (!puzzles) { + return []; + } + + return puzzles as Puzzle[]; +}; + +export const getPuzzles = async (): Promise<{ chapters: Chapter[]; puzzles: Puzzle[] }> => { + const chapters = await getChapters(); + let puzzles: Puzzle[] = []; + + for (const chapter of chapters) { + const puzzlesByChapter = await getPuzzlesByChapter(chapter.id); + puzzles = [...puzzles, ...puzzlesByChapter]; + } + + return { + chapters: chapters as Chapter[], + puzzles: puzzles as Puzzle[] + }; +}; + +export const getPuzzle = async (id: string): Promise => { + const req = await fetch(`http://170.75.166.204/puzzle/${id}`); + + const puzzle = await req.json(); + + if (!req.ok) { + throw new Error('Failed to fetch puzzle'); + } + + if (!puzzle) { + return {} as Puzzle; + } + + return puzzle as Puzzle; +}; + +export type Puzzle = { + chapter: string; + name: string; + id: string; + content: string; +}; + +export type Chapter = { + name: string; + id: string; +}; diff --git a/next.config.js b/next.config.js index b859826..d83edcb 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, // Recommended for the `pages` directory, default in `app`. + reactStrictMode: true, swcMinify: true, experimental: { appDir: true diff --git a/package.json b/package.json index 1fb1da7..9858462 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "next": "13.1.6", "react": "18.2.0", "react-dom": "18.2.0", + "react-hook-form": "^7.43.1", "remixicon": "^2.5.0", "swr": "^2.0.3", "tailwind-merge": "^1.9.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 317a6a7..11eab58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ specifiers: prettier-plugin-tailwindcss: ^0.2.2 react: 18.2.0 react-dom: 18.2.0 + react-hook-form: ^7.43.1 remixicon: ^2.5.0 swr: ^2.0.3 tailwind-merge: ^1.9.0 @@ -33,6 +34,7 @@ dependencies: next: 13.1.6_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 remixicon: 2.5.0 swr: 2.0.3_react@18.2.0 tailwind-merge: 1.9.0 @@ -2268,6 +2270,15 @@ packages: scheduler: 0.23.0 dev: false + /react-hook-form/7.43.1_react@18.2.0: + resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + /react-is/16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true diff --git a/tailwind.config.js b/tailwind.config.js index 6713391..a342765 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,3 +1,5 @@ +const defaultTheme = require('tailwindcss/defaultTheme'); + /** @type {import('tailwindcss').Config} */ module.exports = { mode: 'jit', @@ -7,9 +9,84 @@ module.exports = { }, theme: { extend: { + fontFamily: { + sans: ['var(--font-sans)', ...defaultTheme.fontFamily.sans], + code: ['var(--font-code)', ...defaultTheme.fontFamily.serif] + }, colors: { - 'light-dark': '#282828', - dark: '#202020' + ...require('tailwindcss/colors'), + primary: { + 900: 'hsl(258deg 15% 7%)', + 800: 'hsl(258deg 15% 11%)', + 700: 'hsl(258deg 15% 15%)', + 600: 'hsl(258deg 15% 20%)', + 500: 'hsl(258deg 15% 25%)', + 400: 'hsl(258deg 14% 35%)', + 300: 'hsl(258deg 13% 45%)', + 200: 'hsl(258deg 13% 55%)', + 100: 'hsl(258deg 10% 65%)', + 50: 'hsl(258deg 8% 85%)', + 0: 'hsl(258deg 8% 100%)' + }, + brand: { + DEFAULT: '#1c56cb', + accent: '#236bfe' + }, + success: { + DEFAULT: 'hsl(104deg 39% 59%)', + secondary: '#b5e4ca', + background: '#60a747' + }, + info: { + DEFAULT: 'hsl(258deg 78% 77%)', + secondary: '#ccb8f9', + background: '#9878de' + }, + warning: { + DEFAULT: 'hsl(39deg 100% 67%)', + secondary: '#ffd88d', + background: '#da9b34' + }, + error: { + DEFAULT: 'hsl(7deg 100% 67%)', + secondary: '#ffbc99', + background: '#cd4634' + }, + highlight: { + primary: 'hsl(258deg 15% 17%)', + secondary: 'hsl(258deg 10% 46%)' + }, + product: { + ignite: 'hsl(8deg 89% 57%)', + pipe: 'hsl(214deg 100% 58%)', + channels: 'hsl(46deg 74% 51%)' + } + }, + backgroundColor: { + primary: { + DEFAULT: 'hsl(258deg 15% 7%)', + 900: 'hsl(258deg 15% 7%)', + 800: 'hsl(258deg 15% 11%)', + 700: 'hsl(258deg 15% 15%)', + 600: 'hsl(258deg 15% 20%)', + 500: 'hsl(258deg 15% 25%)', + 400: 'hsl(258deg 14% 35%)', + 300: 'hsl(258deg 13% 45%)', + 200: 'hsl(258deg 13% 55%)', + 100: 'hsl(258deg 10% 65%)', + 50: 'hsl(258deg 8% 85%)', + 0: 'hsl(258deg 8% 100%)' + }, + secondary: 'hsl(258deg 15% 11%)', + tertiary: 'hsl(258deg 15% 17%)', + contrast: '#4f5450' + }, + textColor: { + primary: 'hsl(258deg 8% 100%)', + secondary: 'hsl(258deg 8% 84%)', + tertiary: 'hsl(258deg 8% 65%)', + secondaryAccent: '#e2e8f0', + muted: 'hsl(258deg 7% 46%)' } } }, diff --git a/ui/Button.tsx b/ui/Button.tsx index 86f62e3..2ec101f 100644 --- a/ui/Button.tsx +++ b/ui/Button.tsx @@ -4,16 +4,17 @@ import { forwardRef } from 'react'; const Button = forwardRef< HTMLButtonElement, React.ButtonHTMLAttributes & { - kind?: 'default' | 'outline' | 'danger'; + kind?: 'default' | 'danger' | 'brand'; } >(({ kind = 'default', className, ...props }, ref) => ( + +
+ ); +} diff --git a/ui/Puzzles.tsx b/ui/Puzzles.tsx new file mode 100644 index 0000000..560a255 --- /dev/null +++ b/ui/Puzzles.tsx @@ -0,0 +1,42 @@ +'use client'; + +import { usePuzzles } from '@/lib/hooks/use-puzzles'; +import AppLink from './AppLink'; +import Icon from './Icon'; + +export default function Puzzles() { + const { data, isLoading } = usePuzzles(); + return ( + <> + {!isLoading && + data?.chapters?.map((chapter) => ( +
+
+

+ Chapitre {chapter.id} - {chapter.name} +

+
+
+
+
+
    + {data?.puzzles.map((puzzle) => ( + +
  • +
    + {puzzle.id} + {puzzle.name} +
    + +
  • +
    + ))} +
+
+ ))} + + ); +} diff --git a/ui/SWRFallback.tsx b/ui/SWRFallback.tsx new file mode 100644 index 0000000..ba5d09d --- /dev/null +++ b/ui/SWRFallback.tsx @@ -0,0 +1,15 @@ +'use client'; + +import { SWRConfig } from 'swr'; + +export default function SWRFallback({ + children, + fallback +}: { + children: React.ReactNode; + fallback: { + [key: string]: unknown; + }; +}) { + return {children}; +} diff --git a/ui/UserAuthForm.tsx b/ui/UserAuthForm.tsx new file mode 100644 index 0000000..03c304b --- /dev/null +++ b/ui/UserAuthForm.tsx @@ -0,0 +1,119 @@ +'use client'; + +import { usePathname, useRouter } from 'next/navigation'; +import { useForm } from 'react-hook-form'; +import AppLink from './AppLink'; +import Button from './Button'; +import Input from './Input'; + +export default function UserAuthForm() { + return ( + <> + + + ); +} + +type FormData = { + email?: string; + username: string; + password: string; +}; + +function AuthForm() { + const { + register, + handleSubmit, + formState: { errors }, + setError + } = useForm({ + defaultValues: { + email: '', + username: '', + password: '' + } + }); + + const router = useRouter(); + const pathname = usePathname()!; + const isSignIn = pathname.includes('sign-in'); + + async function onSubmit(data: FormData) { + const res = await fetch(`http://170.75.166.204/${isSignIn ? 'login' : 'register'}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + ...data + }) + }); + + if (res.status === 200) { + router.push('/dashboard'); + } + } + + return ( +
+ {!isSignIn && ( + + // {translations.noAccountAssociated}{' '} + // + // {translations.signUpQuestion} + // + // + // ) : ( + // errors.email.message + // )) + } + {...register('email')} + /> + )} + + + + {/* {!isSignIn && ( +

+ En cliquant sur continuer, vous acceptez les{' '} + + Politique de confidentialité + + . +

+ )} */} +

+ {isSignIn ? "Vous n'avez pas de compte?" : 'Vous possédez un compte?'}{' '} + + {isSignIn ? "S'inscrire maintenant" : 'Se connecter'} + +

+
+ ); +} diff --git a/ui/dashboard/Sidenav.tsx b/ui/dashboard/Sidenav.tsx index a72bbb7..dbaf5ec 100644 --- a/ui/dashboard/Sidenav.tsx +++ b/ui/dashboard/Sidenav.tsx @@ -2,98 +2,92 @@ import { NavItem, navItems } from '@/lib/nav-items'; import { cn } from '@/lib/utils'; -import Image from 'next/image'; import { useSelectedLayoutSegment } from 'next/navigation'; -import { useState } from 'react'; -import Logo from '../../public/logo.webp'; import AppLink from '../AppLink'; import Icon from '../Icon'; -export default function Sidenav() { - const [isOpen, setIsOpen] = useState(false); - - function toggleSidenav() { - setIsOpen(!isOpen); - } - +export default function Sidenav({ isOpen, toggle }: { isOpen: boolean; toggle: () => void }) { return ( ); } -function NavItem({ item, isOpen }: { item: NavItem; isOpen: boolean }) { +function NavItem({ + item, + isOpen, + onClick +}: { + item: NavItem; + isOpen: boolean; + onClick?: () => void; +}) { const segment = useSelectedLayoutSegment(); const isActive = segment?.split('/').pop() === item.slug || (item.slug === '' && !segment); return ( -
+
diff --git a/ui/dashboard/Usernav.tsx b/ui/dashboard/Usernav.tsx new file mode 100644 index 0000000..6a245ea --- /dev/null +++ b/ui/dashboard/Usernav.tsx @@ -0,0 +1,42 @@ +'use client'; + +import { useSelectedLayoutSegment } from 'next/navigation'; +import Icon from '../Icon'; + +export default function Usernav({ isOpen, toggle }: { isOpen: boolean; toggle: () => void }) { + const segment = useSelectedLayoutSegment(); + + // segment to TitleCase + const titleCase = (str: string) => { + return str + .toLowerCase() + .split(' ') + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); + }; + + return ( +
+
+
+ +
+ {segment && ( +
+ {titleCase(segment)} +
+ )} +
+
+
+ +
+
+ T +
+
+
+ ); +} diff --git a/ui/dashboard/Wrapper.tsx b/ui/dashboard/Wrapper.tsx new file mode 100644 index 0000000..dd65d66 --- /dev/null +++ b/ui/dashboard/Wrapper.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { useState, type ReactNode } from 'react'; + +import Sidenav from './Sidenav'; +import Usernav from './Usernav'; + +export default function Wrapper({ children }: { children: ReactNode }) { + const [isOpen, setIsOpen] = useState(false); + const toggle = () => setIsOpen(!isOpen); + return ( +
+ +
+ +
+ {children} +
+
+
+ ); +}