Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
5c3ea8f
Creacion de carpetas lib y data, creacion de archivos
RaizaCarolina17 Feb 19, 2024
33193e1
agregar datafunctions
RaizaCarolina17 Feb 19, 2024
5b34c6a
Router
Elizabethepj Feb 28, 2024
42a39e6
Primera vista de Home
Elizabethepj Feb 28, 2024
46a41f9
vista de home con los botones
Elizabethepj Feb 28, 2024
4960412
commit a cambios antes de crear ramas
RaizaCarolina17 Feb 28, 2024
d3e22a4
filtros y botón de limpiar funcionando
Elizabethepj Mar 4, 2024
c07d7f5
cambios en sortSelect
Elizabethepj Mar 4, 2024
8f35b15
estadísticas organizadas
Elizabethepj Mar 5, 2024
0ec2ead
cambios en BtnContainer de la función sortSelect
Elizabethepj Mar 6, 2024
e1e1fe4
cambios para optimización del código
Elizabethepj Mar 8, 2024
69057ca
vista Home completa
Elizabethepj Mar 9, 2024
4f9dad6
cambio en BtnContainer
Elizabethepj Mar 9, 2024
0bda5b4
test de dataFunctiosn funcionando
Elizabethepj Mar 11, 2024
948c810
botones y modales creados
Elizabethepj Mar 12, 2024
920f8a8
función del botón regresar
Elizabethepj Mar 12, 2024
35698bd
corrección de errores botón estadística
Elizabethepj Mar 13, 2024
d287218
se crea el modal como componente
Elizabethepj Mar 15, 2024
3284a99
vista de chat creada como componente
Elizabethepj Mar 15, 2024
f8a0c91
función de opeanAi y Apikey
Elizabethepj Mar 18, 2024
a1f9e38
cambios a la función individual
Elizabethepj Mar 18, 2024
e6374cb
revisión del router
Elizabethepj Mar 19, 2024
df559ea
vista del chat individual actualizada
Elizabethepj Mar 19, 2024
90784c9
test apiKey y cambios a la vista del chat individual
Elizabethepj Mar 20, 2024
af500c0
se agregaron botones de chat grupal y regresar a la vista del chat in…
Elizabethepj Mar 20, 2024
c6bc6e5
función onpenAi y cambios en la función renderItems
Elizabethepj Mar 20, 2024
20b5999
connexión opoenAi funcionando
Elizabethepj Mar 21, 2024
68f312f
cambios en la función openAi
Elizabethepj Mar 21, 2024
f5716e8
chat individual conectado por apiKey
Elizabethepj Mar 22, 2024
cf85911
cambios vista chat grupal
Elizabethepj Mar 22, 2024
2f23256
chat grupal funcionando
Elizabethepj Mar 22, 2024
724d051
chats funcionando
Elizabethepj Mar 25, 2024
0b1497d
función del limpiar y cambios en css
Elizabethepj Mar 25, 2024
2e2aae5
test header y footer
Elizabethepj Mar 26, 2024
eebd0ec
test ApiModal
Elizabethepj Apr 1, 2024
5c523f3
test para openaAI y not Found
Elizabethepj Apr 1, 2024
592758b
test individual
Elizabethepj Apr 2, 2024
5b15bc5
test individual y readme
Elizabethepj Apr 3, 2024
b2dcc25
Versión completa
Elizabethepj Apr 3, 2024
bab452e
versión completa
Elizabethepj Apr 3, 2024
93646e2
archivo de vercel
Elizabethepj Apr 3, 2024
b255508
actualización archivo vercel
Elizabethepj Apr 3, 2024
d0f9096
modificación archivo json
Elizabethepj Apr 3, 2024
62d9bed
json vercel
RaizaCarolina17 Apr 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
764 changes: 113 additions & 651 deletions README.md

Large diffs are not rendered by default.

