Cristiano Magro
2024-12-30 7ae0e73aec282b48f263c8bf9f6d6e8475793fbd
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>
1dc4e4 7     <knowledge-base @select-topic="activateTopic"></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 {
37       topics: this.topics
38     }
1dc4e4 39   },
32b599 40   methods: {
CM 41     activateTopic(topicId) {
42       this.activeTopic = this.topics.find((topic) => topic.id === topicId);
43     },
44   },
7ae0e7 45   mounted(){
CM 46     setTimeout(() => {
47       this.topics.push({
48           id: 'events',
49           title: 'Events',
50           description: 'Vieni all\'evento',
51           fullText:
52             'Gli eventi ti permettono di triggherare il codice on demand',
53         });
54     }, 3000);
55   }
32b599 56 };
CM 57 </script>
58
59 <style>
60 * {
61   box-sizing: border-box;
62 }
63 html {
64   font-family: sans-serif;
65 }
66 body {
67   margin: 0;
68 }
69 section {
70   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
71   margin: 2rem auto;
72   max-width: 40rem;
73   padding: 1rem;
74   border-radius: 12px;
75 }
76
77 ul {
78   list-style: none;
79   margin: 0;
80   padding: 0;
81   display: flex;
82   justify-content: center;
83 }
84
85 li {
86   border-radius: 12px;
87   border: 1px solid #ccc;
88   padding: 1rem;
89   width: 15rem;
90   margin: 0 1rem;
91   display: flex;
92   flex-direction: column;
93   justify-content: space-between;
94 }
95
96 h2 {
97   margin: 0.75rem 0;
98   text-align: center;
99 }
100
101 button {
102   font: inherit;
103   border: 1px solid #c70053;
104   background-color: #c70053;
105   color: white;
106   padding: 0.75rem 2rem;
107   border-radius: 30px;
108   cursor: pointer;
109 }
110
111 button:hover,
112 button:active {
113   background-color: #e24d8b;
114   border-color: #e24d8b;
115 }
116 </style>