diff --git a/frontend/src/components/CourseCard.vue b/frontend/src/components/CourseCard.vue index 36e7c4e8..d1093cc2 100644 --- a/frontend/src/components/CourseCard.vue +++ b/frontend/src/components/CourseCard.vue @@ -62,7 +62,7 @@ - {{ course.enrollments }} + {{ formatAmount(course.enrollments) }} @@ -116,27 +116,30 @@ -
- {{ course.price }} -
+
+
+ {{ course.price }} +
- - - + + + +
diff --git a/frontend/src/pages/JobDetail.vue b/frontend/src/pages/JobDetail.vue index dea21e94..9df6ffc5 100644 --- a/frontend/src/pages/JobDetail.vue +++ b/frontend/src/pages/JobDetail.vue @@ -20,6 +20,17 @@ v-if="user.data?.name && !readOnlyMode" class="flex items-center space-x-2" > + + +
-
+
{{ __('Job Details') }}
@@ -59,7 +59,7 @@
-
+
{{ __('Company Details') }}
@@ -158,7 +158,7 @@ import { computed, onMounted, reactive, inject } from 'vue' import { FileText, X } from 'lucide-vue-next' import { sessionStore } from '@/stores/session' import { useRouter } from 'vue-router' -import { getFileSize, validateFile } from '@/utils' +import { escapeHTML, getFileSize, validateFile } from '@/utils' const user = inject('$user') const router = useRouter() @@ -248,6 +248,7 @@ onMounted(() => { }) const saveJob = () => { + validateJobFields() if (jobDetail.data) { editJobDetails() } else { @@ -293,6 +294,14 @@ const editJobDetails = () => { ) } +const validateJobFields = () => { + Object.keys(job).forEach((key) => { + if (key != 'description' && typeof job[key] === 'string') { + job[key] = escapeHTML(job[key]) + } + }) +} + const saveImage = (file) => { job.image = file } diff --git a/frontend/src/pages/LessonForm.vue b/frontend/src/pages/LessonForm.vue index 812ee164..b3a3f8a8 100644 --- a/frontend/src/pages/LessonForm.vue +++ b/frontend/src/pages/LessonForm.vue @@ -142,7 +142,6 @@ const renderEditor = (holder) => { return new EditorJS({ holder: holder, tools: getEditorTools(true), - autofocus: true, defaultBlock: 'markdown', onChange: async (api, event) => { enablePlyr() diff --git a/frontend/src/pages/Profile.vue b/frontend/src/pages/Profile.vue index 2b2faf19..e0dc20da 100644 --- a/frontend/src/pages/Profile.vue +++ b/frontend/src/pages/Profile.vue @@ -124,19 +124,13 @@ const props = defineProps({ onMounted(() => { if ($user.data) profile.reload() - setActiveTab() }) const profile = createResource({ - url: 'frappe.client.get', - makeParams(values) { - return { - doctype: 'User', - filters: { - username: props.username, - }, - } + url: 'lms.lms.api.get_profile_details', + params: { + username: props.username, }, }) @@ -194,17 +188,18 @@ const isSessionUser = () => { return $user.data?.email === profile.data?.email } +const hasHigherAccess = () => { + return $user.data?.is_evaluator || $user.data?.is_moderator +} + const getTabButtons = () => { let buttons = [{ label: 'About' }, { label: 'Certificates' }] if ($user.data?.is_moderator) buttons.push({ label: 'Roles' }) - if ( - isSessionUser() && - ($user.data?.is_evaluator || $user.data?.is_moderator) - ) { + + if (hasHigherAccess()) { buttons.push({ label: 'Slots' }) buttons.push({ label: 'Schedule' }) } - return buttons } diff --git a/frontend/src/pages/ProfileEvaluationSchedule.vue b/frontend/src/pages/ProfileEvaluationSchedule.vue index 02847f49..6efc257e 100644 --- a/frontend/src/pages/ProfileEvaluationSchedule.vue +++ b/frontend/src/pages/ProfileEvaluationSchedule.vue @@ -36,7 +36,7 @@
- +