From adeb80c8e8477568b72c6606e8586a6c47ed1cce Mon Sep 17 00:00:00 2001 From: mehmet Date: Thu, 20 Aug 2026 15:55:38 +0300 Subject: [PATCH] first issue --- .env.development | 2 + .env.production | 2 + .eslintrc.json | 3 + .gitignore | 137 ++-------------------- README.md | 70 ++++++++++- jsconfig.json | 8 ++ next.config.mjs | 7 ++ package.json | 36 ++++++ postcss.config.mjs | 9 ++ src/app/(dashboard)/layout.js | 34 ++++++ src/app/(dashboard)/page.js | 23 ++++ src/app/(dashboard)/person/page.js | 10 ++ src/app/globals.css | 54 +++++++++ src/app/layout.js | 30 +++++ src/app/login/page.js | 77 ++++++++++++ src/app/not-authorized/page.js | 18 +++ src/app/not-found.js | 20 ++++ src/app/providers.js | 8 ++ src/assets/img/MAM2.png | Bin 0 -> 18958 bytes src/assets/img/sidebar-4.jpg | Bin 0 -> 87559 bytes src/components/auth/AuthGuard.jsx | 42 +++++++ src/components/layout/Footer.jsx | 7 ++ src/components/layout/Navbar.jsx | 87 ++++++++++++++ src/components/layout/PlaceholderPage.jsx | 12 ++ src/components/layout/Sidebar.jsx | 77 ++++++++++++ src/components/ui/avatar.jsx | 40 +++++++ src/components/ui/button.jsx | 49 ++++++++ src/components/ui/card.jsx | 45 +++++++ src/components/ui/dropdown-menu.jsx | 66 +++++++++++ src/components/ui/input.jsx | 19 +++ src/components/ui/label.jsx | 19 +++ src/components/ui/separator.jsx | 24 ++++ src/components/ui/sheet.jsx | 43 +++++++ src/lib/axios.js | 20 ++++ src/lib/routes.js | 28 +++++ src/lib/utils.js | 6 + src/store/authSlice.js | 49 ++++++++ src/store/store.js | 8 ++ tailwind.config.js | 59 ++++++++++ 39 files changed, 1118 insertions(+), 130 deletions(-) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .eslintrc.json create mode 100644 jsconfig.json create mode 100644 next.config.mjs create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 src/app/(dashboard)/layout.js create mode 100644 src/app/(dashboard)/page.js create mode 100644 src/app/(dashboard)/person/page.js create mode 100644 src/app/globals.css create mode 100644 src/app/layout.js create mode 100644 src/app/login/page.js create mode 100644 src/app/not-authorized/page.js create mode 100644 src/app/not-found.js create mode 100644 src/app/providers.js create mode 100644 src/assets/img/MAM2.png create mode 100644 src/assets/img/sidebar-4.jpg create mode 100644 src/components/auth/AuthGuard.jsx create mode 100644 src/components/layout/Footer.jsx create mode 100644 src/components/layout/Navbar.jsx create mode 100644 src/components/layout/PlaceholderPage.jsx create mode 100644 src/components/layout/Sidebar.jsx create mode 100644 src/components/ui/avatar.jsx create mode 100644 src/components/ui/button.jsx create mode 100644 src/components/ui/card.jsx create mode 100644 src/components/ui/dropdown-menu.jsx create mode 100644 src/components/ui/input.jsx create mode 100644 src/components/ui/label.jsx create mode 100644 src/components/ui/separator.jsx create mode 100644 src/components/ui/sheet.jsx create mode 100644 src/lib/axios.js create mode 100644 src/lib/routes.js create mode 100644 src/lib/utils.js create mode 100644 src/store/authSlice.js create mode 100644 src/store/store.js create mode 100644 tailwind.config.js diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..c8d2505 --- /dev/null +++ b/.env.development @@ -0,0 +1,2 @@ +NEXT_PUBLIC_BASE_PATH= +NEXT_PUBLIC_API_URL=http://localhost:8004/api-ncr \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..398c142 --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ +NEXT_PUBLIC_BASE_PATH=/temp +NEXT_PUBLIC_API_URL=https://bysrvapp.mam.gov.tr/api-ncr \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/.gitignore b/.gitignore index ceaea36..2a9755a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,132 +1,13 @@ -# ---> Node -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories +### NodeJS node_modules/ -jspm_packages/ +build/ +.next/ +package-lock.json -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ +# VSCode +.vscode/ -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* +### OS Specific +.DS_Store +Thumbs.db diff --git a/README.md b/README.md index b4dd661..1fc4c8d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,69 @@ -# webTemplate +# NCR Dashboard — Next.js Template -Nextjs Web Template \ No newline at end of file +`webNonConformanceReport` (CRA + react-router-dom v5 + Light Bootstrap +Dashboard) projesinden, gereksiz bağımlılıklar kaldırılarak türetilmiş güncel +Next.js (App Router, JavaScript) şablonu. + +## Kurulum + +```bash +npm install +cp .env.example .env.local # NEXT_PUBLIC_API_URL değerini kendi API adresinizle değiştirin +npm run dev +``` + +## Eskisiyle karşılaştırma + +| Eski proje | Yeni proje | +|---|---| +| Create React App + `react-scripts` | Next.js 15 (App Router) | +| `react-router-dom` v5 (`Switch`, `useHistory`) | Next.js dosya tabanlı routing (`app/`), `next/navigation` | +| `ProtectedRoute.js` (route bileşeni) | `components/auth/AuthGuard.jsx` (dashboard route grubunu sarar) | +| Bootstrap + `react-bootstrap` + `reactstrap` + el yazımı SCSS teması | Tailwind CSS + shadcn/ui birincil (Radix tabanlı, kendi bileşen kodunuz) | +| Ant Design (`antd`) — sadece Login sayfasında kullanılıyordu | shadcn/ui `Button`/`Input`/`Card` bileşenleri | +| `@fortawesome/fontawesome-free`, `nc-icon` seti | `lucide-react` (tree-shakeable, tek ikon seti) | +| `chartist`, `react-chartist` (kullanılmıyordu) | kaldırıldı — ihtiyaç olursa `recharts` eklenebilir | +| `gulp`, `gulp-append-prepend` (SCSS build script'leri) | kaldırıldı — Tailwind zaten derlemeyi hallediyor | +| `@tanstack/react-table`, `react-highlight-words`, `react-notification-alert`, `@react-hook/media-query`, `@emotion/*`, `ajv`, `jquery` (optional) | kaldırıldı — hiçbiri `src/` içinde kullanılmıyordu | +| `localStorage` üzerinden manuel `ncr-user` okuma/yazma her dosyada tekrarlanıyordu | `store/authSlice.js` içinde tek noktadan yönetiliyor (Redux Toolkit korundu) | +| `REACT_APP_BASE_PATH` her `Route`/`Link`'te elle birleştiriliyordu | `next.config.mjs` → `basePath` (tek noktadan, otomatik) | +| `REACT_APP_API_URL` + çıplak `fetch` | `NEXT_PUBLIC_API_URL` + `lib/axios.js` (tek `axios` instance, token interceptor) | + +## Yapı + +``` +src/ + app/ + layout.js kök layout, font + Redux Provider + login/page.js + not-authorized/page.js + not-found.js genel 404 + (dashboard)/ + layout.js AuthGuard + Sidebar + Navbar + Footer + page.js Ana sayfa + ncr-list/page.js + project/page.js rol korumalı (QUALITY, ADMINISTRATOR) + resource/page.js rol korumalı + person/page.js rol korumalı + components/ + ui/ shadcn/ui birincil bileşenleri (button, input, card, ...) + layout/ Sidebar, Navbar, Footer + auth/AuthGuard.jsx oturum + rol kontrolü + lib/ + routes.js sidebar + erişim kontrolü tek kaynağı + axios.js API istemcisi + utils.js `cn()` class birleştirici + store/ + store.js, authSlice.js Redux Toolkit +``` + +## Not + +- Kimlik doğrulama halen istemci tarafında `localStorage` (`ncr-user`) üzerinden + yürütülüyor — eski projeyle aynı model. Sunucu tarafı (middleware/cookie + tabanlı) koruma isterseniz `AuthGuard` yerine `middleware.js` + httpOnly + cookie'ye geçmeniz önerilir. +- `ncr-list`, `project`, `resource`, `person` sayfaları içerik eklemeniz için + boş bırakılmış placeholder'lardır. +- Backend'iniz `POST /auth/login` isteğine `{ token, fullName, role, ... }` + benzeri bir JSON dönüyorsa login akışı olduğu gibi çalışır. diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..abe04df --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..00cd3be --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + basePath: process.env.NEXT_PUBLIC_BASE_PATH || "", + reactStrictMode: true, +}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..8b5a580 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "temp", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@radix-ui/react-avatar": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-separator": "^1.1.1", + "@radix-ui/react-slot": "^1.1.1", + "@reduxjs/toolkit": "^2.5.0", + "axios": "^1.11.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.469.0", + "next": "^16.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-redux": "^9.2.0", + "tailwind-merge": "^2.6.0" + }, + "devDependencies": { + "autoprefixer": "^10.4.20", + "eslint": "^9.17.0", + "eslint-config-next": "^15.1.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..2ef30fc --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,9 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; + +export default config; diff --git a/src/app/(dashboard)/layout.js b/src/app/(dashboard)/layout.js new file mode 100644 index 0000000..fb54fac --- /dev/null +++ b/src/app/(dashboard)/layout.js @@ -0,0 +1,34 @@ +"use client"; + +import AuthGuard from "@/components/auth/AuthGuard"; +import Sidebar from "@/components/layout/Sidebar"; +import Navbar from "@/components/layout/Navbar"; +import Footer from "@/components/layout/Footer"; +import { Sheet, SheetContent } from "@/components/ui/sheet"; +import { useState } from "react"; + +export default function DashboardLayout({ children }) { + const [mobileOpen, setMobileOpen] = useState(false); + + return ( + +
+ + + + + setMobileOpen(false)} /> + + +
+ +
{children}
+
+
+
+
+
+ ); +} diff --git a/src/app/(dashboard)/page.js b/src/app/(dashboard)/page.js new file mode 100644 index 0000000..dc6b970 --- /dev/null +++ b/src/app/(dashboard)/page.js @@ -0,0 +1,23 @@ +import { Card, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; + +export default function MainPage() { + return ( +
+

+ Template +

+

+ Purpose of the application +

+ + + + Notes + + Free places in the template are the samples. + + + +
+ ); +} diff --git a/src/app/(dashboard)/person/page.js b/src/app/(dashboard)/person/page.js new file mode 100644 index 0000000..58f8b6c --- /dev/null +++ b/src/app/(dashboard)/person/page.js @@ -0,0 +1,10 @@ +import PlaceholderPage from "@/components/layout/PlaceholderPage"; + +export default function PersonPage() { + return ( + + ); +} diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..c3e0576 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,54 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + /* Nötr, soğuk beyaz zemin */ + --background: 40 14% 97%; + --foreground: 222 32% 12%; + + --card: 0 0% 100%; + --card-foreground: 222 32% 12%; + + --border: 220 14% 89%; + --input: 220 14% 89%; + --ring: 38 71% 51%; + + /* Amber/altın vurgu — kalibrasyon etiketi / uygunsuzluk uyarı rengi */ + --primary: 38 71% 51%; + --primary-foreground: 222 32% 12%; + + --secondary: 220 16% 94%; + --secondary-foreground: 222 32% 12%; + + --muted: 220 16% 94%; + --muted-foreground: 220 9% 46%; + + --accent: 38 71% 96%; + --accent-foreground: 38 71% 30%; + + --destructive: 4 62% 47%; + --destructive-foreground: 0 0% 100%; + + /* Koyu lacivert sidebar */ + --sidebar: 222 47% 9%; + --sidebar-foreground: 220 20% 88%; + --sidebar-muted: 220 14% 60%; + --sidebar-active: 38 71% 51%; + + --radius: 0.5rem; + + --font-sans: "Inter", system-ui, -apple-system, sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground font-sans antialiased; + } +} diff --git a/src/app/layout.js b/src/app/layout.js new file mode 100644 index 0000000..12ce056 --- /dev/null +++ b/src/app/layout.js @@ -0,0 +1,30 @@ +import { Inter, JetBrains_Mono } from "next/font/google"; +import { Providers } from "./providers"; +import "./globals.css"; + +const inter = Inter({ + subsets: ["latin"], + variable: "--font-sans", + display: "swap", +}); + +const jetbrainsMono = JetBrains_Mono({ + subsets: ["latin"], + variable: "--font-mono", + display: "swap", +}); + +export const metadata = { + title: "Temp Title", + description: "Temp Description", +}; + +export default function RootLayout({ children }) { + return ( + + + {children} + + + ); +} diff --git a/src/app/login/page.js b/src/app/login/page.js new file mode 100644 index 0000000..13028f8 --- /dev/null +++ b/src/app/login/page.js @@ -0,0 +1,77 @@ +"use client"; + +import { useState } from "react"; +import { useRouter } from "next/navigation"; +import { useDispatch } from "react-redux"; +import { setUser } from "@/store/authSlice"; +import api from "@/lib/axios"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"; + +export default function LoginPage() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + const dispatch = useDispatch(); + const router = useRouter(); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(""); + setLoading(true); + try { + const { data } = await api.post("/auth/login", { email, password }); + dispatch(setUser(data)); + router.push("/"); + } catch (err) { + setError(err.response?.data?.message || "Login failed"); + } finally { + setLoading(false); + } + }; + + return ( +
+ + + Login Page + Login with email & PC login password + + +
+
+ + setEmail(e.target.value)} + required + /> +
+
+ + setPassword(e.target.value)} + required + /> +
+ + {error &&

{error}

} + + +
+
+
+
+ ); +} diff --git a/src/app/not-authorized/page.js b/src/app/not-authorized/page.js new file mode 100644 index 0000000..29a5702 --- /dev/null +++ b/src/app/not-authorized/page.js @@ -0,0 +1,18 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { Button } from "@/components/ui/button"; + +export default function NotAuthorizedPage() { + const router = useRouter(); + + return ( +
+

403 - Yetkiniz Yok

+

Bu sayfayı görüntüleme yetkiniz bulunmuyor.

+ +
+ ); +} diff --git a/src/app/not-found.js b/src/app/not-found.js new file mode 100644 index 0000000..3077c02 --- /dev/null +++ b/src/app/not-found.js @@ -0,0 +1,20 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { Button } from "@/components/ui/button"; + +export default function NotFound() { + const router = useRouter(); + + return ( +
+

404 - Page Not Found

+

+ The page you are looking for does not exist or may have been moved.. +

+ +
+ ); +} diff --git a/src/app/providers.js b/src/app/providers.js new file mode 100644 index 0000000..0f3b0e7 --- /dev/null +++ b/src/app/providers.js @@ -0,0 +1,8 @@ +"use client"; + +import { Provider } from "react-redux"; +import { store } from "@/store/store"; + +export function Providers({ children }) { + return {children}; +} diff --git a/src/assets/img/MAM2.png b/src/assets/img/MAM2.png new file mode 100644 index 0000000000000000000000000000000000000000..1090f8be3cb884f547bf6c7586b93b0c07b9a305 GIT binary patch literal 18958 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/sidebar-4.jpg b/src/assets/img/sidebar-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3085c7b42b870c1dedb19f67233ba90bb5571570 GIT binary patch literal 87559 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 z®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 F|JeqbaEAZ@ literal 0 HcmV?d00001 diff --git a/src/components/auth/AuthGuard.jsx b/src/components/auth/AuthGuard.jsx new file mode 100644 index 0000000..6ce4abc --- /dev/null +++ b/src/components/auth/AuthGuard.jsx @@ -0,0 +1,42 @@ +"use client"; + +import { useEffect } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useDispatch, useSelector } from "react-redux"; +import { hydrateFromStorage } from "@/store/authSlice"; +import { findRouteByPath, canAccessRoute } from "@/lib/routes"; + +export default function AuthGuard({ children }) { + const dispatch = useDispatch(); + const router = useRouter(); + const pathname = usePathname(); + const { user, initialized } = useSelector((state) => state.auth); + + useEffect(() => { + dispatch(hydrateFromStorage()); + }, [dispatch]); + + useEffect(() => { + if (!initialized) return; + + if (!user) { + router.replace("/login"); + return; + } + + const route = findRouteByPath(pathname); + if (route && !canAccessRoute(route, user.role)) { + router.replace("/not-authorized"); + } + }, [initialized, user, pathname, router]); + + if (!initialized || !user) { + return ( +
+ Yükleniyor... +
+ ); + } + + return children; +} diff --git a/src/components/layout/Footer.jsx b/src/components/layout/Footer.jsx new file mode 100644 index 0000000..2e85a8a --- /dev/null +++ b/src/components/layout/Footer.jsx @@ -0,0 +1,7 @@ +export default function Footer() { + return ( +
+ © {new Date().getFullYear()} Temp App · v1.0.0 +
+ ); +} diff --git a/src/components/layout/Navbar.jsx b/src/components/layout/Navbar.jsx new file mode 100644 index 0000000..1f73867 --- /dev/null +++ b/src/components/layout/Navbar.jsx @@ -0,0 +1,87 @@ +"use client"; + +import { usePathname, useRouter } from "next/navigation"; +import { useDispatch, useSelector } from "react-redux"; +import { Menu, LogOut, User } from "lucide-react"; +import { logout } from "@/store/authSlice"; +import { dashboardRoutes } from "@/lib/routes"; +import { Button } from "@/components/ui/button"; +import { Avatar, AvatarFallback } from "@/components/ui/avatar"; +import { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, +} from "@/components/ui/dropdown-menu"; +import { SheetTrigger } from "@/components/ui/sheet"; + +function getPageTitle(pathname) { + const route = dashboardRoutes.find((r) => r.href === pathname); + return route?.label || "Main Page"; +} + +export default function Navbar() { + const pathname = usePathname(); + const router = useRouter(); + const dispatch = useDispatch(); + const user = useSelector((state) => state.auth.user); + + const initials = (user?.fullName || "?") + .split(" ") + .map((p) => p[0]) + .slice(0, 2) + .join("") + .toUpperCase(); + + const handleLogout = () => { + dispatch(logout()); + router.push("/login"); + }; + + return ( +
+
+ + + +

{getPageTitle(pathname)}

+
+ + + + + + + Hesabım + + {/* + + + Profile + + */} + + + Log out + + + +
+ ); +} diff --git a/src/components/layout/PlaceholderPage.jsx b/src/components/layout/PlaceholderPage.jsx new file mode 100644 index 0000000..2a9d4d8 --- /dev/null +++ b/src/components/layout/PlaceholderPage.jsx @@ -0,0 +1,12 @@ +import { Card, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; + +export default function PlaceholderPage({ title, description }) { + return ( + + + {title} + {description} + + + ); +} diff --git a/src/components/layout/Sidebar.jsx b/src/components/layout/Sidebar.jsx new file mode 100644 index 0000000..1ec027e --- /dev/null +++ b/src/components/layout/Sidebar.jsx @@ -0,0 +1,77 @@ +"use client"; + +import Link from "next/link"; +import Image from "next/image"; +import { usePathname } from "next/navigation"; +import { useSelector } from "react-redux"; +import { cn } from "@/lib/utils"; +import { dashboardRoutes, canAccessRoute } from "@/lib/routes"; + +import backgroundImageSidebar from "@/assets/img/sidebar-4.jpg"; +import logo from "@/assets/img/MAM2.png"; + +export default function Sidebar({ onNavigate }) { + const pathname = usePathname(); + const user = useSelector((state) => state.auth.user); + + const links = dashboardRoutes.filter( + (route) => + route.showInSidebar !== false && canAccessRoute(route, user?.role), + ); + + return ( +
+ +
+ +
+ +
+ Logo +
+ + TÜBİTAK MAM + + + + + +
+
+
+ ); +} diff --git a/src/components/ui/avatar.jsx b/src/components/ui/avatar.jsx new file mode 100644 index 0000000..fede42e --- /dev/null +++ b/src/components/ui/avatar.jsx @@ -0,0 +1,40 @@ +"use client"; + +import * as React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; +import { cn } from "@/lib/utils"; + +const Avatar = React.forwardRef(({ className, ...props }, ref) => ( + +)); +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/button.jsx b/src/components/ui/button.jsx new file mode 100644 index 0000000..ad6d9b6 --- /dev/null +++ b/src/components/ui/button.jsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva } from "class-variance-authority"; +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-secondary", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-secondary", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + } +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/src/components/ui/card.jsx b/src/components/ui/card.jsx new file mode 100644 index 0000000..1e8c7f0 --- /dev/null +++ b/src/components/ui/card.jsx @@ -0,0 +1,45 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Card = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }; diff --git a/src/components/ui/dropdown-menu.jsx b/src/components/ui/dropdown-menu.jsx new file mode 100644 index 0000000..ff3d29a --- /dev/null +++ b/src/components/ui/dropdown-menu.jsx @@ -0,0 +1,66 @@ +"use client"; + +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { cn } from "@/lib/utils"; + +const DropdownMenu = DropdownMenuPrimitive.Root; +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuContent = React.forwardRef( + ({ className, sideOffset = 6, align = "end", ...props }, ref) => ( + + + + ) +); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuLabel = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuLabel, +}; diff --git a/src/components/ui/input.jsx b/src/components/ui/input.jsx new file mode 100644 index 0000000..812518d --- /dev/null +++ b/src/components/ui/input.jsx @@ -0,0 +1,19 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Input = React.forwardRef(({ className, type, ...props }, ref) => { + return ( + + ); +}); +Input.displayName = "Input"; + +export { Input }; diff --git a/src/components/ui/label.jsx b/src/components/ui/label.jsx new file mode 100644 index 0000000..d344771 --- /dev/null +++ b/src/components/ui/label.jsx @@ -0,0 +1,19 @@ +"use client"; + +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; +import { cn } from "@/lib/utils"; + +const Label = React.forwardRef(({ className, ...props }, ref) => ( + +)); +Label.displayName = LabelPrimitive.Root.displayName; + +export { Label }; diff --git a/src/components/ui/separator.jsx b/src/components/ui/separator.jsx new file mode 100644 index 0000000..9f4b6c0 --- /dev/null +++ b/src/components/ui/separator.jsx @@ -0,0 +1,24 @@ +"use client"; + +import * as React from "react"; +import * as SeparatorPrimitive from "@radix-ui/react-separator"; +import { cn } from "@/lib/utils"; + +const Separator = React.forwardRef( + ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => ( + + ) +); +Separator.displayName = SeparatorPrimitive.Root.displayName; + +export { Separator }; diff --git a/src/components/ui/sheet.jsx b/src/components/ui/sheet.jsx new file mode 100644 index 0000000..797be82 --- /dev/null +++ b/src/components/ui/sheet.jsx @@ -0,0 +1,43 @@ +"use client"; + +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; +import { cn } from "@/lib/utils"; + +const Sheet = DialogPrimitive.Root; +const SheetTrigger = DialogPrimitive.Trigger; +const SheetClose = DialogPrimitive.Close; + +const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => ( + +)); +SheetOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const SheetContent = React.forwardRef(({ className, children, ...props }, ref) => ( + + + + {children} + + + Kapat + + + +)); +SheetContent.displayName = DialogPrimitive.Content.displayName; + +export { Sheet, SheetTrigger, SheetClose, SheetContent }; diff --git a/src/lib/axios.js b/src/lib/axios.js new file mode 100644 index 0000000..260fc4f --- /dev/null +++ b/src/lib/axios.js @@ -0,0 +1,20 @@ +import axios from "axios"; + +const api = axios.create({ + baseURL: process.env.NEXT_PUBLIC_API_URL, + headers: { "Content-Type": "application/json" }, +}); + +// Kayıtlı kullanıcının token'ını (varsa) her isteğe ekler. +api.interceptors.request.use((config) => { + if (typeof window !== "undefined") { + const raw = localStorage.getItem("ncr-user"); + const user = raw ? JSON.parse(raw) : null; + if (user?.token) { + config.headers.Authorization = `Bearer ${user.token}`; + } + } + return config; +}); + +export default api; diff --git a/src/lib/routes.js b/src/lib/routes.js new file mode 100644 index 0000000..e749f41 --- /dev/null +++ b/src/lib/routes.js @@ -0,0 +1,28 @@ +import { LayoutGrid, ClipboardList, FolderKanban, Wrench, Users } from "lucide-react"; + +// Sidebar'da görünen ve erişim denetiminde kullanılan tek kaynak. +// roles: undefined -> herkes erişebilir. Aksi halde listelenen rollere sahip +// kullanıcılar erişebilir. +export const dashboardRoutes = [ + { + href: "/", + label: "Main Page", + icon: LayoutGrid, + showInSidebar: false, + }, + { + href: "/person", + label: "Users", + icon: Users, + roles: ["ADMINISTRATOR"], + }, +]; + +export function canAccessRoute(route, role) { + if (!route.roles) return true; + return route.roles.includes(role); +} + +export function findRouteByPath(path) { + return dashboardRoutes.find((r) => r.href === path); +} diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 0000000..378ccef --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1,6 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} diff --git a/src/store/authSlice.js b/src/store/authSlice.js new file mode 100644 index 0000000..ac6cf44 --- /dev/null +++ b/src/store/authSlice.js @@ -0,0 +1,49 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const STORAGE_KEY = "ncr-user"; + +function readStoredUser() { + if (typeof window === "undefined") return null; + try { + const raw = localStorage.getItem(STORAGE_KEY); + return raw ? JSON.parse(raw) : null; + } catch { + return null; + } +} + +const authSlice = createSlice({ + name: "auth", + initialState: { + user: null, + // Sunucu tarafında render edilirken localStorage okunamadığı için + // gerçek kullanıcı durumu içinde client'ta doldurulur. + initialized: false, + }, + reducers: { + setUser(state, action) { + state.user = action.payload; + state.initialized = true; + if (typeof window !== "undefined") { + if (action.payload) { + localStorage.setItem(STORAGE_KEY, JSON.stringify(action.payload)); + } else { + localStorage.removeItem(STORAGE_KEY); + } + } + }, + hydrateFromStorage(state) { + state.user = readStoredUser(); + state.initialized = true; + }, + logout(state) { + state.user = null; + if (typeof window !== "undefined") { + localStorage.removeItem(STORAGE_KEY); + } + }, + }, +}); + +export const { setUser, hydrateFromStorage, logout } = authSlice.actions; +export default authSlice.reducer; diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 0000000..f01020c --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,8 @@ +import { configureStore } from "@reduxjs/toolkit"; +import authReducer from "./authSlice"; + +export const store = configureStore({ + reducer: { + auth: authReducer, + }, +}); diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..d1a1302 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,59 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + "./src/app/**/*.{js,jsx}", + "./src/components/**/*.{js,jsx}", + ], + theme: { + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + sidebar: { + DEFAULT: "hsl(var(--sidebar))", + foreground: "hsl(var(--sidebar-foreground))", + muted: "hsl(var(--sidebar-muted))", + active: "hsl(var(--sidebar-active))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + fontFamily: { + sans: ["var(--font-sans)", "system-ui", "sans-serif"], + mono: ["var(--font-mono)", "ui-monospace", "monospace"], + }, + }, + }, + plugins: [], +};