web service tenant first try
This commit is contained in:
@@ -194,6 +194,7 @@ async function removeApplicationFromService(payload: RemoveApplicationFromServic
|
||||
}
|
||||
|
||||
async function createApplication(payload: any) {
|
||||
console.log("Creating application with payload:", payload);
|
||||
try {
|
||||
const response = await fetchDataWithToken(
|
||||
applicationCreateEndpoint,
|
||||
|
||||
@@ -63,12 +63,13 @@ export async function handleCreateOperation(
|
||||
}
|
||||
|
||||
if (createFunction) {
|
||||
console.log("Body:", body);
|
||||
const result = await createFunction(body);
|
||||
return createResponse(result);
|
||||
}
|
||||
|
||||
return createResponse({
|
||||
id: Math.floor(Math.random() * 1000),
|
||||
uuid: Math.floor(Math.random() * 1000),
|
||||
...body,
|
||||
});
|
||||
}
|
||||
@@ -136,9 +137,15 @@ export function createCreateHandler(
|
||||
requiredFields: string[] = []
|
||||
) {
|
||||
console.log("Required fields:", requiredFields);
|
||||
return withErrorHandling((body: any) =>
|
||||
handleCreateOperation(body, createFunction, requiredFields)
|
||||
);
|
||||
// This handler only takes the body parameter, not the request
|
||||
return withErrorHandling((body: any) => {
|
||||
// Ensure we're only passing the actual body data to the create function
|
||||
if (body && typeof body === 'object' && body.body) {
|
||||
console.log("Extracting body from request body");
|
||||
return handleCreateOperation(body.body, createFunction, requiredFields);
|
||||
}
|
||||
return handleCreateOperation(body, createFunction, requiredFields);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { NextRequest } from "next/server";
|
||||
import { errorResponse } from "./responseHandlers";
|
||||
import { ValidationResult, ApiHandler } from "./types";
|
||||
import { ValidationResult, ApiHandler, ApiHandlerBodyOnly, ApiHandlerWithRequest } from "./types";
|
||||
|
||||
/**
|
||||
* Safely parse JSON request body with error handling
|
||||
@@ -30,7 +30,15 @@ export function withErrorHandling(
|
||||
return errorResponse("Invalid request body", 400);
|
||||
}
|
||||
|
||||
return await handler(request, body);
|
||||
// Check handler parameter count to determine if it needs request object
|
||||
// If handler has only 1 parameter, it's likely a create operation that only needs body
|
||||
if (handler.length === 1) {
|
||||
// Cast to the appropriate handler type
|
||||
return await (handler as ApiHandlerBodyOnly)(body);
|
||||
} else {
|
||||
// Otherwise pass both request and body (for list, update, delete operations)
|
||||
return await (handler as ApiHandlerWithRequest)(request, body);
|
||||
}
|
||||
} catch (error: any) {
|
||||
return errorResponse(
|
||||
error.message || "Internal Server Error",
|
||||
|
||||
@@ -90,9 +90,11 @@ export const collectPaginationFromApiResponse = (
|
||||
};
|
||||
|
||||
/**
|
||||
* API handler function type
|
||||
* API handler function types
|
||||
*/
|
||||
export type ApiHandler = (request: NextRequest, body: any) => Promise<Response>;
|
||||
export type ApiHandlerWithRequest = (request: NextRequest, body: any) => Promise<Response>;
|
||||
export type ApiHandlerBodyOnly = (body: any) => Promise<Response>;
|
||||
export type ApiHandler = ApiHandlerWithRequest | ApiHandlerBodyOnly;
|
||||
|
||||
/**
|
||||
* List function type
|
||||
|
||||
@@ -103,7 +103,7 @@ export function CreateComponent<T>({
|
||||
const onSubmit: SubmitHandler<Record<string, any>> = async (data) => {
|
||||
try {
|
||||
if (apiUrl) {
|
||||
const createUrl = `${apiUrl}/create`;
|
||||
const createUrl = `${apiUrl}`;
|
||||
const response = await fetch(createUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
@@ -252,7 +252,7 @@ export function CreateComponent<T>({
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit(onSubmit)}>
|
||||
<div className="grid grid-cols-2 gap-4 pt-6 my-4">
|
||||
|
||||
@@ -15,11 +15,10 @@ export function FormDisplay<T>({
|
||||
lang,
|
||||
translations,
|
||||
formProps = {},
|
||||
apiUrl,
|
||||
apiUrls,
|
||||
}: FormDisplayProps<T>) {
|
||||
const [enhancedFormProps, setEnhancedFormProps] = useState(formProps);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
const updateFormProps = async () => {
|
||||
try {
|
||||
@@ -88,7 +87,7 @@ export function FormDisplay<T>({
|
||||
lang={lang}
|
||||
translations={translations}
|
||||
formProps={enhancedFormProps}
|
||||
apiUrl={apiUrl}
|
||||
apiUrl={apiUrls?.create}
|
||||
/>
|
||||
);
|
||||
case "update":
|
||||
@@ -104,7 +103,7 @@ export function FormDisplay<T>({
|
||||
lang={lang}
|
||||
translations={translations}
|
||||
formProps={enhancedFormProps}
|
||||
apiUrl={apiUrl}
|
||||
apiUrl={apiUrls?.update}
|
||||
/>
|
||||
) : null;
|
||||
case "view":
|
||||
|
||||
@@ -180,7 +180,7 @@ export function UpdateComponent<T>({
|
||||
}
|
||||
});
|
||||
|
||||
const updateUrl = `${apiUrl}/update?uuid=${uuid}`;
|
||||
const updateUrl = `${apiUrl}?uuid=${uuid}`;
|
||||
console.log("Updating application with payload:", dataToSend, 'uuId:', uuid);
|
||||
try {
|
||||
let response = await fetch(updateUrl, {
|
||||
|
||||
@@ -47,5 +47,5 @@ export interface FormDisplayProps<T> {
|
||||
lang: string;
|
||||
translations: Record<string, Record<string, string>>;
|
||||
formProps?: Record<string, any>;
|
||||
apiUrl: string;
|
||||
apiUrls: Record<string, string>;
|
||||
}
|
||||
|
||||
@@ -287,7 +287,7 @@ const AppendersApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Languag
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsServices,
|
||||
apiUrl: '/api/services',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsServices,
|
||||
validationSchema: validationSchemaServices,
|
||||
@@ -304,7 +304,7 @@ const AppendersApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Languag
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsApplications,
|
||||
apiUrl: '/api/applications',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsEvents,
|
||||
validationSchema: validationSchemaEvents,
|
||||
@@ -321,7 +321,7 @@ const AppendersApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Languag
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsAppenders,
|
||||
apiUrl: '/api/appenders/applications',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsAppenders,
|
||||
validationSchema: validationSchemaAppenders,
|
||||
@@ -329,7 +329,6 @@ const AppendersApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Languag
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<div className="container mx-auto p-4 overflow-y-auto" >
|
||||
<div className="mb-4 flex justify-between items-center">
|
||||
@@ -343,19 +342,11 @@ const AppendersApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Languag
|
||||
</Card>
|
||||
{mode === "list" ? (
|
||||
<div className="flex flex-col space-y-4">
|
||||
{
|
||||
!selectedItemServices ? <div className="w-full h-1/2"><ListComponentServices {...serviceListProps} /></div> :
|
||||
<div className="w-full h-1/2">
|
||||
|
||||
<div className="flex flex-row space-x-4">
|
||||
{
|
||||
loadingEvents ? <Loader /> : <div className="flex-1"><ListComponentEvents {...eventsListProps} /></div>
|
||||
}
|
||||
{
|
||||
loadingAppenders ? <Loader /> : <div className="flex-1"><ListComponentEvents {...appendersListProps} /></div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
{!selectedItemServices ? <div className="w-full h-1/2"><ListComponentServices {...serviceListProps} /></div> :
|
||||
<div className="w-full h-1/2"><div className="flex flex-row space-x-4">
|
||||
{loadingEvents ? <Loader /> : <div className="flex-1"><ListComponentEvents {...eventsListProps} /></div>}
|
||||
{loadingAppenders ? <Loader /> : <div className="flex-1"><ListComponentEvents {...appendersListProps} /></div>}
|
||||
</div></div>
|
||||
}
|
||||
</div>
|
||||
) : (
|
||||
|
||||
@@ -283,7 +283,7 @@ const AppendersEventsPage: React.FC<PageProps> = ({ lang }: { lang: Language })
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsServices,
|
||||
apiUrl: '/api/services',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsServices,
|
||||
validationSchema: validationSchemaServices,
|
||||
@@ -300,7 +300,7 @@ const AppendersEventsPage: React.FC<PageProps> = ({ lang }: { lang: Language })
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsEvents,
|
||||
apiUrl: '/api/events',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsEvents,
|
||||
validationSchema: validationSchemaEvents,
|
||||
@@ -317,7 +317,7 @@ const AppendersEventsPage: React.FC<PageProps> = ({ lang }: { lang: Language })
|
||||
onCancel: cancelAllSelections,
|
||||
lang: lang,
|
||||
translations: translationsAppenders,
|
||||
apiUrl: '/api/appenders',
|
||||
apiUrls: {},
|
||||
formProps: {
|
||||
fieldDefinitions: fieldDefinitionsAppenders,
|
||||
validationSchema: validationSchemaAppenders,
|
||||
|
||||
@@ -118,7 +118,10 @@ const ApplicationPage: React.FC<PageProps> = ({ lang }: { lang: Language }) => {
|
||||
onCancel: cancelAllSelections,
|
||||
lang,
|
||||
translations,
|
||||
apiUrl: '/api/applications',
|
||||
apiUrls: {
|
||||
create: '/api/applications/create',
|
||||
update: '/api/applications/update',
|
||||
},
|
||||
formProps: {
|
||||
fieldDefinitions,
|
||||
validationSchema,
|
||||
|
||||
@@ -7,7 +7,7 @@ const menuPages = {
|
||||
"/dashboard": DashboardPage,
|
||||
"/application": ApplicationPage,
|
||||
"/append/event": AppendersEventsPage,
|
||||
"/append/service": AppendersServicePage
|
||||
"/append/service": AppendersServicePage,
|
||||
};
|
||||
|
||||
export default menuPages;
|
||||
|
||||
Reference in New Issue
Block a user