wag-frontend-version-3/oldCode/building/page.tsx

160 lines
4.5 KiB
TypeScript

"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 (
<MainBodyWithHeader
children={<h1>User selection is not successfully retrieved.</h1>}
/>
);
} else {
const pageContent = retrievePageInfoByComponentName(pageName, user?.lang);
const restrictionsChecked = await checkPageAvaliable({
pageContent,
restrictions,
queryEncrypt,
});
if (!restrictionsChecked || !restrictionsChecked?.table) {
return (
<MainBodyWithHeader
children={<h1>This user does not have access to this page.</h1>}
/>
);
}
const BuildingPage = (
<div className="p-4 overflow-hidden">
<h1 className="text-2xl font-bold mb-4 ">Dashboard</h1>
<form
action={handleFormSubmission}
className="bg-white p-4 rounded-lg shadow"
>
<div className="grid gap-4">
<p>Welcome to your dashboard</p>
{restrictionsChecked?.create && (
<Link
href={"/building/create"}
className="flex items-center justify-center gap-2 px-4 py-2 bg-slate-500 text-white rounded hover:bg-slate-700"
>
<PlusCircle size={16} />
Create
</Link>
)}
<h1>{JSON.stringify(queryEncrypt)}</h1>
{restrictionsChecked && (
<div>
<input type="hidden" name="section" value={buildKey} readOnly />
<TableComponent
pageContent={pageContent}
tableValidateAndHeaders={restrictionsChecked?.table}
apiFunction={retrieveBuildList}
redirectTo={"/building/update"}
/>
</div>
)}
<button
type="submit"
className="flex items-center justify-center gap-2 px-4 py-2 bg-slate-500 text-white rounded hover:bg-slate-700"
>
<RefreshCcw size={16} />
Search
</button>
<Pagination
size={parseInt(queryEncrypt?.size || "10")}
page={parseInt(queryEncrypt?.page || "1")}
orderBy={queryEncrypt?.orderBy || "id"}
orderType={queryEncrypt?.orderType || "asc"}
totalPage={3}
/>
</div>
</form>
</div>
);
return (
<>
<MainBodyWithHeader
children={BuildingPage}
section={`/${buildKey}`}
profileInfo={user}
/>
</>
);
}
};
export default BuildinPage;