Cristiano Magro
2024-12-30 501f0d04371ebcdd9d9401d9e5b911b75f22ddef
commit | author | age
32b599 1 <template>
CM 2   <div>
3     <active-element
4       :topic-title="activeTopic && activeTopic.title"
5       :text="activeTopic && activeTopic.fullText"
6     ></active-element>
501f0d 7     <knowledge-base ></knowledge-base>
32b599 8   </div>
CM 9 </template>
10
11 <script>
12 export default {
13   data() {
14     return {
15       topics: [
16         {
17           id: 'basics',
18           title: 'The Basics',
19           description: 'Core Vue basics you have to know',
20           fullText:
21             'Vue is a great framework and it has a couple of key concepts: Data binding, events, components and reactivity - that should tell you something!',
22         },
23         {
24           id: 'components',
25           title: 'Components',
26           description:
27             'Components are a core concept for building Vue UIs and apps',
28           fullText:
29             'With components, you can split logic (and markup) into separate building blocks and then combine those building blocks (and re-use them) to build powerful user interfaces.',
30         },
31       ],
32       activeTopic: null,
33     };
34   },
3f437c 35   provide(){
CM 36     return {
501f0d 37       topics: this.topics,
CM 38       selectTopic: this.activateTopic,
3f437c 39     }
1dc4e4 40   },
32b599 41   methods: {
CM 42     activateTopic(topicId) {
43       this.activeTopic = this.topics.find((topic) => topic.id === topicId);
44     },
45   },
7ae0e7 46   mounted(){
CM 47     setTimeout(() => {
48       this.topics.push({
49           id: 'events',
50           title: 'Events',
51           description: 'Vieni all\'evento',
52           fullText:
53             'Gli eventi ti permettono di triggherare il codice on demand',
54         });
55     }, 3000);
56   }
32b599 57 };
CM 58 </script>
59
60 <style>
61 * {
62   box-sizing: border-box;
63 }
64 html {
65   font-family: sans-serif;
66 }
67 body {
68   margin: 0;
69 }
70 section {
71   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
72   margin: 2rem auto;
73   max-width: 40rem;
74   padding: 1rem;
75   border-radius: 12px;
76 }
77
78 ul {
79   list-style: none;
80   margin: 0;
81   padding: 0;
82   display: flex;
83   justify-content: center;
84 }
85
86 li {
87   border-radius: 12px;
88   border: 1px solid #ccc;
89   padding: 1rem;
90   width: 15rem;
91   margin: 0 1rem;
92   display: flex;
93   flex-direction: column;
94   justify-content: space-between;
95 }
96
97 h2 {
98   margin: 0.75rem 0;
99   text-align: center;
100 }
101
102 button {
103   font: inherit;
104   border: 1px solid #c70053;
105   background-color: #c70053;
106   color: white;
107   padding: 0.75rem 2rem;
108   border-radius: 30px;
109   cursor: pointer;
110 }
111
112 button:hover,
113 button:active {
114   background-color: #e24d8b;
115   border-color: #e24d8b;
116 }
117 </style>