1- // This model is representing our program logic.
2- // A certain model is bound to a specific session.
3-
41import { addCourse } from "../firebase" ;
52
63export const model = {
74 user : undefined ,
85 currentCourse : undefined ,
9- currentSearch : { } ,
6+ currentSearch : [ ] ,
107 courses : [ ] ,
8+ favourites : [ ] ,
119 isReady : false ,
1210
1311 // sets the current user
1412 setUser ( user ) {
1513 if ( ! this . user )
1614 this . user = user ;
1715 } ,
18-
16+
1917 // sets the currently selected course (detail view?) - could be component state
2018 setCurrentCourse ( course ) {
2119 this . currentCourse = course ;
2220 } ,
2321
2422 // keeps track of the current search / the associated promises.
25- setCurrentSearch ( search ) {
26- this . currentSearch = search ;
23+ setCurrentSearch ( searchResults ) {
24+ this . currentSearch = searchResults ;
2725 } ,
2826
2927 // sets the course array - for example after loading all courses from the DB
@@ -32,21 +30,23 @@ export const model = {
3230 } ,
3331
3432 // add a single course
35- // addCourse(course){
36- // this.courses = [...this.courses, course] // update local copy
37- // addCourse(course); // update firebase
38- // },
39-
4033 async addCourse ( course ) {
4134 try {
4235 await addCourse ( course ) ;
4336 this . courses = [ ...this . courses , course ] ;
44- console . log ( "Course added successfully." ) ;
4537 } catch ( error ) {
4638 console . error ( "Error adding course:" , error ) ;
4739 }
4840 } ,
4941
42+ addFavourite ( course ) {
43+ this . favourites = [ ...this . favourites , course ] ;
44+ } ,
45+
46+ removeFavourite ( course ) {
47+ this . favourites = ( this . favourites || [ ] ) . filter ( fav => fav . code !== course . code ) ;
48+ } ,
49+
5050 getCourse ( courseID ) {
5151 return this . courses . find ( course => course . code === courseID ) ;
5252 } ,
@@ -72,6 +72,14 @@ export const model = {
7272 } ;
7373 this . addCourse ( course ) ;
7474 } ) ;
75- }
76- }
75+ } ,
7776
77+ searchCourses ( query ) {
78+ const searchResults = this . courses . filter ( course =>
79+ course . code . toLowerCase ( ) === query . toLowerCase ( ) ||
80+ course . name . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ||
81+ course . description . toLowerCase ( ) . includes ( query . toLowerCase ( ) )
82+ ) ;
83+ this . setCurrentSearch ( searchResults ) ;
84+ }
85+ } ;
0 commit comments