From 8480d4ef05d995ee67c1460cf273c899fa59e89c Mon Sep 17 00:00:00 2001
From: Cristiano Magro <cristiano.magro@vola.it>
Date: Sat, 28 Dec 2024 23:15:49 +0100
Subject: [PATCH] emitting custom event

---
 07 - development setup/vue-cli-01-a-new-vue-project/src/components/FriendContact.vue |   10 +++++++---
 07 - development setup/vue-cli-01-a-new-vue-project/src/App.vue                      |   14 +++++++++++++-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/07 - development setup/vue-cli-01-a-new-vue-project/src/App.vue b/07 - development setup/vue-cli-01-a-new-vue-project/src/App.vue
index 08bedae..a9ca593 100644
--- a/07 - development setup/vue-cli-01-a-new-vue-project/src/App.vue
+++ b/07 - development setup/vue-cli-01-a-new-vue-project/src/App.vue
@@ -7,10 +7,12 @@
       <friend-contact 
       v-for="friend in friends"
       :key="friend.id"
+      :id="friend.id"
       :name="friend.name" 
       :phone-number="friend.phone" 
       :email-address="friend.email"
-      :is-favorite="true"
+      :is-favorite="friend.isFavorite"
+      @toggle-favorite="toggleFavoriteStatus"
       ></friend-contact>
     </ul>
   </section>
@@ -26,16 +28,26 @@
           name: "Manuel Lorenz",
           phone: "01234 5678 991",
           email: "manuel@localhost.com",
+          isFavorite: true,
         },
         {
           id: "julie",
           name: "Julie Jones",
           phone: "09876 543 221",
           email: "julie@localhost.com",
+          isFavorite: true,          
         },
       ],
     }
   },
+  methods:{
+    toggleFavoriteStatus(friendId){
+      const found = this.friends.find( 
+        (friend) => friend.id === friendId
+      );
+      found.isFavorite = !found.isFavorite;
+    }
+  }
 };
 </script>
 
diff --git a/07 - development setup/vue-cli-01-a-new-vue-project/src/components/FriendContact.vue b/07 - development setup/vue-cli-01-a-new-vue-project/src/components/FriendContact.vue
index 3c5a041..d335955 100644
--- a/07 - development setup/vue-cli-01-a-new-vue-project/src/components/FriendContact.vue
+++ b/07 - development setup/vue-cli-01-a-new-vue-project/src/components/FriendContact.vue
@@ -1,6 +1,6 @@
 <template>
     <li>
-        <h2>{{ name }} {{ friendIsFavorite ? '(Favorite)' : '' }}</h2>
+        <h2>{{ name }} {{ isFavorite ? '(Favorite)' : '' }}</h2>
         <button @click="toggleDetails">
             {{ detailsAreVisible ? 'Hide' : 'Show' }} Details
         </button>
@@ -24,6 +24,10 @@
     //     'isFavorite'
     // ],
     props: {
+        id:{
+            title: String,
+            required: true
+        },
         name: {
             title: String,
             required: true
@@ -49,7 +53,6 @@
     data() {
         return {
             detailsAreVisible: false,
-            friendIsFavorite: this.isFavorite,
         }
     },
     methods: {
@@ -57,7 +60,8 @@
             this.detailsAreVisible = !this.detailsAreVisible;
         },
         toggleFavorite() {
-            this.friendIsFavorite = !this.friendIsFavorite;
+            // this.friendIsFavorite = !this.friendIsFavorite;
+            this.$emit('toggle-favorite', this.id);
         },
     },
 };

--
Gitblit v1.8.0