From 2233c422b76b437bdc25964dca2d5222586917b8 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Thu, 7 Nov 2024 18:48:49 +0100 Subject: [PATCH 1/4] docs: add google SSO supabase + update supabase docs --- .env.example | 5 ++-- CONTRIBUTING.md | 66 ++++++++++++++++++++++++++++++++++---------- supabase/config.toml | 8 +++--- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/.env.example b/.env.example index 8b8552c1..2c15a743 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ NEXT_PUBLIC_SUPABASE_URL= NEXT_PUBLIC_SUPABASE_ANON_KEY= - -API_KEY= +SUPABASE_GOOGLE_AUTH_ID= +SUPABASE_GOOGLE_AUTH_SECRET= +API_KEY= \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4ec724c1..67f17ebd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,33 +46,69 @@ Este mensaje indica que se han añadido instrucciones de instalación local en e ¡Gracias por contribuir! Tu ayuda hace una gran diferencia para el proyecto. -
- ## Desarrollo local - levantar db de desarrollo local ### Pre requisitos -- [docker](https://docs.docker.com/engine/install/) y [docker compose](https://docs.docker.com/compose/install/) -- [cli de supabase](https://supabase.com/docs/guides/local-development/cli/getting-started) +- [Docker](https://docs.docker.com/engine/install/) y [Docker Compose](https://docs.docker.com/compose/install/) +- [Supabase CLI](https://supabase.com/docs/guides/local-development/cli/getting-started) -### Instalar self hosted supabase +Si ya tienes cualquiera de los dos, **actualizalos para evitar errores**. -``` +Si usas docker desktop en Windows, esta es la configuración que deberías tener. + + +### Iniciar supabase en local + +Entramos en la carpeta del repositorio + +```bash cd ${DIRECTORIO_DE_EMERGENCY_CV} -supabase login -supabase init -supabase link --project-ref nmvcsenkfqbdlfdtiqdo +``` + +Iniciamos la base de datos (**tener docker encendido**) + +```bash supabase start ``` -### Para hacer cambios en el schema +Si no vemos las tablas ni los datos de ejemplo cargados podemos refrescar la base de datos con: + +```bash +supabase db reset +``` + +### Hacer cambios en el schema -- Editar como queremos que sea en local (studio de supabase) -- Ejecutar el comando: +#### Crear migracion automatica +Nos interesa usar esta opción, cuando queremos **editar la base de datos desde el studio web** + +Cuando acabemos de realizar los cambios en el studio web, ejecutaremos el siguiente comando para generar la migration. + +```bash +supabase db diff -f nombre_migracion ``` -// nombre de la migracion es indicativo, no tiene nigun efecto -supabase db diff -f ${NOMBRE_DE_LA_MIGRACION} + +#### Crear migración manual + +Nos interesa usar esta opción, cuando queremos **editar la base de datos con codigo SQL manual**. + +Primero, creamos la el archivo migration con + +```bash +supabase migration new nombre_migracion +``` + +Se creara un **nuevo fichero** con el nombre que hemos usado **en supabase/migrations** + +En ese archivo añadiremos todo el código SQL que necesitemos + +Si queremos visualizar nuestros cambios en local, podemos usar + +```bash +supabase db reset ``` -- Esto generara una migracion en el local, hay que añadir esto al PR y github actions lo pondra en produccion. +
+La migration que generemos, la añadiremos en el PR. diff --git a/supabase/config.toml b/supabase/config.toml index 0172bd1c..a79ce9fc 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -190,11 +190,11 @@ verify_enabled = true # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, # `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, # `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" +[auth.external.google] +enabled = true +client_id = "env(SUPABASE_GOOGLE_AUTH_ID)" # DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: -secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" +secret = "env(SUPABASE_GOOGLE_AUTH_SECRET)" # Overrides the default auth redirectUrl. redirect_uri = "" # Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, From 9e8dab506566d8c4cc69724ead04cc23591d1192 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Thu, 7 Nov 2024 18:49:16 +0100 Subject: [PATCH 2/4] feat: add privacy policy google auth --- src/components/auth/PhoneNumberDialog.js | 60 +++++++++++++++++++----- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/src/components/auth/PhoneNumberDialog.js b/src/components/auth/PhoneNumberDialog.js index 94da5dee..53404a42 100644 --- a/src/components/auth/PhoneNumberDialog.js +++ b/src/components/auth/PhoneNumberDialog.js @@ -12,27 +12,41 @@ import { isValidPhone } from '@/helpers/utils'; const MODAL_NAME = 'phone-number'; const PhoneForm = ({ onSubmit }) => { - const [phoneNumber, setPhoneNumber] = useState(''); + const [formData, setFormData] = useState({ + phoneNumber: '', + privacyPolicy: '', + }); const handleSubmit = useCallback( (e) => { e.preventDefault(); - /* Form validation */ - if (!isValidPhone(phoneNumber)) { + /* PHONE VALIDATION */ + if (!isValidPhone(formData.phoneNumber)) { alert('El teléfono de contacto no es válido.'); return; } - const formatedPhoneNumber = formatPhoneNumber(phoneNumber); - onSubmit(formatedPhoneNumber); - setPhoneNumber(''); + /* POLICY PRIVACY VALIDATION */ + if (!formData.privacyPolicy) { + alert('Para continuar, debes aceptar la Política de Privacidad.'); + return; + } + + const formatedPhoneNumber = formatPhoneNumber(formData.phoneNumber); + + onSubmit(formData.phoneNumber, formData.privacyPolicy); + + setFormData({ + phoneNumber: '', + privacyPolicy: '', + }); }, - [onSubmit, phoneNumber], + [onSubmit, formData], ); const handleChange = useCallback((phoneNumber) => { - setPhoneNumber(phoneNumber); + setFormData((formData) => ({ ...formData, phoneNumber })) }, []); return ( @@ -51,9 +65,31 @@ const PhoneForm = ({ onSubmit }) => { Tu número de teléfono no será usado con ningún otro propósito ni compartido con terceras personas.

