-
- 3 semaines pour traverser 7 pays d'Europe en train
-
-
-
suivez mon voyage en naviguant vers le bas
-
-
-
-
le contenu n'est pas encore disponible, revenez plus tard
-
-
ça commence dans...
-
+
+
+
+
+ Voyage en Asie du Sud-Est
+
+
+ suivez le voyage en naviguant vers le bas
+
+
+
+
ça commence dans...
+
+
+
+
+
+
diff --git a/summer2024-frontend/src/main.js b/summer2024-frontend/src/main.js
index 9ffb4d6..2d53601 100644
--- a/summer2024-frontend/src/main.js
+++ b/summer2024-frontend/src/main.js
@@ -3,20 +3,13 @@ import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
-import 'vue-fullpage.js/dist/style.css'
-import VueFullPage from 'vue-fullpage.js'
import App from './App.vue'
import router from './router'
-import 'vue3-openlayers/styles.css'
-import OpenLayersMap from 'vue3-openlayers'
-
const app = createApp(App)
-app.use(VueFullPage)
app.use(createPinia())
app.use(router)
-app.use(OpenLayersMap)
app.mount('#app')
diff --git a/summer2024-frontend/src/stores/goals.js b/summer2024-frontend/src/stores/goals.js
new file mode 100644
index 0000000..741dc1c
--- /dev/null
+++ b/summer2024-frontend/src/stores/goals.js
@@ -0,0 +1,35 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+import { formatRelative } from 'date-fns'
+import { fr } from 'date-fns/locale'
+import { marked } from 'marked'
+import { API_BASE_URL } from '@/config.js'
+import { fromLonLat } from 'ol/proj.js'
+
+export const useGoalsStore = defineStore('goals', () => {
+ const goalsApiPath = API_BASE_URL + '/goals'
+
+ const goals = ref([])
+
+ function fetchGoals() {
+ return fetch(goalsApiPath)
+ .then((response) => {
+ return response.json()
+ })
+ .then(async (data) => {
+ goals.value = data.sort((a, b) => a.id - b.id) // lower ID (older) first
+ for (const goal of goals.value) {
+ const goalDate = new Date(goal.date)
+ goal.formatedDate = formatRelative(goalDate, new Date(), { locale: fr })
+ goal.projectedCoordinates = fromLonLat([goal.longitude, goal.latitude])
+ }
+
+ return goals.value
+ })
+ .catch((error) => {
+ console.log('goal list parsing failed with error: ' + error)
+ })
+ }
+
+ return { goals, fetchGoals }
+})
diff --git a/summer2024-frontend/src/views/CreatePostView.vue b/summer2024-frontend/src/views/CreatePostView.vue
index c8a0571..5fcd86b 100644
--- a/summer2024-frontend/src/views/CreatePostView.vue
+++ b/summer2024-frontend/src/views/CreatePostView.vue
@@ -64,7 +64,7 @@ const onSubmit = form.handleSubmit(async (values) => {
formStatus.value.sending = false
formStatus.value.error = true
formStatus.value.errorMsg = e.message
- formContainer.value.classList.remove('invisible')
+ formContainer.value.classList.remove('hidden')
throw e
}
diff --git a/summer2024-frontend/src/views/EditPostView.vue b/summer2024-frontend/src/views/EditPostView.vue
index 4b92986..9bdc1d4 100644
--- a/summer2024-frontend/src/views/EditPostView.vue
+++ b/summer2024-frontend/src/views/EditPostView.vue
@@ -87,7 +87,7 @@ const onSubmit = form.handleSubmit(async (values) => {
formStatus.value.sending = false
formStatus.value.error = true
formStatus.value.errorMsg = e.message
- formContainer.value.classList.remove('invisible')
+ formContainer.value.classList.remove('hidden')
throw e
}
diff --git a/summer2024-frontend/src/views/MapView.vue b/summer2024-frontend/src/views/MapView.vue
index 44d0e58..8e02ba8 100644
--- a/summer2024-frontend/src/views/MapView.vue
+++ b/summer2024-frontend/src/views/MapView.vue
@@ -1,5 +1,7 @@
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
-
+
-
- Objectif : {{ loc.name }}
+ Objectif : {{ loc.name }}
+ Arrivée : {{ loc.formatedDate }}
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/summer2024-frontend/src/views/PostsView.vue b/summer2024-frontend/src/views/PostsView.vue
index d8e75b7..54dc984 100644
--- a/summer2024-frontend/src/views/PostsView.vue
+++ b/summer2024-frontend/src/views/PostsView.vue
@@ -1,78 +1,176 @@