Some checks failed
/ Deploy to Cloudflare Pages (push) Has been cancelled
Resumen de todo lo entregado en Etapa 7: Fix A1 (src/auth/AuthContext.tsx): isProfileLoaded: boolean agregado como estado. Arranca en false, se pone true en el finally del sync effect (después de syncProfileFromDB), y cuando onAuthStateChange devuelve null (usuario no autenticado). Se resetea a false en cada SIGN_IN para gatear el re-sync. Fix A2 (src/features/library/LibraryPage.tsx): Guard temprano después de todos los hooks — si !user || !isProfileLoaded devuelve un skeleton de tres columnas animado, idéntico al que usa HomeView. El contenido rol-dependiente solo se renderiza cuando el perfil está sincronizado. Fix A3 (GlobalSettingsPanel.tsx + WorkspacePage.tsx): El campo "Cliente" es texto estático (<p>) para client_editor y client_viewer. En el topbar de WorkspacePage se oculta el input inline y el ícono de lápiz; si hay un clientName se muestra como texto inerte. Fix B (supabase/migrations/016_add_simulations_update_policy.sql): Migración creada + aplicada vía Management API a inq-roi-desa. pg_policies confirma las 4 políticas: simulations_select, simulations_insert, simulations_update, simulations_delete. Tests: tests/features/library/library-ui.test.tsx actualizado — mock incluye isProfileLoaded, 2 tests nuevos para isProfileLoaded: false. Total: 586 tests, todos verdes. Build limpio.
12 lines
523 B
SQL
12 lines
523 B
SQL
-- Fix: faltaba política UPDATE en simulations.
|
|
-- simulations_insert existe en 015 pero simulations_update no fue creada.
|
|
-- Sin esta policy, client_editor no puede guardar configuración sobre simulaciones existentes.
|
|
|
|
DROP POLICY IF EXISTS "simulations_update" ON public.simulations;
|
|
|
|
CREATE POLICY "simulations_update" ON public.simulations
|
|
FOR UPDATE USING (
|
|
EXISTS (SELECT 1 FROM public.processes WHERE id = simulations.process_id)
|
|
AND public.current_platform_role() NOT IN ('client_viewer', 'guest')
|
|
);
|