diff --git a/dashboard_js/.prettierrc b/dashboard_js/.prettierrc new file mode 100644 index 0000000..2b5fa44 --- /dev/null +++ b/dashboard_js/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "jsxSingleQuote": false +} diff --git a/dashboard_js/app/app.css b/dashboard_js/app/app.css index ffd4898..211842a 100644 --- a/dashboard_js/app/app.css +++ b/dashboard_js/app/app.css @@ -1,8 +1,9 @@ @import 'tailwindcss'; @theme { - --font-sans: 'Roboto', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Color Emoji'; + --font-sans: + 'Roboto', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; --color-yellow-primary: #ffcf82; --color-yellow-secondary: #f2ebe1; diff --git a/dashboard_js/app/components/logo.tsx b/dashboard_js/app/components/logo.tsx index a631305..5beb502 100644 --- a/dashboard_js/app/components/logo.tsx +++ b/dashboard_js/app/components/logo.tsx @@ -2,16 +2,29 @@ import React from 'react' export function Regular({ ...props }) { return ( - + - - - + + + + - - - + + + - -); + , +) diff --git a/dashboard_js/app/hooks/use-auth.tsx b/dashboard_js/app/hooks/use-auth.tsx index ccff976..dbe391a 100644 --- a/dashboard_js/app/hooks/use-auth.tsx +++ b/dashboard_js/app/hooks/use-auth.tsx @@ -1,14 +1,33 @@ -import { useMemo, useCallback, createContext, useState } from 'react' +import { + useContext, + useMemo, + useCallback, + createContext, + useState, +} from 'react' import * as Auth from 'aws-amplify/auth' -const AuthContext = createContext(null) +interface AuthContextType { + authUser: Auth.FetchUserAttributesOutput | null + signIn: ({ + username, + password, + }: { + username: string + password: string + }) => Promise + currentUser: () => Promise +} + +const AuthContext = createContext(null) export function useAuth() { return useContext(AuthContext) } -export function AuthProvider({ children }) { - const [authUser, setAuthUser] = useState(null) +export function AuthProvider({ children }: { children: React.ReactNode }) { + const [authUser, setAuthUser] = + useState(null) const currentUser = useCallback(async () => { try { @@ -21,30 +40,41 @@ export function AuthProvider({ children }) { } }, []) - const signIn = useCallback(async ({ username, password }) => { - const signInOut = await Auth.signIn({ + const signIn = useCallback( + async ({ username, password, - options: { - clientMetadata: {}, - }, - }) + }: { + username: string + password: string + }): Promise => { + const signInOut = await Auth.signIn({ + username, + password, + options: { + clientMetadata: {}, + }, + }) - if (signInOut?.isSignedIn) { - setAuthUser(await Auth.fetchUserAttributes()) - } + if (signInOut?.isSignedIn) { + setAuthUser(await Auth.fetchUserAttributes()) + } - return signInOut - }, []) + return signInOut + }, + [], + ) - const ctxValue = useMemo( + const ctxValue = useMemo( () => ({ authUser, signIn, currentUser, }), - [authUser] + [authUser, signIn, currentUser], ) - return {children} + return ( + {children} + ) } diff --git a/dashboard_js/app/layouts/_pulse.tsx b/dashboard_js/app/layouts/_pulse.tsx index 932e3c1..9c2f254 100644 --- a/dashboard_js/app/layouts/_pulse.tsx +++ b/dashboard_js/app/layouts/_pulse.tsx @@ -250,5 +250,5 @@ export default function Pulse({ ...props }) { - ); + ) } diff --git a/dashboard_js/app/layouts/app.tsx b/dashboard_js/app/layouts/app.tsx index 9a59566..5ebd05e 100644 --- a/dashboard_js/app/layouts/app.tsx +++ b/dashboard_js/app/layouts/app.tsx @@ -1,10 +1,10 @@ -import { useNavigation } from "react-router"; -import { Link } from "react-router"; -import { Outlet } from "react-router"; +import { useNavigation } from 'react-router' +import { Link } from 'react-router' +import { Outlet } from 'react-router' export default function Layout() { - const navigation = useNavigation(); - const isNavigating = Boolean(navigation.location); + const navigation = useNavigation() + const isNavigating = Boolean(navigation.location) return ( <> @@ -18,5 +18,5 @@ export default function Layout() { {isNavigating ? <>Loading... : } - ); + ) } diff --git a/dashboard_js/app/layouts/auth.tsx b/dashboard_js/app/layouts/auth.tsx index 3aea74d..337ed2f 100644 --- a/dashboard_js/app/layouts/auth.tsx +++ b/dashboard_js/app/layouts/auth.tsx @@ -1,10 +1,10 @@ -import { Outlet } from "react-router"; -import { Regular as Logo } from "~/components/logo"; -import Pulse from "./_pulse"; -import WomanImg from "./woman.png"; +import { Outlet } from 'react-router' +import { Regular as Logo } from '~/components/logo' +import Pulse from './_pulse' +import WomanImg from './woman.png' export default function Auth() { - const year = new Date().getFullYear(); + const year = new Date().getFullYear() return ( <> @@ -47,5 +47,5 @@ export default function Auth() { - ); + ) } diff --git a/dashboard_js/app/root.tsx b/dashboard_js/app/root.tsx index 9fbcf0f..cd894f2 100644 --- a/dashboard_js/app/root.tsx +++ b/dashboard_js/app/root.tsx @@ -1,4 +1,4 @@ -import type { Route } from "./+types/root"; +import type { Route } from './+types/root' import { isRouteErrorResponse, Links, @@ -6,27 +6,27 @@ import { Outlet, Scripts, ScrollRestoration, -} from "react-router"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { Amplify } from "aws-amplify"; -import { AuthProvider } from "~/hooks/use-auth"; -import amplifyconfig from "./amplifyconfiguration.json"; +} from 'react-router' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { Amplify } from 'aws-amplify' +import { AuthProvider } from '~/hooks/use-auth' +import amplifyconfig from './amplifyconfiguration.json' -Amplify.configure(amplifyconfig); -const queryClient = new QueryClient(); +Amplify.configure(amplifyconfig) +const queryClient = new QueryClient() export const links: Route.LinksFunction = () => [ - { rel: "preconnect", href: "https://fonts.googleapis.com" }, + { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, { - rel: "preconnect", - href: "https://fonts.gstatic.com", - crossOrigin: "anonymous", + rel: 'preconnect', + href: 'https://fonts.gstatic.com', + crossOrigin: 'anonymous', }, { - rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap", + rel: 'stylesheet', + href: 'https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap', }, -]; +] export function Layout({ children }: { children: React.ReactNode }) { return ( @@ -44,7 +44,7 @@ export function Layout({ children }: { children: React.ReactNode }) { - ); + ) } export default function App() { @@ -54,7 +54,7 @@ export default function App() { - ); + ) } export function HydrateFallback() { @@ -69,23 +69,23 @@ export function HydrateFallback() { } `} - ); + ) } export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { - let message = "Oops!"; - let details = "An unexpected error occurred."; - let stack: string | undefined; + let message = 'Oops!' + let details = 'An unexpected error occurred.' + let stack: string | undefined if (isRouteErrorResponse(error)) { - message = error.status === 404 ? "404" : "Error"; + message = error.status === 404 ? '404' : 'Error' details = error.status === 404 - ? "The requested page could not be found." - : error.statusText || details; + ? 'The requested page could not be found.' + : error.statusText || details } else if (import.meta.env.DEV && error && error instanceof Error) { - details = error.message; - stack = error.stack; + details = error.message + stack = error.stack } return ( @@ -99,5 +99,5 @@ export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { )} - ); + ) } diff --git a/dashboard_js/app/routes.ts b/dashboard_js/app/routes.ts index 28db0f0..5c8318b 100644 --- a/dashboard_js/app/routes.ts +++ b/dashboard_js/app/routes.ts @@ -4,21 +4,21 @@ import { route, layout, prefix, -} from "@react-router/dev/routes"; +} from '@react-router/dev/routes' export default [ - layout("layouts/app.tsx", [ - index("routes/overview/index.tsx"), - route("users", "routes/users/index.tsx"), - route("orders", "routes/orders/index.tsx"), - route("enrollments", "routes/enrollments/index.tsx"), + layout('layouts/app.tsx', [ + index('routes/overview/index.tsx'), + route('users', 'routes/users/index.tsx'), + route('orders', 'routes/orders/index.tsx'), + route('enrollments', 'routes/enrollments/index.tsx'), ]), - layout("layouts/auth.tsx", [ - ...prefix("auth", [ - index("routes/auth/signin/index.tsx"), - route("signup", "routes/auth/signup/index.tsx"), - route("forgot", "routes/auth/forgot/index.tsx"), - route("passcode", "routes/auth/passcode/index.tsx"), + layout('layouts/auth.tsx', [ + ...prefix('auth', [ + index('routes/auth/signin/index.tsx'), + route('signup', 'routes/auth/signup/index.tsx'), + route('forgot', 'routes/auth/forgot/index.tsx'), + route('passcode', 'routes/auth/passcode/index.tsx'), ]), ]), -] satisfies RouteConfig; +] satisfies RouteConfig diff --git a/dashboard_js/app/routes/auth/forgot/index.tsx b/dashboard_js/app/routes/auth/forgot/index.tsx index df0d2b5..2a3879a 100644 --- a/dashboard_js/app/routes/auth/forgot/index.tsx +++ b/dashboard_js/app/routes/auth/forgot/index.tsx @@ -5,5 +5,5 @@ export default function Forgot() { Username - ); + ) } diff --git a/dashboard_js/app/routes/auth/signin/index.tsx b/dashboard_js/app/routes/auth/signin/index.tsx index 69f36d3..73af6ef 100644 --- a/dashboard_js/app/routes/auth/signin/index.tsx +++ b/dashboard_js/app/routes/auth/signin/index.tsx @@ -4,5 +4,5 @@ export default function Signin() { Username - ); + ) } diff --git a/dashboard_js/app/routes/auth/signup/index.tsx b/dashboard_js/app/routes/auth/signup/index.tsx index 5d3bfc1..614dc3b 100644 --- a/dashboard_js/app/routes/auth/signup/index.tsx +++ b/dashboard_js/app/routes/auth/signup/index.tsx @@ -4,5 +4,5 @@ export default function Signup() { Username - ); + ) } diff --git a/dashboard_js/app/routes/enrollments/$id.tsx b/dashboard_js/app/routes/enrollments/$id.tsx index 57f042b..5622b90 100644 --- a/dashboard_js/app/routes/enrollments/$id.tsx +++ b/dashboard_js/app/routes/enrollments/$id.tsx @@ -1,3 +1,3 @@ export default function Component() { - return <>enrollments single; + return <>enrollments single } diff --git a/dashboard_js/app/routes/enrollments/index.tsx b/dashboard_js/app/routes/enrollments/index.tsx index 00b6a14..d1a3c22 100644 --- a/dashboard_js/app/routes/enrollments/index.tsx +++ b/dashboard_js/app/routes/enrollments/index.tsx @@ -1,7 +1,7 @@ export function meta({}) { - return [{ title: "Matrículas" }]; + return [{ title: 'Matrículas' }] } export default function Component() { - return <>enrollments index; + return <>enrollments index } diff --git a/dashboard_js/app/routes/orders/$id.tsx b/dashboard_js/app/routes/orders/$id.tsx index 8c8d66f..e55d385 100644 --- a/dashboard_js/app/routes/orders/$id.tsx +++ b/dashboard_js/app/routes/orders/$id.tsx @@ -4,5 +4,5 @@ export default function Component() { Pagamentos

orders single

- ); + ) } diff --git a/dashboard_js/app/routes/orders/index.tsx b/dashboard_js/app/routes/orders/index.tsx index 0874605..71648b1 100644 --- a/dashboard_js/app/routes/orders/index.tsx +++ b/dashboard_js/app/routes/orders/index.tsx @@ -1,7 +1,7 @@ export function meta({}) { - return [{ title: "Pagamentos" }]; + return [{ title: 'Pagamentos' }] } export default function Component() { - return <>overview single; + return <>overview single } diff --git a/dashboard_js/app/routes/overview/index.tsx b/dashboard_js/app/routes/overview/index.tsx index 84db3e0..3da176d 100644 --- a/dashboard_js/app/routes/overview/index.tsx +++ b/dashboard_js/app/routes/overview/index.tsx @@ -1,7 +1,7 @@ export function meta({}) { - return [{ title: "Visão geral" }]; + return [{ title: 'Visão geral' }] } export default function Component() { - return <>overview index; + return <>overview index } diff --git a/dashboard_js/app/routes/users/index.tsx b/dashboard_js/app/routes/users/index.tsx index 1dc82c3..231a381 100644 --- a/dashboard_js/app/routes/users/index.tsx +++ b/dashboard_js/app/routes/users/index.tsx @@ -1,17 +1,17 @@ -import { useSuspenseQuery } from "@tanstack/react-query"; +import { useSuspenseQuery } from '@tanstack/react-query' export function meta({}) { - return [{ title: "Usuários" }]; + return [{ title: 'Usuários' }] } export default function Component() { const info = useSuspenseQuery({ - queryKey: ["todos"], + queryKey: ['todos'], queryFn: async () => { - await new Promise((r) => setTimeout(r, 3000)); - return { data: "todos" }; + await new Promise((r) => setTimeout(r, 3000)) + return { data: 'todos' } }, - }); + }) - return <>users index; + return <>users index } diff --git a/dashboard_js/app/welcome/logo-dark.svg b/dashboard_js/app/welcome/logo-dark.svg deleted file mode 100644 index dd82028..0000000 --- a/dashboard_js/app/welcome/logo-dark.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dashboard_js/app/welcome/logo-light.svg b/dashboard_js/app/welcome/logo-light.svg deleted file mode 100644 index 7328492..0000000 --- a/dashboard_js/app/welcome/logo-light.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dashboard_js/app/welcome/welcome.tsx b/dashboard_js/app/welcome/welcome.tsx deleted file mode 100644 index 8ac6e1d..0000000 --- a/dashboard_js/app/welcome/welcome.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import logoDark from "./logo-dark.svg"; -import logoLight from "./logo-light.svg"; - -export function Welcome() { - return ( -
-
-
-
- React Router - React Router -
-
-
- -
-
-
- ); -} - -const resources = [ - { - href: "https://reactrouter.com/docs", - text: "React Router Docs", - icon: ( - - - - ), - }, - { - href: "https://rmx.as/discord", - text: "Join Discord", - icon: ( - - - - ), - }, -]; diff --git a/dashboard_js/package-lock.json b/dashboard_js/package-lock.json index 4d97cb6..3914323 100644 --- a/dashboard_js/package-lock.json +++ b/dashboard_js/package-lock.json @@ -23,6 +23,7 @@ "@types/node": "^20", "@types/react": "^19.0.1", "@types/react-dom": "^19.0.1", + "prettier": "^3.5.1", "react-router-devtools": "^1.1.0", "tailwindcss": "^4.0.0", "typescript": "^5.7.2", @@ -3246,6 +3247,21 @@ } } }, + "node_modules/@react-router/dev/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@react-router/express": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.2.0.tgz", @@ -7510,15 +7526,16 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", + "dev": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" diff --git a/dashboard_js/package.json b/dashboard_js/package.json index 60924f0..3f9d2b2 100644 --- a/dashboard_js/package.json +++ b/dashboard_js/package.json @@ -26,6 +26,7 @@ "@types/node": "^20", "@types/react": "^19.0.1", "@types/react-dom": "^19.0.1", + "prettier": "^3.5.1", "react-router-devtools": "^1.1.0", "tailwindcss": "^4.0.0", "typescript": "^5.7.2", diff --git a/dashboard_js/react-router.config.ts b/dashboard_js/react-router.config.ts index b8b143a..bd958e7 100644 --- a/dashboard_js/react-router.config.ts +++ b/dashboard_js/react-router.config.ts @@ -1,7 +1,7 @@ -import type { Config } from "@react-router/dev/config"; +import type { Config } from '@react-router/dev/config' export default { // Config options... // Server-side render by default, to enable SPA mode set this to `false` ssr: false, -} satisfies Config; +} satisfies Config diff --git a/dashboard_js/vite.config.ts b/dashboard_js/vite.config.ts index 4a88d58..de677b2 100644 --- a/dashboard_js/vite.config.ts +++ b/dashboard_js/vite.config.ts @@ -1,8 +1,8 @@ -import { reactRouter } from "@react-router/dev/vite"; -import tailwindcss from "@tailwindcss/vite"; -import { defineConfig } from "vite"; -import tsconfigPaths from "vite-tsconfig-paths"; +import { reactRouter } from '@react-router/dev/vite' +import tailwindcss from '@tailwindcss/vite' +import { defineConfig } from 'vite' +import tsconfigPaths from 'vite-tsconfig-paths' export default defineConfig({ plugins: [tailwindcss(), reactRouter(), tsconfigPaths()], -}); +})