From 8186d13883b3ada5cac872dba8cee3a62f18f061 Mon Sep 17 00:00:00 2001 From: Clara Date: Tue, 8 Sep 2020 12:36:57 -0500 Subject: [PATCH] ultimos cambios --- README.md | 299 +++++++-------------------------- _mocks_/firebase_mock.js | 32 ---- package.json | 1 + src/components/modal.js | 5 +- src/components/printPost.js | 70 +++++--- src/css/createAccount.css | 2 +- src/css/home.css | 2 +- src/css/login.css | 2 +- src/css/profile.css | 2 +- src/css/profileUser.css | 69 -------- src/css/recover.css | 2 +- src/css/thanksAccount.css | 2 +- src/img/Banner.png | Bin 0 -> 39261 bytes src/img/dislike.png | Bin 0 -> 1512 bytes src/img/error404.png | Bin 0 -> 9199 bytes src/lib/firebaseAuth.js | 20 +-- src/lib/firebaseFirestore.js | 25 ++- src/lib/firebase_auth.js | 76 --------- src/views/profile.js | 7 +- src/views/profileUser.js | 69 -------- test/firebaseFirestore.spec.js | 34 ++++ test/firebase_auth.spec.js | 94 ----------- 22 files changed, 186 insertions(+), 627 deletions(-) delete mode 100644 _mocks_/firebase_mock.js delete mode 100644 src/css/profileUser.css create mode 100644 src/img/Banner.png create mode 100644 src/img/dislike.png create mode 100644 src/img/error404.png delete mode 100644 src/lib/firebase_auth.js delete mode 100644 src/views/profileUser.js create mode 100644 test/firebaseFirestore.spec.js delete mode 100644 test/firebase_auth.spec.js diff --git a/README.md b/README.md index 8dcccceb..d0506c0c 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,70 @@ # Creando una Red Social +## HELIVISUEL 🍿 + + + ## Índice -* [1. Preámbulo](#1-preámbulo) -* [2. Resumen del proyecto](#2-resumen-del-proyecto) -* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje) -* [4. Consideraciones generales](#4-consideraciones-generales) -* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptación-mínimos-del-proyecto) -* [6. Hacker edition](#6-hacker-edition) -* [7. Entrega](#7-entrega) -* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) +* [1. Definición del producto](#1-definición-del-producto) +* [2. Historia de usuarios](#2-historia-de-usuarios) +* [3. Prototipos](#3-prototipos) +* [4. Test de usabilidad](#4-Test-de-usabilidad) +* [5. Objetivos de aprendizaje](#5-objetivos-de-aprendizaje) + +## 1. DEFINICIÓN DEL PRODUCTO + +### Definición del problema + +Con las mejoras en el flujo de datos a partir de tecnologías como 4G y 5G, el crecimiento de contenido audiovisual variado, de calidad y asequible a través de plataformas de streaming, se están creando comunidades de discusión sobre series, películas, documentales, cortometrajes, etc., donde las opiniones generan un valor sobre cada contenido para el usuario influenciado las decisiones sobre lo próximo que verá y al tiempo le permite compartir con personas que tienen intereses afines. + + +### Perfil del usuario + +Nuestros usuarios son personas entre los 18 y los 50 años tiene un interés por las películas, series y demás contenido audiovisual, que tienen acceso a las plataformas de streaming como Netflix, Disney +, Amazon Prime o Hulu o servicios de televisión o que frecuentan el cine, y a quiénes les gusta compartir y comparar opiniones sobre estas producciones. + +Nuestros usuarios abarcan desde aquel que se dedica profesionalmente a hacer reviews hasta personas que solo buscan aportar su opinión o una buena recomendación. Quieren poder agregar recomendaciones de otros a su lista de pendientes, y agregar una lista donde aparezca aquello que vio y quiere recomendar a la comunidad o comentar, participar en discusiones, poder buscar una película por su título ver las reviews asociadas y darles like, saber quién escribió la reseña (y si le gusta poder seguirlo). + + +## 2. HISTORIAS DE USUARIO + +* H1: El usuario se puede loguear o registrar +* H2: El usuario puede realizar posts y visualizarlos en su muro +* H3: El usuario podrá ingresar a su perfil y ver su información general +* H4: El usuario tendrá más opciones para interactuar en la red social + +## 3. PROTOTIPOS DE ALTA Y BAJA FIDELIDAD + +### Prototipos de baja fidelidad -## 1. Preámbulo + + + + -Instagram, Snapchat, Twitter, Facebook, Twitch, Linkedin, etc. Las redes -sociales han invadido nuestras vidas. Las amamos u odiamos, y muchos no podemos -vivir sin ellas. +### Prototipos de alta fidelidad -Hay redes sociales de todo tipo y para todo tipo de intereses. Por ejemplo, -en una ronda de financiamiento con inversionistas, se presentó una red social -para químicos en la que los usuarios podían publicar artículos sobre sus -investigaciones, comentar en los artículos de sus colegas, y filtrar artículos -de acuerdo a determinadas etiquetas o su popularidad, lo más reciente, o lo -más comentado. +Movil: https://www.figma.com/proto/vVV1qI2KgMuUCAKSVx8nxJ/Prototyping-in-Figma?node-id=31%3A492&scaling=scale-down + +Desktop: https://www.figma.com/proto/vVV1qI2KgMuUCAKSVx8nxJ/Prototyping-in-Figma?node-id=51%3A79&scaling=min-zoom + +Tablet: https://www.figma.com/proto/vVV1qI2KgMuUCAKSVx8nxJ/Prototyping-in-Figma?node-id=77%3A180&scaling=scale-down -## 2. Resumen del proyecto +### Paleta de colores -En este proyecto construirás una Red Social sobre lo que decidan tú y tu equipo. -Podría ser, por ejemplo, sobre alimentación saludable, feminismo, educación, -salud, energías renovables, amantes de las [Empanadas](https://es.wikipedia.org/wiki/Empanada) -o de los [Tacos de Canasta](https://es.wikipedia.org/wiki/Taco), de la -[Feijoada](https://es.wikipedia.org/wiki/Feijoada), o de lo que sea. + -Tu Red Social tendrá que permitir a cualquier usuario crear una cuenta de -acceso y loguearse con ella; crear, editar, borrar y _"likear"_ publicacciones. + +## 2. Test de Usabilidad + +En los tests de usabilidad que se realizaron con nuestras compañeras y coach se identifico que la paleta de colores que estabamos utilizando era la correcta, les gusto el diseño de la página, como sugerencias nos dijeron que pusieramos la letra mas grande, adicional que le cambiaramos el color si era un link, y que el fondo del timeline fuera diferente al tono blanco para que la experiencia visual del usuario fuera mejor. + +El usuario interactua con la pagina de la siguiente manera: + +1. Primero el usuario entra a una pagina de Bienvenida a la red social donde puede ingresar. +2. Segundo encuentra una sección donde se puede loguear, tiene la opción de crear una cuenta o entrar con Google, adicional tiene la opción de recuperar la contraseña si la ha olvidado. +3. Tercero al haberse logueado ya puede ingresar al timeline, donde puede realizar una publicación teniendo en cuenta tres categorias: Películas, series o documentales. Además puede dar o quitar like a otras publicaciones. +4. Cuarto tiene una sección de perfil, donde puede cambiar su foto, agregar una biografia, y ver sus publicaciones, las cuales puede editar o eliminar. ## 3. Objetivos de aprendizaje @@ -105,219 +136,3 @@ El objetivo principal de aprendizaje de este proyecto es construir una * [ ] Aplicar los principios de diseño visual (contraste, alineación, jerarquía) * [ ] Planear y ejecutar tests de usabilidad. -## 4. Consideraciones generales - -* Este proyecto se debe trabajar en equipos de tres. - -* La lógica del proyecto debe estar implementada completamente en JavaScript - (ES6+), HTML y CSS :smiley:. Para este proyecto **no está permitido** utilizar - _frameworks_ o librerías de CSS y JS. - -* La división y organización del trabajo debe permitir, sin excepciones, que - **cada integrante** del equipo practique el aprendizaje de todo lo involucrado - en **cada historia**. _No se dividan el trabajo como en una fábrica._ - - ¿Hasta acá has avanzado en tus proyectos con cierta fluidez y sin mayores - problemas? Sé generosa con tus compañeras, permíteles aprender y practicar - sin restricciones, aunque tome un poco más de tiempo. Aproveha de - _coachearlas_, de hacer _pair programming_, una de las mejores maneras de - aprender es explicando verbalmente. - - - ¿Se te está haciendo difícil y te cuesta un poco más avanzar? No te quedes - con las partes "fáciles" del proyecto, conversa, negocia, exige tu oportunidad - para practicar y aprender lo que se te hace más difícil. - -* Solamente pueden trabajar en una única historia por vez, no pueden avanzar a - la siguiente sin haber completado la anterior. La historia se completa cuando - se cumplen **todos** sus Criterios de Aceptación + **toda** su Definición - de Terminado. - -Para comenzar tendrás que hacer un _fork_ y _clonar_ este repositorio. - -## 5. Criterios de aceptación mínimos del proyecto - -### 5.1 Boilerplate - -Este proyecto no incluye un _boilerplate_, así es que tendrás que definir la -estructura de carpetas y escribir tus propias Pruebas Unitarias (_tests_). Para -hacerlo, puedes guiarte de los proyectos anteriores. - -### 5.2 Definición del producto - -En el `README.md` cuéntanos brevemente cómo descubriste las necesidades de los -usuarios y cómo llegaste a la definición final de tu producto. Es importante -que detalles: - -* Quiénes son los principales usuarios de producto. -* Qué problema resuelve el producto / para qué le servirá a estos usuarios. - -### 5.3 Historias de usuario - -Una vez que entiendas las necesidades de tus usuarixs, escribe las Historias de -Usuario que representen todo lo que necesitan hacer/ver en la Red Social. Cada -una de tus Historias de Usuario debe tener: - -* **Criterios de Aceptación:** todo lo que debe ocurrir para satisfacer las - necesidades del usuario. - -* **Definición de terminado:** todos los aspectos técnicos que deben cumplirse - para que, como equipo, sepan que esa historia está terminada y lista - para publicarse. **Todas** tus Historias de Usuario (salvo excepciones), deben - incluir estos aspectos en su Definición de Terminado (más todo lo que - necesiten agregar): - - - Debe ser una SPA. - - Debe ser _responsive_. - - Deben haber recibido _code review_ de al menos una compañera de otro equipo. - - Hicieron los _test_ unitarios - - Testearon manualmente buscando errores e imperfecciones simples. - - Hicieron _pruebas_ de usabilidad e incorporaron el _feedback_ de los - usuarios como mejoras. - - Desplegaron su aplicación y etiquetaron la versión (git tag). - -### 5.4 Diseño de la Interfaz de Usuario (prototipo de baja fidelidad) - -Debes definir cuál será el flujo que seguirá el usuario dentro de tu aplicación -y, con eso, diseña la Interfaz de Usuario (UI por sus siglas en inglés) que -siga este flujo. - -### 5.5 Responsive - -Debe verse bien en dispositivos de pantallas grandes -(computadoras/es, laptops, etc.) y pequeñas (_tablets_, celulares, etc.). Te -sugerimos seguir la técnica de _`mobile first`_ (más detalles sobre esta técnica -al final). - -### 5.6 Consideraciones del comportamiento de la interfaz de usuario (UI) - -Estas consideraciones te ayudarán a escribir las Definiciones de Terminado de -tus H.U.: - -#### Creación de cuenta de usuario e inicio de sesión - -* _Login_ con Firebase: - - Para el _login_ y las publicaciones en el muro puedes utilizar [Firebase](https://firebase.google.com/products/database/) - - Creación de cuenta de acceso y autenticación con cuenta de correo y - contraseña, y también con una cuenta de Google. -* Validaciones: - - Solamente se permite el acceso a usuarios con cuentas válidas. - - No pueden haber usuarios repetidos. - - La cuenta de usuario debe ser un correo electrónico válido. - - Lo que se escriba en el campo (_input_) de contraseña debe ser secreto. -* Comportamiento: - - Al enviarse el formulario de registro o inicio de sesión, debe validarse. - - Si hay errores, se deben mostrar mensajes descriptivos para ayudar al - usuario a corregirlos. - -#### Muro/timeline - -* Validaciones: - - Al publicar, se debe validar que exista contenido en el _input_. -* Comportamiento: - - Al recargar la aplicación, se debe verificar si el usuario está _logueado_ - antes de mostrar contenido. - - Poder publicar un _post_. - - Poder dar y quitar _like_ a una publicación. Máximo uno por usuario. - - Llevar un conteo de los _likes_. - - Poder eliminar un post específico. - - Pedir confirmación antes de eliminar un _post_. - - Al dar _click_ para editar un _post_, debe cambiar el texto por un _input_ - que permita editar el texto y luego guardar los cambios. - - Al guardar los cambios debe cambiar de vuelta a un texto normal pero con la - información editada. - - Al recargar la página debo de poder ver los textos editados. - -### 5.7 Consideraciones técnicas Front-end - -* Separar la manipulación del DOM de la lógica (Separación de responsabilidades). -* Contar con múltiples vistas. Para esto, tu aplicación debe ser una - [Single Page Application (SPA)](https://es.wikipedia.org/wiki/Single-page_application) -* Alterar y persistir datos. Los datos que agregues o modifiques deberán - persistir a lo largo de la aplicación. Te recomendamos que uses - [Firebase](https://firebase.google.com/) para eso también. - -#### Pruebas unitarias (unit tests) - -* Recuerda que no hay un _setup_ de **tests** definido, dependerá de - la estructura de tu proyecto. Algo que no debes de olvidar es pensar en éstas - pruebas, te pueden ayudar a definir la estructura y nomenclatura de tu lógica. - -* Los tests unitarios deben cubrir un mínimo del 70% de _statements_, _functions_, - _lines_, y _branches_. - -### 5.8 Consideraciones técnicas UX - -* Hacer al menos 2 entrevistas con usuarios. -* Hacer un prototipo de baja fidelidad. -* Asegurarte de que la implementación en código siga los lineamientos del - diseño. -* Hacer sesiones de _testing de usabilidad_ con el producto en HTML. - -## 6. Hacker edition - -Las secciones llamadas _Hacker Edition_ son **opcionales**. Si **terminaste** -con todo lo anterior y te queda tiempo, intenta completarlas. Así podrás -profundizar y/o ejercitar más sobre los objetivos de aprendizaje del proyecto. - -* Permite crear posts con imágenes. -* Permite buscar usuarios, agregar y eliminar "amigos". -* Permite definir la privacidad de los _posts_ (público o solamente para amigos). -* Permite ver su muro de cualquier usuario "no-amigo" (solamente los - posts _públicos_). -* Permite comentar o responder una publicación. -* Permite editar perfil. - -## 7. Entrega - -El proyecto será _entregado_ subiendo tu código a GitHub (`commit`/`push`) y la -interfaz será desplegada usando GitHub pages u otro servicio de hosting que -puedas haber encontrado en el camino. - -*** - -## 8. Pistas, tips y Lecturas complementarias - -### Mobile first - -El concepto de [_mobile first_](https://www.mediaclick.es/blog/diseno-web-responsive-design-y-la-importancia-del-mobile-first/) -hace referencia a un proceso de diseño y desarrollo donde partimos de cómo se ve -y cómo funciona la aplicación en un dispositivo móvil primero, y más adelante se -ve como adaptar la aplicación a pantallas progresivamente grandes y -características específicas del entorno desktop. Esto es en contraposición al -modelo tradicional, donde primero se diseñaban los websites (o webapps) para -desktop y después se trataba de _arrugar_ el diseño para que entre en pantallas -más chicas. La clave acá es asegurarse de que desde el principio diseñan usando -la vista _responsive_ de las herramientas de desarrollador (developer tools) del -navegador. De esa forma, partimos de cómo se ve y comporta la aplicación en una -pantalla y entorno móvil. - -### Múltiples vistas - -En proyectos anteriores nuestras aplicaciones habían estado compuestas de una -sola _vista_ principal (una sóla _página_). En este proyecto se introduce la -necesidad de tener que dividir nuestra interfaz en varias _vistas_ o _páginas_ -y ofrecer una manera de navegar entre estas vistas. Este problema se puede -afrontar de muchas maneras: con archivos HTML independientes (cada uno con su -URL) y links tradicionales, manteniendo estado en memoria y rederizando -condicionalmente (sin refrescar la página), [manipulando el historial del -navegador](https://developer.mozilla.org/es/docs/DOM/Manipulando_el_historial_del_navegador) -con [`window.history`](https://developer.mozilla.org/es/docs/Web/API/Window/history). -En este proyecto te invitamos a explorar opciones y decidir una opción -de implementación. - -### Escritura de datos - -En los proyectos anteriores hemos consumido (leído) datos, pero todavía no -habíamos escrito datos (salvar cambios, crear datos, borrar, ...). En este -proyecto tendrás que crear (salvar) nuevos datos, así como leer, actualizar y -modificar datos existentes. Estos datos se podrán guardar de forma remota -usando [Firebase](https://firebase.google.com/). - -Otras: - -* [Modulos: Export](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Sentencias/export) -* [Modulos: Import](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Sentencias/import) -* [Diseño web, responsive design y la importancia del mobile first - Media Click](https://www.mediaclick.es/blog/diseno-web-responsive-design-y-la-importancia-del-mobile-first/) -* [Mobile First: el enfoque actual del diseño web móvil - 1and1](https://www.1and1.es/digitalguide/paginas-web/diseno-web/mobile-first-la-nueva-tendencia-del-diseno-web/) -* [Mobile First - desarrolloweb.com](https://desarrolloweb.com/articulos/mobile-first-responsive.html) -* [Mobile First - ZURB](https://zurb.com/word/mobile-first) -* [Mobile First Is NOT Mobile Only - Nielsen Norman Group](https://www.nngroup.com/articles/mobile-first-not-mobile-only/) diff --git a/_mocks_/firebase_mock.js b/_mocks_/firebase_mock.js deleted file mode 100644 index a00ef286..00000000 --- a/_mocks_/firebase_mock.js +++ /dev/null @@ -1,32 +0,0 @@ - -const auth = () => { - return{ - createUserWithEmailAndPassword: (email,pass) => { - return new Promise ((resolve) =>{ - resolve(`Se creo un usuario con ${email} y ${pass}`); - }) - } - /*sendPasswordResetEmail: (email) => { - return new Promise ((resolve) => { - resolve (`Se envio un correo de restablecer contraseña a ${email}`) - }) - }*/ - /*signInWithEmailAndPassword: (email,password) => { - return new Promise ((resolve) =>{ - resolve (`Se pudo loguear con ${email} y contraseña ${password}`) - }) - }, - signInWithPopup: (user) => { - return new Promise ((resolve) =>{ - resolve (`${user} se logueo con Google`) - }) - }*/ - } -} -/*const firebase = { - auth:auth -}*/ - -export default jest.fn(() => { - return auth; -}) \ No newline at end of file diff --git a/package.json b/package.json index 796f1d15..5344d097 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "eslint-plugin-jest": "^22.1.2", "htmlhint": "^0.11.0", "jest": "^24.8.0", + "mock-cloud-firestore": "^0.12.0", "regenerator-runtime": "^0.13.1", "serve": "^11.0.2", "stylelint": "^10.1.0", diff --git a/src/components/modal.js b/src/components/modal.js index 20833ad9..ebabdbfb 100644 --- a/src/components/modal.js +++ b/src/components/modal.js @@ -1,6 +1,7 @@ import { commentPublish } from '../lib/firebaseFirestore.js'; export const publish = (userPhoto, userID, userName) =>{ + const photoDefault = 'https://www.nicepng.com/png/detail/202-2022264_usuario-annimo-usuario-annimo-user-icon-png-transparent.png'; const modal = document.createElement('section'); modal.setAttribute('class', 'modal'); modal.innerHTML = `` let photo = modal.querySelector('#userPhoto'); - photo.src = `${userPhoto}`; + photo.src = `${(userPhoto === null ? photoDefault : userPhoto)}`; const publish = modal.querySelector('#formComment'); - //const img = form.loadImg.value; + publish.addEventListener('submit', (e)=>{ e.preventDefault(); let comment = publish.comment.value; diff --git a/src/components/printPost.js b/src/components/printPost.js index 1c8f95aa..87e3a898 100644 --- a/src/components/printPost.js +++ b/src/components/printPost.js @@ -1,15 +1,17 @@ -import { deletePost } from '../lib/firebaseFirestore.js'; +import { deletePost, likePost } from '../lib/firebaseFirestore.js'; import { updateFieldData } from '../lib/firebaseFirestore.js'; +import {currentUser} from '../lib/firebaseAuth.js'; //Imprime el post en el timeline y en profile export default (post, user, postid) => { + let photoDefault = "https://www.nicepng.com/png/detail/202-2022264_usuario-annimo-usuario-annimo-user-icon-png-transparent.png"; const newpost = document.createElement('div'); newpost.setAttribute('id', postid); newpost.setAttribute('class', 'post'); newpost.innerHTML = `
-
+