Binary file removed docs/assets/previewDetail.gif
Binary file not shown.
Binary file removed docs/assets/previewGrupalChat.gif
Binary file not shown.
9,327 changes: 9,327 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"pretest": "npm run eslint && npm run htmlhint",
"test": "jest --verbose --coverage test/",
"open-coverage-report": "opener ./coverage/lcov-report/index.html",
"start": "serve src/ -s"
"start": "serve src/ -s",
"build": "npm run build"
},
"devDependencies": {
"@babel/core": "^7.6.2",
Expand All @@ -18,12 +19,14 @@
"babel-jest": "^27.0.1",
"css": "^3.0.0",
"eslint": "^8.3.0",
"eslint-plugin-import": "^2.29.1",
"gh-pages": "^3.1.0",
"htmlhint": "^1.0.0",
"jest": "^27.0.1",
"jsdom": "^22.1.0",
"opener": "^1.5.1",
"serve": "^14.2.1"
"serve": "^14.2.1",
"supertest": "^6.3.4"
},
"engines": {
"node": ">=16.x"
Expand All @@ -35,5 +38,8 @@
"createdAt": "2024-01-24T14:12:42.297Z",
"version": "8.0.0",
"commit": "df14b61576f0321119b1906ba3544ab94fc2b1a1"
},
"dependencies": {
"axios": "^1.6.8"
}
}
53 changes: 53 additions & 0 deletions src/Components/ApiModal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { navigateTo } from "../router.js";
import { setApiKey, removeApiKey } from "../lib/apiKey.js";

export const ApiModal = (redirectUrl) => {
//console.log(element)
const modalApiKey = document.createElement("dialog");
modalApiKey.id = "modalApiKey";
const modalContent = document.createElement("div");
modalApiKey.innerHTML = `

<input type="text" id="ApiKey" name="ApiKey" placeholder="Ingresa tu API KEY" />
<button data-testid="button-send" id="button-send">Enviar</button>
<button data-testid="button-back-home" id="button-back-home">Cerrar</button>
<button data-testid="button-clear" id="button-clear">Limpiar</button>
`;
modalApiKey.appendChild(modalContent);

const buttonSendChat = modalApiKey.querySelector("#button-send");
const buttonBackHome = modalApiKey.querySelector("#button-back-home");

buttonSendChat.addEventListener("click", () => {
//console.log("enviar funciona");
//const nameUser = modalApiKey.querySelector("#nameUser").value;
const apiKeyValue = modalApiKey.querySelector("#ApiKey").value;
//console.log(ApiKey)

if (apiKeyValue === "" || apiKeyValue.length <= 50 || apiKeyValue.length >= 55) {
alert("Ingrese una clave válida");
return;
}

setApiKey(apiKeyValue);
navigateTo(redirectUrl);
modalApiKey.style.display = 'none';
modalApiKey.close();
}
);

buttonBackHome.addEventListener("click", () => {
//console.log ("regresar funcionando");
modalApiKey.close();
modalApiKey.style.display = 'none';
});

const buttonClear = modalApiKey.querySelector("#button-clear")
//console.log("funciona");
buttonClear.addEventListener("click", () => {
removeApiKey();
modalApiKey.querySelector("#ApiKey").value = '';
})

return modalApiKey;
};
17 changes: 17 additions & 0 deletions src/Components/ButtonChat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ApiModal } from "./ApiModal.js";

export const createBtnChat = () => {
const btnChat = document.createElement("button");
btnChat.id = "button-chat";
btnChat.className = "button-chat";
btnChat.textContent = "CHAT";
btnChat.addEventListener("click", () => {
//console.log("funciona");
const modalApiKey = ApiModal();
document.body.appendChild(modalApiKey);
modalApiKey.showModal();
});
return btnChat;
};


9 changes: 9 additions & 0 deletions src/Components/Footer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export const footer = () => {
const footer = document.createElement("footer");
footer.id = "footer"
footer.innerHTML = `
<h4> Desarrolladoras: Raiza Gatica y Elizabeth Patiño/ Laboratoria </h4>
`;

return footer;
};
11 changes: 11 additions & 0 deletions src/Components/Header.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export const header = () => {
const header = document.createElement("header");
header.id = "header"
header.innerHTML = `
<img src="./data/img/banner_escritoras.png">
<h1>EL MUNDO A TRAVÉS DE GRANDES ESCRITORAS</h1>
`;

return header;
};

119 changes: 119 additions & 0 deletions src/Components/Individual.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import { communicateWithOpenAI } from "./../lib/openAIApi.js";
import data from "../data/dataset.js";
import { navigateTo } from "../router.js";

