diff --git a/school/public/css/style.css b/school/public/css/style.css
index ffeda711..0f9fa6af 100644
--- a/school/public/css/style.css
+++ b/school/public/css/style.css
@@ -190,14 +190,6 @@ input[type=checkbox] {
}
}
-.courses-header {
- margin-bottom: 1.5rem;
- color: var(--text-color-dark);
- font-weight: 600;
- font-size: var(--text-3xl);
- letter-spacing: -0.0175em
-}
-
@media (min-width: 576px) and (max-width: 992px) {
.container {
padding-left: 1rem;
@@ -1376,3 +1368,16 @@ pre {
background-image: url("/assets/school/icons/blue-arrow.svg");
margin-left: 1.5rem;
}
+
+.search-course {
+ background-image: url(/assets/frappe/icons/timeless/search.svg);
+ border: 1px solid #C8CFD5;
+ box-sizing: border-box;
+ border-radius: 6px;
+ font-size: 0.75rem;
+ padding: 0.625rem 0.75rem;
+ height: 36px;
+ background-repeat: no-repeat;
+ text-indent: 1.5rem;
+ background-position: 1rem 0.65rem;
+}
diff --git a/school/templates/course_list.html b/school/templates/course_list.html
new file mode 100644
index 00000000..0b21160b
--- /dev/null
+++ b/school/templates/course_list.html
@@ -0,0 +1,12 @@
+
+ {% if courses | length %}
+
+ {{ title }}
+
+
+ {% for course in courses %}
+ {{ widgets.CourseCard(course=course, read_only=False) }}
+ {% endfor %}
+
+{% endif %}
+
diff --git a/school/templates/search_course/search_course.html b/school/templates/search_course/search_course.html
new file mode 100644
index 00000000..c4cc9402
--- /dev/null
+++ b/school/templates/search_course/search_course.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/school/templates/search_course/search_course.js b/school/templates/search_course/search_course.js
new file mode 100644
index 00000000..bc958522
--- /dev/null
+++ b/school/templates/search_course/search_course.js
@@ -0,0 +1,46 @@
+frappe.ready(() => {
+ $(".search-course").keyup((e) => {
+ search_course(e);
+ });
+});
+
+const search_course = (e) => {
+ let input = $(e.currentTarget).val();
+
+ if (input.length < 3 || input.trim() == "") {
+ $(".course-card").removeClass("hide");
+ $(".course-home-headings").parent().removeClass("hide");
+ $(".upcoming-courses").addClass("mt-10");
+ return;
+ }
+
+ frappe.call({
+ method: "school.lms.doctype.lms_course.lms_course.search_course",
+ args: {
+ "text": input
+ },
+ callback: (data) => {
+ render_course_list(data.message);
+ }
+ });
+};
+
+const render_course_list = (courses) => {
+ $(".course-card").addClass("hide");
+ for (course in courses) {
+ $("[data-course=" + courses[course].name + "]").removeClass("hide");
+ }
+
+ const visible_live_courses = $(".live-courses .course-card").not(".hide");
+ const visible_upcoming_courses = $(".upcoming-courses .course-card").not(".hide");
+
+ if (!visible_live_courses.length) {
+ $(".live-courses").addClass("hide");
+ $(".upcoming-courses").removeClass("mt-10");
+ }
+
+ if (!visible_upcoming_courses.length) {
+ $(".upcoming-courses").addClass("hide");
+ }
+}
+
diff --git a/school/www/courses/index.html b/school/www/courses/index.html
index 07d5b5e7..78843b7e 100644
--- a/school/www/courses/index.html
+++ b/school/www/courses/index.html
@@ -10,28 +10,19 @@
- {% if live_courses | length %}
-
-
- {% for course in live_courses %}
- {{ widgets.CourseCard(course=course, read_only=False) }}
- {% endfor %}
-
- {% endif %}
+ {% include "school/templates/search_course/search_course.html" %}
- {% if upcoming_courses | length %}
-
-
- {% for course in upcoming_courses %}
- {{ widgets.CourseCard(course=course, read_only=False) }}
- {% endfor %}
-
- {% endif %}
+
+ {% set title = _("Live Courses") %}
+ {% set courses = live_courses %}
+ {% set classes = "live-courses" %}
+ {% include "school/templates/course_list.html" %}
+ {% set title = _("Upcoming Courses") %}
+ {% set courses = upcoming_courses %}
+ {% set classes = "upcoming-courses mt-10" %}
+ {% include "school/templates/course_list.html" %}
+