From c1f517d32d680fa7332b6b339fb1d130ef22ea76 Mon Sep 17 00:00:00 2001 From: berkay Date: Mon, 6 Jan 2025 16:38:27 +0300 Subject: [PATCH] pages updated --- apicalls/basics.ts | 5 +- apicalls/building/build.tsx | 2 +- apicalls/login/login.tsx | 10 +- apicalls/login/logout.tsx | 7 +- apicalls/validations/validationProcesser.ts | 2 +- apimaps/building/pageInfo.ts | 8 + apimaps/mappingApi.ts | 14 +- next.config.ts | 9 +- oldCode/building/create/CreatePage.tsx | 96 +++++++ oldCode/building/create/page.tsx | 40 +++ oldCode/building/page.tsx | 159 +++++++++++ oldCode/building/update/page.tsx | 55 ++++ oldCode/loading.tsx | 14 + oldCode/pageTemplate.tsx | 50 ++++ {src/components/commons => oldCode}/table.tsx | 64 +++-- public/green-house.webp | Bin 0 -> 140822 bytes src/app/accessibilities/page.tsx | 13 + src/app/accounts/page.tsx | 55 +--- src/app/building/create/page.tsx | 39 +-- src/app/building/page.tsx | 151 +--------- src/app/building/update/page.tsx | 59 ++-- src/app/companies/page.tsx | 13 + src/app/dashboard/page.tsx | 17 ++ src/app/decisions/page.tsx | 14 + src/app/identities/page.tsx | 14 + src/app/loading.tsx | 14 + src/app/meetings/page.tsx | 12 + .../commons}/CreatePage.tsx | 54 ++-- src/components/commons/MainPage.tsx | 17 ++ src/components/commons/SingleTableHeader.tsx | 60 ++++ src/components/commons/Table.tsx | 267 ++++++++++++++++++ .../commons}/UpdatePage.tsx | 52 ++-- src/components/commons/pagination.tsx | 2 - src/components/defaultLayout/Header.tsx | 55 ++++ .../defaultLayout/MainBodyWithHeader.tsx | 47 ++- src/components/defaultLayout/SideMenu.tsx | 29 ++ .../defaultLayout/SideMenuProfile.tsx | 40 +++ src/components/login/logout.tsx | 26 ++ src/components/ui/smart-datetime-input.tsx | 2 - src/hooks/checkpageAvaliable.tsx | 28 +- src/hooks/renderInputWithValidation.tsx | 11 +- src/hooks/retrievePageInfoByComponentName.tsx | 11 +- src/hooks/serverCheckPageAvailable.tsx | 29 ++ src/lib/renderZodValidation.ts | 40 ++- src/pages/Account/AccountPage.tsx | 57 ++++ src/pages/Build/Build.tsx | 33 --- src/pages/Build/BuildingPage.tsx | 60 ++++ src/pages/Decisions/DecisionsPage.tsx | 59 ++++ src/pages/Identities/IdentitiesPage.tsx | 59 ++++ src/pages/Meetings/MeetingsPage.tsx | 59 ++++ src/schemas/PageSchema.ts | 6 + 51 files changed, 1619 insertions(+), 420 deletions(-) create mode 100644 oldCode/building/create/CreatePage.tsx create mode 100644 oldCode/building/create/page.tsx create mode 100644 oldCode/building/page.tsx create mode 100644 oldCode/building/update/page.tsx create mode 100644 oldCode/loading.tsx create mode 100644 oldCode/pageTemplate.tsx rename {src/components/commons => oldCode}/table.tsx (81%) create mode 100644 public/green-house.webp create mode 100644 src/app/accessibilities/page.tsx create mode 100644 src/app/companies/page.tsx create mode 100644 src/app/dashboard/page.tsx create mode 100644 src/app/decisions/page.tsx create mode 100644 src/app/identities/page.tsx create mode 100644 src/app/loading.tsx create mode 100644 src/app/meetings/page.tsx rename src/{app/building/create => components/commons}/CreatePage.tsx (69%) create mode 100644 src/components/commons/MainPage.tsx create mode 100644 src/components/commons/SingleTableHeader.tsx create mode 100644 src/components/commons/Table.tsx rename src/{app/building/update => components/commons}/UpdatePage.tsx (72%) create mode 100644 src/components/defaultLayout/Header.tsx create mode 100644 src/components/defaultLayout/SideMenu.tsx create mode 100644 src/components/defaultLayout/SideMenuProfile.tsx create mode 100644 src/components/login/logout.tsx create mode 100644 src/hooks/serverCheckPageAvailable.tsx create mode 100644 src/pages/Account/AccountPage.tsx delete mode 100644 src/pages/Build/Build.tsx create mode 100644 src/pages/Build/BuildingPage.tsx create mode 100644 src/pages/Decisions/DecisionsPage.tsx create mode 100644 src/pages/Identities/IdentitiesPage.tsx create mode 100644 src/pages/Meetings/MeetingsPage.tsx create mode 100644 src/schemas/PageSchema.ts diff --git a/apicalls/basics.ts b/apicalls/basics.ts index f1b03f5..7d786b7 100644 --- a/apicalls/basics.ts +++ b/apicalls/basics.ts @@ -3,9 +3,10 @@ export const tokenSecret = process.env.TOKENSECRET || ""; export const cookieObject: any = { httpOnly: true, path: "/", - sameSite: "lax", + sameSite: "none", secure: true, maxAge: 3600, + priority: "high", }; interface FilterListInterface { @@ -34,7 +35,7 @@ class FilterList { }: FilterListInterface = {}) { this.page = page ?? 1; this.size = size ?? 5; - this.orderField = orderField ?? "id"; + this.orderField = orderField ?? "uu_id"; this.orderType = orderType ?? "asc"; this.orderType = this.orderType.startsWith("a") ? "asc" : "desc"; this.includeJoins = includeJoins ?? []; diff --git a/apicalls/building/build.tsx b/apicalls/building/build.tsx index 200cf9a..d061fcb 100644 --- a/apicalls/building/build.tsx +++ b/apicalls/building/build.tsx @@ -13,7 +13,6 @@ const buildUpdateEndpoint = `${baseUrl}/building/build/update`; async function retrieveBuildList(payload: FilterListInterface) { const feedObject = new FilterList(payload).filter(); - console.log("feedObject", feedObject); const tokenResponse: any = await fetchDataWithToken( buildListEndpoint, feedObject, @@ -41,6 +40,7 @@ async function updateBuild(payload: any) { } async function createBuild(payload: any) { + console.log("payload", payload); const tokenResponse: any = await fetchDataWithToken( buildCreateEndpoint, payload, diff --git a/apicalls/login/login.tsx b/apicalls/login/login.tsx index 916fdab..62918a0 100644 --- a/apicalls/login/login.tsx +++ b/apicalls/login/login.tsx @@ -3,7 +3,7 @@ import { fetchData, fetchDataWithToken } from "../api-fetcher"; import { cookies } from "next/headers"; import { baseUrl, cookieObject, tokenSecret } from "../basics"; import NextCrypto from "next-crypto"; -import { setAvailableEvents } from "../events/available"; +// import { setAvailableEvents } from "../events/available"; const loginEndpoint = `${baseUrl}/authentication/login`; const loginSelectEndpoint = `${baseUrl}/authentication/select`; @@ -75,11 +75,6 @@ async function loginViaAccessKeys(payload: LoginViaAccessKeys) { value: JSON.stringify(userProfile), ...cookieObject, }); - // cookieStore.set({ - // name: "userType", - // value: userType, - // ...cookieObject, - // }); } return tokenResponse; } @@ -108,7 +103,6 @@ async function loginSelectEmployee(payload: LoginSelectEmployee) { value: usersSelection, ...cookieObject, }); - await setAvailableEvents(); } return selectResponse; } @@ -143,7 +137,7 @@ async function loginSelectOccupant(payload: LoginSelectOccupant) { value: usersSelection, ...cookieObject, }); - await setAvailableEvents(); + // await setAvailableEvents(); } return selectResponse; } diff --git a/apicalls/login/logout.tsx b/apicalls/login/logout.tsx index c190208..ad016a2 100644 --- a/apicalls/login/logout.tsx +++ b/apicalls/login/logout.tsx @@ -2,6 +2,7 @@ import { fetchDataWithToken } from "../api-fetcher"; import { cookies } from "next/headers"; import { baseUrl } from "../basics"; +import { redirect } from "next/navigation"; const logOutEndpoint = `${baseUrl}/authentication/logout`; const logOutAllEndpoint = `${baseUrl}/authentication/disconnect`; @@ -11,7 +12,6 @@ interface LoginOutUser { } async function logoutActiveSession(payload: LoginOutUser) { - "use server"; const cookieStore = await cookies(); cookieStore.delete("accessToken"); cookieStore.delete("accessObject"); @@ -26,10 +26,7 @@ async function logoutActiveSession(payload: LoginOutUser) { "POST", false ); - if (tokenResponse.status === 200) { - return true; - } - return false; + return tokenResponse.status === 200 ? true : false; } async function logoutAllSessions(payload: LoginOutUser) { diff --git a/apicalls/validations/validationProcesser.ts b/apicalls/validations/validationProcesser.ts index 06af10f..582187d 100644 --- a/apicalls/validations/validationProcesser.ts +++ b/apicalls/validations/validationProcesser.ts @@ -33,7 +33,7 @@ class HeadersAndValidations { parseProcesser() { Object.entries(this.validation).map(([key, value]) => { this.validated[key] = { - required: !value.required, + required: value.required, fieldType: value?.type, }; }); diff --git a/apimaps/building/pageInfo.ts b/apimaps/building/pageInfo.ts index 8e3f3a5..6a0a32e 100644 --- a/apimaps/building/pageInfo.ts +++ b/apimaps/building/pageInfo.ts @@ -1,3 +1,5 @@ +import { url } from "inspector"; + const BuildPageInfo = { tr: [ { @@ -6,6 +8,7 @@ const BuildPageInfo = { icon: null, description: "Bina listeyebilirsiniz", endpoint: "/building/build/list", + url: "/building", component: "Table", }, { @@ -14,6 +17,7 @@ const BuildPageInfo = { name: "create", description: "Bina oluşturma sayfasına hoş geldiniz", endpoint: "/building/build/create", + url: "/building/create", component: "AddCreate2Table", }, { @@ -22,6 +26,7 @@ const BuildPageInfo = { name: "update", description: "Bina güncelleme sayfasına hoş geldiniz", endpoint: "/building/build/update/{build_uu_id}", + url: "/building/update", component: "AddUpdate2Table", }, ], @@ -31,6 +36,7 @@ const BuildPageInfo = { icon: null, description: "Welcome to the building update page", endpoint: "/building/build/list", + url: "/building", component: "Table", }, { @@ -38,6 +44,7 @@ const BuildPageInfo = { icon: "BadgePlus", description: "Welcome to the building creation page", endpoint: "/building/build/create", + url: "/building/create", component: "AddCreate2Table", }, { @@ -45,6 +52,7 @@ const BuildPageInfo = { icon: "Pencil", description: "Welcome to the building update page", endpoint: "/building/build/update/{build_uu_id}", + url: "/building/update", component: "AddUpdate2Table", }, ], diff --git a/apimaps/mappingApi.ts b/apimaps/mappingApi.ts index 8470edd..d10782a 100644 --- a/apimaps/mappingApi.ts +++ b/apimaps/mappingApi.ts @@ -30,13 +30,13 @@ const PagesInfosAndEndpoints = [ subCategories: BuildCategories, }, { - name: "", + name: "MeetingsPage", title: { tr: "Toplantılar", en: "Meetings", }, icon: "Logs", - url: "/meetings?page=1", + url: "/meetings", pageInfo: null, component: null, allEndpoints: MeetingAllEndpoints, @@ -50,7 +50,7 @@ const PagesInfosAndEndpoints = [ }, icon: "Landmark", component: "AccountPage", - url: "/accounts?page=1", + url: "/accounts", pageInfo: AccountPageInfo, allEndpoints: AccountAllEndpoints, subCategories: AccountSubCategories, @@ -63,7 +63,7 @@ const PagesInfosAndEndpoints = [ }, icon: "ScrollText", component: "DecisionBookPage", - url: "/decisions?page=1", + url: "/decisions", pageInfo: DecisionBookPageInfo, allEndpoints: DecisionBookAllEndpoints, subCategories: DecisionBookSubCategories, @@ -76,7 +76,7 @@ const PagesInfosAndEndpoints = [ }, icon: "UserPlus", component: null, - url: "/identities?page=1", + url: "/identities", pageInfo: null, allEndpoints: IdentityAllEndpoints, subCategories: IdentityCategories, @@ -89,7 +89,7 @@ const PagesInfosAndEndpoints = [ }, icon: "Cog", component: null, - url: "/accessibilities?page=1", + url: "/accessibilities", pageInfo: null, allEndpoints: AccesibleAllEndpoints, subCategories: AccesibleCategories, @@ -102,7 +102,7 @@ const PagesInfosAndEndpoints = [ }, icon: "Store", component: "CompanyPage", - url: "/companies?page=1", + url: "/companies", pageInfo: CompanyPageInfo, allEndpoints: CompanyAllEndpoints, subCategories: CompanyCategories, diff --git a/next.config.ts b/next.config.ts index e9ffa30..e4305c2 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,14 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - /* config options here */ + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "s.tmimgcdn.com", + }, + ], + }, }; export default nextConfig; diff --git a/oldCode/building/create/CreatePage.tsx b/oldCode/building/create/CreatePage.tsx new file mode 100644 index 0000000..fab1786 --- /dev/null +++ b/oldCode/building/create/CreatePage.tsx @@ -0,0 +1,96 @@ +"use client"; +import { RetrieveInputByType } from "@/hooks/renderInputWithValidation"; +import * as z from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; + +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, + FormDescription, +} from "@/components/ui/form"; +import { convertApiValidationToZodValidation } from "@/lib/renderZodValidation"; + +interface CreatePageComponentInterface { + validator: any; + headers: any; +} + +const CreatePageComponent: React.FC = ({ + validator, + headers, +}) => { + const returnValidation = convertApiValidationToZodValidation(validator); + const { validSchemaZod, zodValidation, apiValidation } = returnValidation; + + const form = useForm>({ + resolver: zodResolver(validSchemaZod), + defaultValues: {}, + }); + + function submitUpdate(formData: z.infer) { + // saveFunction({ + // uu_id: updateUUID, + // payload: validDataParser(formData), + // }).then((res: any) => { + // console.log(res); + // if (res?.status === 200) { + // } else { + // alert("Güncelleme başarısız"); + // } + // }); + } + + return ( +
+
+ + {Object.entries(validator).map(([key, value]: [string, any]) => ( + { + return ( + + + {headers[key] || `Header not found ${key}`} + + + {RetrieveInputByType({ + type: value?.fieldType || "string", + props: { + className: "", + field: field, + placeholder: headers[key], + required: value?.required || false, + }, + })} + + {String(form.formState.errors[key]?.type) === + "invalid_type" ? ( + + "Lütfen metinsel bir değer giriniz" + + ) : ( + <> + )} + + ); + }} + /> + ))} + + + +
+ ); +}; + +export default CreatePageComponent; diff --git a/oldCode/building/create/page.tsx b/oldCode/building/create/page.tsx new file mode 100644 index 0000000..745fa8c --- /dev/null +++ b/oldCode/building/create/page.tsx @@ -0,0 +1,40 @@ +"use server"; + +import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; +import { checkAccessTokenIsValid } from "@/apicalls/cookies/token"; +import { decryptQuery, defaultPagination } from "@/apicalls/test"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { redirect } from "next/navigation"; +import CreatePageComponent from "./CreatePage"; + +export default async function BuildingCreatePage({ + searchParams, +}: { + searchParams: any; +}) { + if (!(await checkAccessTokenIsValid())) { + redirect("/login/email"); + } + + const buildKey = "building"; + const searchParamsKeys = await searchParams; + const endpointUrl = "/building/build/create"; + + const queryEncrypt = await decryptQuery(searchParamsKeys?.q); + const endpointAvailable = await retrieveAvailableEndpoint(endpointUrl); + const validateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: endpointUrl, + }); + const validator = validateAndHeaders?.validated || {}; + const headers = validateAndHeaders?.headers || {}; + console.log("validateAndHeaders", validateAndHeaders); + console.log("endpointAvailable", endpointAvailable); + console.log("queryEncrypt", queryEncrypt); + return ( +
+

Create Building

+

{JSON.stringify(queryEncrypt)}

+ +
+ ); +} diff --git a/oldCode/building/page.tsx b/oldCode/building/page.tsx new file mode 100644 index 0000000..aafb79d --- /dev/null +++ b/oldCode/building/page.tsx @@ -0,0 +1,159 @@ +"use server"; +import React from "react"; +import Link from "next/link"; +import { redirect } from "next/navigation"; +import { RefreshCcw, PlusCircle } from "lucide-react"; +import { + decryptQuery, + defaultPagination, + handleFormSubmission, +} from "@/apicalls/test"; +import { TableComponent } from "@/components/commons/Table"; +import Pagination from "@/components/commons/pagination"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; +import { + createBuild, + retrieveBuildList, + updateBuild, +} from "@/apicalls/building/build"; +import { + checkAccessTokenIsValid, + retrieveUserSelection, +} from "@/apicalls/cookies/token"; +import { retrievePageInfoByComponentName } from "@/hooks/retrievePageInfoByComponentName"; +import { checkPageAvaliable } from "@/hooks/checkpageAvaliable"; + +const BuildinPage = async ({ searchParams }: { searchParams: any }) => { + const buildKey = "building"; + const pageName = "BuildingPage"; + const searchParamsKeys = await searchParams; + + if (!searchParamsKeys?.q) { + const defaultURL = await defaultPagination(); + redirect(`/${buildKey}?q=${defaultURL}`); + } + const queryEncrypt = await decryptQuery(searchParamsKeys?.q); + if (!(await checkAccessTokenIsValid())) { + redirect("/login/email"); + } + const user = await retrieveUserSelection(); + + const tableValues = { + endpoint: "building/build/list", + name: "table", + url: "/building", + function: retrieveBuildList, + data: [], + headers: {}, + validation: {}, + }; + const createValues = { + endpoint: "building/build/create", + name: "create", + url: "/building/create", + function: createBuild, + data: [], + headers: {}, + validation: {}, + }; + const updateValues = { + endpoint: "building/build/update/{build_uu_id}", + function: updateBuild, + name: "update", + url: "/building/update", + data: [], + headers: {}, + validation: {}, + }; + + let restrictions: any = { + update: updateValues, + create: createValues, + table: tableValues, + }; + + if (!user?.lang) { + return ( + User selection is not successfully retrieved.} + /> + ); + } else { + const pageContent = retrievePageInfoByComponentName(pageName, user?.lang); + const restrictionsChecked = await checkPageAvaliable({ + pageContent, + restrictions, + queryEncrypt, + }); + + if (!restrictionsChecked || !restrictionsChecked?.table) { + return ( + This user does not have access to this page.} + /> + ); + } + + const BuildingPage = ( +
+

Dashboard

+
+
+

Welcome to your dashboard

+ {restrictionsChecked?.create && ( + + + Create + + )} +

{JSON.stringify(queryEncrypt)}

+ + {restrictionsChecked && ( +
+ + +
+ )} + + + +
+
+
+ ); + return ( + <> + + + ); + } +}; + +export default BuildinPage; diff --git a/oldCode/building/update/page.tsx b/oldCode/building/update/page.tsx new file mode 100644 index 0000000..2072a1e --- /dev/null +++ b/oldCode/building/update/page.tsx @@ -0,0 +1,55 @@ +"use server"; +import { redirect } from "next/navigation"; + +import { updateBuild } from "@/apicalls/building/build"; +import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; +import { checkAccessTokenIsValid } from "@/apicalls/cookies/token"; +import { decryptQuery, defaultPagination } from "@/apicalls/test"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; + +import { RetrieveInputByType } from "@/hooks/renderInputWithValidation"; + +import React from "react"; +import UpdatePageComponent from "@/components/commons/UpdatePage"; + +export default async function BuildingUpdatePage({ + searchParams, +}: { + searchParams: any; +}) { + if (!(await checkAccessTokenIsValid())) { + redirect("/login/email"); + } + + const buildKey = "building/update"; + const searchParamsKeys = await searchParams; + const endpointUrl = "building/build/update/{build_uu_id}"; + if (!searchParamsKeys?.q) { + redirect(`/${buildKey}`); + } + const queryEncrypt = await decryptQuery(searchParamsKeys?.q); + const endpointAvailable = await retrieveAvailableEndpoint(endpointUrl); + const validateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: endpointUrl, + }); + const validator = validateAndHeaders?.validated || {}; + const headers = validateAndHeaders?.headers || {}; + console.log("endpointAvailable", endpointAvailable); + console.log("validator", validator); + console.log("headers", headers); + console.log("queryEncrypt", queryEncrypt); + + return ( +
+

Update Building

+

{JSON.stringify(queryEncrypt)}

+ + +
+ ); +} diff --git a/oldCode/loading.tsx b/oldCode/loading.tsx new file mode 100644 index 0000000..3410dea --- /dev/null +++ b/oldCode/loading.tsx @@ -0,0 +1,14 @@ +"use server"; + +export default async function Loading() { + return ( + <> +
+

Page is being loaded

+
+
+
+
+ + ); +} diff --git a/oldCode/pageTemplate.tsx b/oldCode/pageTemplate.tsx new file mode 100644 index 0000000..c5f8747 --- /dev/null +++ b/oldCode/pageTemplate.tsx @@ -0,0 +1,50 @@ +const BuildingPage = ( +
+

Dashboard

+
+
+

Welcome to your dashboard

+ {restrictionsChecked?.create && ( + + + Create + + )} +

{JSON.stringify(queryEncrypt)}

+ + {restrictionsChecked && ( + <> + + + + )} + + + +
+
+
+ ); \ No newline at end of file diff --git a/src/components/commons/table.tsx b/oldCode/table.tsx similarity index 81% rename from src/components/commons/table.tsx rename to oldCode/table.tsx index 9c23aa6..9df1755 100644 --- a/src/components/commons/table.tsx +++ b/oldCode/table.tsx @@ -16,23 +16,30 @@ import { TableFooter, } from "@/components/ui/table"; -import { ArrowUpDown, ArrowUp, ArrowDown } from "lucide-react"; import { getIconByName } from "@/Icons/icons"; import { useRouter } from "next/navigation"; import { encryptQuery, handleUpdateSubmission } from "@/apicalls/test"; +import SingleTableHeader from "./SingleTableHeader"; interface TableComponentInterFace { restrictions: any; query: any; + orderByValue: string; + orderTypeValue: string; } - const TableComponent: React.FC = ({ restrictions, query, + orderByValue, + orderTypeValue, }) => { const router = useRouter(); const [updateRow, setUpdateRow] = React.useState(null); const [columns, setColumns] = React.useState([]); + const [orderBy, setOrderBy] = React.useState<"asc" | "desc">( + orderByValue as "asc" | "desc" + ); + const [orderColumn, setOrderColumn] = React.useState(orderTypeValue); const columnHelper = createColumnHelper(); const table = useReactTable({ @@ -82,37 +89,48 @@ const TableComponent: React.FC = ({ return columns; } + function changeOrderState(headerID: string) { + console.log("changeOrderState", headerID, orderColumn, orderBy); + if (orderColumn === headerID) { + setOrderBy(orderBy === "asc" ? "desc" : "asc"); + } else { + setOrderColumn(headerID); + setOrderBy("asc"); + } + } + return ( <>

{JSON.stringify(updateRow)}

+ + {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( -
- {/* {header.id !== "update" && ( - changeOrderState(header.id)} - /> - )} */} - {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.header, - header.getContext() - )} - {/* {tableInfo.field === header.id && - header.id !== "update" && - (tableInfo.type.startsWith("a") ? ( - - ) : ( - - ))} */} -
+
))}
diff --git a/public/green-house.webp b/public/green-house.webp new file mode 100644 index 0000000000000000000000000000000000000000..30d3ce56f2763149dfac9084435e3e553784341a GIT binary patch literal 140822 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"y2HDV*X5ldbth; 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 literal 0 HcmV?d00001 diff --git a/src/app/accessibilities/page.tsx b/src/app/accessibilities/page.tsx new file mode 100644 index 0000000..f56ce76 --- /dev/null +++ b/src/app/accessibilities/page.tsx @@ -0,0 +1,13 @@ +"use server"; +import React from "react"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; + +const Accessibilities = async () => { + return ( +
+ } section="BuildingPage" /> +
+ ); +}; + +export default Accessibilities; diff --git a/src/app/accounts/page.tsx b/src/app/accounts/page.tsx index a051f28..94ecd3d 100644 --- a/src/app/accounts/page.tsx +++ b/src/app/accounts/page.tsx @@ -1,57 +1,14 @@ "use server"; import React from "react"; -import { RefreshCcw } from "lucide-react"; -import Pagination from "../../components/commons/pagination"; -import TableComponent from "../../components/commons/table"; -import { - decryptQuery, - defaultPagination, - handleFormSubmission, -} from "@/apicalls/test"; import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; -import { redirect } from "next/navigation"; +import AccountPage from "@/pages/Account/AccountPage"; -const AccountsPage = async ({ searchParams }: { searchParams: any }) => { - const searchParamsKeys = await searchParams; - if (!searchParamsKeys?.q) { - const defaultURL = await defaultPagination(); - redirect(`/accounts?q=${defaultURL}`); - } - const queryEncrypt = await decryptQuery( - searchParamsKeys?.q.replace(/ /g, "+") - ); - - const accountPage = ( -
-

Dashboard

-
-
-

Welcome to your dashboard

-

{JSON.stringify(queryEncrypt)}

- - - - -
- +const Accounts = async () => { + return ( +
+
); - return ; }; -export default AccountsPage; +export default Accounts; diff --git a/src/app/building/create/page.tsx b/src/app/building/create/page.tsx index 745fa8c..fa7e079 100644 --- a/src/app/building/create/page.tsx +++ b/src/app/building/create/page.tsx @@ -1,40 +1,27 @@ "use server"; - -import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; -import { checkAccessTokenIsValid } from "@/apicalls/cookies/token"; -import { decryptQuery, defaultPagination } from "@/apicalls/test"; +import { Suspense } from "react"; import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; -import { redirect } from "next/navigation"; -import CreatePageComponent from "./CreatePage"; +import { createBuild } from "@/apicalls/building/build"; +import CreatePageComponent from "@/components/commons/CreatePage"; -export default async function BuildingCreatePage({ - searchParams, -}: { - searchParams: any; -}) { - if (!(await checkAccessTokenIsValid())) { - redirect("/login/email"); - } - - const buildKey = "building"; - const searchParamsKeys = await searchParams; +export default async function BuildingCreatePage() { const endpointUrl = "/building/build/create"; - - const queryEncrypt = await decryptQuery(searchParamsKeys?.q); - const endpointAvailable = await retrieveAvailableEndpoint(endpointUrl); const validateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ endpoint: endpointUrl, }); const validator = validateAndHeaders?.validated || {}; const headers = validateAndHeaders?.headers || {}; - console.log("validateAndHeaders", validateAndHeaders); - console.log("endpointAvailable", endpointAvailable); - console.log("queryEncrypt", queryEncrypt); return (
-

Create Building

-

{JSON.stringify(queryEncrypt)}

- + Loading Create Page...
}> +

Create Building

+ +
); } diff --git a/src/app/building/page.tsx b/src/app/building/page.tsx index b4bfec9..b9cdadb 100644 --- a/src/app/building/page.tsx +++ b/src/app/building/page.tsx @@ -1,153 +1,14 @@ "use server"; -import React, { Suspense } from "react"; -import Link from "next/link"; -import { RefreshCcw, PlusCircle } from "lucide-react"; +import React from "react"; import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; -import { - decryptQuery, - defaultPagination, - handleFormSubmission, -} from "@/apicalls/test"; -import { redirect } from "next/navigation"; -import TableComponent from "@/components/commons/table"; -import Pagination from "@/components/commons/pagination"; -import { - createBuild, - retrieveBuildList, - updateBuild, -} from "@/apicalls/building/build"; -import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; -import { - checkAccessTokenIsValid, - retrieveUserSelection, -} from "@/apicalls/cookies/token"; -import { retrievePageInfoByComponentName } from "@/hooks/retrievePageInfoByComponentName"; -import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; -import { checkPageAvaliable } from "@/hooks/checkpageAvaliable"; -import { logoutActiveSession } from "@/apicalls/login/logout"; +import BuildingPage from "@/pages/Build/BuildingPage"; -const BuildinPage = async ({ searchParams }: { searchParams: any }) => { - const buildKey = "building"; - const pageName = "BuildingPage"; - const searchParamsKeys = await searchParams; - - if (!searchParamsKeys?.q) { - const defaultURL = await defaultPagination(); - redirect(`/${buildKey}?q=${defaultURL}`); - } - const queryEncrypt = await decryptQuery(searchParamsKeys?.q); - if (!(await checkAccessTokenIsValid())) { - redirect("/login/email"); - } - - const tableValues = { - endpoint: "building/build/list", - name: "table", - url: "/building", - function: retrieveBuildList, - data: [], - headers: {}, - validation: {}, - }; - const createValues = { - endpoint: "building/build/create", - name: "create", - url: "/building/create", - function: createBuild, - data: [], - headers: {}, - validation: {}, - }; - const updateValues = { - endpoint: "building/build/update/{build_uu_id}", - function: updateBuild, - name: "update", - url: "/building/update", - data: [], - headers: {}, - validation: {}, - }; - - let restrictions: any = { - update: updateValues, - create: createValues, - table: tableValues, - }; - - const user = await retrieveUserSelection(); - if (!user?.lang) { - await logoutActiveSession({ domain: "evyos.com.tr" }); - redirect("/login/email"); - } - const pageContent = await retrievePageInfoByComponentName( - pageName, - user?.lang - ); - const restrictionsChecked = await checkPageAvaliable({ - pageContent, - restrictions, - queryEncrypt, - }); - - if (!restrictionsChecked || !restrictionsChecked?.table) { - redirect("/home"); - } - - const BuildingPage = ( -
-

Dashboard

-
-
-

Welcome to your dashboard

- {restrictionsChecked?.create && ( - - - Create - - )} -

{JSON.stringify(queryEncrypt)}

- - {restrictionsChecked && ( - <> - - - - )} - - - -
- -
- ); +const BuildinPage = async () => { return ( - <> - Loading...}> - - - +
+ +
); }; diff --git a/src/app/building/update/page.tsx b/src/app/building/update/page.tsx index eeaf986..5704f3d 100644 --- a/src/app/building/update/page.tsx +++ b/src/app/building/update/page.tsx @@ -1,63 +1,36 @@ "use server"; +import React, { Suspense } from "react"; import { updateBuild } from "@/apicalls/building/build"; -import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; -import { checkAccessTokenIsValid } from "@/apicalls/cookies/token"; -import { decryptQuery, defaultPagination } from "@/apicalls/test"; import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; -import { redirect } from "next/navigation"; -import { RetrieveInputByType } from "@/hooks/renderInputWithValidation"; - -import React from "react"; -import UpdatePageComponent from "./UpdatePage"; +import UpdatePageComponent from "@/components/commons/UpdatePage"; export default async function BuildingUpdatePage({ searchParams, }: { searchParams: any; }) { - if (!(await checkAccessTokenIsValid())) { - redirect("/login/email"); - } - - const buildKey = "building/update"; const searchParamsKeys = await searchParams; + const queryEncrypt = decodeURIComponent(searchParamsKeys?.data); + const queryEncryptJSON = JSON.parse(queryEncrypt); const endpointUrl = "building/build/update/{build_uu_id}"; - if (!searchParamsKeys?.q) { - redirect(`/${buildKey}`); - } - const queryEncrypt = await decryptQuery(searchParamsKeys?.q); - const updateValues = { - endpoint: "building/build/update/{build_uu_id}", - function: updateBuild, - name: "update", - url: "/building/update", - data: [], - headers: {}, - validation: {}, - }; - - const endpointAvailable = await retrieveAvailableEndpoint(endpointUrl); const validateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ endpoint: endpointUrl, }); const validator = validateAndHeaders?.validated || {}; const headers = validateAndHeaders?.headers || {}; - console.log("endpointAvailable", endpointAvailable); - console.log("validator", validator); - console.log("headers", headers); - console.log("queryEncrypt", queryEncrypt); return ( -
-

Update Building

-

{JSON.stringify(queryEncrypt)}

- - - -
+ Building Update Page is Loading...}> +
+