export const individual = (element) => {
// console.log(element);
// Filtrar datos basados en el elemento pasado como argumento
const writer = data.find(item => item.id === element.id);
//console.log(writer);

const individualView = document.createElement('div');
const individualChat = document.createElement("div");

individualView.appendChild(individualChat);

const genMess = document.createElement("div");
genMess.className = "genMess";

individualChat.innerHTML = `
<div class="container-chat-ind">
<div class="credentialWriter">
<div class="writer-img">
<img src="${writer.imageUrl}"/>
</div>
<div class="nameWriter">
<h1 class="nameWriterc">${writer.name}</h1>
</div>
<div class="description-writer">
<p>${writer.description}</p>
</div>
</div>

<div class="chatI"></div>
</div>

<div class="container-Buttoms-chat">
<button id="buttonchatGrupalI">Chat grupal</button>
<button id="buttonBackHomeChatI">Regresar</button>
</div>
`;

const chat = individualChat.querySelector(".chatI");
chat.appendChild(genMess);

const chatInput = document.createElement("div");
chatInput.className = "chat-inputI";
chatInput.innerHTML = `
<textarea id="userInputI" placeholder="Escribe tu mensaje..."></textarea>
<button id="SendButtomChatI">Enviar</button>
`;
chat.appendChild(chatInput);

function messageUser() {
const newMess = individualChat.querySelector("#userInputI");
const newMessTxt = newMess.value;

if (newMessTxt !== "") {
const userNameContainer = document.createElement("div");
userNameContainer.className = "userNameContainer";
const userName = document.createElement("div");
userName.className = "userNameI";
userName.innerHTML = "Usuaria:";
userNameContainer.appendChild(userName);
genMess.appendChild(userName);

const containernewMess = document.createElement("div");
containernewMess.className = "messUserI";
const viewMess = document.createElement("p");
viewMess.className = "messageI";
viewMess.innerHTML = newMessTxt;
containernewMess.appendChild(viewMess);
genMess.appendChild(containernewMess);
newMess.value = "";

//llamada a OpenAi
communicateWithOpenAI(newMessTxt, writer)
.then(response => {
const nameSystem = document.createElement("div");
nameSystem.className = "nameSystem";
nameSystem.innerHTML = `${writer.name}:`;

const systemMessage = document.createElement("div");
systemMessage.className = "systemMessage";
systemMessage.innerHTML = response.choices[0].message.content;
genMess.appendChild(nameSystem);
genMess.appendChild(systemMessage);
})
/* .catch(error => {
console.error("error al comunicarse con la IA", error)
}); */
}
}

const SendButtomChat = chatInput.querySelector("#SendButtomChatI");
SendButtomChat.addEventListener("click", () => {
messageUser();
//console.log("funciona");
})

const userInput = chatInput.querySelector("#userInputI");
userInput.addEventListener("keydown", (event) => {
if (event.key === 'Enter') {
messageUser();
}
})

const buttonBackHomeChat = individualChat.querySelector("#buttonBackHomeChatI");
buttonBackHomeChat.addEventListener("click", () => {
window.location.href = "index.html";
});

const buttonchatGrupal = individualChat.querySelector("#buttonchatGrupalI");
buttonchatGrupal.addEventListener("click", () => {
navigateTo('/group');
})

return individualView;
}

16 changes: 16 additions & 0 deletions src/Components/NotFound.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export const notFound = () => {
const notFoundElement = document.createElement("div");
notFoundElement.id = "notFound";
notFoundElement.innerHTML = `
<h1> NOT FOUND </h1>
<img class="error-image" src="./data/img/error_404.jpeg"> <br>
<button id="button-goHome">Regresar</button> <br>
`;

const buttonGoHome = notFoundElement.querySelector("#button-goHome");
buttonGoHome.addEventListener("click", () => {
window.location.href = "index.html";
});

return notFoundElement;
};
37 changes: 37 additions & 0 deletions src/Components/RenderItems.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { ApiModal } from "./ApiModal.js";

export const renderItems = (data) => {

const list = document.createElement("ul");
data.forEach(element => {
const itemList = document.createElement("li");
const itemContainer = document.createElement("dl");
itemList.classList.add("card");

itemContainer.innerHTML = `
<img src=${element.imageUrl} alt=${element.name}/><br>
<dd itemprop="name">${element.name}</dd><br>
<dd itemprop="DescripciónC"> ${element.shortDescription}</dd><br>
<dt> Nacionalidad:</dt><dd itemprop="country">${element.facts.countryNacimiento}</dd>
<dt>Género literario:</dt><dd itemprop="genero">${element.facts.mainField}</dd> <br>
`;

itemContainer.setAttribute("itemscope", "");
itemContainer.setAttribute("itemtype", "escritoras");
itemList.setAttribute("itemtype", "https://schema.org/Person");
list.setAttribute("itemtype", "https://schema.org/Person");

itemList.appendChild(itemContainer);
list.appendChild(itemList);

itemList.addEventListener("click", () => {
const redirectUrl = `/escritoras?id=${element.id}`;
const apiModal = ApiModal(redirectUrl);
document.body.appendChild(apiModal);
apiModal.showModal();
});

});

return list;
};
Loading