diff --git a/src/app/dashboard/[entity]/[id]/page.tsx b/src/app/dashboard/[entity]/[id]/page.tsx
index e26304e..d199394 100644
--- a/src/app/dashboard/[entity]/[id]/page.tsx
+++ b/src/app/dashboard/[entity]/[id]/page.tsx
@@ -1,10 +1,11 @@
import { APPWRITE_ALMEIRA_CONFIG, projectId, endpoint } from '@/lib/appwrite';
-import { createSessionClient } from '@/lib/appwrite.server';
+import { createSessionClient, getLoggedInUser } from '@/lib/appwrite.server';
import { collectionMap, SCHEMA_MAP } from '@/lib/schema';
import { updateDocumentServer } from '@/app/actions/appwrite';
import { updateEntityAction } from '@/app/actions/entities';
import { redirect } from 'next/navigation';
import { EntityForm } from '@/components/dashboard/EntityForm';
+import type { AuthUser, Post } from '@/types/publications';
export default async function EditEntityPage({ params }: { params: Promise<{ entity: string, id: string }> }) {
const { entity, id } = await params;
@@ -26,8 +27,9 @@ export default async function EditEntityPage({ params }: { params: Promise<{ ent
}
const sessionClient = await createSessionClient();
- if (!sessionClient) {
- throw new Error("No sesión activa");
+ const user = await getLoggedInUser();
+ if (!sessionClient || !user) {
+ redirect('/login');
}
// Fetch the existing document
@@ -60,7 +62,28 @@ export default async function EditEntityPage({ params }: { params: Promise<{ ent
);
const boundUpdate = updateEntityAction.bind(null, entity, id);
+ const appwriteConfig = {
+ endpoint,
+ projectId,
+ databaseId: APPWRITE_ALMEIRA_CONFIG.databaseId,
+ };
+ // ── POSTS: Use the new PublicationLayout ──────────────
+ if (entity === 'posts') {
+ const { default: PublicationLayout } = await import('@/components/publications/PublicationLayout');
+
+ return (
+
+ );
+ }
+
+ // ── OTHER ENTITIES: Use the generic EntityForm ────────
return (
>;
- submitAction: (formData: FormData) => Promise<{ success: boolean; error?: string; data?: unknown }>;
+ submitAction: (formData: FormData) => Promise<{ success: boolean; error?: string; data?: unknown } | void>;
appwriteConfig: {
endpoint: string;
projectId: string;
@@ -65,7 +65,7 @@ export const PublicationDrawer: React.FC = ({
const wrappedSubmit = useCallback(async (formData: FormData) => {
const result = await submitAction(formData);
- if (result?.success) {
+ if (!result || result.success) {
onSuccess?.();
}
return result;
diff --git a/src/components/publications/PublicationLayout.tsx b/src/components/publications/PublicationLayout.tsx
index 5f6d1fc..5a25f14 100644
--- a/src/components/publications/PublicationLayout.tsx
+++ b/src/components/publications/PublicationLayout.tsx
@@ -135,11 +135,15 @@ export const PublicationLayout: React.FC = ({
startTransition(async () => {
try {
const result = await submitAction(formData);
- if (result?.success) {
+ // If result is undefined/void, it likely redirected (success)
+ if (!result || result.success) {
setOptimisticState('saved');
- setTimeout(() => router.push('/dashboard/posts'), 800);
+ // Only redirect manually if we didn't already redirect from the action
+ if (result) {
+ setTimeout(() => router.push('/dashboard/posts'), 800);
+ }
} else {
- setOptimisticState('error', result?.error || 'Error al guardar.');
+ setOptimisticState('error', result.error || 'Error al guardar.');
}
} catch (err: unknown) {
setOptimisticState('error', err instanceof Error ? err.message : 'Error desconocido.');
diff --git a/src/types/publications.ts b/src/types/publications.ts
index f695a62..455487f 100644
--- a/src/types/publications.ts
+++ b/src/types/publications.ts
@@ -149,7 +149,8 @@ export interface PublicationLayoutProps {
/** Datos de relaciones pre-cargados desde el servidor */
relationData: Record>;
/** Acción de servidor para guardar */
- submitAction: (formData: FormData) => Promise<{ success: boolean; error?: string; data?: unknown }>;
+ /** Acción de servidor para guardar. Puede retornar un objeto de éxito o void (si redirige) */
+ submitAction: (formData: FormData) => Promise<{ success: boolean; error?: string; data?: unknown } | void>;
/** Usuario autenticado */
user: AuthUser;
/** Config de Appwrite para URLs de media */