front_foundation #5
8
front/MyINPulse-front/fake_data/db.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"entrepreneurs": [
|
||||||
|
{ "id": 1, "name": "Alice", "email": "alice@example.com" },
|
||||||
|
{ "id": 2, "name": "Bob", "email": "bob@example.com" },
|
||||||
|
{ "id": 3, "name": "Charlie", "email": "charlie@example.com" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -6,12 +6,9 @@ import ErrorWrapper from "@/views/errorWrapper.vue";
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<Header />
|
<Header />
|
||||||
|
|||||||
<!--<nav>
|
|
||||||
<RouterLink to="/">Home</RouterLink> |
|
<RouterLink to="/">Home</RouterLink> |
|
||||||
<RouterLink to="/canvas">Canvas</RouterLink>
|
<RouterLink to="/canvas">Canvas</RouterLink>
|
||||||
piair
commented
Vous êtes sur qu'il faut laisser ça, je pense que ça devrait être inclus dans RouterView Vous êtes sur qu'il faut laisser ça, je pense que ça devrait être inclus dans RouterView
|
|||||||
</nav>-->
|
<RouterView />
|
||||||
|
|
||||||
<RouterView />
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,35 +2,123 @@
|
|||||||
<header>
|
<header>
|
||||||
<img src="../icons/logo inpulse.png" alt="INPulse Logo">
|
<img src="../icons/logo inpulse.png" alt="INPulse Logo">
|
||||||
<div class="header-buttons">
|
<div class="header-buttons">
|
||||||
<div class="contact-menu">
|
<div class="menu">
|
||||||
<button class="contact-button" @click="toggleDropdown">Contact</button>
|
<button class="contact-button" @click="toggleDropdown">Contact</button>
|
||||||
<div class="contact-dropdown" v-show="isDropdownOpen">
|
<div class="contact-dropdown" v-bind:class="{ 'dropdown-visible': isDropdownOpen }">
|
||||||
<button>Contact All</button>
|
<button @click="contactAll">Contact All</button>
|
||||||
<button>Contact Person 1</button>
|
<button v-for="(email, index) in entrepreneurEmails" :key="index">
|
||||||
<button>Contact Person 2</button>
|
{{ email }}
|
||||||
<button>Contact Person 3</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="return"><a href="/">return to list project</a></div>
|
<button class="return-button"><a href="/">Return to list project</a></button>
|
||||||
mohamed_maoulainine marked this conversation as resolved
Outdated
piair
commented
plutôt utiliser des routerLink au lieu de href plutôt utiliser des routerLink au lieu de href
https://stackoverflow.com/questions/52675885/when-to-use-router-link-vs-a
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
mohamed_maoulainine marked this conversation as resolved
Outdated
piair
commented
Ce n'est pas de la composition API, a changer Ce n'est pas de la composition API, a changer
|
|||||||
|
import axios from "axios";
|
||||||
piair
commented
Il faut se servir de Il faut se servir de `axiosInstance`, voir https://gitea.piair.dev/piair/MyINPulse/src/branch/main/front/MyINPulse-front/src/services/api.ts.
Cela permet de préconfigurer l'authentification et le host du backend.
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isDropdownOpen: false
|
isDropdownOpen: false,
|
||||||
|
entrepreneurEmails: [],
|
||||||
mohamed_maoulainine marked this conversation as resolved
Outdated
piair
commented
Vérifier que le type de données renvoyé par le backend correspond bien à ca (ce n'est pas le cas). Vérifier que le type de données renvoyé par le backend correspond bien à ca (ce n'est pas le cas).
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toggleDropdown() {
|
toggleDropdown() {
|
||||||
this.isDropdownOpen = !this.isDropdownOpen;
|
this.isDropdownOpen = !this.isDropdownOpen;
|
||||||
}
|
console.log("Dropdown toggled:", this.isDropdownOpen); //for debug purposes
|
||||||
}
|
},
|
||||||
|
async fetchEntrepreneurs() {
|
||||||
|
try {
|
||||||
|
const response = await axios.get("http://localhost:5000/entrepreneurs");
|
||||||
mohamed_maoulainine marked this conversation as resolved
Outdated
piair
commented
il faut pas Hardcoder une addresse, elle est dans le fichier .env. Dans tout les cas, cette adresse ne devrait pas être là. il faut pas Hardcoder une addresse, elle est dans le fichier .env. Dans tout les cas, cette adresse ne devrait pas être là.
piair
commented
je viens de voir le message de commit, c'est en effet logique d'utiliser cette donnée. Par contre je suis pas sur que ce soit la bonne méthode pour faire des tests, c'est a discuter. Il serait bien d'appeler mock-data au lieu de fake-data je viens de voir le message de commit, c'est en effet logique d'utiliser cette donnée. Par contre je suis pas sur que ce soit la bonne méthode pour faire des tests, c'est a discuter.
Il serait bien d'appeler mock-data au lieu de fake-data
|
|||||||
|
this.entrepreneurEmails = response.data.map(e => e.email);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Erreur lors de la récupération des entrepreneurs:", error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
contactAll() {
|
||||||
|
alert("Contacter tous les entrepreneurs : " + this.entrepreneurEmails.join(", "));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchEntrepreneurs();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-buttons {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-button, .return-button {
|
||||||
|
background-color: #000;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
padding: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.return-button a {
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-dropdown {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: white;
|
||||||
|
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 5px;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-dropdown button {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-dropdown button:hover {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-visible {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
header img {
|
||||||
|
width: 100px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@import "@/components/canvas/style-project.css";
|
@import "@/components/canvas/style-project.css";
|
||||||
</style>
|
</style>
|
||||||
|
@ -3,7 +3,7 @@ import {store} from "../main.ts";
|
|||||||
import {callApi} from "@/services/api.ts";
|
import {callApi} from "@/services/api.ts";
|
||||||
import ErrorModal from "@/components/errorModal.vue";
|
import ErrorModal from "@/components/errorModal.vue";
|
||||||
import {errorList} from "@/services/popupDisplayer.ts";
|
import {errorList} from "@/services/popupDisplayer.ts";
|
||||||
import TempModal from "@/components/temp-modal.vue";
|
//import TempModal from "@/components/temp-modal.vue";
|
||||||
import ErrorWrapper from "@/App.vue";
|
import ErrorWrapper from "@/App.vue";
|
||||||
function addResToTable(id: any){
|
function addResToTable(id: any){
|
||||||
return (req: any) => {
|
return (req: any) => {
|
||||||
|
Il faut laisser ça, cela permet d'afficher les messages d'erreurs par desssus le contenu.