- + + {/* PHONE NUMBER */} + + + {/* PRIVACY POLICY */} +
+ setFormData({ ...formData, privacyPolicy: e.target.checked })} + className="min-w-4 min-h-4 cursor-pointer" + id="privacyPolicy" + required + /> + +
-
+ {/* ACCEPT AND SAVE */} +
{/* Toggle button for desktop */} From f6357be94b0e42a71e0e1ad27256f97e9277a4f4 Mon Sep 17 00:00:00 2001 From: GuillePrograma94 Date: Thu, 7 Nov 2024 19:26:27 +0000 Subject: [PATCH 4/4] Guarda cambios antes de actualizar con main --- src/app/page.tsx | 6 +- .../personas-animales-desaparecidos/page.js | 61 +++++++++++++++++++ src/components/layout/Sidebar.js | 13 +--- 3 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 src/app/personas-animales-desaparecidos/page.js diff --git a/src/app/page.tsx b/src/app/page.tsx index 47801201..2a01896c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -159,10 +159,10 @@ export default function Home() { priority: 'high', }, { - title: 'Personas Desaparecidas', - description: 'Reportar o buscar personas', + title: 'Desaparecidos y Extraviados', + description: 'Reportar o buscar Personas, animales y vehículos', icon: Users, - path: 'https://desaparecidosdana.pythonanywhere.com/', + path: '/personas-animales-desaparecidos', color: 'purple', priority: 'high', }, diff --git a/src/app/personas-animales-desaparecidos/page.js b/src/app/personas-animales-desaparecidos/page.js new file mode 100644 index 00000000..9bcb8242 --- /dev/null +++ b/src/app/personas-animales-desaparecidos/page.js @@ -0,0 +1,61 @@ +// personas-animales-desaparecidos/page.js + +import { Users, PawPrint, Car, UserSearch } from 'lucide-react'; + +export default function PersonasAnimalesDesaparecidos() { + return ( +
+ {/* Encabezado con fondo de color e icono */} +
+

+ + Personas, Animales y Vehículos Desaparecidos +

+
+ + {/* Tarjeta grande para información */} +
+

+ En esta página puedes acceder a diferentes herramientas externas para encontrar personas, animales y vehículos desaparecidos. + Selecciona la opción que necesitas para más información y para reportar un caso o buscar ayuda. +

+
+ + {/* Tres columnas de botones */} +
+ {/* Botón para Personas Desaparecidas */} + + +

Personas Desaparecidas

+
+ + {/* Botón para Animales Desaparecidos */} + + +

Animales Desaparecidos

+
+ + {/* Botón para Vehículos Extraviados */} + + +

Vehículos Extraviados

+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js index 34887bfb..4c2e06e0 100644 --- a/src/components/layout/Sidebar.js +++ b/src/components/layout/Sidebar.js @@ -82,10 +82,9 @@ const menuItems = [ { icon: UserSearch, title: 'Desaparecidos', - description: 'Reportar personas', - path: 'https://desaparecidosdana.pythonanywhere.com/', + description: 'Personas, animales ...', + path: '/personas-animales-desaparecidos', color: 'text-purple-600', - isHref: true, }, { icon: Package, @@ -133,14 +132,6 @@ const menuItems = [ color: 'text-amber-600', isHref: true, }, - { - icon: Car, - title: 'Encontrar tu Coche', - description: 'Sistema de registro y consulta de vehículos perdidos', - path: 'https://tucochedana.es/index.php/', - color: 'text-blue-600', - isHref: true, - }, ]; export default function Sidebar({ isOpen, toggle }) {