114 lines
3.2 KiB
TypeScript
114 lines
3.2 KiB
TypeScript
"use server";
|
|
import { fetchDataWithToken } from "../api-fetcher";
|
|
import { cookies } from "next/headers";
|
|
import { baseUrl, cookieObject, tokenSecret } from "../basics";
|
|
import NextCrypto from "next-crypto";
|
|
import { PagesInfosAndEndpoints } from "@/apimaps/mappingApi";
|
|
|
|
const availableEventsURL = `${baseUrl}/access/endpoints/available`;
|
|
|
|
function iterateOverPageLayers(
|
|
availableEventsList: any,
|
|
availablePages: any,
|
|
iterLevel: any
|
|
) {
|
|
console.log("iterLevel", iterLevel);
|
|
if (Array.isArray(iterLevel)) {
|
|
iterLevel.map((page: any) => {
|
|
const pageInfo = page?.pageInfo?.tr || [];
|
|
if (pageInfo.length > 0) {
|
|
pageInfo.map((pageInfoItem: any) => {
|
|
const endpoint = pageInfoItem?.endpoint || "";
|
|
if (
|
|
availableEventsList.includes(endpoint) &&
|
|
!availablePages.includes(page.name)
|
|
) {
|
|
if (page.name) {
|
|
availablePages.push(page.name);
|
|
}
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
const pageInfo = iterLevel?.pageInfo?.tr || [];
|
|
if (pageInfo.length > 0) {
|
|
pageInfo.map((pageInfoItem: any) => {
|
|
const endpoint = pageInfoItem?.endpoint || "";
|
|
if (
|
|
availableEventsList.includes(endpoint) &&
|
|
!availablePages.includes(iterLevel.name)
|
|
) {
|
|
availablePages.push(iterLevel.name);
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
async function checkPageAvaliablityByEndpoint(availableEvents: any) {
|
|
let availablePages: string[] = [];
|
|
const availableEventsList: string[] = availableEvents || [];
|
|
let pageLayers = null;
|
|
PagesInfosAndEndpoints.map((page) => {
|
|
if (page.subCategories) {
|
|
pageLayers = page?.subCategories;
|
|
if (pageLayers) {
|
|
iterateOverPageLayers(availableEventsList, availablePages, pageLayers);
|
|
|
|
const nestedLayers = pageLayers.find(
|
|
(layer) => layer.subCategories
|
|
)?.subCategories;
|
|
if (nestedLayers) {
|
|
iterateOverPageLayers(
|
|
availableEventsList,
|
|
availablePages,
|
|
nestedLayers
|
|
);
|
|
}
|
|
}
|
|
}
|
|
iterateOverPageLayers(availableEventsList, availablePages, page);
|
|
});
|
|
return availablePages;
|
|
}
|
|
|
|
async function setAvailableEvents() {
|
|
const cookieStore = await cookies();
|
|
const nextCrypto = new NextCrypto(tokenSecret);
|
|
|
|
const availableResponse: any = await fetchDataWithToken(
|
|
availableEventsURL,
|
|
{},
|
|
"POST",
|
|
false
|
|
);
|
|
|
|
if (availableResponse.status === 200) {
|
|
const availableEventData = Array.from(availableResponse?.result) || [];
|
|
const availableEventDataRes = await checkPageAvaliablityByEndpoint(
|
|
availableEventData
|
|
);
|
|
const availableEvents = await nextCrypto.encrypt(
|
|
JSON.stringify({ availableEvents: availableEventData })
|
|
);
|
|
const availablePages = await nextCrypto.encrypt(
|
|
JSON.stringify({ availablePages: availableEventDataRes })
|
|
);
|
|
cookieStore.set({
|
|
name: "availableEvents",
|
|
value: availableEvents,
|
|
...cookieObject,
|
|
});
|
|
cookieStore.set({
|
|
name: "availablePages",
|
|
value: availablePages,
|
|
...cookieObject,
|
|
});
|
|
}
|
|
}
|
|
|
|
export { setAvailableEvents };
|