+
{{ __('This course has:') }}
diff --git a/frontend/src/components/CourseReviews.vue b/frontend/src/components/CourseReviews.vue
index 6900d832..04a39bf2 100644
--- a/frontend/src/components/CourseReviews.vue
+++ b/frontend/src/components/CourseReviews.vue
@@ -80,7 +80,7 @@ const props = defineProps({
required: true,
},
membership: {
- type: Object,
+ type: Object || null,
required: false,
},
})
diff --git a/frontend/src/pages/Courses/CourseOverview.vue b/frontend/src/pages/Courses/CourseOverview.vue
index a2759c07..a2a987ad 100644
--- a/frontend/src/pages/Courses/CourseOverview.vue
+++ b/frontend/src/pages/Courses/CourseOverview.vue
@@ -76,7 +76,7 @@
From 8453226f29098a12c4066ac05c9881d92409220e Mon Sep 17 00:00:00 2001
From: raizasafeel <89463672+raizasafeel@users.noreply.github.com>
Date: Tue, 17 Feb 2026 11:36:31 +0530
Subject: [PATCH 19/21] fix: add vimeo emded URL to extract hash properly
---
frontend/src/utils/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js
index 225eafb7..f560d061 100644
--- a/frontend/src/utils/index.js
+++ b/frontend/src/utils/index.js
@@ -170,7 +170,8 @@ export function getEditorTools() {
},
vimeo: {
regex: /^(?:http[s]?:\/\/)?(?:www\.)?vimeo\.com\/(\d+)(?:\/([a-zA-Z0-9]+))?(?:\?[^\s]*)?$/,
- embedUrl: '<%= remote_id %>',
+ embedUrl:
+ 'https://player.vimeo.com/video/<%= remote_id %>',
html: `
`,
id: ([id, hash]) => (hash ? `${id}?h=${hash}` : id),
},
From 919904a7f11af91e07ee54be6c26323fc736d904 Mon Sep 17 00:00:00 2001
From: Jannat Patel
Date: Tue, 17 Feb 2026 12:05:40 +0530
Subject: [PATCH 20/21] refactor: autocomplete component
---
.../src/components/Controls/Autocomplete.vue | 101 +++++++-----------
frontend/src/components/Controls/Link.vue | 4 +-
2 files changed, 42 insertions(+), 63 deletions(-)
diff --git a/frontend/src/components/Controls/Autocomplete.vue b/frontend/src/components/Controls/Autocomplete.vue
index 0a1616bf..12faa1e3 100644
--- a/frontend/src/components/Controls/Autocomplete.vue
+++ b/frontend/src/components/Controls/Autocomplete.vue
@@ -5,54 +5,30 @@
{{ __(label) }}
*
-
-
+
-
-
-
-
- {{ displayValue(selectedValue) }}
-
-
- {{ placeholder || '' }}
-
-
-
-
+ type="text"
+ :value="selectedValue"
+ autocomplete="off"
+ @click="onFocus"
+ />
+
-
-
- (query = e.target.value)"
- autocomplete="off"
- placeholder="Search"
- />
-
-
-
-
-
+
@@ -117,7 +99,7 @@ import {
ComboboxOption,
ComboboxButton,
} from '@headlessui/vue'
-import { ref, computed, useAttrs, useSlots, watch } from 'vue'
+import { ref, computed, useAttrs, useSlots, watch, nextTick } from 'vue'
import { ChevronDown, X } from 'lucide-vue-next'
import { watchDebounced } from '@vueuse/core'
@@ -157,18 +139,17 @@ const props = defineProps({
})
const emit = defineEmits(['update:modelValue', 'update:query', 'change'])
-
+const trigger = ref(null)
+const search = ref(null)
const attrs = useAttrs()
const slots = useSlots()
const selectedValue = ref(props.modelValue)
const query = ref('')
-
const valuePropPassed = computed(() => 'value' in attrs)
watch(selectedValue, (val) => {
- if (!val?.value) return
query.value = ''
- console.log('Selected value changed:', val)
+ console.log(val)
emit(valuePropPassed.value ? 'change' : 'update:modelValue', val)
})
@@ -202,18 +183,6 @@ function filterOptions(options) {
)
}
-function displayValue(option) {
- if (!option) return ''
-
- if (typeof option === 'string') {
- const flat = groups.value.flatMap((g) => g.items)
- const match = flat.find((o) => o.value === option)
- return match?.label || option
- }
-
- return option.label
-}
-
watchDebounced(
query,
(val) => {
@@ -222,6 +191,18 @@ watchDebounced(
{ debounce: 300 }
)
+const onFocus = () => {
+ trigger.value?.$el.click()
+ nextTick(() => {
+ search.value?.focus()
+ })
+}
+
+const close = () => {
+ selectedValue.value = null
+ trigger.value?.$el.click()
+}
+
const textColor = computed(() =>
props.disabled ? 'text-ink-gray-5' : 'text-ink-gray-8'
)
diff --git a/frontend/src/components/Controls/Link.vue b/frontend/src/components/Controls/Link.vue
index 91175399..a84cea4f 100644
--- a/frontend/src/components/Controls/Link.vue
+++ b/frontend/src/components/Controls/Link.vue
@@ -94,10 +94,8 @@ const valuePropPassed = computed(() => 'value' in attrs)
const value = computed({
get: () => (valuePropPassed.value ? attrs.value : props.modelValue),
set: (val) => {
- console.log('Setting value to:', val)
return (
- val?.value &&
- emit(valuePropPassed.value ? 'change' : 'update:modelValue', val?.value)
+ val && emit(valuePropPassed.value ? 'change' : 'update:modelValue', val)
)
},
})
From d83f3464cd4d71184408e7b3463ab9e89e83cd62 Mon Sep 17 00:00:00 2001
From: Jannat Patel
Date: Tue, 17 Feb 2026 13:35:15 +0530
Subject: [PATCH 21/21] fix: permission issue when cancelling evaluation
---
cypress/e2e/batch_creation.cy.js | 8 ++++++--
frontend/src/components/Modals/StudentModal.vue | 1 -
frontend/src/components/UpcomingEvaluations.vue | 15 ++++++++++-----
lms/lms/api.py | 1 +
lms/patches/v2_0/share_enrollment.py | 2 +-
5 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/cypress/e2e/batch_creation.cy.js b/cypress/e2e/batch_creation.cy.js
index 4f48bf70..653a70a2 100644
--- a/cypress/e2e/batch_creation.cy.js
+++ b/cypress/e2e/batch_creation.cy.js
@@ -162,8 +162,12 @@ describe("Batch Creation", () => {
/* Add student to batch */
cy.get("button").contains("Students").click();
cy.get("button").contains("Add").click();
- cy.get('div[role="dialog"]').first().find("button").eq(1).click();
- cy.get("input[id^='headlessui-combobox-input-v-']").type(randomEmail);
+ cy.get('div[role="dialog"]')
+ .first()
+ .find("input[id^='headlessui-combobox-input-v-']")
+ .first()
+ .click();
+ cy.get("input[placeholder='Search']").type(randomEmail);
cy.get("div").contains(randomEmail).click();
cy.get("button").contains("Submit").click();
diff --git a/frontend/src/components/Modals/StudentModal.vue b/frontend/src/components/Modals/StudentModal.vue
index 5c9c7b97..73070b8d 100644
--- a/frontend/src/components/Modals/StudentModal.vue
+++ b/frontend/src/components/Modals/StudentModal.vue
@@ -18,7 +18,6 @@