Index: database/drizzle/queries/components.ts
===================================================================
--- database/drizzle/queries/components.ts	(revision 387083452a874472599c1fd728bdeea99bf1c966)
+++ database/drizzle/queries/components.ts	(revision dda6f510ec987719a7348d64c6a1bbfbcfc4aa8c)
@@ -12,5 +12,5 @@
 } from "../schema";
 import {and, asc, desc, eq, ilike, SQL, sql} from "drizzle-orm";
-import {typeConfigMap, ComponentType} from "../util/componentFieldConfig";
+import {typeConfigMap, ComponentType, requiredFields} from "../util/componentFieldConfig";
 import {AnyPgColumn} from "drizzle-orm/pg-core";
 import {inArray} from "drizzle-orm/sql/expressions/conditions";
@@ -101,4 +101,14 @@
         ...component,
         details: details
+    };
+}
+
+export async function getDetailsForNewComponent(componentType: string) {
+    const config = typeConfigMap[componentType as ComponentType];
+
+    return {
+        type: componentType as ComponentType,
+        requiredFields: requiredFields[componentType as ComponentType] ?? [],
+        multiTables: config.multiTables ?? {},
     };
 }
Index: database/drizzle/util/componentFieldConfig.ts
===================================================================
--- database/drizzle/util/componentFieldConfig.ts	(revision 387083452a874472599c1fd728bdeea99bf1c966)
+++ database/drizzle/util/componentFieldConfig.ts	(revision dda6f510ec987719a7348d64c6a1bbfbcfc4aa8c)
@@ -108,24 +108,2 @@
     return true;
 }
-
-export function getValidationError(type: string, specificData: any): string | null {
-    if (!(type in requiredFields)) {
-        return `Invalid component type: ${type}`;
-    }
-
-    const fields = requiredFields[type as ComponentType];
-    const missingFields: string[] = [];
-
-    for (const field of fields) {
-        const value = specificData[field];
-        if (value === undefined || value === null || value === '') {
-            missingFields.push(field);
-        }
-    }
-
-    if (missingFields.length > 0) {
-        return `Missing required fields: ${missingFields.join(', ')}`;
-    }
-
-    return null;
-}
Index: pages/dashboard/admin/adminDashboard.telefunc.ts
===================================================================
--- pages/dashboard/admin/adminDashboard.telefunc.ts	(revision 387083452a874472599c1fd728bdeea99bf1c966)
+++ pages/dashboard/admin/adminDashboard.telefunc.ts	(revision dda6f510ec987719a7348d64c6a1bbfbcfc4aa8c)
@@ -63,2 +63,11 @@
     return { success: true };
 }
+
+export async function onGetDetailsForNewComponent({ type }
+                                                  : { type: string }) {
+    const { c, userId } = await requireAdmin()
+
+    const details = await drizzleQueries.getDetailsForNewComponent(type);
+
+    return details;
+}
