front_foundation #5

Open
mohamed_maoulainine wants to merge 73 commits from front_foundation into main
6 changed files with 89 additions and 83 deletions
Showing only changes of commit d75d45e204 - Show all commits

View File

@ -1,8 +1,10 @@
{
"entrepreneurs": [
"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" }
]
}
],
"data": [
{ "data": "this is a fake data to test api" }
]
}

View File

@ -0,0 +1,2 @@
#!/usr/bin/bash
json-server --watch db.json --port 5000

View File

@ -7,51 +7,63 @@
<h3>{{ title }}</h3>
<p>{{ currentDescription }}</p>
</div>
</template>
</template>
<script>
import { ref } from "vue";
<script>
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

ce n'est pas de la composition API

ce n'est pas de la composition API
import { ref, onMounted } from "vue";
import axios from "axios";
export default {
props: {
title: String,
description: String
},
export default {
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

composition API

composition API
props: {
title: String,
description: String
},
setup(props) {
const expanded = ref(false);
const currentDescription = ref(props.description);
setup(props) {
const expanded = ref(false);
const currentDescription = ref(props.description);
const toggleExpand = () => {
currentDescription.value = expanded.value
? "3 problèmes essentiels à résoudre pour le client"
: "FAKE DATA";
const fetchData = async () => {
try {
const response = await axios.get("http://localhost:5000/data"); // to edit later!
currentDescription.value = response.data.map(e => e.data);
} catch (error) {
console.error("Erreur lors de la récupération des données :", error);
}
};
expanded.value = !expanded.value;
};
const toggleExpand = async () => {
if (!expanded.value) {
await fetchData();
} else {
currentDescription.value = "3 problèmes essentiels à résoudre pour le client";
}
expanded.value = !expanded.value;
};
return {
expanded,
currentDescription,
toggleExpand
};
}
};
</script>
return {
expanded,
currentDescription,
toggleExpand
};
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
<style scoped>
@import "@/components/canvas/style-project.css";
.cell {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.1);
}
}
.cell:not(.expanded):hover {
transform: scale(1.05);
@ -69,7 +81,7 @@
color: #666;
}
.expanded {
.expanded {
position: fixed;
top: 0;
left: 0;
@ -81,7 +93,5 @@
align-items: center;
justify-content: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
</style>
}
</style>

View File

@ -17,39 +17,35 @@
</template>
<script>
<script setup>
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

Ce n'est pas de la composition API, a changer

Ce n'est pas de la composition API, a changer

où exactement?

où exactement?
import { ref, onMounted } from "vue";
Outdated
Review

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.

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.
import axios from "axios";
export default {
data() {
return {
isDropdownOpen: false,
entrepreneurEmails: [],
};
},
methods: {
toggleDropdown() {
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");
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();
},
const isDropdownOpen = ref(false);
const entrepreneurEmails = ref([]);
const toggleDropdown = () => {
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

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).
isDropdownOpen.value = !isDropdownOpen.value;
console.log("Dropdown toggled:", isDropdownOpen.value); // for debug purposes
};
const fetchEntrepreneurs = async () => {
try {
const response = await axios.get("http://localhost:5000/entrepreneurs");
entrepreneurEmails.value = response.data.map(e => e.email);
} catch (error) {
console.error("Erreur lors de la récupération des entrepreneurs:", error);
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

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à.
Outdated
Review

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
}
};
const contactAll = () => {
alert("Contacter tous les entrepreneurs : " + entrepreneurEmails.value.join(", "));
};
onMounted(fetchEntrepreneurs);
</script>
<style scoped>
header {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -1,10 +1,3 @@
<script setup lang="ts">
import Header from '../components/Header.vue';
import Agenda from "../components/Agenda.vue"
import ProjectComp from '../components/Project-comp.vue';
</script>
<template>
Review

Il est plus logique de mettre un unique script setup.

Je vais mettre içi une fois pour toute:

je trouve beaucoup plus logique l'ordre
<script> => <template> => <style>
que l'ordre qui est utilisé partout dans vos fichiers (<template> => <script> => <style>)
En effet, on utilise dans le template les fonctions qui sont définies dans les scripts, donc c'est plus logique de les définir avant.

C'est ce qui est utilisé par défaut dans le linter (vue-recommanded).

Il est plus logique de mettre un unique script setup. Je vais mettre içi une fois pour toute: je trouve beaucoup plus logique l'ordre `<script>` => `<template>` => `<style>` que l'ordre qui est utilisé partout dans vos fichiers (`<template>` => `<script>` => `<style>`) En effet, on utilise dans le template les fonctions qui sont définies dans les scripts, donc c'est plus logique de les définir avant. C'est ce qui est utilisé par défaut dans le linter (vue-recommanded).
<Header />
<error-wrapper></error-wrapper>
@ -25,6 +18,9 @@ import ProjectComp from '../components/Project-comp.vue';
</template>
<script setup lang="ts">
import Header from '../components/Header.vue';
import Agenda from "../components/Agenda.vue"
import ProjectComp from '../components/Project-comp.vue';
import { ref } from "vue";