course-schedule #2
@@ -7,6 +7,7 @@ import { RoomBooking } from './pages/RoomBooking';
|
||||
import { NewBooking } from './pages/NewBooking';
|
||||
import { BookingSettings } from './pages/BookingSettings';
|
||||
import { CourseSchedule } from './pages/CourseSchedule';
|
||||
import { CourseScheduleView } from './pages/CourseScheduleView';
|
||||
import { TestSession } from './pages/TestSession';
|
||||
import FullScreenLoader from './components/FullScreenLoader';
|
||||
|
||||
@@ -117,6 +118,7 @@ const AppRoutes = () => {
|
||||
<Route index element={<RoomBooking bookings={bookings} showSuccessBanner={showSuccessBanner} lastCreatedBooking={lastCreatedBooking} onDismissBanner={() => setShowSuccessBanner(false)} onBookingUpdate={updateBooking} onBookingDelete={deleteBooking} showDeleteBanner={showDeleteBanner} lastDeletedBooking={lastDeletedBooking} onDismissDeleteBanner={() => setShowDeleteBanner(false)} />} />
|
||||
<Route path="new-booking" element={<NewBooking addBooking={addBooking} />} />
|
||||
<Route path="course-schedule" element={<CourseSchedule />} />
|
||||
<Route path="course-schedule/:courseId" element={<CourseScheduleView />} />
|
||||
<Route path="booking-settings" element={<BookingSettings />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
|
||||
631
my-app/src/data/courseScheduleData.js
Normal file
631
my-app/src/data/courseScheduleData.js
Normal file
@@ -0,0 +1,631 @@
|
||||
export const scheduleData = [
|
||||
// Week 45
|
||||
{
|
||||
week: 45,
|
||||
activities: [
|
||||
{
|
||||
id: 1,
|
||||
date: '2024-11-04',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 1',
|
||||
description: 'Introduktion till kursen, Konceptuell modellering och databasmodellering, UML analysmönster.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
date: '2024-11-05',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 1',
|
||||
description: 'Handledning.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
date: '2024-11-06',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 1 grp 1',
|
||||
description: 'Konceptuell modellering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
date: '2024-11-06',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 1 grp 2',
|
||||
description: 'Konceptuell modellering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
date: '2024-11-07',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 2',
|
||||
description: 'Handledning.',
|
||||
teacher: 'Anders Thelemyr, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
date: '2024-11-07',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 3',
|
||||
description: 'INSTÄLLD.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
cancelled: true
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 46
|
||||
{
|
||||
week: 46,
|
||||
activities: [
|
||||
{
|
||||
id: 7,
|
||||
date: '2024-11-11',
|
||||
time: '16:00-17:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 2',
|
||||
description: 'Syntetisk databasdesign: Översättning från UML till relationsmodellen.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
date: '2024-11-12',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Introduktion',
|
||||
title: 'Introduktion 1',
|
||||
description: 'Introduktion till DBMS och projekt Databasdesign. Vi löser en mindre uppgift som liknar den som skall göras i projekt Databasdesign.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
date: '2024-11-13',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 1',
|
||||
description: 'Relationsmodellen och syntetisk databasdesign. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
date: '2024-11-13',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 4',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
date: '2024-11-13',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 2',
|
||||
description: 'Relationsmodellen och syntetisk databasdesign. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
date: '2024-11-15',
|
||||
time: '13:00-15:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 5',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Anders Thelemyr, Workneh Yilma Ayele'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 47
|
||||
{
|
||||
week: 47,
|
||||
activities: [
|
||||
{
|
||||
id: 13,
|
||||
date: '2024-11-18',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 3',
|
||||
description: 'SQL I : inledande operatorer',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
date: '2024-11-18',
|
||||
time: '14:45-15:45',
|
||||
location: 'L30',
|
||||
type: 'Info',
|
||||
title: 'Info om år 3 EIT frivillig SVL',
|
||||
description: '',
|
||||
teacher: ''
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:6',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 1',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:7',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 2',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Anders Thelemyr',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:8',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 3',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Workneh Yilma Ayele',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
date: '2024-11-20',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 6',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 19,
|
||||
date: '2024-11-22',
|
||||
time: '08:00-09:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 3 grp 1',
|
||||
description: 'SQL introduktion - enkla operatorer. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
date: '2024-11-22',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 3 grp 2',
|
||||
description: 'SQL introduktion - enkla operatorer. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 48
|
||||
{
|
||||
week: 48,
|
||||
activities: [
|
||||
{
|
||||
id: 21,
|
||||
date: '2024-11-25',
|
||||
time: '10:00-11:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 4',
|
||||
description: 'SQL II: avancerade operatorer.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 22,
|
||||
date: '2024-11-25',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 7',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 23,
|
||||
date: '2024-11-27',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 8',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Melle Carnesten, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 24,
|
||||
date: '2024-11-29',
|
||||
time: '11:00-12:00',
|
||||
location: 'L30',
|
||||
type: 'Info',
|
||||
title: 'Info om år 3 MarkIT frivillig',
|
||||
description: '',
|
||||
teacher: ''
|
||||
},
|
||||
{
|
||||
id: 25,
|
||||
date: '2024-11-29',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 1',
|
||||
description: 'SQL fortsättning. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 26,
|
||||
date: '2024-11-29',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 2',
|
||||
description: 'SQL fortsättning. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 49
|
||||
{
|
||||
week: 49,
|
||||
activities: [
|
||||
{
|
||||
id: 27,
|
||||
date: '2024-12-02',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 9',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 28,
|
||||
date: '2024-12-03',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 5',
|
||||
description: 'Frågespråk för relationsmodellen: relationsalgebra.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 29,
|
||||
date: '2024-12-04',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 10',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 30,
|
||||
date: '2024-12-06',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 5 grp 1',
|
||||
description: 'Relationsalgebra. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 31,
|
||||
date: '2024-12-06',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 5 grp 2',
|
||||
description: 'Relationsalgebra. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 50
|
||||
{
|
||||
week: 50,
|
||||
activities: [
|
||||
{
|
||||
id: 32,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:6',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 1',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 33,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:7',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 2',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Anders Thelemyr',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 34,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:8',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 3',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Workneh Yilma Ayele',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 35,
|
||||
date: '2024-12-12',
|
||||
time: '10:00-11:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 6',
|
||||
description: 'Analytisk databasdesign: normalisering.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 51
|
||||
{
|
||||
week: 51,
|
||||
activities: [
|
||||
{
|
||||
id: 36,
|
||||
date: '2024-12-16',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 11',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg'
|
||||
},
|
||||
{
|
||||
id: 37,
|
||||
date: '2024-12-17',
|
||||
time: '10:00-12:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 12',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 38,
|
||||
date: '2024-12-17',
|
||||
time: '13:00-15:00',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 8',
|
||||
description: 'Alternativ till relationsmodellen - noSQL-ansatser.',
|
||||
teacher: 'Martin Duneld'
|
||||
},
|
||||
{
|
||||
id: 39,
|
||||
date: '2024-12-18',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 6 grp 1',
|
||||
description: 'Analytisk databasdesign: normalisering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 40,
|
||||
date: '2024-12-18',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 6 grp 2',
|
||||
description: 'Analytisk databasdesign: normalisering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 41,
|
||||
date: '2024-12-19',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 14',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 42,
|
||||
date: '2024-12-19',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 7',
|
||||
description: 'Databashanteringssystem.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 43,
|
||||
date: '2024-12-20',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 13',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 52
|
||||
{
|
||||
week: 52,
|
||||
activities: [
|
||||
{
|
||||
id: 44,
|
||||
date: '2024-12-23',
|
||||
time: '13:00-15:00',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning',
|
||||
description: 'Zoom-handledning!!!',
|
||||
teacher: 'Edwin Sundberg, Jennifer Skopac'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 2 (January)
|
||||
{
|
||||
week: 2,
|
||||
activities: [
|
||||
{
|
||||
id: 45,
|
||||
date: '2025-01-07',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 15',
|
||||
description: 'Projekthandledning (ej labb). Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Jennifer Skopac'
|
||||
},
|
||||
{
|
||||
id: 46,
|
||||
date: '2025-01-08',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 16',
|
||||
description: 'Projekthandledning (ej labb). Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 47,
|
||||
date: '2025-01-08',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 9',
|
||||
description: 'Embedded SQL och intro till Labb.',
|
||||
teacher: 'Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 48,
|
||||
date: '2025-01-09',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 49,
|
||||
date: '2025-01-10',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 3 (January)
|
||||
{
|
||||
week: 3,
|
||||
activities: [
|
||||
{
|
||||
id: 50,
|
||||
date: '2025-01-13',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 51,
|
||||
date: '2025-01-13',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 10',
|
||||
description: 'Genomgång av en exempeltentamen',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 52,
|
||||
date: '2025-01-14',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 18',
|
||||
description: 'Handledning för projekt och ev. kvarvarande övriga uppgifter. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 53,
|
||||
date: '2025-01-17',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 17',
|
||||
description: 'Handledning för projekt och ev. kvarvarande övriga uppgifter. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Jennifer Skopac, Melle Carnesten'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
export const examData = [
|
||||
{
|
||||
id: 'exam1',
|
||||
date: '2025-01-16',
|
||||
time: '13:00-17:00',
|
||||
type: 'Tentamen',
|
||||
title: 'Tentamen (4hp)',
|
||||
location: 'Aula NOD + flera salar',
|
||||
important: true,
|
||||
isExam: true
|
||||
},
|
||||
{
|
||||
id: 'exam2',
|
||||
date: '2025-01-19',
|
||||
time: '',
|
||||
type: 'Projektarbete',
|
||||
title: 'Projektarbete (3.5hp)',
|
||||
location: '',
|
||||
important: true,
|
||||
isExam: true
|
||||
}
|
||||
];
|
||||
|
||||
export const courseInfo = {
|
||||
title: 'Databasmetodik',
|
||||
code: 'DB HT2024',
|
||||
credits: '7,5 hp',
|
||||
coordinator: 'Ann Maria Dorotea Bergholtz',
|
||||
examCredits: '4 hp',
|
||||
projectCredits: '3,5 hp'
|
||||
};
|
||||
24
my-app/src/data/coursesData.js
Normal file
24
my-app/src/data/coursesData.js
Normal file
@@ -0,0 +1,24 @@
|
||||
export const coursesData = [
|
||||
{
|
||||
id: 'db-ht2024',
|
||||
title: 'Databasmetodik',
|
||||
code: 'DB HT2024',
|
||||
credits: '7,5 hp',
|
||||
coordinator: 'Ann Maria Dorotea Bergholtz',
|
||||
period: 'HT 2024',
|
||||
description: 'Kursen behandlar konceptuell modellering, databasdesign, SQL, relationsalgebra och normalisering.',
|
||||
color: '#1d4ed8',
|
||||
dataModule: () => import('./courseScheduleData')
|
||||
},
|
||||
{
|
||||
id: 'proto2-vt2025',
|
||||
title: 'Prototyper inom interaktionsdesign II',
|
||||
code: 'PROTO2 VT2025',
|
||||
credits: '7,5 hp',
|
||||
coordinator: 'Ola Knutsson, Johan Stymne',
|
||||
period: 'VT 2025',
|
||||
description: 'Kursen behandlar designsprintar, prototypning i fysiska och digitala material, användarflöden och testning av prototyper.',
|
||||
color: '#059669',
|
||||
dataModule: () => import('./proto2ScheduleData')
|
||||
}
|
||||
];
|
||||
526
my-app/src/data/proto2ScheduleData.js
Normal file
526
my-app/src/data/proto2ScheduleData.js
Normal file
@@ -0,0 +1,526 @@
|
||||
export const scheduleData = [
|
||||
// Week 13
|
||||
{
|
||||
week: 13,
|
||||
activities: [
|
||||
{
|
||||
id: 1,
|
||||
date: '2025-03-24',
|
||||
time: '08:00-09:00',
|
||||
location: 'L70',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 1',
|
||||
description: 'Kursintroduktion and Introduktion till Designsprint Fas 1: Map. Det är obligatoriskt att deltaga i designsprinten. Eget arbete i designteamet 09:00-11:00',
|
||||
teacher: 'Lon Hansson, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
date: '2025-03-24',
|
||||
time: '11:00-11:45',
|
||||
location: 'L70',
|
||||
type: 'Seminarium',
|
||||
title: 'Seminarium 1',
|
||||
description: 'Designsprint Fas 1: Map, Debriefing',
|
||||
teacher: 'Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
date: '2025-03-24',
|
||||
time: '13:00-15:00',
|
||||
location: 'L70',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 1',
|
||||
description: 'Designsprint Fas 2: Sketch & Decide, Introduktion',
|
||||
teacher: 'Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
date: '2025-03-24',
|
||||
time: '15:00-15:45',
|
||||
location: 'L70',
|
||||
type: 'Seminarium',
|
||||
title: 'Seminarium 2',
|
||||
description: 'Designsprint Fas 2: Sketch & Decide, Debriefing',
|
||||
teacher: 'Lon Hansson, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
date: '2025-03-25',
|
||||
time: '08:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 1',
|
||||
description: 'Designsprint Fas 3: Prototype in physical design material, Introduktion. Designsprint-grupp 1-7',
|
||||
teacher: 'Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
date: '2025-03-25',
|
||||
time: '13:00-16:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 2',
|
||||
description: 'Designsprint Fas 3: Prototype in physical design material, Introduktion. Designsprint-grupp 8-14',
|
||||
teacher: 'Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
date: '2025-03-27',
|
||||
time: '08:00-08:45',
|
||||
location: 'D3, D4',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 3',
|
||||
description: 'Designsprint Fas 4:Prototype in digital design material, Wireframing, Introduktion. Uppstart av dagen. Eget arbete i designteamet 08:20-11:00',
|
||||
teacher: 'Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
date: '2025-03-27',
|
||||
time: '11:00-11:45',
|
||||
location: 'D3, D4',
|
||||
type: 'Seminarium',
|
||||
title: 'Seminarium 3',
|
||||
description: 'Designsprint Fas 4: Prototype in digital design material, Wireframing, Debriefing. D3: Designsprint-grupp 1-7, D4: Designsprint-grupp 8-14',
|
||||
teacher: 'Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
date: '2025-03-27',
|
||||
time: '13:00-16:45',
|
||||
location: 'L50',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 1',
|
||||
description: 'Designsprint Fas 5: Test: Introduktion, Tester, Debriefing. Designsprint-grupp 1-7',
|
||||
teacher: 'Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
date: '2025-03-27',
|
||||
time: '13:00-16:45',
|
||||
location: 'L70',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 2',
|
||||
description: 'Designsprint Fas 5: Test: Introduktion, Tester, Debriefing. Designsprint-grupp 8-14',
|
||||
teacher: 'Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
date: '2025-03-28',
|
||||
time: '13:00-15:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 1 grp 1',
|
||||
description: 'Labb 1: Arduino. Muntlig redovisning på plats. Designsprint-grupp 1-5',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 14
|
||||
{
|
||||
week: 14,
|
||||
activities: [
|
||||
{
|
||||
id: 12,
|
||||
date: '2025-03-31',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 1 grp 2',
|
||||
description: 'Labb 1: Arduino. Muntlig redovisning på plats. Designsprint-grupp 6-10',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
date: '2025-03-31',
|
||||
time: '13:00-15:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 1 grp 3',
|
||||
description: 'Labb 1: Arduino. Muntlig redovisning på plats. Designsprint-grupp 11-14',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
date: '2025-04-01',
|
||||
time: '10:00-12:45',
|
||||
location: 'L70',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 1',
|
||||
description: 'UI och Interaktionsprogrammering, del 1. Designsprint-grupp 1-14. Vi kommer att sluta ca kl. 12',
|
||||
teacher: 'Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
date: '2025-04-02',
|
||||
time: '08:00-11:45',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 2 grp 1',
|
||||
description: 'Labb 2: Gränssnittsdesign och prototypning med SwiftUI i XCode. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 1-5',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Mika Haverås, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
date: '2025-04-02',
|
||||
time: '13:00-16:45',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 2 grp 2',
|
||||
description: 'Labb 2: Gränssnittsdesign och prototypning med SwiftUI i XCode. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 6-10',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Mika Haverås, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
date: '2025-04-03',
|
||||
time: '09:00-12:45',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 2 grp 3',
|
||||
description: 'Labb 2: Gränssnittsdesign och prototypning med SwiftUI i XCode. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 11-14',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Mika Haverås, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
date: '2025-04-03',
|
||||
time: '15:00-17:00',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 2',
|
||||
description: 'UI och Interaktionsprogrammering, del 2. Designsprint-grupp 1-14',
|
||||
teacher: 'Ola Knutsson'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 15
|
||||
{
|
||||
week: 15,
|
||||
activities: [
|
||||
{
|
||||
id: 19,
|
||||
date: '2025-04-07',
|
||||
time: '08:00-11:00',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 3 grp 1',
|
||||
description: 'Labb 3: Jetpack Compose i Android Studio. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 1-5',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Lon Hansson, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
date: '2025-04-07',
|
||||
time: '12:00-15:00',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 3 grp 2',
|
||||
description: 'Labb 3: Jetpack Compose i Android Studio. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 6-10',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Kim Lindfors, Lon Hansson, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 21,
|
||||
date: '2025-04-08',
|
||||
time: '09:00-12:00',
|
||||
location: 'Studentlabb ID Höger',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 3 grp 3',
|
||||
description: 'Labb 3: Jetpack Compose i Android Studio. Muntlig redovisning på plats och filinlämning i iLearn. Designsprint-grupp 11-14',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Kim Lindfors, Lon Hansson, Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 22,
|
||||
date: '2025-04-10',
|
||||
time: '13:00-15:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 1',
|
||||
description: 'Skisser och Arduino',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne, Kim Lindfors, Mika Haverås'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 16
|
||||
{
|
||||
week: 16,
|
||||
activities: [
|
||||
{
|
||||
id: 23,
|
||||
date: '2025-04-14',
|
||||
time: '09:00-09:45',
|
||||
location: 'L50',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 3 grp 2',
|
||||
description: 'Kick-off för individuella designprojektet. Designsprint-grupp 8-14',
|
||||
teacher: 'Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 24,
|
||||
date: '2025-04-14',
|
||||
time: '10:00-10:45',
|
||||
location: 'L50',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 3 grp 1',
|
||||
description: 'Kick-off för individuella designprojektet. Designsprint-grupp 1-7',
|
||||
teacher: 'Ola Knutsson'
|
||||
},
|
||||
{
|
||||
id: 25,
|
||||
date: '2025-04-14',
|
||||
time: '13:00-16:45',
|
||||
location: 'D3, D4',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 4 grp 1',
|
||||
description: 'Labb 4: HTML, Bootstrap & JavaScript. Designsprint-grupp 1-7',
|
||||
teacher: 'Lon Hansson, Stefan Nenzén'
|
||||
},
|
||||
{
|
||||
id: 26,
|
||||
date: '2025-04-15',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 2',
|
||||
description: 'Användarflöden',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 27,
|
||||
date: '2025-04-15',
|
||||
time: '13:00-16:45',
|
||||
location: 'D3, D4',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration 4 grp 2',
|
||||
description: 'Labb 4: HTML, Bootstrap & JavaScript. Designsprint-grupp 8-14',
|
||||
teacher: 'Lon Hansson, Stefan Nenzén'
|
||||
},
|
||||
{
|
||||
id: 28,
|
||||
date: '2025-04-16',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 1',
|
||||
description: 'Interaktion, gränssnittsskisser och UI i fysiska och digitala material. Designsprint-grupp 1-7',
|
||||
teacher: 'Johan Stymne, Ola Knutsson',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 29,
|
||||
date: '2025-04-16',
|
||||
time: '14:00-16:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 2',
|
||||
description: 'Interaktion, gränssnittsskisser och UI i fysiska och digitala material. Designsprint-grupp 8-14',
|
||||
teacher: 'Johan Stymne, Ola Knutsson',
|
||||
important: true
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 17
|
||||
{
|
||||
week: 17,
|
||||
activities: [
|
||||
{
|
||||
id: 30,
|
||||
date: '2025-04-23',
|
||||
time: '09:00-10:45',
|
||||
location: 'L70',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 4 grp 2',
|
||||
description: 'McElroys begrepp. Designsprint-grupp 8-14',
|
||||
teacher: 'Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 31,
|
||||
date: '2025-04-23',
|
||||
time: '13:00-14:45',
|
||||
location: 'L70',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 4 grp 1',
|
||||
description: 'McElroys begrepp. Designsprint-grupp 1-7',
|
||||
teacher: 'Johan Stymne'
|
||||
},
|
||||
{
|
||||
id: 32,
|
||||
date: '2025-04-24',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 3',
|
||||
description: 'Gestaltning, Bredd, Djup, Interaktivitet, Data',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne, Kim Lindfors, Mika Haverås'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 18
|
||||
{
|
||||
week: 18,
|
||||
activities: [
|
||||
{
|
||||
id: 33,
|
||||
date: '2025-04-29',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 5',
|
||||
description: 'Designsystem och värdering. Designsprint-grupp 1-14',
|
||||
teacher: 'Johan Stymne'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 19
|
||||
{
|
||||
week: 19,
|
||||
activities: [
|
||||
{
|
||||
id: 34,
|
||||
date: '2025-05-05',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 4',
|
||||
description: 'Integration av prototypens delar',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne, Kim Lindfors, Mika Haverås'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 20
|
||||
{
|
||||
week: 20,
|
||||
activities: [
|
||||
{
|
||||
id: 35,
|
||||
date: '2025-05-12',
|
||||
time: '13:00-14:45',
|
||||
location: 'L70',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 6 grp 1',
|
||||
description: 'Testning av prototyper. Designsprint-grupp 1-7',
|
||||
teacher: 'Johan Stymne, Lon Hansson'
|
||||
},
|
||||
{
|
||||
id: 36,
|
||||
date: '2025-05-12',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 6 grp 2',
|
||||
description: 'Testning av prototyper. Designsprint-grupp 8-14',
|
||||
teacher: 'Johan Stymne, Lon Hansson'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 21
|
||||
{
|
||||
week: 21,
|
||||
activities: [
|
||||
{
|
||||
id: 37,
|
||||
date: '2025-05-19',
|
||||
time: '09:00-11:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 5',
|
||||
description: 'Designsystem, Ändringar efter testerna',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Johan Stymne, Kim Lindfors'
|
||||
},
|
||||
{
|
||||
id: 38,
|
||||
date: '2025-05-22',
|
||||
time: '15:00-17:00',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Workshop',
|
||||
title: 'Workshop 7',
|
||||
description: 'Resttillfälle Workshop, möjlighet att hämta ut prototyper kl. 12 i ID:Fix för att förbereda dessa för testning.',
|
||||
teacher: 'Ola Knutsson'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 22
|
||||
{
|
||||
week: 22,
|
||||
activities: [
|
||||
{
|
||||
id: 39,
|
||||
date: '2025-05-28',
|
||||
time: '12:00-14:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 6',
|
||||
description: 'Alla delar av projektet',
|
||||
teacher: 'António Miguel Beleza Maciel Pinheiro Braga, Jacob Reinikainen Lindström, Mika Haverås, Ola Knutsson'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 23
|
||||
{
|
||||
week: 23,
|
||||
activities: [
|
||||
{
|
||||
id: 40,
|
||||
date: '2025-06-02',
|
||||
time: '12:00-13:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 1',
|
||||
description: 'Visning och demo av de individuella designprojekten',
|
||||
teacher: 'Jacob Reinikainen Lindström, Johan Stymne, Ola Knutsson',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 41,
|
||||
date: '2025-06-02',
|
||||
time: '14:00-15:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 2',
|
||||
description: 'Visning och demo av de individuella designprojekten',
|
||||
teacher: 'Jacob Reinikainen Lindström, Johan Stymne, Ola Knutsson',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 42,
|
||||
date: '2025-06-03',
|
||||
time: '12:00-13:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 3',
|
||||
description: 'Visning och demo av de individuella designprojekten',
|
||||
teacher: 'Johan Stymne, Mika Haverås, Ola Knutsson',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 43,
|
||||
date: '2025-06-03',
|
||||
time: '14:00-15:45',
|
||||
location: 'Studentlabb ID:fix',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 4',
|
||||
description: 'Visning och demo av de individuella designprojekten',
|
||||
teacher: 'Johan Stymne, Mika Haverås, Ola Knutsson',
|
||||
important: true
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
export const examData = [
|
||||
{
|
||||
id: 'exam1',
|
||||
date: '2025-06-09',
|
||||
time: '',
|
||||
type: 'Inlämningsuppgifter',
|
||||
title: 'Inlämningsuppgifter (7,5hp)',
|
||||
location: '',
|
||||
important: true,
|
||||
isExam: true
|
||||
}
|
||||
];
|
||||
|
||||
export const courseInfo = {
|
||||
title: 'Prototyper inom interaktionsdesign II',
|
||||
code: 'PROTO2 VT2025',
|
||||
credits: '7,5 hp',
|
||||
coordinator: 'Ola Knutsson, Johan Stymne',
|
||||
examCredits: '7,5 hp',
|
||||
projectCredits: 'Inlämningsuppgifter'
|
||||
};
|
||||
@@ -1,816 +1,43 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import React from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import styles from './CourseSchedule.module.css';
|
||||
|
||||
const scheduleData = [
|
||||
// Week 45
|
||||
{
|
||||
week: 45,
|
||||
activities: [
|
||||
{
|
||||
id: 1,
|
||||
date: '2024-11-04',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 1',
|
||||
description: 'Introduktion till kursen, Konceptuell modellering och databasmodellering, UML analysmönster.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
date: '2024-11-05',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 1',
|
||||
description: 'Handledning.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
date: '2024-11-06',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 1 grp 1',
|
||||
description: 'Konceptuell modellering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
date: '2024-11-06',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 1 grp 2',
|
||||
description: 'Konceptuell modellering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
date: '2024-11-07',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 2',
|
||||
description: 'Handledning.',
|
||||
teacher: 'Anders Thelemyr, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
date: '2024-11-07',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 3',
|
||||
description: 'INSTÄLLD.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
cancelled: true
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 46
|
||||
{
|
||||
week: 46,
|
||||
activities: [
|
||||
{
|
||||
id: 7,
|
||||
date: '2024-11-11',
|
||||
time: '16:00-17:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 2',
|
||||
description: 'Syntetisk databasdesign: Översättning från UML till relationsmodellen.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
date: '2024-11-12',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Introduktion',
|
||||
title: 'Introduktion 1',
|
||||
description: 'Introduktion till DBMS och projekt Databasdesign. Vi löser en mindre uppgift som liknar den som skall göras i projekt Databasdesign.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
date: '2024-11-13',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 1',
|
||||
description: 'Relationsmodellen och syntetisk databasdesign. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
date: '2024-11-13',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 4',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
date: '2024-11-13',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 2 grp 2',
|
||||
description: 'Relationsmodellen och syntetisk databasdesign. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
date: '2024-11-15',
|
||||
time: '13:00-15:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 5',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Anders Thelemyr, Workneh Yilma Ayele'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 47
|
||||
{
|
||||
week: 47,
|
||||
activities: [
|
||||
{
|
||||
id: 13,
|
||||
date: '2024-11-18',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 3',
|
||||
description: 'SQL I : inledande operatorer',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
date: '2024-11-18',
|
||||
time: '14:45-15:45',
|
||||
location: 'L30',
|
||||
type: 'Info',
|
||||
title: 'Info om år 3 EIT frivillig SVL',
|
||||
description: '',
|
||||
teacher: ''
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:6',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 1',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:7',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 2',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Anders Thelemyr',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
date: '2024-11-19',
|
||||
time: '12:00-17:00',
|
||||
location: 'G10:8',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 1 grp 3',
|
||||
description: 'Redov. första delen av Projekt Databasdesign. Tidsschema per grupp för Red 1 (och även Red 2) kommer på kurswebbplatsen senast dagen efter deadline för projektgruppsanmälan.',
|
||||
teacher: 'Workneh Yilma Ayele',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
date: '2024-11-20',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 6',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 19,
|
||||
date: '2024-11-22',
|
||||
time: '08:00-09:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 3 grp 1',
|
||||
description: 'SQL introduktion - enkla operatorer. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
date: '2024-11-22',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 3 grp 2',
|
||||
description: 'SQL introduktion - enkla operatorer. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 48
|
||||
{
|
||||
week: 48,
|
||||
activities: [
|
||||
{
|
||||
id: 21,
|
||||
date: '2024-11-25',
|
||||
time: '10:00-11:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 4',
|
||||
description: 'SQL II: avancerade operatorer.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 22,
|
||||
date: '2024-11-25',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 7',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 23,
|
||||
date: '2024-11-27',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 8',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Melle Carnesten, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 24,
|
||||
date: '2024-11-29',
|
||||
time: '11:00-12:00',
|
||||
location: 'L30',
|
||||
type: 'Info',
|
||||
title: 'Info om år 3 MarkIT frivillig',
|
||||
description: '',
|
||||
teacher: ''
|
||||
},
|
||||
{
|
||||
id: 25,
|
||||
date: '2024-11-29',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 1',
|
||||
description: 'SQL fortsättning. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 26,
|
||||
date: '2024-11-29',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 4 grp 2',
|
||||
description: 'SQL fortsättning. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 49
|
||||
{
|
||||
week: 49,
|
||||
activities: [
|
||||
{
|
||||
id: 27,
|
||||
date: '2024-12-02',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 9',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 28,
|
||||
date: '2024-12-03',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 5',
|
||||
description: 'Frågespråk för relationsmodellen: relationsalgebra.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 29,
|
||||
date: '2024-12-04',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 10',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 30,
|
||||
date: '2024-12-06',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 5 grp 1',
|
||||
description: 'Relationsalgebra. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 31,
|
||||
date: '2024-12-06',
|
||||
time: '15:00-16:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 5 grp 2',
|
||||
description: 'Relationsalgebra. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 50
|
||||
{
|
||||
week: 50,
|
||||
activities: [
|
||||
{
|
||||
id: 32,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:6',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 1',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 33,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:7',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 2',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Anders Thelemyr',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 34,
|
||||
date: '2024-12-10',
|
||||
time: '13:00-18:00',
|
||||
location: 'G10:8',
|
||||
type: 'Redovisning',
|
||||
title: 'Redovisning 2 grp 3',
|
||||
description: 'Redov. av de fem första frågorna för projekt Frågespråk, både SQL och relationsalgebra.',
|
||||
teacher: 'Workneh Yilma Ayele',
|
||||
important: true
|
||||
},
|
||||
{
|
||||
id: 35,
|
||||
date: '2024-12-12',
|
||||
time: '10:00-11:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 6',
|
||||
description: 'Analytisk databasdesign: normalisering.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 51
|
||||
{
|
||||
week: 51,
|
||||
activities: [
|
||||
{
|
||||
id: 36,
|
||||
date: '2024-12-16',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 11',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg'
|
||||
},
|
||||
{
|
||||
id: 37,
|
||||
date: '2024-12-17',
|
||||
time: '10:00-12:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 12',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 38,
|
||||
date: '2024-12-17',
|
||||
time: '13:00-15:00',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 8',
|
||||
description: 'Alternativ till relationsmodellen - noSQL-ansatser.',
|
||||
teacher: 'Martin Duneld'
|
||||
},
|
||||
{
|
||||
id: 39,
|
||||
date: '2024-12-18',
|
||||
time: '10:00-11:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 6 grp 1',
|
||||
description: 'Analytisk databasdesign: normalisering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 40,
|
||||
date: '2024-12-18',
|
||||
time: '13:00-14:45',
|
||||
location: 'Lilla Hörsalen',
|
||||
type: 'Lektion',
|
||||
title: 'Lektion 6 grp 2',
|
||||
description: 'Analytisk databasdesign: normalisering. Anmälan till lektionsdeltagande krävs. Lektionsgruppsanmälan görs i Daisy.',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 41,
|
||||
date: '2024-12-19',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 14',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 42,
|
||||
date: '2024-12-19',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 7',
|
||||
description: 'Databashanteringssystem.',
|
||||
teacher: 'Anders Thelemyr'
|
||||
},
|
||||
{
|
||||
id: 43,
|
||||
date: '2024-12-20',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 13',
|
||||
description: 'Handledning. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 52
|
||||
{
|
||||
week: 52,
|
||||
activities: [
|
||||
{
|
||||
id: 44,
|
||||
date: '2024-12-23',
|
||||
time: '13:00-15:00',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning',
|
||||
description: 'Zoom-handledning!!!',
|
||||
teacher: 'Edwin Sundberg, Jennifer Skopac'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 2 (January)
|
||||
{
|
||||
week: 2,
|
||||
activities: [
|
||||
{
|
||||
id: 45,
|
||||
date: '2025-01-07',
|
||||
time: '15:00-16:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 15',
|
||||
description: 'Projekthandledning (ej labb). Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Jennifer Skopac'
|
||||
},
|
||||
{
|
||||
id: 46,
|
||||
date: '2025-01-08',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 16',
|
||||
description: 'Projekthandledning (ej labb). Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Edwin Sundberg, Workneh Yilma Ayele'
|
||||
},
|
||||
{
|
||||
id: 47,
|
||||
date: '2025-01-08',
|
||||
time: '13:00-14:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 9',
|
||||
description: 'Embedded SQL och intro till Labb.',
|
||||
teacher: 'Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 48,
|
||||
date: '2025-01-09',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 49,
|
||||
date: '2025-01-10',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
}
|
||||
]
|
||||
},
|
||||
// Week 3 (January)
|
||||
{
|
||||
week: 3,
|
||||
activities: [
|
||||
{
|
||||
id: 50,
|
||||
date: '2025-01-13',
|
||||
time: '09:00-11:45',
|
||||
location: '',
|
||||
type: 'Laboration',
|
||||
title: 'Laboration',
|
||||
description: 'Öronmärkt tillfälle för arbete på plats i NOD med laborationen i "Embedded SQL i Java". Under tillfället kan labbgrupper, som behöver, få hjälp med labben genom att ställa sig i kö via handledningssystemet.',
|
||||
teacher: 'Anders Thelemyr, Edwin Sundberg, Nikos Dimitrakas'
|
||||
},
|
||||
{
|
||||
id: 51,
|
||||
date: '2025-01-13',
|
||||
time: '15:00-16:45',
|
||||
location: 'Aula NOD',
|
||||
type: 'Föreläsning',
|
||||
title: 'Föreläsning 10',
|
||||
description: 'Genomgång av en exempeltentamen',
|
||||
teacher: 'Ann Maria Dorotea Bergholtz'
|
||||
},
|
||||
{
|
||||
id: 52,
|
||||
date: '2025-01-14',
|
||||
time: '10:00-11:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 18',
|
||||
description: 'Handledning för projekt och ev. kvarvarande övriga uppgifter. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Jennifer Skopac, Melle Carnesten'
|
||||
},
|
||||
{
|
||||
id: 53,
|
||||
date: '2025-01-17',
|
||||
time: '13:00-14:45',
|
||||
location: '',
|
||||
type: 'Handledning',
|
||||
title: 'Handledning 17',
|
||||
description: 'Handledning för projekt och ev. kvarvarande övriga uppgifter. Via handledning.dsv.su.se - ange zoomid eller plats i NOD. Använd helst ingen passcode om Zoom används.',
|
||||
teacher: 'Adrian Olbricht, Edwin Sundberg, Jennifer Skopac, Melle Carnesten'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
const examData = [
|
||||
{
|
||||
id: 'exam1',
|
||||
date: '2025-01-16',
|
||||
time: '13:00-17:00',
|
||||
type: 'Tentamen',
|
||||
title: 'Tentamen (4hp)',
|
||||
location: 'Aula NOD + flera salar',
|
||||
important: true,
|
||||
isExam: true
|
||||
},
|
||||
{
|
||||
id: 'exam2',
|
||||
date: '2025-01-19',
|
||||
time: '',
|
||||
type: 'Projektarbete',
|
||||
title: 'Projektarbete (3.5hp)',
|
||||
location: '',
|
||||
important: true,
|
||||
isExam: true
|
||||
}
|
||||
];
|
||||
import { coursesData } from '../data/coursesData';
|
||||
|
||||
export function CourseSchedule() {
|
||||
const [expandedActivity, setExpandedActivity] = useState(null);
|
||||
const [currentWeek, setCurrentWeek] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
// Get current week number (simplified)
|
||||
const now = new Date();
|
||||
const week = Math.ceil(((now - new Date(now.getFullYear(), 0, 1)) / 86400000 + new Date(now.getFullYear(), 0, 1).getDay() + 1) / 7);
|
||||
setCurrentWeek(week);
|
||||
}, []);
|
||||
|
||||
const toggleActivity = (activityId) => {
|
||||
setExpandedActivity(expandedActivity === activityId ? null : activityId);
|
||||
};
|
||||
|
||||
const getActivityTypeClass = (type) => {
|
||||
// Only apply color styling to clear activity categories
|
||||
switch (type) {
|
||||
case 'Föreläsning': return styles.lecture;
|
||||
case 'Lektion': return styles.lesson;
|
||||
case 'Handledning': return styles.guidance;
|
||||
case 'Redovisning': return styles.presentation;
|
||||
case 'Laboration': return styles.laboration;
|
||||
case 'Tentamen': return styles.exam;
|
||||
case 'Projektarbete': return styles.project;
|
||||
// Leave unclear/mixed categories without color styling
|
||||
case 'Introduktion':
|
||||
case 'Info':
|
||||
default:
|
||||
return ''; // No color styling
|
||||
}
|
||||
};
|
||||
|
||||
const formatDate = (dateString) => {
|
||||
const date = new Date(dateString);
|
||||
const today = new Date();
|
||||
const isToday = date.toDateString() === today.toDateString();
|
||||
|
||||
const options = {
|
||||
weekday: 'short',
|
||||
month: 'short',
|
||||
day: 'numeric'
|
||||
};
|
||||
|
||||
return {
|
||||
formatted: date.toLocaleDateString('sv-SE', options),
|
||||
isToday
|
||||
};
|
||||
};
|
||||
|
||||
const formatTitle = (title, type) => {
|
||||
// Format titles to be more meaningful while avoiding redundancy
|
||||
|
||||
// For lectures, show topic instead of number
|
||||
if (type === 'Föreläsning') {
|
||||
const lectureTopics = {
|
||||
'Föreläsning 1': 'Introduktion & UML',
|
||||
'Föreläsning 2': 'Syntetisk databasdesign',
|
||||
'Föreläsning 3': 'SQL I - Grundläggande',
|
||||
'Föreläsning 4': 'SQL II - Avancerat',
|
||||
'Föreläsning 5': 'Relationsalgebra',
|
||||
'Föreläsning 6': 'Normalisering',
|
||||
'Föreläsning 7': 'Databashanteringssystem',
|
||||
'Föreläsning 8': 'noSQL-ansatser',
|
||||
'Föreläsning 9': 'Embedded SQL',
|
||||
'Föreläsning 10': 'Exempeltentamen'
|
||||
};
|
||||
return lectureTopics[title] || title.replace('Föreläsning ', '');
|
||||
}
|
||||
|
||||
// For lessons, keep group info but make it clearer
|
||||
if (type === 'Lektion' && title.includes('grp')) {
|
||||
return title.replace('Lektion ', '').replace('grp', 'Grupp');
|
||||
}
|
||||
|
||||
// For guidance sessions, just show number
|
||||
if (type === 'Handledning') {
|
||||
return title.replace('Handledning ', '');
|
||||
}
|
||||
|
||||
// For presentations, keep group info
|
||||
if (type === 'Redovisning' && title.includes('grp')) {
|
||||
return title.replace('Redovisning ', '').replace('grp', 'Grupp');
|
||||
}
|
||||
|
||||
// For other activity types, remove the prefix
|
||||
const typeMap = {
|
||||
'Introduktion': 'Introduktion ',
|
||||
'Info': 'Info om ',
|
||||
'Laboration': 'Laboration',
|
||||
'Tentamen': 'Tentamen',
|
||||
'Projektarbete': 'Projektarbete'
|
||||
};
|
||||
|
||||
const prefix = typeMap[type];
|
||||
if (prefix && title.startsWith(prefix)) {
|
||||
return title.substring(prefix.length);
|
||||
}
|
||||
|
||||
return title;
|
||||
};
|
||||
|
||||
const ActivityCard = ({ activity, isExam = false }) => {
|
||||
const { formatted: formattedDate, isToday } = formatDate(activity.date);
|
||||
const isExpanded = expandedActivity === activity.id;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`${styles.activityCard} ${getActivityTypeClass(activity.type)} ${isToday ? styles.today : ''} ${activity.important ? styles.important : ''} ${activity.cancelled ? styles.cancelled : ''}`}
|
||||
onClick={() => toggleActivity(activity.id)}
|
||||
>
|
||||
<div className={styles.activityHeader}>
|
||||
<div className={styles.activityMeta}>
|
||||
<div className={styles.activityDate}>
|
||||
{formattedDate}
|
||||
{isToday && <span className={styles.todayBadge}>Idag</span>}
|
||||
</div>
|
||||
<div className={styles.activityTime}>{activity.time}</div>
|
||||
</div>
|
||||
<div className={styles.activityMain}>
|
||||
<h3 className={`${styles.activityTitle} ${getActivityTypeClass(activity.type)}`}>{activity.title}</h3>
|
||||
{activity.location && (
|
||||
<div className={styles.activityLocation}>📍 {activity.location}</div>
|
||||
)}
|
||||
</div>
|
||||
<div className={styles.expandIcon}>
|
||||
{isExpanded ? '−' : '+'}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{isExpanded && (
|
||||
<div className={styles.activityDetails}>
|
||||
<p className={styles.activityDescription}>{activity.description}</p>
|
||||
{activity.teacher && (
|
||||
<div className={styles.activityTeacher}>
|
||||
<strong>Lärare:</strong> {activity.teacher}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.pageContainer}>
|
||||
<div className={styles.header}>
|
||||
<h1 className={styles.courseTitle}>Databasmetodik</h1>
|
||||
<p className={styles.courseInfo}>DB HT2024 • 7,5 hp</p>
|
||||
<h1 className={styles.courseTitle}>Kursscheman</h1>
|
||||
<p className={styles.courseInfo}>Välj en kurs för att se dess schema</p>
|
||||
</div>
|
||||
|
||||
<div className={styles.content}>
|
||||
{/* Upcoming Exams */}
|
||||
<section className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>📅 Examinationer</h2>
|
||||
<div className={styles.activitiesList}>
|
||||
{examData.map((exam) => (
|
||||
<ActivityCard key={exam.id} activity={exam} isExam={true} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Schedule by weeks */}
|
||||
{scheduleData.map((weekData) => (
|
||||
<section key={weekData.week} className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>
|
||||
Vecka {weekData.week}
|
||||
{currentWeek === weekData.week && <span className={styles.currentWeekBadge}>Aktuell</span>}
|
||||
</h2>
|
||||
<div className={styles.activitiesList}>
|
||||
{weekData.activities.map((activity) => (
|
||||
<ActivityCard key={activity.id} activity={activity} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
))}
|
||||
|
||||
{/* Course Info */}
|
||||
<section className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>ℹ️ Kursinformation</h2>
|
||||
<div className={styles.courseInfoCard}>
|
||||
<p><strong>Kursansvarig:</strong> Ann Maria Dorotea Bergholtz</p>
|
||||
<p><strong>Omfattning:</strong> 7,5 högskolepoäng</p>
|
||||
<p><strong>Tentamen:</strong> 4 hp</p>
|
||||
<p><strong>Projektarbete:</strong> 3,5 hp</p>
|
||||
</div>
|
||||
</section>
|
||||
<div className={styles.coursesList}>
|
||||
{coursesData.map((course) => (
|
||||
<Link
|
||||
key={course.id}
|
||||
to={`/course-schedule/${course.id}`}
|
||||
className={styles.courseCard}
|
||||
>
|
||||
<div className={styles.courseCardHeader}>
|
||||
<div
|
||||
className={styles.courseColorIndicator}
|
||||
style={{ backgroundColor: course.color }}
|
||||
></div>
|
||||
<div className={styles.courseCardContent}>
|
||||
<h3 className={styles.courseCardTitle}>{course.title}</h3>
|
||||
<p className={styles.courseCardCode}>{course.code} • {course.credits}</p>
|
||||
<p className={styles.courseCardDescription}>{course.description}</p>
|
||||
<div className={styles.courseCardFooter}>
|
||||
<span className={styles.courseCardPeriod}>{course.period}</span>
|
||||
<span className={styles.courseCardCoordinator}>{course.coordinator}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.pageContainer {
|
||||
min-height: 100vh;
|
||||
background-color: #fafafa;
|
||||
background: linear-gradient(to bottom, #c5ccd4, #92a5b8);
|
||||
padding: 1rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
@@ -9,24 +9,27 @@
|
||||
margin-bottom: 2rem;
|
||||
text-align: center;
|
||||
padding: 1.5rem 1rem;
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
||||
background: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
border: 1px solid #999;
|
||||
border-radius: 10px;
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8), 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.courseTitle {
|
||||
font-size: 1.75rem;
|
||||
font-weight: 700;
|
||||
color: #1f2937;
|
||||
color: #000;
|
||||
margin: 0 0 0.5rem 0;
|
||||
font-family: 'The Sans', system-ui, sans-serif;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.courseInfo {
|
||||
color: #6b7280;
|
||||
color: #333;
|
||||
font-size: 0.95rem;
|
||||
margin: 0;
|
||||
font-weight: 500;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.content {
|
||||
@@ -35,34 +38,188 @@
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.section {
|
||||
.coursesList {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.courseCard {
|
||||
display: block;
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
|
||||
.courseCard:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.courseCardHeader {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 1rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.courseColorIndicator {
|
||||
width: 4px;
|
||||
height: 60px;
|
||||
border-radius: 2px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.courseCardContent {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.courseCardTitle {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: #1f2937;
|
||||
margin: 0 0 0.5rem 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.courseCardCode {
|
||||
color: #6b7280;
|
||||
font-size: 0.9rem;
|
||||
margin: 0 0 0.75rem 0;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.courseCardDescription {
|
||||
color: #4b5563;
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.4;
|
||||
margin: 0 0 1rem 0;
|
||||
}
|
||||
|
||||
.courseCardFooter {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.courseCardPeriod {
|
||||
color: #6b7280;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.courseCardCoordinator {
|
||||
color: #9ca3af;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
/* Day grouping styles */
|
||||
.dayGroup {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.dayGroup:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dayHeader {
|
||||
margin-bottom: 0.75rem;
|
||||
padding: 0 1.25rem;
|
||||
}
|
||||
|
||||
.dayTitle {
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.5rem 0;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.dayActivitiesList {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
padding: 0 1.25rem;
|
||||
}
|
||||
|
||||
.singleActivityWrapper {
|
||||
padding: 0 1.25rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
/* Day divider styles */
|
||||
.dayDivider {
|
||||
background: linear-gradient(to bottom, #e6e6e6, #d9d9d9);
|
||||
border-top: 1px solid #999;
|
||||
border-bottom: 1px solid #999;
|
||||
padding: 0.5rem 1.25rem;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.dayDivider:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.dayDividerText {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 600;
|
||||
color: #000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.todayIndicator {
|
||||
color: #4d90fe;
|
||||
font-weight: 500;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.section {
|
||||
background: #fff;
|
||||
border: 1px solid #999;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8), 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.sectionTitle {
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
padding: 1rem 1.25rem;
|
||||
background: #f9fafb;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
background: linear-gradient(to bottom, #f2f2f2, #d9d9d9);
|
||||
border-bottom: 1px solid #999;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.currentWeekBadge {
|
||||
background: #10b981;
|
||||
background: linear-gradient(to bottom, #4d90fe, #3e7ce0);
|
||||
color: white;
|
||||
font-size: 0.75rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
border-radius: 6px;
|
||||
font-weight: 500;
|
||||
border-radius: 10px;
|
||||
border: 1px solid #2d5aa0;
|
||||
font-weight: bold;
|
||||
margin-left: 0.5rem;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.activitiesList {
|
||||
@@ -72,14 +229,15 @@
|
||||
|
||||
.activityCard {
|
||||
padding: 1rem 1.25rem;
|
||||
border-bottom: 1px solid #f3f4f6;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.15s ease;
|
||||
position: relative;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.activityCard:hover {
|
||||
background-color: #f8fafc;
|
||||
background: linear-gradient(to bottom, #e8f0ff, #d0e2ff);
|
||||
}
|
||||
|
||||
.activityCard:last-child {
|
||||
@@ -161,10 +319,6 @@
|
||||
color: #111827;
|
||||
margin: 0 0 0.25rem 0;
|
||||
line-height: 1.3;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.activityLocation {
|
||||
@@ -223,51 +377,109 @@
|
||||
.lecture .activityTitle {
|
||||
background: #dbeafe;
|
||||
color: #1d4ed8;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.lesson .activityTitle {
|
||||
background: #dcfce7;
|
||||
color: #166534;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.guidance .activityTitle {
|
||||
background: #fef3c7;
|
||||
color: #b45309;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.presentation .activityTitle {
|
||||
background: #f3e8ff;
|
||||
color: #7c3aed;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.introduction .activityTitle {
|
||||
background: #e0f2fe;
|
||||
color: #0369a1;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.exam .activityTitle {
|
||||
background: #fee2e2;
|
||||
color: #dc2626;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.project .activityTitle {
|
||||
background: #f0fdf4;
|
||||
color: #15803d;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.info .activityTitle {
|
||||
background: #fef3c7;
|
||||
color: #b45309;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.laboration .activityTitle {
|
||||
background: #ecfdf5;
|
||||
color: #047857;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.workshop .activityTitle {
|
||||
background: #fef2f2;
|
||||
color: #dc2626;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.seminar .activityTitle {
|
||||
background: #f0f4ff;
|
||||
color: #3b82f6;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.default .activityTitle {
|
||||
background: #f1f5f9;
|
||||
color: #475569;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 6px;
|
||||
width: fit-content;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Responsive design */
|
||||
|
||||
232
my-app/src/pages/CourseScheduleView.jsx
Normal file
232
my-app/src/pages/CourseScheduleView.jsx
Normal file
@@ -0,0 +1,232 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useParams, Link } from 'react-router-dom';
|
||||
import styles from './CourseSchedule.module.css';
|
||||
import { coursesData } from '../data/coursesData';
|
||||
|
||||
export function CourseScheduleView() {
|
||||
const { courseId } = useParams();
|
||||
const [courseData, setCourseData] = useState(null);
|
||||
const [scheduleData, setScheduleData] = useState([]);
|
||||
const [examData, setExamData] = useState([]);
|
||||
const [courseInfo, setCourseInfo] = useState({});
|
||||
const [expandedActivity, setExpandedActivity] = useState(null);
|
||||
const [currentWeek, setCurrentWeek] = useState(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
const loadCourseData = async () => {
|
||||
const course = coursesData.find(c => c.id === courseId);
|
||||
if (!course) {
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
setCourseData(course);
|
||||
|
||||
try {
|
||||
const dataModule = await course.dataModule();
|
||||
setScheduleData(dataModule.scheduleData);
|
||||
setExamData(dataModule.examData);
|
||||
setCourseInfo(dataModule.courseInfo);
|
||||
} catch (error) {
|
||||
console.error('Failed to load course data:', error);
|
||||
}
|
||||
|
||||
setLoading(false);
|
||||
};
|
||||
|
||||
loadCourseData();
|
||||
|
||||
// Get current week number (simplified)
|
||||
const now = new Date();
|
||||
const week = Math.ceil(((now - new Date(now.getFullYear(), 0, 1)) / 86400000 + new Date(now.getFullYear(), 0, 1).getDay() + 1) / 7);
|
||||
setCurrentWeek(week);
|
||||
}, [courseId]);
|
||||
|
||||
const toggleActivity = (activityId) => {
|
||||
setExpandedActivity(expandedActivity === activityId ? null : activityId);
|
||||
};
|
||||
|
||||
const getActivityTypeClass = (type) => {
|
||||
// Only apply color styling to clear activity categories
|
||||
switch (type) {
|
||||
case 'Föreläsning': return styles.lecture;
|
||||
case 'Lektion': return styles.lesson;
|
||||
case 'Handledning': return styles.guidance;
|
||||
case 'Redovisning': return styles.presentation;
|
||||
case 'Laboration': return styles.laboration;
|
||||
case 'Tentamen': return styles.exam;
|
||||
case 'Projektarbete': return styles.project;
|
||||
case 'Workshop': return styles.workshop;
|
||||
case 'Seminarium': return styles.seminar;
|
||||
// Leave unclear/mixed categories without color styling
|
||||
case 'Introduktion':
|
||||
case 'Info':
|
||||
case 'Inlämningsuppgifter':
|
||||
default:
|
||||
return ''; // No color styling
|
||||
}
|
||||
};
|
||||
|
||||
const formatDate = (dateString) => {
|
||||
const date = new Date(dateString);
|
||||
const today = new Date();
|
||||
const isToday = date.toDateString() === today.toDateString();
|
||||
|
||||
const options = {
|
||||
weekday: 'short',
|
||||
month: 'short',
|
||||
day: 'numeric'
|
||||
};
|
||||
|
||||
return {
|
||||
formatted: date.toLocaleDateString('sv-SE', options),
|
||||
isToday
|
||||
};
|
||||
};
|
||||
|
||||
const ActivityCard = ({ activity, isExam = false, hideDayInfo = false }) => {
|
||||
const { formatted: formattedDate, isToday } = formatDate(activity.date);
|
||||
const isExpanded = expandedActivity === activity.id;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`${styles.activityCard} ${getActivityTypeClass(activity.type)} ${!hideDayInfo && isToday ? styles.today : ''} ${activity.important ? styles.important : ''} ${activity.cancelled ? styles.cancelled : ''}`}
|
||||
onClick={() => toggleActivity(activity.id)}
|
||||
>
|
||||
<div className={styles.activityHeader}>
|
||||
<div className={styles.activityMeta}>
|
||||
{!hideDayInfo && (
|
||||
<div className={styles.activityDate}>
|
||||
{formattedDate}
|
||||
{isToday && <span className={styles.todayBadge}>Idag</span>}
|
||||
</div>
|
||||
)}
|
||||
<div className={styles.activityTime}>{activity.time}</div>
|
||||
</div>
|
||||
<div className={styles.activityMain}>
|
||||
<h3 className={`${styles.activityTitle} ${getActivityTypeClass(activity.type)}`}>{activity.title}</h3>
|
||||
{activity.location && (
|
||||
<div className={styles.activityLocation}>📍 {activity.location}</div>
|
||||
)}
|
||||
</div>
|
||||
<div className={styles.expandIcon}>
|
||||
{isExpanded ? '−' : '+'}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{isExpanded && (
|
||||
<div className={styles.activityDetails}>
|
||||
<p className={styles.activityDescription}>{activity.description}</p>
|
||||
{activity.teacher && (
|
||||
<div className={styles.activityTeacher}>
|
||||
<strong>Lärare:</strong> {activity.teacher}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
if (loading) {
|
||||
return <div className={styles.pageContainer}>Loading...</div>;
|
||||
}
|
||||
|
||||
if (!courseData) {
|
||||
return (
|
||||
<div className={styles.pageContainer}>
|
||||
<div className={styles.notFound}>
|
||||
<h1>Course not found</h1>
|
||||
<Link to="/course-schedule">← Back to courses</Link>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={styles.pageContainer}>
|
||||
<div className={styles.header}>
|
||||
<div className={styles.backLink}>
|
||||
<Link to="/course-schedule">← Tillbaka till kurser</Link>
|
||||
</div>
|
||||
<h1 className={styles.courseTitle}>{courseInfo.title}</h1>
|
||||
<p className={styles.courseInfo}>{courseInfo.code} • {courseInfo.credits}</p>
|
||||
</div>
|
||||
|
||||
<div className={styles.content}>
|
||||
{/* Upcoming Exams */}
|
||||
{examData.length > 0 && (
|
||||
<section className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>📅 Examinationer</h2>
|
||||
<div className={styles.activitiesList}>
|
||||
{examData.map((exam) => (
|
||||
<ActivityCard key={exam.id} activity={exam} isExam={true} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
)}
|
||||
|
||||
{/* Schedule by weeks */}
|
||||
{scheduleData.map((weekData) => {
|
||||
// Group activities by date for day dividers
|
||||
const activitiesByDate = weekData.activities.reduce((acc, activity) => {
|
||||
const dateKey = activity.date;
|
||||
if (!acc[dateKey]) {
|
||||
acc[dateKey] = [];
|
||||
}
|
||||
acc[dateKey].push(activity);
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
// Sort dates chronologically
|
||||
const sortedDates = Object.keys(activitiesByDate).sort((a, b) => new Date(a) - new Date(b));
|
||||
|
||||
return (
|
||||
<section key={weekData.week} className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>
|
||||
Vecka {weekData.week}
|
||||
{currentWeek === weekData.week && <span className={styles.currentWeekBadge}>Aktuell</span>}
|
||||
</h2>
|
||||
<div className={styles.activitiesList}>
|
||||
{sortedDates.map((date, dateIndex) => {
|
||||
const { formatted: formattedDate, isToday } = formatDate(date);
|
||||
const dayActivities = activitiesByDate[date];
|
||||
|
||||
return (
|
||||
<div key={date}>
|
||||
<div className={styles.dayDivider}>
|
||||
<span className={styles.dayDividerText}>
|
||||
{formattedDate}
|
||||
{isToday && <span className={styles.todayIndicator}>• Idag</span>}
|
||||
</span>
|
||||
</div>
|
||||
{dayActivities.map((activity) => (
|
||||
<ActivityCard key={activity.id} activity={activity} hideDayInfo={true} />
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
})}
|
||||
|
||||
{/* Course Info */}
|
||||
<section className={styles.section}>
|
||||
<h2 className={styles.sectionTitle}>ℹ️ Kursinformation</h2>
|
||||
<div className={styles.courseInfoCard}>
|
||||
<p><strong>Kursansvarig:</strong> {courseInfo.coordinator}</p>
|
||||
<p><strong>Omfattning:</strong> {courseInfo.credits}</p>
|
||||
{courseInfo.examCredits && (
|
||||
<p><strong>Tentamen:</strong> {courseInfo.examCredits}</p>
|
||||
)}
|
||||
{courseInfo.projectCredits && (
|
||||
<p><strong>Projektarbete:</strong> {courseInfo.projectCredits}</p>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user