added apps
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
"use server";
|
||||
import { fetchDataWithToken, fetchData } from "../api-fetcher";
|
||||
import { fetchDataWithToken } from "../api-fetcher";
|
||||
import { baseUrlAuth, tokenSecret } from "../basics";
|
||||
import { cookies } from "next/headers";
|
||||
|
||||
import NextCrypto from "next-crypto";
|
||||
|
||||
const checkToken = `${baseUrlAuth}/authentication/token/check`;
|
||||
const pageValid = `${baseUrlAuth}/authentication/page/valid`;
|
||||
const siteUrls = `${baseUrlAuth}/authentication/sites/list`;
|
||||
@@ -18,11 +19,13 @@ async function checkAccessTokenIsValid() {
|
||||
async function retrievePageList() {
|
||||
const response = await fetchDataWithToken(siteUrls, {}, "GET", false);
|
||||
return response?.status === 200 || response?.status === 202
|
||||
? response.data?.site_urls
|
||||
? response.data?.sites
|
||||
: null;
|
||||
}
|
||||
|
||||
|
||||
async function retrievePagebyUrl(pageUrl: string) {
|
||||
|
||||
const response = await fetchDataWithToken(
|
||||
pageValid,
|
||||
{
|
||||
|
||||
@@ -9,8 +9,8 @@ export const metadata: Metadata = {
|
||||
|
||||
export default function LoginPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-100">
|
||||
<>
|
||||
<Login />
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -12,8 +12,18 @@ export default function AuthLayout({
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<div className="min-h-screen flex">
|
||||
<Suspense fallback={<div>Loading...</div>}>{children}</Suspense>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
<div className="w-1/4">
|
||||
<div className="flex flex-col items-center justify-center h-screen bg-purple-600">
|
||||
<div className="text-2xl font-bold">WAG Frontend</div>
|
||||
<div className="text-sm text-gray-500 mt-4">
|
||||
Welcome to the WAG Frontend Application
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="w-3/4 text-black">
|
||||
<Suspense fallback={<div>Loading...</div>}>{children}</Suspense>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/annual/meeting/close";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/annual/meeting";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,27 +1,17 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import {
|
||||
checkAccessTokenIsValid,
|
||||
retrievePageList,
|
||||
retrievePagebyUrl,
|
||||
} from "@/apicalls/cookies/token";
|
||||
import { redirect } from "next/navigation";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList } from "@/apicalls/cookies/token";
|
||||
|
||||
export default async function DashboardLayout({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const token_is_valid = await checkAccessTokenIsValid();
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
if (!token_is_valid) {
|
||||
redirect("/auth/login");
|
||||
}
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const pageToDirect = await retrievePagebyUrl("/dashboard");
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
const activePage = "/dashboard";
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -32,6 +22,7 @@ export default async function DashboardLayout({
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
@@ -49,7 +40,6 @@ export default async function DashboardLayout({
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/emergency/meeting/close";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/emergency/meeting";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/individual";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,19 +1,24 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Suspense } from "react";
|
||||
import { checkAccessTokenIsValid } from "@/apicalls/cookies/token";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Create Next App",
|
||||
description: "Generated by create next app",
|
||||
};
|
||||
|
||||
export default function DashLayout({
|
||||
export default async function DashLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
const token_is_valid = await checkAccessTokenIsValid();
|
||||
if (!token_is_valid) {
|
||||
redirect("/auth/login");
|
||||
}
|
||||
return (
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
<Suspense fallback={<div>Loading...</div>}>{children}</Suspense>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/management/accounting";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/management/budget";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/meeting/participation";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import LeftMenu from "@/components/menu/leftMenu";
|
||||
import { retrievePageList, retrievePagebyUrl } from "@/apicalls/cookies/token";
|
||||
import { retrievePage } from "@/components/NavigatePages";
|
||||
|
||||
export default async function Dashboard({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<{ [key: string]: string | undefined }>;
|
||||
}) {
|
||||
const siteUrlsList = (await retrievePageList()) || [];
|
||||
const lang = "tr";
|
||||
const searchParamsInstance = await searchParams;
|
||||
const activePage = "/user";
|
||||
const pageToDirect = await retrievePagebyUrl(activePage);
|
||||
const PageComponent = retrievePage(pageToDirect);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen min-w-screen flex h-screen w-screen overflow-hidden">
|
||||
{/* Sidebar */}
|
||||
<aside className="w-1/4 border-r p-4 overflow-y-auto">
|
||||
<LeftMenu
|
||||
pageUuidList={siteUrlsList}
|
||||
lang={lang}
|
||||
searchParams={searchParamsInstance}
|
||||
pageSelected={activePage}
|
||||
/>
|
||||
</aside>
|
||||
|
||||
{/* Main Content Area */}
|
||||
<div className="flex flex-col w-3/4">
|
||||
{/* Sticky Header */}
|
||||
<header className="sticky top-0 bg-white shadow-md z-10 p-4 flex justify-between items-center">
|
||||
<h1 className="text-2xl font-semibold">{activePage}</h1>
|
||||
<div className="flex items-center space-x-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
className="border px-3 py-2 rounded-lg"
|
||||
/>
|
||||
<div className="w-10 h-10 bg-gray-300 rounded-full"></div>
|
||||
</div>
|
||||
</header>
|
||||
<PageComponent lang={lang} queryParams={searchParamsInstance} />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
"use client";
|
||||
import React from "react";
|
||||
import { Pencil, Plus } from "lucide-react";
|
||||
|
||||
// Define types
|
||||
interface CardData {
|
||||
id: number;
|
||||
title: string;
|
||||
description: string;
|
||||
status: string;
|
||||
lastUpdated: string;
|
||||
}
|
||||
|
||||
interface CardProps {
|
||||
data: CardData;
|
||||
onUpdate: (id: number) => void;
|
||||
}
|
||||
|
||||
// Mock data
|
||||
const mockData: CardData[] = [
|
||||
{
|
||||
id: 1,
|
||||
title: "Project Alpha",
|
||||
description: "A cutting-edge project for automation",
|
||||
status: "In Progress",
|
||||
lastUpdated: "2024-03-15",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: "Project Beta",
|
||||
description: "Machine learning integration project",
|
||||
status: "Completed",
|
||||
lastUpdated: "2024-03-10",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: "Project Gamma",
|
||||
description: "Cloud infrastructure optimization",
|
||||
status: "Planning",
|
||||
lastUpdated: "2024-03-05",
|
||||
},
|
||||
];
|
||||
|
||||
// Card component
|
||||
const Card: React.FC<CardProps> = ({ data, onUpdate }) => (
|
||||
<div className="bg-white rounded-lg shadow-md p-6 mb-4 hover:shadow-lg transition-shadow">
|
||||
<div className="flex justify-between items-start">
|
||||
<div>
|
||||
<h3 className="text-xl font-semibold mb-2">{data.title}</h3>
|
||||
<p className="text-gray-600 mb-2">{data.description}</p>
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm text-gray-500">Status: {data.status}</span>
|
||||
<span className="text-sm text-gray-500">
|
||||
Last Updated: {data.lastUpdated}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => onUpdate(data.id)}
|
||||
className="text-blue-500 hover:text-blue-700 p-2"
|
||||
aria-label="Update"
|
||||
>
|
||||
<Pencil />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
function app000002() {
|
||||
const handleUpdate = (id: number) => {
|
||||
console.log(`Update clicked for item ${id}`);
|
||||
// Add your update logic here
|
||||
};
|
||||
|
||||
const handleCreate = () => {
|
||||
console.log("Create clicked");
|
||||
// Add your create logic here
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="container mx-auto p-6">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
<h1 className="text-2xl font-bold">Projects Dashboard</h1>
|
||||
<button
|
||||
onClick={handleCreate}
|
||||
className="bg-blue-500 text-white px-4 py-2 rounded-lg flex items-center gap-2 hover:bg-blue-600 transition-colors"
|
||||
>
|
||||
<Plus />
|
||||
Create New
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4">
|
||||
{mockData.map((item) => (
|
||||
<Card key={item.id} data={item} onUpdate={handleUpdate} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default app000002;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000003() {
|
||||
return <div>app000003</div>;
|
||||
}
|
||||
|
||||
export default app000003;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000004() {
|
||||
return <div>app000004</div>;
|
||||
}
|
||||
|
||||
export default app000004;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000005() {
|
||||
return <div>app000005</div>;
|
||||
}
|
||||
|
||||
export default app000005;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000006() {
|
||||
return <div>app000006</div>;
|
||||
}
|
||||
|
||||
export default app000006;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000007() {
|
||||
return <div>app000007</div>;
|
||||
}
|
||||
|
||||
export default app000007;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000008() {
|
||||
return <div>app000008</div>;
|
||||
}
|
||||
|
||||
export default app000008;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000009() {
|
||||
return <div>app000009</div>;
|
||||
}
|
||||
|
||||
export default app000009;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000010() {
|
||||
return <div>app000010</div>;
|
||||
}
|
||||
|
||||
export default app000010;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000011() {
|
||||
return <div>app000011</div>;
|
||||
}
|
||||
|
||||
export default app000011;
|
||||
@@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function app000012() {
|
||||
return (
|
||||
<div>app000012</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default app000012
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000013() {
|
||||
return <div>app000013</div>;
|
||||
}
|
||||
|
||||
export default app000013;
|
||||
@@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function app000014() {
|
||||
return (
|
||||
<div>app000014</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default app000014
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000015() {
|
||||
return <div>app000015</div>;
|
||||
}
|
||||
|
||||
export default app000015;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000016() {
|
||||
return <div>app000016</div>;
|
||||
}
|
||||
|
||||
export default app000016;
|
||||
@@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
function app000017() {
|
||||
return <div>app000017</div>;
|
||||
}
|
||||
|
||||
export default app000017;
|
||||
@@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function app000018() {
|
||||
return (
|
||||
<div>app000018</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default app000018
|
||||
@@ -0,0 +1,9 @@
|
||||
import React from 'react'
|
||||
|
||||
function app000019() {
|
||||
return (
|
||||
<div>app000019</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default app000019
|
||||
@@ -1,11 +1,12 @@
|
||||
import React from "react";
|
||||
import App000001 from "./app000001";
|
||||
import Page0001 from "./page0001";
|
||||
import App000002 from "./app000002";
|
||||
|
||||
import { PageProps } from "./interFaces";
|
||||
|
||||
export const PageIndexs = {
|
||||
"6015129b-f665-479c-a440-04fb82ea6114": Page0001,
|
||||
app000001: App000001,
|
||||
app000002: App000002,
|
||||
};
|
||||
|
||||
function UnAuthorizedPage({ lang, queryParams }: PageProps) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"use server";
|
||||
import React from "react";
|
||||
import { Home, User, Settings, Mail, Calendar } from "lucide-react";
|
||||
import { Home } from "lucide-react";
|
||||
import { transformMenu, LanguageTranslation } from "@/components/menu/runner";
|
||||
import Link from "next/link";
|
||||
|
||||
@@ -8,10 +8,12 @@ async function LeftMenu({
|
||||
searchParams,
|
||||
pageUuidList,
|
||||
lang,
|
||||
pageSelected,
|
||||
}: {
|
||||
pageUuidList: string[];
|
||||
lang: keyof LanguageTranslation;
|
||||
searchParams: { [key: string]: string | string[] | undefined };
|
||||
pageSelected: string;
|
||||
}) {
|
||||
const transformedMenu = transformMenu(pageUuidList) || [];
|
||||
|
||||
@@ -28,8 +30,6 @@ async function LeftMenu({
|
||||
secondLayerIndex = indices[1] || 0;
|
||||
}
|
||||
|
||||
const pageSelected = searchParams?.page;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<nav className="flex flex-col space-y-2">
|
||||
@@ -38,9 +38,7 @@ async function LeftMenu({
|
||||
transformedMenu.map((item, firstIndex) => (
|
||||
<div key={item.name} className="mb-4">
|
||||
<Link
|
||||
href={`/dashboard?${
|
||||
pageSelected ? `page=${pageSelected}` : ""
|
||||
}&menu=${firstIndex}*0`}
|
||||
href={`${pageSelected}?menu=${firstIndex}*0`}
|
||||
className={`text-xl font-semibold pl-5 my-2 py-2 block ${
|
||||
firstIndex === firstLayerIndex
|
||||
? "text-emerald-600"
|
||||
@@ -56,9 +54,7 @@ async function LeftMenu({
|
||||
{item.subList.map((subItem, secondIndex) => (
|
||||
<div key={subItem.name}>
|
||||
<Link
|
||||
href={`/dashboard?${
|
||||
pageSelected ? `page=${pageSelected}` : ""
|
||||
}&menu=${firstIndex}*${secondIndex}`}
|
||||
href={`${pageSelected}?menu=${firstIndex}*${secondIndex}`}
|
||||
className={`ml-5 my-4 pl-4 text-xl font-semibold block ${
|
||||
secondIndex === secondLayerIndex
|
||||
? "text-emerald-700"
|
||||
@@ -71,24 +67,35 @@ async function LeftMenu({
|
||||
{firstIndex === firstLayerIndex &&
|
||||
secondIndex === secondLayerIndex && (
|
||||
<div className="ml-5">
|
||||
{subItem.subList.map((subSubItem) => (
|
||||
<Link
|
||||
key={subSubItem.name}
|
||||
href={`/dashboard?page=${subSubItem.name}&menu=${firstIndex}*${secondIndex}`}
|
||||
className={`flex flex-row text-xl py-4 my-4 w-full space-x-2 p-2 rounded ${
|
||||
pageSelected === subSubItem.name
|
||||
? " bg-gray-100 cursor-not-allowed"
|
||||
: "hover:bg-gray-200"
|
||||
}`}
|
||||
>
|
||||
<span className="text-gray-400">
|
||||
<Home />
|
||||
</span>
|
||||
<span className="ml-5 text-gray-700">
|
||||
{subSubItem.lg[lang]}
|
||||
</span>
|
||||
</Link>
|
||||
))}
|
||||
{subItem.subList.map((subSubItem) =>
|
||||
`${pageSelected}` !== subSubItem.siteUrl ? (
|
||||
<Link
|
||||
key={subSubItem.name}
|
||||
href={`${subSubItem?.siteUrl}?menu=${firstIndex}*${secondIndex}`}
|
||||
className={`flex flex-row text-xl py-4 my-4 w-full space-x-2 p-2 rounded hover:bg-gray-200`}
|
||||
>
|
||||
<span className="text-gray-400">
|
||||
<Home />
|
||||
</span>
|
||||
<span className="ml-5 text-gray-700">
|
||||
{subSubItem.lg[lang]}
|
||||
</span>
|
||||
</Link>
|
||||
) : (
|
||||
<a
|
||||
key={subSubItem.name}
|
||||
href={`${subSubItem?.siteUrl}?menu=${firstIndex}*${secondIndex}`}
|
||||
className={`flex flex-row text-xl py-4 my-4 w-full space-x-2 p-2 rounded bg-gray-100 cursor-not-allowed"`}
|
||||
>
|
||||
<span className="text-gray-400">
|
||||
<Home />
|
||||
</span>
|
||||
<span className="ml-5 text-gray-700">
|
||||
{subSubItem.lg[lang]}
|
||||
</span>
|
||||
</a>
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -25,11 +25,20 @@ const Build = {
|
||||
siteUrl: "/build",
|
||||
};
|
||||
|
||||
const Dashboard = {
|
||||
name: "Dashboard",
|
||||
lg: {
|
||||
tr: "Pano",
|
||||
en: "Dashboard",
|
||||
},
|
||||
siteUrl: "/dashboard",
|
||||
};
|
||||
|
||||
const BuildParts = {
|
||||
name: "BuildParts",
|
||||
lg: {
|
||||
tr: "Daire",
|
||||
en: "BuildParts",
|
||||
tr: "Daireler",
|
||||
en: "Build Parts",
|
||||
},
|
||||
siteUrl: "/build/parts",
|
||||
};
|
||||
@@ -37,8 +46,8 @@ const BuildParts = {
|
||||
const BuildArea = {
|
||||
name: "BuildArea",
|
||||
lg: {
|
||||
tr: "Daire",
|
||||
en: "BuildArea",
|
||||
tr: "Daire Alanları",
|
||||
en: "Build Area",
|
||||
},
|
||||
siteUrl: "/build/area",
|
||||
};
|
||||
@@ -94,7 +103,7 @@ const EmergencyMeeting = {
|
||||
tr: "Acil Toplantı Tanımlama ve Davet",
|
||||
en: "Emergency Meeting and Invitations",
|
||||
},
|
||||
siteUrl: "emergency/meeting",
|
||||
siteUrl: "/emergency/meeting",
|
||||
};
|
||||
|
||||
const EmergencyMeetingClose = {
|
||||
@@ -112,10 +121,27 @@ const MeetingParticipations = {
|
||||
tr: "Toplantı Katılım İşlemleri",
|
||||
en: "Meeting Participations",
|
||||
},
|
||||
siteUrl: "/meeting/participations",
|
||||
siteUrl: "/meeting/participation",
|
||||
};
|
||||
|
||||
const Menu = [
|
||||
{
|
||||
name: "Dashboard",
|
||||
lg: {
|
||||
tr: "Pano",
|
||||
en: "Dashboard",
|
||||
},
|
||||
subList: [
|
||||
{
|
||||
name: "Dashboard",
|
||||
lg: {
|
||||
tr: "Pano",
|
||||
en: "Dashboard",
|
||||
},
|
||||
subList: [Dashboard],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Definitions",
|
||||
lg: {
|
||||
|
||||
Reference in New Issue
Block a user