feat: switching to composition API standard

This commit is contained in:
ALAMI Adnane 2025-02-11 19:55:28 +01:00
parent 6a3d4239ab
commit 09e4b3262f
3 changed files with 59 additions and 64 deletions

View File

@ -1,25 +1,40 @@
<template> <template>
<div :class="['cell', { expanded }]" @click="toggleExpand"> <div :class="['cell', { expanded }]"
@click="toggleExpand"
:style="{ justifyContent: expanded ? 'flex-start' : 'center' }"> <!-- Looking for finding a way
to make this style in the toggleExpand event -->
<h3>{{ title }}</h3> <h3>{{ title }}</h3>
<p>{{ description }}</p> <p>{{ currentDescription }}</p>
</div> </div>
</template> </template>
<script> <script>
import { ref } from "vue";
export default { export default {
props: { props: {
title: String, title: String,
description: String description: String
}, },
data() {
return { setup(props) {
expanded: false 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";
expanded.value = !expanded.value;
};
return {
expanded,
currentDescription,
toggleExpand
}; };
},
methods: {
toggleExpand() {
this.expanded = !this.expanded;
}
} }
}; };
</script> </script>
@ -29,14 +44,21 @@
.cell { .cell {
display: flex; display: flex;
flex-direction: column; /* Pour empiler le titre et la description */ flex-direction: column;
align-items: center; /* Centre horizontalement */ align-items: center;
justify-content: center; /* Centre verticalement */ justify-content: center;
text-align: center; /* Centre le texte */ text-align: center;
transition: all 0.3s ease; transition: all 0.3s ease;
cursor: pointer; cursor: pointer;
} }
.cell_Expanded {
display: flex;
flex-direction: column;
align-items: center;
transition: all 0.3s ease;
cursor: pointer;
}
.expanded { .expanded {
position: fixed; position: fixed;

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="LeanCanvas"> <div class="canvas">
<CanvasItem <CanvasItem
v-for="(item, index) in items" v-for="(item, index) in items"
:key="index" :key="index"
@ -11,60 +11,34 @@
</template> </template>
<script> <script>
import CanvasItem from "./CanvasItem.vue"; import { ref } from "vue";
import CanvasItem from "@/components/canvas/CanvasItem.vue";
export default { export default {
components: { components: {
CanvasItem CanvasItem
}, },
data() { setup() {
return { const items = ref([
items: [ { title: "1. Problème", description: "3 problèmes essentiels à résoudre pour le client", class: "Probleme" },
{ title: "1. Problème", { title: "2. Segments", description: "Les segments de clientèle visés", class: "Segments" },
description: "3 problèmes essentiels à résoudre pour le client", { title: "3. Valeur", description: "La proposition de valeur", class: "Valeur" },
class: "Probleme" { title: "4. Solution", description: "Les solutions proposées", class: "Solution" },
}, { title: "5. Avantage", description: "Les avantages concurrentiels", class: "Avantage" },
{ title: "2. Segments", { title: "6. Canaux", description: "Les canaux de distribution", class: "Canaux" },
description: "Les segments de clientèle visés", { title: "7. Indicateurs", description: "Les indicateurs clés de performance", class: "Indicateurs" },
class: "Segments" { title: "8. Coûts", description: "Les coûts associés", class: "Couts" },
}, { title: "9. Revenus", description: "Les sources de revenus", class: "Revenus" }
{ title: "3. Valeur", ]);
description: "La proposition de valeur",
class: "Valeur" return { items };
},
{ title: "4. Solution",
description: "Les solutions proposées",
class: "Solution"
},
{ title: "5. Avantage",
description: "Les avantages concurrentiels",
class: "Avantage"
},
{ title: "6. Canaux",
description: "Les canaux de distribution",
class: "Canaux"
},
{ title: "7. Indicateurs",
description: "Les indicateurs clés de performance",
class: "Indicateurs"
},
{ title: "8. Coûts",
description: "Les coûts associés",
class: "Couts"
},
{ title: "9. Revenus",
description: "Les sources de revenus",
class: "Revenus"
}
]
};
} }
}; };
</script> </script>
<style scoped> <style scoped>
.LeanCanvas { .canvas {
display: grid; display: grid;
grid-template-columns: repeat(10, 1fr); grid-template-columns: repeat(10, 1fr);
grid-template-rows: repeat(6, 1fr); grid-template-rows: repeat(6, 1fr);

View File

@ -1,4 +1,3 @@
<!-- src/views/CanvasView.vue -->
<template> <template>
<div> <div>
<header> <header>
@ -9,10 +8,10 @@
<h1>Page Canvas</h1> <h1>Page Canvas</h1>
<LeanCanvas /> <LeanCanvas />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import HeaderCanvas from '../components/canvas/HeaderCanvas.vue'; import HeaderCanvas from '../components/canvas/HeaderCanvas.vue';
import LeanCanvas from '../components/canvas/LeanCanvas.vue'; import LeanCanvas from '../components/canvas/LeanCanvas.vue';
</script> </script>