diff --git a/next-env.d.ts b/next-env.d.ts index 4f11a03d..fd36f949 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js index 2ef1c05e..cf7dce7f 100644 --- a/next.config.js +++ b/next.config.js @@ -78,6 +78,7 @@ const basePath = process.env.BASE_PATH; /** @type {import('next').NextConfig} */ const config = { + reactStrictMode: false, env: { basePath: basePath || '', cloudMode: !!process.env.CLOUD_MODE, @@ -85,6 +86,8 @@ const config = { configUrl: '/config', currentVersion: pkg.version, defaultLocale: process.env.DEFAULT_LOCALE, + disableLogin: process.env.DISABLE_LOGIN, + disableUI: process.env.DISABLE_UI, isProduction: process.env.NODE_ENV === 'production', }, basePath, diff --git a/package.json b/package.json index 5b005f66..bb769cbc 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "dependencies": { "@fontsource/inter": "^4.5.15", "@prisma/client": "5.3.1", + "@react-spring/web": "^9.7.3", "@tanstack/react-query": "^4.33.0", "@umami/prisma-client": "^0.3.0", "@umami/redis-client": "^0.15.0", @@ -102,7 +103,6 @@ "react-error-boundary": "^4.0.4", "react-intl": "^6.4.7", "react-simple-maps": "^2.3.0", - "react-spring": "^9.4.4", "react-use-measure": "^2.0.4", "react-window": "^1.8.6", "request-ip": "^3.3.0", diff --git a/src/app/(app)/console/TestConsole.js b/src/app/(app)/console/TestConsole.js index d8060651..ca7ffc4a 100644 --- a/src/app/(app)/console/TestConsole.js +++ b/src/app/(app)/console/TestConsole.js @@ -1,3 +1,4 @@ +'use client'; import WebsiteSelect from 'components/input/WebsiteSelect'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; diff --git a/src/app/(app)/layout.module.css b/src/app/(app)/layout.module.css index bcce963f..0afd11f9 100644 --- a/src/app/(app)/layout.module.css +++ b/src/app/(app)/layout.module.css @@ -10,7 +10,6 @@ width: 100vw; grid-column: 1; grid-row: 1 / 2; - z-index: var(--z-index-popup); } .body { diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 5858239e..e2478a95 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -4,20 +4,20 @@ import '@fontsource/inter/400.css'; import '@fontsource/inter/700.css'; import '@fontsource/inter/800.css'; import 'react-basics/dist/styles.css'; -import 'styles/variables.css'; import 'styles/locale.css'; import 'styles/index.css'; +import 'styles/variables.css'; export default function RootLayout({ children }) { return ( - - - - - - + + + + + + diff --git a/src/app/logout/Logout.js b/src/app/logout/Logout.js new file mode 100644 index 00000000..e9da0373 --- /dev/null +++ b/src/app/logout/Logout.js @@ -0,0 +1,32 @@ +'use client'; +import { useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import useApi from 'components/hooks/useApi'; +import { setUser } from 'store/app'; +import { removeClientAuthToken } from 'lib/client'; + +export function Logout() { + const disabled = !!(process.env.disableLogin || process.env.cloudMode); + const router = useRouter(); + const { post } = useApi(); + + useEffect(() => { + async function logout() { + await post('/auth/logout'); + } + + if (!disabled) { + removeClientAuthToken(); + + logout(); + + router.push('/login'); + + return () => setUser(null); + } + }, [disabled, router, post]); + + return null; +} + +export default Logout; diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx index 74ae006d..bce24736 100644 --- a/src/app/logout/page.tsx +++ b/src/app/logout/page.tsx @@ -1,34 +1,5 @@ -'use client'; -import { useEffect } from 'react'; -import { useRouter } from 'next/router'; -import useApi from 'components/hooks/useApi'; -import { setUser } from 'store/app'; -import { removeClientAuthToken } from 'lib/client'; +import Logout from './Logout'; -async function getDisabled() { - return !!(process.env.DISABLE_LOGIN || process.env.CLOUD_MODE); -} - -export default async function LogoutPage() { - const disabled = await getDisabled(); - const router = useRouter(); - const { post } = useApi(); - - useEffect(() => { - async function logout() { - await post('/auth/logout'); - } - - if (!disabled) { - removeClientAuthToken(); - - logout(); - - router.push('/login'); - - return () => setUser(null); - } - }, [disabled, router, post]); - - return null; +export default function () { + return ; } diff --git a/src/app/share/[...id]/Share.js b/src/app/share/[...id]/Share.js new file mode 100644 index 00000000..69d76178 --- /dev/null +++ b/src/app/share/[...id]/Share.js @@ -0,0 +1,13 @@ +'use client'; +import WebsiteDetails from 'app/(app)/websites/[id]/WebsiteDetails'; +import useShareToken from 'components/hooks/useShareToken'; + +export default function ({ shareId }) { + const shareToken = useShareToken(shareId); + + if (!shareToken) { + return null; + } + + return ; +} diff --git a/src/app/share/[...id]/page.tsx b/src/app/share/[...id]/page.tsx index 1c17255c..736abe7d 100644 --- a/src/app/share/[...id]/page.tsx +++ b/src/app/share/[...id]/page.tsx @@ -1,17 +1,9 @@ -import Page from 'components/layout/Page'; -import WebsiteDetails from 'app/(app)/websites/[id]/WebsiteDetails'; -import useShareToken from 'components/hooks/useShareToken'; +import Share from './Share'; -export default function SharePage({ params }) { - const shareToken = useShareToken(params.id); - - if (!shareToken) { +export default function ({ params: { id } }) { + if (!id) { return null; } - return ( - - - - ); + return ; } diff --git a/src/styles/variables.css b/src/styles/variables.css index 726195d2..686fac84 100644 --- a/src/styles/variables.css +++ b/src/styles/variables.css @@ -1,4 +1,4 @@ -:root { +html body { --primary400: var(--blue800); --primary500: var(--blue900); --primary600: var(--blue1000); diff --git a/yarn.lock b/yarn.lock index e6c2c6c1..0eef7e9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2024,7 +2024,7 @@ "@react-spring/shared" "~9.7.3" "@react-spring/types" "~9.7.3" -"@react-spring/konva@~9.7.1", "@react-spring/konva@~9.7.3": +"@react-spring/konva@~9.7.1": version "9.7.3" resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.7.3.tgz#16bd29dd4860a99e960a72987c8bcfc828b22119" integrity sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g== @@ -2034,7 +2034,7 @@ "@react-spring/shared" "~9.7.3" "@react-spring/types" "~9.7.3" -"@react-spring/native@~9.7.1", "@react-spring/native@~9.7.3": +"@react-spring/native@~9.7.1": version "9.7.3" resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.7.3.tgz#ee38d7c23482cfb4916c9b3c021de2995a4f553a" integrity sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA== @@ -2051,7 +2051,7 @@ dependencies: "@react-spring/types" "~9.7.3" -"@react-spring/three@~9.7.1", "@react-spring/three@~9.7.3": +"@react-spring/three@~9.7.1": version "9.7.3" resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.7.3.tgz#4358a0c4640efe2972c4f7d0f7cd4efe927471c1" integrity sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA== @@ -2066,7 +2066,7 @@ resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.3.tgz#ea78fd447cbc2612c1f5d55852e3c331e8172a0b" integrity sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw== -"@react-spring/web@~9.7.1", "@react-spring/web@~9.7.3": +"@react-spring/web@^9.7.3", "@react-spring/web@~9.7.1": version "9.7.3" resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.7.3.tgz#d9f4e17fec259f1d65495a19502ada4f5b57fa3d" integrity sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg== @@ -2076,7 +2076,7 @@ "@react-spring/shared" "~9.7.3" "@react-spring/types" "~9.7.3" -"@react-spring/zdog@~9.7.1", "@react-spring/zdog@~9.7.3": +"@react-spring/zdog@~9.7.1": version "9.7.3" resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.7.3.tgz#8ccc7316f6d3460ed244d9e3f60de9b4c4a848ac" integrity sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw== @@ -7914,18 +7914,6 @@ react-simple-maps@^2.3.0: d3-zoom "^2.0.0" topojson-client "^3.1.0" -react-spring@^9.4.4: - version "9.7.3" - resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.7.3.tgz#3211dea4c4d7c5b541260af5100261b87becb5d5" - integrity sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A== - dependencies: - "@react-spring/core" "~9.7.3" - "@react-spring/konva" "~9.7.3" - "@react-spring/native" "~9.7.3" - "@react-spring/three" "~9.7.3" - "@react-spring/web" "~9.7.3" - "@react-spring/zdog" "~9.7.3" - react-spring@^9.5.5: version "9.7.1" resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.7.1.tgz#8acfed700823490a4d9d4cf131c5fea12d1aaa93"