${user.name}

${post.date.toDate().toDateString()}

@@ -21,6 +23,11 @@ export default (post, user, postid) => {
`; + // Toma el id del usuario logueado y valida y está dentro del arreglo de likes + const userid = currentUser(); + let pushLike = post.likes.some(likes => likes === userid.uid); + // FIN + const categoryIcon = newpost.querySelector('.categories'); switch (post.category) { case 'Movie': @@ -39,15 +46,14 @@ export default (post, user, postid) => { icons.setAttribute('class', 'input-comment'); icons.innerHTML = `
- - - 00000 + + ${post.likes.length} - 00000 + 0
- +

¿Estás seguro que quieres eliminar la publicación?

@@ -58,7 +64,8 @@ export default (post, user, postid) => {
`; newpost.appendChild(icons); - const comments = document.createElement('section'); + + /*const comments = document.createElement('section'); comments.setAttribute('class', 'newsfeed'); comments.innerHTML = `
@@ -67,14 +74,15 @@ export default (post, user, postid) => {
- ""
`; + "" `;*/ if (window.location.hash === '#timeline') { icons.querySelector('#delete').style.display = 'none'; icons.querySelector('#edit').style.display = 'none'; } - // newpost.appendChild(comments); + const postId = newpost.getAttribute('id'); + window.addEventListener('click', (e) => { if (e.target === icons.querySelector('.commentaries')) { icons.querySelector('.inputCommentandButton').style.display = 'block'; @@ -82,7 +90,6 @@ export default (post, user, postid) => { } else if (e.target === icons.querySelector('#delete')) { icons.querySelector('#confirm').style.display = 'block'; } else if (e.target === icons.querySelector('#deleteBtn')) { - //const postId = newpost.getAttribute('id'); deletePost(postId); } else { icons.querySelector('.inputCommentandButton').style.display = 'none'; @@ -91,19 +98,45 @@ export default (post, user, postid) => { } }); - let editPost = newpost.querySelector('#post'); - const btnEdit = icons.querySelector('#edits'); + // ocultar comentarios + window.addEventListener('click', (e) => { + if (e.target == icons.querySelector('.commentaries ')) { + icons.querySelector('.inputCommentandButton').style.display = 'block'; + newpost.querySelector('.card', '#icons').style.display = 'none'; + } else { + icons.querySelector('.inputCommentandButton').style.display = 'none'; + newpost.querySelector('.card').style.display = 'block'; + } + }); + + // like activo inactivo + const btnlike = icons.querySelector('#likes'); + btnlike.addEventListener('click', () => { + const userid = currentUser(); + likePost(userid.uid, postid, pushLike); + if (pushLike) { + pushLike = false; + } else { + pushLike = true; + } + }); + + //Editar post + + const editPost = newpost.querySelector('#post'); + const btnEdit = icons.querySelector('#edit'); const btnSave = icons.querySelector('#saveBtn'); btnEdit.addEventListener ('click', () => { editPost.contentEditable = true; + editPost.style.backgroundColor = 'white'; btnSave.style.display = 'block'; console.log('editing') }); btnSave.addEventListener ('click', () => { - updateFieldData('post',postId,{comment: editPost.innerHTML}) + updateFieldData('post',postId,{comment: editPost.innerHTML}); console.log(postId,editPost.innerHTML); editPost.contentEditable = false; btnSave.style.display = 'none'; @@ -111,12 +144,5 @@ export default (post, user, postid) => { }); - /* window.addEventListener('click', (e)=>{ - if(e.target == icons.querySelector('.commentaries')){ - icons.querySelector('.inputCommentandButton').style.display = 'block'; - }else{ - icons.querySelector('.inputCommentandButton').style.display = 'none'; - }); */ - return newpost; }; diff --git a/src/css/createAccount.css b/src/css/createAccount.css index 1e23e034..e058d531 100644 --- a/src/css/createAccount.css +++ b/src/css/createAccount.css @@ -1,5 +1,5 @@ .accountOne{ - height: 100%; + height: 90vh; display: flex; padding: 0 20px; } diff --git a/src/css/home.css b/src/css/home.css index 93fb7f77..01a61fb6 100644 --- a/src/css/home.css +++ b/src/css/home.css @@ -1,5 +1,5 @@ .home{ - height: 100%; + height: 90vh; display: flex; justify-content: center; align-items: center; diff --git a/src/css/login.css b/src/css/login.css index 29638a58..a8532b81 100644 --- a/src/css/login.css +++ b/src/css/login.css @@ -1,5 +1,5 @@ .container { - height: 100%; + height: 90vh; display: flex; justify-content: center; align-items: center; diff --git a/src/css/profile.css b/src/css/profile.css index 2fb3246b..e5cc1e9e 100644 --- a/src/css/profile.css +++ b/src/css/profile.css @@ -88,7 +88,7 @@ #biographyid{ width:200px; - height:50px; + height:80px; font-family: 'Source Sans Pro'; background: #DED5D5; color:black; diff --git a/src/css/profileUser.css b/src/css/profileUser.css deleted file mode 100644 index 376c1331..00000000 --- a/src/css/profileUser.css +++ /dev/null @@ -1,69 +0,0 @@ -#profile{ - height: 100%; - display: flex; - justify-content: center; - align-items: center; - background-color: #FFFFF0; - background-size:cover; - flex-direction: column; - } -#profile h1,h3{ - font-size: 13px; - color:black; - text-align: center; -} - -#profile .photo{ - border-radius: 50%; - max-width: 25%; - display:inline-block; - } - - #profileBody{ - display: flex; - flex-direction: column; - width: 100%; - height: 100%; - background-color: #FFFFF0; - position: relative; - padding: 10px - } - - .comment{ - min-width: 250px; - margin: 30px auto; - background-color: gray; - } - #deleteIcon{ - width: 30px; - height: 30px; - background-image: url(../img/delete.png); - background-position: center; - cursor: pointer; - } - - #confirm{ - display: none; - flex-direction: column; - justify-content: space-around; - max-width: 400px; - height: 100px; - background-color: #FFFFFF; - border: 1px solid #766D78; - border-radius: 20px; - font-size: 1em; - text-align: center; - color: #5D5D5D; - position: absolute; - left: 0; - right: 0; - margin: auto; - } - - #confirm > h2{ - font-size: 1em; - } - #deleteBtn{ - background-color: #ED3124; - border: 2px solid #C7251F; - } diff --git a/src/css/recover.css b/src/css/recover.css index d164a68d..c4cad97e 100644 --- a/src/css/recover.css +++ b/src/css/recover.css @@ -1,6 +1,6 @@ .recover{ display: flex; - height: 100%; + height: 90vh; justify-content: center; align-items: center; background-image: url(background/recoveraccaunt.png); diff --git a/src/css/thanksAccount.css b/src/css/thanksAccount.css index 349b0384..8583fd39 100644 --- a/src/css/thanksAccount.css +++ b/src/css/thanksAccount.css @@ -1,5 +1,5 @@ #thanku { -height: 100%; +height: 90vh; display: flex; justify-content: center; align-items: center; diff --git a/src/img/Banner.png b/src/img/Banner.png new file mode 100644 index 0000000000000000000000000000000000000000..22648dcb711e53ab051c4a2f322c0012eca96b99 GIT binary patch literal 39261 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 z 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 literal 0 HcmV?d00001 diff --git a/src/lib/firebaseAuth.js b/src/lib/firebaseAuth.js index 4699e585..364e5d70 100644 --- a/src/lib/firebaseAuth.js +++ b/src/lib/firebaseAuth.js @@ -4,19 +4,17 @@ export function currentUser() { return user; } -export async function signUp(email, password, name) { +export async function signUp(email, password, name, birthday) { + const photoDefault = 'https://www.nicepng.com/png/detail/202-2022264_usuario-annimo-usuario-annimo-user-icon-png-transparent.png'; try { const newUser = await auth.createUserWithEmailAndPassword(email, password); - let currentUser = await auth.currentUser; - currentUser.updateProfile({displayName: name}); - let userDb = await data.collection('users').doc(currentUser.uid) - .set({birthday, biography:'', name, photo: currentUser.photoURL}); - - window.location.hash = "#thankAccount"; - + const currentUser = await auth.currentUser; + currentUser.photoURL = (currentUser.photoURL === null ? photoDefault : currentUser.photoURL); + currentUser.updateProfile({ displayName: name }); + const userDb = await data.collection('users').doc(currentUser.uid) + .add({ birthday, biography:'', name, photo: (currentUser.photoURL) }); + window.location.hash = '#thankAccount'; return newUser; - - } catch (error) { // Handle Errors here. const errorCode = error.code; @@ -52,7 +50,7 @@ export async function logInGoogle(provider) { let currentUser = await auth.currentUser; currentUser.providerData.forEach(function (profile){ data.collection('users').doc(currentUser.uid) - .set({name: profile.displayName, photo: profile.photoURL, biography:''}); + .add({name: profile.displayName, photo: profile.photoURL, biography:''}); }) } catch (error) { // Handle Errors here. diff --git a/src/lib/firebaseFirestore.js b/src/lib/firebaseFirestore.js index cee97776..b95d5ca2 100644 --- a/src/lib/firebaseFirestore.js +++ b/src/lib/firebaseFirestore.js @@ -1,5 +1,6 @@ import printPost from '../components/printPost.js'; +// crear publicaciones y los campos export const commentPublish = (comment, category, userID) => { try { var userDocRef = data.collection('post').doc().set({ @@ -12,6 +13,8 @@ export const commentPublish = (comment, category, userID) => { console.log(e); } }; + +//Cargar los posts //onSnapshot,cambios de la colección post,trae o quita los cambios que se hagan export const loadPost = async (containerDOM) =>{ try { @@ -30,6 +33,7 @@ export const loadPost = async (containerDOM) =>{ } }; + //User login autora del post, posts del usuario logueado export const currentUserPost = async (containerDOM, currentUser) =>{ try { @@ -43,6 +47,7 @@ export const currentUserPost = async (containerDOM, currentUser) =>{ querySnapshot.forEach(async (doc) => { let postid = doc.id; let post = doc.data(); + console.log(post); containerDOM.appendChild(printPost(post, user, postid)); }); }); @@ -51,6 +56,7 @@ export const currentUserPost = async (containerDOM, currentUser) =>{ } }; +//Borrar post export const deletePost = async(id) =>{ try { await data.collection('post').doc(id).delete(); @@ -59,6 +65,7 @@ export const deletePost = async(id) =>{ } }; +//Me actualiza cualquier campo de la colección, en este caso lo utilizamos para actualizar la biografia y los posts export const updateFieldData = async( collectionName, id, field ) =>{ try{ await data.collection(collectionName).doc(id).update(field); @@ -67,6 +74,7 @@ export const deletePost = async(id) =>{ } }; + //Guarda la información de la biografia del usuario export const updateBiography = async(id,containerBio) =>{ try{ await data.collection('users').doc(id).onSnapshot((querySnapshot) => { @@ -79,14 +87,29 @@ export const deletePost = async(id) =>{ } }; + // coloca y quita los likes. +export async function likePost(currentUserId, postId, pushLike) { + const postRef = data.collection('post').doc(postId); + if (pushLike) { + postRef.update({ + likes: firebase.firestore.FieldValue.arrayRemove(currentUserId), + }); + } else { + postRef.update({ + likes: firebase.firestore.FieldValue.arrayUnion(currentUserId), + }); + } +} - +// array de objetos en donde se va a guardar toda la información de cada usuario export const userInfo = async() =>{ const users = [] await data.collection('users').get().then((querySnapshot) => { querySnapshot.forEach((doc) => { users.push({id: doc.id, name: doc.data().name, photo: doc.data().photo, biography:doc.data().biography}); }); + //console.log(users); }); + return users; }; \ No newline at end of file diff --git a/src/lib/firebase_auth.js b/src/lib/firebase_auth.js deleted file mode 100644 index e40a8215..00000000 --- a/src/lib/firebase_auth.js +++ /dev/null @@ -1,76 +0,0 @@ - -// create Account -export async function signUser(email, pass) { - //console.log(auth()); - try { - const userNew = await auth.createUserWithEmailAndPassword(email, pass); - console.log(userNew); - return userNew; - } catch (error) { - const errorCode = error.code; - const errorMessage = error.message; - console.log(errorMessage,errorCode); - } -} - -// recover - -export async function recoverUser(message, email) { - try { - const userRecover = await auth.sendPasswordResetEmail(email); - message.innerHTML = `Hemos enviado un email a ${email} para cambiar la contraseña`; - return userRecover; - } catch (error) { - message.innerHTML = 'No se ha podido enviar el correo'; - console.log('No se envio el correo'); - } -} - -// sign in,login - -export async function loginUser(loginEmail, passwordLogin) { - try { - const userLogin = await auth.signInWithEmailAndPassword(loginEmail, passwordLogin); - console.log(userLogin); - return userLogin; - } catch (error) { - const errorCode = error.code; - const errorMessage = error.message; - console.log(errorMessage, errorCode); - } -} - -// Login with Google - -export async function loginGoogle(provider) { - try { - const googleLogin = await auth.signInWithPopup(provider); - const token = googleLogin.credential.accessToken; - const user = googleLogin.user; - window.location.hash = '#timeline'; - console.log(user); - return googleLogin; - } catch (error) { - const errorCode = error.code; - const errorMessage = error.message; - const email = error.email; - const credential = error.credential; - console.log(errorCode, errorMessage); - } -} - -// Log out -export async function signOut() { - try { - const userOut = await auth.signOut(); - return userOut; - //console.log('user log out'); - } catch (e) { - console.log(e); - } -} - -export function currentUser() { - const user = auth.currentUser; - return user; -} diff --git a/src/views/profile.js b/src/views/profile.js index 92738369..7e21a805 100644 --- a/src/views/profile.js +++ b/src/views/profile.js @@ -4,13 +4,13 @@ import { updateBiography } from '../lib/firebaseFirestore.js'; import { updateFieldData } from '../lib/firebaseFirestore.js'; export default () => { - + const photoDefault = 'https://www.nicepng.com/png/detail/202-2022264_usuario-annimo-usuario-annimo-user-icon-png-transparent.png'; const profileContainer = document.createElement('div'); profileContainer.setAttribute('id', 'profileContainer'); const profile = document.createElement('div'); profile.setAttribute('id', 'profile'); profile.innerHTML = `

Mi perfil

- photoUser + photoUser