4646 </h3 >
4747 January 17th
4848 <p class =" type-small" >
49- Workshops and tickets TBA!
49+ Join a workshop for an ultimate hands-on learning experience in Helsinki.
50+ </p >
51+ <p class =" type-small" >
52+ There are several different workshops so you'll surely find one that
53+ caters your needs and experience level!
54+ </p >
55+ <p class =" type-small color-theme" >
56+ Tickets available soon!
5057 </p >
5158 </div >
5259 <div class =" card p-small mb-small" >
6875 <p class =" type-small" >
6976 Held at <a href =" https://goo.gl/maps/jEW5zoLuZgmca6D1A" >Bio Rex</a > in city center.
7077 </p >
71- <p class =" type-small" >
72- <a href =" /#talks" >List of talks</a >
73- </p >
7478 </div >
7579 </div >
7680 </page-section >
7781 <page-section title-id =" sponsors" title =" Sponsors" >
7882 <sponsors :sponsors =" $tm('home.sponsors')" />
7983 </page-section >
84+ <page-section title-id =" workshops" title =" Workshops" >
85+ <h3 class =" mt-large" >Helsinki, in-person</h3 >
86+ <talks-2023 v-if =" workshops.length" :items =" workshops" />
87+ <div v-else >
88+ Loading workshops...
89+ </div >
90+ </page-section >
8091 <page-section title-id =" talks" title =" Talks" >
81- <talks-2023 v-if =" talks.length" :talks =" talks" />
92+ <template v-if =" talks .length " >
93+ <h3 class =" mt-large" >Helsinki</h3 >
94+ <talks-2023 :items =" talks" />
95+ <div class =" mt-large" >
96+ Online talks will be released soon, stay tuned!
97+ </div >
98+ </template >
8299 <div v-else >
83100 Loading talks...
84101 </div >
@@ -107,7 +124,8 @@ export default {
107124 NewsBanner
108125 },
109126 data : () => ({
110- talks: []
127+ talks: [],
128+ workshops: []
111129 }),
112130 created () {
113131 Promise .all ([
@@ -117,25 +135,36 @@ export default {
117135 .then (async ([submissions, schedule]) => {
118136 const talks = await submissions .json ()
119137 const { breaks } = await schedule .json ()
120- return [... talks .results , ... breaks]
138+ return [talks .results , breaks]
121139 })
122- .then ((list ) => {
123- this .talks = list
124- .filter (({ submission_type }) => ! submission_type || [' Talk' , ' Keynote' ].includes (submission_type .en )) // eslint-disable-line
140+ .then (([list , breaks ]) => {
141+ const talks = list
142+ .filter (({ submission_type }) => submission_type .en && [' Talk' , ' Keynote' ].includes (submission_type .en )) // eslint-disable-line
143+ const workshops = list
144+ .filter (({ submission_type }) => submission_type .en && submission_type .en .includes (' Workshop' )) // eslint-disable-line
145+ const breaksParsed = breaks
125146 .map ((item ) => ({
126147 ... item,
127- submission_type: item .submission_type ? .en || ' Break' ,
128- slot: item .slot || { start: item .start , end: item .end }
148+ submission_type: item .description .en .toLowerCase ().includes (' talk' ) ? ' Misc' : ' Break'
129149 }))
150+
151+ this .talks = [... talks, ... breaksParsed]
152+ .map ((item ) => ({
153+ ... item,
154+ slot: item .slot || { start: item .start , end: item .end },
155+ type: item .submission_type .en || item .submission_type
156+ }))
157+ .sort ((a , b ) => new Date (a .slot .start ) < new Date (b .slot .start ) ? - 1 : 1 )
158+ this .workshops = workshops
130159 .sort ((a , b ) => new Date (a .slot .start ) < new Date (b .slot .start ) ? - 1 : 1 )
160+
131161 this .$nextTick (() => {
132162 const hash = window .location .hash
133163 if (! hash || hash === ' ' ) return
134164 const el = document .getElementById (hash .slice (1 ))
135165 if (el) el .scrollIntoView ()
136166 })
137167 })
138- // fa63d553-692a-4c25-9a0d-865af22271f3
139168 // fetch('https://cfp.robocon.io/api/events/robocon-2023/submissions/')
140169 // .then((res) => res.json())
141170 // fetch('https://pretalx.com/api/events/robocon-2023/schedules/latest/')
0 commit comments