141 lines
3.1 KiB
Vue
141 lines
3.1 KiB
Vue
<template>
|
|
<div>
|
|
<header><h1>My Friends</h1></header>
|
|
<new-friend @add-contact="addContact"></new-friend>
|
|
<ul>
|
|
<friend-contact
|
|
v-for="friend in friends"
|
|
:key="friend.id"
|
|
:id="friend.id"
|
|
:name="friend.name"
|
|
:email-address="friend.email"
|
|
:phone-number="friend.phone"
|
|
:is-favorite="friend.isFavorite"
|
|
@toggle-favorite="togggleFavoriteStatus"
|
|
@delete-friend="deleteFriend"
|
|
></friend-contact>
|
|
</ul>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
friends: [
|
|
{
|
|
id: "manuel",
|
|
name: "Manuel Lorenz",
|
|
phone: "0123 4567 890",
|
|
email: "manuel@localhost.com",
|
|
isFavorite: true,
|
|
},
|
|
{
|
|
id: "julie",
|
|
name: "Julie Jones",
|
|
phone: "9876 5432 210",
|
|
email: "julie@localhost.com",
|
|
isFavorite: false,
|
|
},
|
|
],
|
|
};
|
|
},
|
|
methods: {
|
|
togggleFavoriteStatus(friendId) {
|
|
const identifiedFriend = this.friends.find(
|
|
(friend) => friend.id === friendId
|
|
);
|
|
identifiedFriend.isFavorite = !identifiedFriend.isFavorite;
|
|
},
|
|
addContact(NewFriend) {
|
|
this.friends.push(NewFriend);
|
|
},
|
|
deleteFriend(id) {
|
|
//if the ID matches drop the friend
|
|
this.friends = this.friends.filter((friend) => friend.id !== id);
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
@import url("https://fonts.googleapis.com/css2?family=Jost&display=swap");
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
font-family: "Jost", sans-serif;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
}
|
|
|
|
header {
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
|
|
margin: 3rem auto;
|
|
border-radius: 10px;
|
|
padding: 1rem;
|
|
background-color: #58004d;
|
|
color: white;
|
|
text-align: center;
|
|
width: 90%;
|
|
max-width: 40rem;
|
|
}
|
|
|
|
#app ul {
|
|
margin: 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
#app li,
|
|
#app form {
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
|
|
margin: 1rem auto;
|
|
border-radius: 10px;
|
|
padding: 1rem;
|
|
text-align: center;
|
|
width: 90%;
|
|
max-width: 40rem;
|
|
}
|
|
|
|
#app h2 {
|
|
font-size: 2rem;
|
|
border-bottom: 4px solid #ccc;
|
|
color: #58004d;
|
|
margin: 0 0 1rem 0;
|
|
}
|
|
|
|
#app button {
|
|
font: inherit;
|
|
cursor: pointer;
|
|
border: 1px solid #ff0077;
|
|
background-color: #ff0077;
|
|
color: white;
|
|
padding: 0.05rem 1rem;
|
|
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26);
|
|
}
|
|
|
|
#app button:hover,
|
|
#app button:active {
|
|
background-color: #ec3169;
|
|
border-color: #ec3169;
|
|
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
|
|
}
|
|
#app input {
|
|
font: inherit;
|
|
padding: 0.15rem;
|
|
}
|
|
#app label {
|
|
font-weight: bold;
|
|
margin-right: 1rem;
|
|
width: 7rem;
|
|
display: inline-block;
|
|
}
|
|
#app form div {
|
|
margin: 1rem 0;
|
|
}
|
|
</style>
|