iter 2
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
import { StaticLoader } from "@shared/ui/Loader"
|
||||
|
||||
export default function ProtectedLoading() {
|
||||
return <StaticLoader block />
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { Skeleton } from "@shared/ui/Skeleton"
|
||||
|
||||
export default function ProfileLoading() {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
padding: "32px 16px",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
gap: "24px",
|
||||
width: "100%",
|
||||
maxWidth: "640px",
|
||||
}}
|
||||
>
|
||||
<Skeleton width="120px" height="120px" borderRadius="50%" />
|
||||
<Skeleton width="100%" height="200px" borderRadius="10px" />
|
||||
<Skeleton width="100%" height="160px" borderRadius="10px" />
|
||||
<Skeleton width="100%" height="140px" borderRadius="10px" />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
import { JSX } from "react"
|
||||
|
||||
import { ProjectWorkspacePage } from "@pages/ProjectWorkspacePage"
|
||||
import { ProjectWizardPage } from "@pages/ProjectWizardPage"
|
||||
|
||||
export default function Projects(): JSX.Element {
|
||||
return (
|
||||
<main>
|
||||
<ProjectWorkspacePage />
|
||||
<ProjectWizardPage />
|
||||
</main>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import { ProjectCardSkeleton } from "@shared/ui/Skeleton"
|
||||
|
||||
export default function ProjectsLoading() {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
padding: "28px 24px 40px",
|
||||
display: "grid",
|
||||
gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))",
|
||||
gap: "20px",
|
||||
}}
|
||||
>
|
||||
{Array.from({ length: 6 }).map((_, i) => (
|
||||
<ProjectCardSkeleton key={i} />
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
+8
-5
@@ -1,7 +1,7 @@
|
||||
import type { Metadata } from "next"
|
||||
import type { ReactNode } from "react"
|
||||
|
||||
import { Open_Sans } from "next/font/google"
|
||||
import { Manrope } from "next/font/google"
|
||||
|
||||
import "@shared/styles/global.scss"
|
||||
|
||||
@@ -12,10 +12,11 @@ export const metadata: Metadata = {
|
||||
description: "Standalone Next.js app using FSD structure",
|
||||
}
|
||||
|
||||
const open_sans = Open_Sans({
|
||||
const manrope = Manrope({
|
||||
subsets: ["latin", "cyrillic"],
|
||||
preload: true,
|
||||
display: "swap",
|
||||
variable: "--font-open-sans",
|
||||
variable: "--font-manrope",
|
||||
})
|
||||
|
||||
export default function RootLayout({
|
||||
@@ -24,7 +25,7 @@ export default function RootLayout({
|
||||
children: ReactNode
|
||||
}>) {
|
||||
return (
|
||||
<html lang="ru" className={open_sans.variable} suppressHydrationWarning>
|
||||
<html lang="ru" className={manrope.variable} suppressHydrationWarning>
|
||||
<head>
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
@@ -33,7 +34,9 @@ export default function RootLayout({
|
||||
/>
|
||||
</head>
|
||||
<body>
|
||||
<AppProviders>{children}</AppProviders>
|
||||
<div id="app-root">
|
||||
<AppProviders>{children}</AppProviders>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
|
||||
+10
-2
@@ -1,6 +1,7 @@
|
||||
"use client"
|
||||
|
||||
import { usePathname } from "next/navigation"
|
||||
import { motion } from "framer-motion"
|
||||
|
||||
import { Header } from "@widgets/Header"
|
||||
|
||||
@@ -12,7 +13,7 @@ export default function EssentialTemplate({
|
||||
children: React.ReactNode
|
||||
}) {
|
||||
const pathname = usePathname()
|
||||
const isAuthPage = AUTH_ROUTES.includes(pathname)
|
||||
const isAuthPage = AUTH_ROUTES.includes(pathname ?? "")
|
||||
|
||||
if (isAuthPage) {
|
||||
return <>{children}</>
|
||||
@@ -21,7 +22,14 @@ export default function EssentialTemplate({
|
||||
return (
|
||||
<div>
|
||||
<Header />
|
||||
{children}
|
||||
<motion.div
|
||||
key={pathname}
|
||||
initial={{ opacity: 0, y: 8 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.25, ease: [0.16, 1, 0.3, 1] }}
|
||||
>
|
||||
{children}
|
||||
</motion.div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import { Suspense } from "react"
|
||||
|
||||
import { UnderMaintenancePage } from "@pages/UnderMaintenancePage"
|
||||
|
||||
export default function UnderMaintenance() {
|
||||
return (
|
||||
<main>
|
||||
<UnderMaintenancePage />
|
||||
<Suspense>
|
||||
<UnderMaintenancePage />
|
||||
</Suspense>
|
||||
</main>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user