Update Building

+ +
+
); } diff --git a/src/app/companies/page.tsx b/src/app/companies/page.tsx new file mode 100644 index 0000000..e01ffd5 --- /dev/null +++ b/src/app/companies/page.tsx @@ -0,0 +1,13 @@ +"use server"; +import React from "react"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; + +const Companies = async () => { + return ( +
+ } section="CompaniesPage" /> +
+ ); +}; + +export default Companies; diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx new file mode 100644 index 0000000..86a4eee --- /dev/null +++ b/src/app/dashboard/page.tsx @@ -0,0 +1,17 @@ +"use server"; + +import React from "react"; + +interface WebPageProps { + // Add your props here if needed +} + +const WebPage: React.FC = () => { + return ( +
+

Web Page

+
+ ); +}; + +export default WebPage; diff --git a/src/app/decisions/page.tsx b/src/app/decisions/page.tsx new file mode 100644 index 0000000..47a946a --- /dev/null +++ b/src/app/decisions/page.tsx @@ -0,0 +1,14 @@ +"use server"; +import React from "react"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; +import BuildingPage from "@/pages/Build/BuildingPage"; + +const Decision = async () => { + return ( +
+ +
+ ); +}; + +export default Decision; diff --git a/src/app/identities/page.tsx b/src/app/identities/page.tsx new file mode 100644 index 0000000..b43b192 --- /dev/null +++ b/src/app/identities/page.tsx @@ -0,0 +1,14 @@ +"use server"; +import React from "react"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; +import IdentitiesPage from "@/pages/Identities/IdentitiesPage"; + +const Identities = async () => { + return ( +
+ +
+ ); +}; + +export default Identities; diff --git a/src/app/loading.tsx b/src/app/loading.tsx new file mode 100644 index 0000000..3410dea --- /dev/null +++ b/src/app/loading.tsx @@ -0,0 +1,14 @@ +"use server"; + +export default async function Loading() { + return ( + <> +
+

Page is being loaded

+
+
+
+
+ + ); +} diff --git a/src/app/meetings/page.tsx b/src/app/meetings/page.tsx new file mode 100644 index 0000000..c2a8441 --- /dev/null +++ b/src/app/meetings/page.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import MainBodyWithHeader from "@/components/defaultLayout/MainBodyWithHeader"; + +const Meetings = async () => { + return ( +
+ } section="IdentitiesPage" /> +
+ ); +}; + +export default Meetings; diff --git a/src/app/building/create/CreatePage.tsx b/src/components/commons/CreatePage.tsx similarity index 69% rename from src/app/building/create/CreatePage.tsx rename to src/components/commons/CreatePage.tsx index 9e6836f..49429c8 100644 --- a/src/app/building/create/CreatePage.tsx +++ b/src/components/commons/CreatePage.tsx @@ -13,49 +13,56 @@ import { FormMessage, FormDescription, } from "@/components/ui/form"; -import { convertApiValidationToZodValidation } from "@/lib/renderZodValidation"; +import { + convertApiValidationToZodValidation, + retrieveDataDefaults, + retrieveDataWhichHaveValidation, +} from "@/lib/renderZodValidation"; +import { useRouter } from "next/navigation"; interface CreatePageComponentInterface { validator: any; headers: any; + saveFunction: any; + pageToReturn: string; } const CreatePageComponent: React.FC = ({ validator, headers, + saveFunction, + pageToReturn, }) => { + const router = useRouter(); const returnValidation = convertApiValidationToZodValidation(validator); const { validSchemaZod, zodValidation, apiValidation } = returnValidation; - console.log("validSchemaZod", { - validSchemaZod, - zodValidation, - apiValidation, - validator, - headers, - }); + const defaultValuesFromValidator = retrieveDataDefaults(validator); const form = useForm>({ resolver: zodResolver(validSchemaZod), - defaultValues: {}, + defaultValues: defaultValuesFromValidator, }); function submitUpdate(formData: z.infer) { - // saveFunction({ - // uu_id: updateUUID, - // payload: validDataParser(formData), - // }).then((res: any) => { - // console.log(res); - // if (res?.status === 200) { - // } else { - // alert("Güncelleme başarısız"); - // } - // }); + console.log("submitUpdate", { + ...retrieveDataWhichHaveValidation(formData, validator), + }); + saveFunction(retrieveDataWhichHaveValidation(formData, validator)).then( + (res: any) => { + console.log(res); + if (res?.status === 200) { + router.push(pageToReturn); + } else { + alert("Güncelleme başarısız"); + } + } + ); } return ( <>
- + {Object.entries(validator).map(([key, value]: [string, any]) => ( = ({ }} /> ))} - diff --git a/src/components/commons/MainPage.tsx b/src/components/commons/MainPage.tsx new file mode 100644 index 0000000..d04a2c3 --- /dev/null +++ b/src/components/commons/MainPage.tsx @@ -0,0 +1,17 @@ +"use server"; +import React from "react"; +interface MainPageProps { + lang: string; + RenderPage: any; + section?: string; +} + +const MainPage: React.FC = async ({ + lang, + section, + RenderPage, +}) => { + return ; +}; + +export default MainPage; diff --git a/src/components/commons/SingleTableHeader.tsx b/src/components/commons/SingleTableHeader.tsx new file mode 100644 index 0000000..00346d3 --- /dev/null +++ b/src/components/commons/SingleTableHeader.tsx @@ -0,0 +1,60 @@ +import { flexRender } from "@tanstack/react-table"; +import { ArrowDown, ArrowUp, ArrowUpDown } from "lucide-react"; +import React from "react"; + +interface SingleTableHeaderProps { + header: any; + orderBy: string; + orderColumn: string; + changeOrderState: React.Dispatch>; +} + +const SingleTableHeader: React.FC = ({ + header, + orderBy, + orderColumn, + changeOrderState, +}) => { + const ClickeAbleArrow = ( + changeOrderState(String(header.id))} + /> + ); + if (header.id !== "update") { + if (orderColumn === header.id) { + if (orderBy === "asc") { + return ( +
+ {ClickeAbleArrow} + {flexRender(header.column.columnDef.header, header.getContext())} + +
+ ); + } else { + return ( +
+ {ClickeAbleArrow} + {flexRender(header.column.columnDef.header, header.getContext())} + +
+ ); + } + } else { + return ( +
+ {ClickeAbleArrow} + {flexRender(header.column.columnDef.header, header.getContext())} +
+ ); + } + } else { + return ( +
+ {flexRender(header.column.columnDef.header, header.getContext())} +
+ ); + } +}; + +export default SingleTableHeader; diff --git a/src/components/commons/Table.tsx b/src/components/commons/Table.tsx new file mode 100644 index 0000000..d4092a3 --- /dev/null +++ b/src/components/commons/Table.tsx @@ -0,0 +1,267 @@ +"use client"; +import React, { Suspense } from "react"; +import { + useReactTable, + flexRender, + getCoreRowModel, + createColumnHelper, +} from "@tanstack/react-table"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, + TableFooter, +} from "@/components/ui/table"; +import { + Pagination, + PaginationContent, + PaginationItem, + PaginationLink, + PaginationNext, + PaginationPrevious, +} from "@/components/ui/pagination"; + +import SingleTableHeader from "@/components/commons/SingleTableHeader"; +import { getIconByName } from "@/Icons/icons"; +import { useRouter } from "next/navigation"; + +interface BuildTableProps { + pageContent: any; + tableValidateAndHeaders: any; + apiFunction: any; + redirectTo: string; +} +const TableComponent: React.FC = ({ + pageContent, + tableValidateAndHeaders, + apiFunction, + redirectTo, +}) => { + const { headers } = tableValidateAndHeaders; + const router = useRouter(); + + const [data, setData] = React.useState([]); + const [columns, setColumns] = React.useState([]); + + const [orderBy, setOrderBy] = React.useState<"asc" | "desc">("asc"); + const [orderColumn, setOrderColumn] = React.useState("uu_id"); + const [page, setPage] = React.useState(1); + const [size, setSize] = React.useState(10); + const [totalPage, setTotalPage] = React.useState(1); + const [totalCount, setTotalCount] = React.useState(1); + const [query, setQuery] = React.useState({}); + const [currentPage, setCurrentPage] = React.useState(1); + + const [updateRow, setUpdateRow] = React.useState(null); + + const columnHelper = createColumnHelper(); + const table = useReactTable({ + data: data, + columns, + getCoreRowModel: getCoreRowModel(), + }); + + function createColumnsFromValidations(headers: any) { + const columns = Object.entries(headers).map(([key]: [string, any]) => { + return columnHelper.accessor(key, { + id: key, + footer: headers[key], + header: () => {headers[key]}, + cell: (info) => {info.getValue()}, + }); + }); + if (pageContent?.update) { + columns.push( + columnHelper.accessor("update", { + id: "update", + footer: "Update", + header: () => Update, + cell: () => ( +
+ {pageContent?.update.icon && + React.createElement(getIconByName(pageContent?.update.icon))} +
+ ), + }) + ); + } + return columns; + } + + React.useEffect(() => { + if (headers) { + setColumns(createColumnsFromValidations(headers)); + } + }, [headers]); + + React.useEffect(() => { + if (updateRow) { + router.push( + `${redirectTo}?data=${encodeURIComponent(JSON.stringify(updateRow))}` + ); + } + }, [updateRow]); + + React.useEffect(() => { + apiFunction({ + page, + size, + orderBy: orderColumn, + orderType: orderBy, + query: query, + }).then((res: any) => { + setData(res?.data || []); + setTotalCount(res?.data?.length || 1); + }); + }, [query, page, size, orderBy, orderColumn]); + + function changeOrderState(headerID: string) { + console.log("changeOrderState", headerID, orderColumn, orderBy); + if (orderColumn === headerID) { + setOrderBy(orderBy === "asc" ? "desc" : "asc"); + } else { + setOrderColumn(headerID); + setOrderBy("asc"); + } + } + + function setActiveQueryState(footerId: string, value?: string) { + const newQuery = { ...query }; + value + ? (newQuery[`${footerId}__ilike`] = `%${value}%`) + : delete newQuery[`${footerId}__ilike`]; + setQuery(newQuery); + } + + return ( + <> + Table is Loading...
}> +
+ + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + + + ))} + + ))} + + Table Data Loading...}> + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => + cell.column.id !== "update" ? ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ) : ( + setUpdateRow(row.original)} + > + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ) + )} + + )) + ) : ( + + + No results. + + + )} + + + + {table.getFooterGroups().map((footerGroup) => ( + + {footerGroup.headers.map( + (footer) => + footer.id !== "update" && ( + + {footer.isPlaceholder ? null : ( + + setActiveQueryState(footer.id, e.target.value) + } + /> + )} + + ) + )} + + ))} + +
+ +
+ + + {page != 1 && ( + + setPage(page - 1) : () => null} + /> + + )} + +
+ + {currentPage} / {totalPage} + + + | {totalCount} | + +
+
+ {page != totalPage && ( + + setPage(page + 1) : () => null + } + /> + + )} +
+
+
+ + ); +}; + +export { TableComponent }; diff --git a/src/app/building/update/UpdatePage.tsx b/src/components/commons/UpdatePage.tsx similarity index 72% rename from src/app/building/update/UpdatePage.tsx rename to src/components/commons/UpdatePage.tsx index ff4cd34..b416c89 100644 --- a/src/app/building/update/UpdatePage.tsx +++ b/src/components/commons/UpdatePage.tsx @@ -13,29 +13,32 @@ import { FormMessage, FormDescription, } from "@/components/ui/form"; -import { convertApiValidationToZodValidation } from "@/lib/renderZodValidation"; +import { + convertApiValidationToZodValidation, + retrieveDataWhichHaveValidation, +} from "@/lib/renderZodValidation"; +import { updateBuild } from "@/apicalls/building/build"; +import { useRouter } from "next/navigation"; interface UpdatePageInterface { validator: any; headers: any; queryEncrypt: any; + commitFunction: any; + pageToReturn: string; } const UpdatePageComponent: React.FC = ({ validator, headers, queryEncrypt, + commitFunction, + pageToReturn, }) => { + const router = useRouter(); const returnValidation = convertApiValidationToZodValidation(validator); const { validSchemaZod, zodValidation, apiValidation } = returnValidation; - console.log("validSchemaZod", { - validSchemaZod, - zodValidation, - apiValidation, - validator, - headers, - queryEncrypt, - }); + const form = useForm>({ resolver: zodResolver(validSchemaZod), defaultValues: { @@ -45,23 +48,23 @@ const UpdatePageComponent: React.FC = ({ function submitUpdate(formData: z.infer) { const updateUUID = queryEncrypt?.uu_id; - // saveFunction({ - // uu_id: updateUUID, - // payload: validDataParser(formData), - // }).then((res: any) => { - // console.log(res); - // if (res?.status === 200) { - // } else { - // alert("Güncelleme başarısız"); - // } - // }); + commitFunction({ + uu_id: updateUUID, + payload: retrieveDataWhichHaveValidation(formData, validator), + }).then((res: any) => { + if (res?.status === 200) { + router.push(pageToReturn); + } else { + alert("Güncelleme başarısız"); + } + }); } return ( <> + ); +}; + +export default IdentitiesPage; diff --git a/src/pages/Meetings/MeetingsPage.tsx b/src/pages/Meetings/MeetingsPage.tsx new file mode 100644 index 0000000..758c570 --- /dev/null +++ b/src/pages/Meetings/MeetingsPage.tsx @@ -0,0 +1,59 @@ +"use server"; +import React, { Suspense } from "react"; +import Link from "next/link"; + +import { PlusCircle } from "lucide-react"; +import { checkEndpointsAvailable } from "@/hooks/checkpageAvaliable"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { TableComponent } from "@/components/commons/Table"; +import { PagePropsInterface } from "@/schemas/PageSchema"; + +const MeetingsPage: React.FC = async ({ + lang, + section, +}) => { + const pageEndpoint = "/account/records/list"; + const availablePageContent = await checkEndpointsAvailable({ + section: section as string, + lang, + }); + const tableValidateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: pageEndpoint, + }); + + return ( +
+ Meetings Page is Loading...
}> +

+ {availablePageContent?.table?.title} +

+

+ {availablePageContent?.table?.description} +

+
+ {availablePageContent?.create && ( + + + Create + + )} +
+
+ {availablePageContent?.table && ( + console.log("retrieveaccountsList")} + redirectTo="/" + /> + )} +
+ +
- + {Object.entries(validator).map(([key, value]: [string, any]) => ( = ({ className: "", field: field, placeholder: headers[key], - required: value?.required || false, + required: value.required ? true : false, }, })} @@ -97,8 +100,11 @@ const UpdatePageComponent: React.FC = ({ }} /> ))} - diff --git a/src/components/commons/pagination.tsx b/src/components/commons/pagination.tsx index fedbd42..8f02d74 100644 --- a/src/components/commons/pagination.tsx +++ b/src/components/commons/pagination.tsx @@ -57,13 +57,11 @@ const Pagination = ({ /> orderBy: orderType: diff --git a/src/components/defaultLayout/Header.tsx b/src/components/defaultLayout/Header.tsx new file mode 100644 index 0000000..0795b8a --- /dev/null +++ b/src/components/defaultLayout/Header.tsx @@ -0,0 +1,55 @@ +"use client"; +import React from "react"; +import LogoutButton from "../login/logout"; +import Link from "next/link"; + +const Header: React.FC = () => { + const [isDropdownOpen, setIsDropdownOpen] = React.useState(false); + + return ( +
+

Sticky Header

+
+ + {isDropdownOpen && ( +
+ + Profile + + + Settings + +
+ +
+ )} +
+
+ ); +}; + +export default Header; diff --git a/src/components/defaultLayout/MainBodyWithHeader.tsx b/src/components/defaultLayout/MainBodyWithHeader.tsx index 52c89d3..54c9d13 100644 --- a/src/components/defaultLayout/MainBodyWithHeader.tsx +++ b/src/components/defaultLayout/MainBodyWithHeader.tsx @@ -1,24 +1,45 @@ "use server"; -import React, { FC, ReactNode } from "react"; +import React, { Suspense } from "react"; +import SideMenu from "./SideMenu"; +import SideMenuProfile from "./SideMenuProfile"; +import Header from "./Header"; +import MainPage from "@/components/commons/MainPage"; + +import { checkServerPageAvaliable } from "@/hooks/serverCheckPageAvailable"; interface MainBodyWithHeaderProps { - children: ReactNode; + children: any; + section?: string; } -const MainBodyWithHeader: FC = ({ children }) => { +const MainBodyWithHeader: React.FC = async ({ + children, + section, +}) => { + const user = await checkServerPageAvaliable(); return ( -
-
-
01
-
02
-
-
-
-

Sticky Header

+
+ Loading Profile...
}> +
+
+ +
+
+ +
-
- {children} + +
+
+
+
+ +
); diff --git a/src/components/defaultLayout/SideMenu.tsx b/src/components/defaultLayout/SideMenu.tsx new file mode 100644 index 0000000..10ccbed --- /dev/null +++ b/src/components/defaultLayout/SideMenu.tsx @@ -0,0 +1,29 @@ +"use server"; +import React from "react"; + +interface SideMenuPropsInterface { + activeSection?: string; +} + +const SideMenu: React.FC = ({ activeSection }) => { + const section = activeSection || ""; + return ( +
+ ); +}; + +export default SideMenu; diff --git a/src/components/defaultLayout/SideMenuProfile.tsx b/src/components/defaultLayout/SideMenuProfile.tsx new file mode 100644 index 0000000..99d7669 --- /dev/null +++ b/src/components/defaultLayout/SideMenuProfile.tsx @@ -0,0 +1,40 @@ +"use server"; +import React from "react"; +import Image from "next/image"; +import Link from "next/link"; + +interface SideMenuProfileProps { + profileInfo?: any; +} + +const SideMenuProfile: React.FC = ({ profileInfo }) => { + return ( +
+
+ {`${profileInfo?.fullName +
+
+ {profileInfo?.fullName ? profileInfo?.fullName : "User"} +
+
+ {profileInfo?.fullName ? profileInfo?.fullName : "User"} +
+
+ + Şirket : + {profileInfo?.occupantName ? profileInfo?.occupantName : "Change"} + +
+
+ ); +}; + +export default SideMenuProfile; diff --git a/src/components/login/logout.tsx b/src/components/login/logout.tsx new file mode 100644 index 0000000..0780c0e --- /dev/null +++ b/src/components/login/logout.tsx @@ -0,0 +1,26 @@ +"use client"; +import React from "react"; +import { logoutActiveSession } from "@/apicalls/login/logout"; +import { useRouter } from "next/navigation"; + +const LogoutButton: React.FC = () => { + const router = useRouter(); + const handleLogout = () => { + logoutActiveSession({ domain: "evyos.com.tr" }).then((res) => { + if (res) { + router.replace("/login/email"); + } + }); + }; + + return ( + + ); +}; + +export default LogoutButton; diff --git a/src/components/ui/smart-datetime-input.tsx b/src/components/ui/smart-datetime-input.tsx index e69aafb..92d8a53 100644 --- a/src/components/ui/smart-datetime-input.tsx +++ b/src/components/ui/smart-datetime-input.tsx @@ -294,8 +294,6 @@ const TimePicker = () => { PM_AM === "AM" ? hours : hours === 12 ? hours : hours + 12; const formattedHours = formatIndex; - console.log(formatIndex); - for (let j = 0; j <= 3; j++) { const diff = Math.abs(j * timestamp - minutes); const selected = diff --git a/src/hooks/checkpageAvaliable.tsx b/src/hooks/checkpageAvaliable.tsx index efa245c..474bd6c 100644 --- a/src/hooks/checkpageAvaliable.tsx +++ b/src/hooks/checkpageAvaliable.tsx @@ -1,6 +1,32 @@ "use server"; import { retrieveAvailableEndpoint } from "@/apicalls/checkEndpoint"; import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { retrievePageInfoByComponentName } from "./retrievePageInfoByComponentName"; + +async function checkEndpointsAvailable({ + section, + lang, +}: { + section: string; + lang: string; +}) { + const pageContent = retrievePageInfoByComponentName(section as string, lang); + let newContent: any = {}; + if (Array.isArray(pageContent)) { + await Promise.all( + pageContent.map(async (listItem: any) => { + const { endpoint } = listItem; + const endpointAvailable = await retrieveAvailableEndpoint(endpoint); + if (endpointAvailable) { + newContent[listItem?.name] = { + ...listItem, + }; + } + }) + ); + } + return newContent; +} async function checkPageAvaliable({ pageContent, @@ -52,4 +78,4 @@ async function checkPageAvaliable({ return restrictionsList; } -export { checkPageAvaliable }; +export { checkPageAvaliable, checkEndpointsAvailable }; diff --git a/src/hooks/renderInputWithValidation.tsx b/src/hooks/renderInputWithValidation.tsx index 4653cfe..6aa2f58 100644 --- a/src/hooks/renderInputWithValidation.tsx +++ b/src/hooks/renderInputWithValidation.tsx @@ -42,11 +42,13 @@ const NumberInput = ({ <> @@ -79,13 +81,12 @@ const DatetimeInput = ({ }: InputProps) => { return ( <> -

); diff --git a/src/hooks/retrievePageInfoByComponentName.tsx b/src/hooks/retrievePageInfoByComponentName.tsx index 65f4fac..3a44af7 100644 --- a/src/hooks/retrievePageInfoByComponentName.tsx +++ b/src/hooks/retrievePageInfoByComponentName.tsx @@ -1,5 +1,14 @@ import { PagesInfosAndEndpoints } from "@/apimaps/mappingApi"; +interface MainPageProps { + user: { + lang: string; + avatar: string; + fullName: string; + occupantName: string; + }; +} + const retrievePageInfoByComponentName = ( componentName: string, lang: string @@ -21,7 +30,7 @@ const retrievePageInfoByComponentName = ( for (const category in PagesInfosAndEndpoints) { const result = searchInCategory(PagesInfosAndEndpoints[category]); if (result) { - return result; + return result as MainPageProps; } } return null; diff --git a/src/hooks/serverCheckPageAvailable.tsx b/src/hooks/serverCheckPageAvailable.tsx new file mode 100644 index 0000000..f2f1828 --- /dev/null +++ b/src/hooks/serverCheckPageAvailable.tsx @@ -0,0 +1,29 @@ +"use server"; + +import { + checkAccessTokenIsValid, + retrieveUserSelection, +} from "@/apicalls/cookies/token"; +import { redirect } from "next/navigation"; +interface PageAvailableReturn { + user: { + lang: string; + avatar: string; + fullName: string; + occupantName: string; + }; +} + +async function checkServerPageAvaliable() { + const accessValid = await checkAccessTokenIsValid(); + if (!accessValid) { + redirect("/login/email"); + } + const user = await retrieveUserSelection(); + if (!user?.lang) { + redirect("/login/email"); + } + return user; +} + +export { checkServerPageAvaliable }; diff --git a/src/lib/renderZodValidation.ts b/src/lib/renderZodValidation.ts index c8b3a7c..f44fc88 100644 --- a/src/lib/renderZodValidation.ts +++ b/src/lib/renderZodValidation.ts @@ -27,7 +27,7 @@ function convertApiValidationToZodValidation(apiValidation: any) { } catch (error) { return undefined; } - }, z.number().min(1)) + }, z.number()) : z.preprocess((value) => { try { const parsedValue = Number(value); @@ -35,11 +35,13 @@ function convertApiValidationToZodValidation(apiValidation: any) { } catch (error) { return undefined; } - }, z.number().min(1).optional()); + }, z.number().optional()); } else if (fieldType === "boolean") { zodValidation[key] = required ? z.boolean() : z.boolean().optional(); } else if (fieldType === "datetime") { - zodValidation[key] = required ? z.date() : z.date().optional(); + zodValidation[key] = required + ? z.coerce.date() + : z.coerce.date().optional(); } else if (fieldType === "float") { zodValidation[key] = required ? ZodDecimal.create({ coerce: true }) @@ -57,8 +59,7 @@ function convertApiValidationToZodValidation(apiValidation: any) { } function retrieveDataWhichHaveValidation(data: any, apiValidation: any) { - const apiValidated = apiValidation?.validated || {}; - Object.entries(apiValidated).forEach(([key, value]: any) => { + Object.entries(apiValidation).forEach(([key, value]: any) => { const fieldType: String = value.fieldType || "string"; const required = value.required || false; if (fieldType === "string") { @@ -68,11 +69,36 @@ function retrieveDataWhichHaveValidation(data: any, apiValidation: any) { } else if (fieldType === "boolean") { data[key] = required ? data[key] : data[key] || false; } else if (fieldType === "datetime") { - data[key] = required ? data[key] : new Date(data[key]) || ""; + data[key] = data[key] ? new Date(data[key]).toISOString() : ""; } else if (fieldType === "float") { data[key] = required ? data[key] : data[key] || 0.0; } }); + return data; } -export { convertApiValidationToZodValidation, retrieveDataWhichHaveValidation }; +function retrieveDataDefaults(apiValidation: any) { + let data: any = {}; + Object.entries(apiValidation).forEach(([key, value]: any) => { + const fieldType: String = value.fieldType || "string"; + const required = value.required || false; + if (fieldType === "string") { + data[key] = ""; + } else if (fieldType === "integer") { + data[key] = 0; + } else if (fieldType === "boolean") { + data[key] = false; + } else if (fieldType === "datetime") { + data[key] = required ? new Date().toISOString() : ""; + } else if (fieldType === "float") { + data[key] = 0.0; + } + }); + return data; +} + +export { + convertApiValidationToZodValidation, + retrieveDataWhichHaveValidation, + retrieveDataDefaults, +}; diff --git a/src/pages/Account/AccountPage.tsx b/src/pages/Account/AccountPage.tsx new file mode 100644 index 0000000..c158f84 --- /dev/null +++ b/src/pages/Account/AccountPage.tsx @@ -0,0 +1,57 @@ +"use server"; +import React, { Suspense } from "react"; +import Link from "next/link"; + +import { PlusCircle } from "lucide-react"; +import { checkEndpointsAvailable } from "@/hooks/checkpageAvaliable"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { TableComponent } from "@/components/commons/Table"; +import { retrieveaccountsList } from "@/apicalls/accounts/account"; +import { PagePropsInterface } from "@/schemas/PageSchema"; + +const AccountPage: React.FC = async ({ lang, section }) => { + const pageEndpoint = "/account/records/list"; + const availablePageContent = await checkEndpointsAvailable({ + section: section as string, + lang, + }); + const tableValidateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: pageEndpoint, + }); + + return ( +
+ Account Page is Loading...
}> +

+ {availablePageContent?.table?.title} +

+

+ {availablePageContent?.table?.description} +

+
+ {availablePageContent?.create && ( + + + Create + + )} +
+
+ {availablePageContent?.table && ( + + )} +
+ +
+ ); +}; + +export default AccountPage; diff --git a/src/pages/Build/Build.tsx b/src/pages/Build/Build.tsx deleted file mode 100644 index ad50b43..0000000 --- a/src/pages/Build/Build.tsx +++ /dev/null @@ -1,33 +0,0 @@ -"use server"; -import React from "react"; - -const BuildChildComponent = () => { - return ( - <> -

Building Management

-
-

Building page content goes here

-
-
-

More content goes here

-
-
-

Building page content goes here

-
-
-

More content goes here

-
-
-

Building page content goes here

-
-
-

More content goes here

-
-
-

Even more content goes here

-
- - ); -}; - -export default BuildChildComponent; diff --git a/src/pages/Build/BuildingPage.tsx b/src/pages/Build/BuildingPage.tsx new file mode 100644 index 0000000..0d94dcb --- /dev/null +++ b/src/pages/Build/BuildingPage.tsx @@ -0,0 +1,60 @@ +"use server"; +import React, { Suspense } from "react"; +import Link from "next/link"; + +import { PlusCircle } from "lucide-react"; +import { checkEndpointsAvailable } from "@/hooks/checkpageAvaliable"; +import { retrieveBuildList } from "@/apicalls/building/build"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { TableComponent } from "@/components/commons/Table"; +import { PagePropsInterface } from "@/schemas/PageSchema"; + +const BuildingPage: React.FC = async ({ + lang, + section, +}) => { + const pageEndpoint = "building/build/list"; + const availablePageContent = await checkEndpointsAvailable({ + section: section as string, + lang, + }); + const tableValidateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: pageEndpoint, + }); + + return ( +
+ Building Page is Loading...
}> +

+ {availablePageContent?.table?.title} +

+

+ {availablePageContent?.table?.description} +

+
+ {availablePageContent?.create && ( + + + Create + + )} +
+
+ {availablePageContent?.table && ( + + )} +
+ +
+ ); +}; + +export default BuildingPage; diff --git a/src/pages/Decisions/DecisionsPage.tsx b/src/pages/Decisions/DecisionsPage.tsx new file mode 100644 index 0000000..14ea70c --- /dev/null +++ b/src/pages/Decisions/DecisionsPage.tsx @@ -0,0 +1,59 @@ +"use server"; +import React, { Suspense } from "react"; +import Link from "next/link"; + +import { PlusCircle } from "lucide-react"; +import { checkEndpointsAvailable } from "@/hooks/checkpageAvaliable"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { TableComponent } from "@/components/commons/Table"; +import { PagePropsInterface } from "@/schemas/PageSchema"; + +const DecisionsPage: React.FC = async ({ + lang, + section, +}) => { + const pageEndpoint = "/build/decision_book/list"; + const availablePageContent = await checkEndpointsAvailable({ + section: section as string, + lang, + }); + const tableValidateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: pageEndpoint, + }); + + return ( +
+ Decision Book Page is Loading...
}> +

+ {availablePageContent?.table?.title} +

+

+ {availablePageContent?.table?.description} +

+
+ {availablePageContent?.create && ( + + + Create + + )} +
+
+ {availablePageContent?.table && ( + console.log("apiFunction")} + redirectTo="/decisions/update" + /> + )} +
+ +
+ ); +}; + +export default DecisionsPage; diff --git a/src/pages/Identities/IdentitiesPage.tsx b/src/pages/Identities/IdentitiesPage.tsx new file mode 100644 index 0000000..f8aabd7 --- /dev/null +++ b/src/pages/Identities/IdentitiesPage.tsx @@ -0,0 +1,59 @@ +"use server"; +import React, { Suspense } from "react"; +import Link from "next/link"; + +import { PlusCircle } from "lucide-react"; +import { checkEndpointsAvailable } from "@/hooks/checkpageAvaliable"; +import { retrieveHeadersAndValidationByEndpoint } from "@/apicalls/validations/validations"; +import { TableComponent } from "@/components/commons/Table"; +import { PagePropsInterface } from "@/schemas/PageSchema"; + +const IdentitiesPage: React.FC = async ({ + lang, + section, +}) => { + const pageEndpoint = "/account/records/list"; + const availablePageContent = await checkEndpointsAvailable({ + section: section as string, + lang, + }); + const tableValidateAndHeaders = await retrieveHeadersAndValidationByEndpoint({ + endpoint: pageEndpoint, + }); + + return ( +
+ Account Page is Loading...
}> +

+ {availablePageContent?.table?.title} +

+

+ {availablePageContent?.table?.description} +

+
+ {availablePageContent?.create && ( + + + Create + + )} +
+
+ {availablePageContent?.table && ( + console.log("apiFunction")} + redirectTo="/building/update" + /> + )} +
+ +
+ ); +}; + +export default MeetingsPage; diff --git a/src/schemas/PageSchema.ts b/src/schemas/PageSchema.ts new file mode 100644 index 0000000..079a295 --- /dev/null +++ b/src/schemas/PageSchema.ts @@ -0,0 +1,6 @@ +interface PagePropsInterface { + lang: string; + section?: string; +} + +export type { PagePropsInterface };