+
{{ __('{0} Assignments').format(assignments.data?.length) }}
@@ -52,7 +52,7 @@
showAssignmentForm = true
},
}"
- class="h-[79vh] border-b"
+ class="h-[79vh] px-5"
>
-
-
+
+
+
+
diff --git a/frontend/src/pages/CertifiedParticipants.vue b/frontend/src/pages/CertifiedParticipants.vue
index f82f94d8..56b899cb 100644
--- a/frontend/src/pages/CertifiedParticipants.vue
+++ b/frontend/src/pages/CertifiedParticipants.vue
@@ -107,7 +107,9 @@
-
+
+
+
@@ -119,6 +134,7 @@ import {
Button,
Breadcrumbs,
call,
+ createListResource,
createResource,
FormControl,
TabButtons,
@@ -141,7 +157,6 @@ const searchQuery = ref('')
const country = ref(null)
const filters = ref({})
const orFilters = ref({})
-const jobCount = ref(0)
const closedJobs = ref(0)
const activeTab = ref('Open')
const readOnlyMode = window.read_only_mode
@@ -157,9 +172,7 @@ const isModerator = computed(() => {
})
const getClosedJobCount = () => {
- if (!user.data?.name) {
- return
- }
+ if (!user.data?.name) return
const filters = {
status: 'Closed',
@@ -177,6 +190,14 @@ const getClosedJobCount = () => {
})
}
+const jobCount = createResource({
+ url: 'frappe.client.get_count',
+ params: {
+ doctype: 'Job Opportunity',
+ filters: filters.value,
+ },
+})
+
const setFiltersFromURL = () => {
let queries = new URLSearchParams(location.search)
if (queries.has('type')) {
@@ -187,53 +208,53 @@ const setFiltersFromURL = () => {
}
}
-const tabs = computed(() => {
- const tabsArray = [
- {
- label: __('Open'),
- },
- ]
-
- if (closedJobs.value) {
- tabsArray.push({
- label: __('Closed'),
- })
- }
-
- return tabsArray
-})
-
-const jobs = createResource({
+const jobs = createListResource({
url: 'lms.lms.api.get_job_opportunities',
+ doctype: 'Job Opportunity',
+ start: 0,
cache: ['jobs'],
})
const updateJobs = () => {
updateFilters()
jobs.update({
- params: {
- filters: filters.value,
- orFilters: orFilters.value,
- },
+ filters: filters.value,
+ orFilters: orFilters.value,
})
jobs.reload()
+ jobCount.update({
+ filters: filters.value,
+ orFilters: orFilters.value,
+ })
+ jobCount.reload()
}
const updateFilters = () => {
filters.value.status = 'Open'
+ updateJobTypeFilter()
+ updateWorkModeFilter()
+ updateSearchQueryFilter()
+ updateCountryFilter()
+ updateTabFilter()
+}
+const updateJobTypeFilter = () => {
if (jobType.value && jobType.value !== ' ') {
filters.value.type = jobType.value
} else {
delete filters.value.type
}
+}
+const updateWorkModeFilter = () => {
if (workMode.value && workMode.value !== ' ') {
filters.value.work_mode = workMode.value
} else {
delete filters.value.work_mode
}
+}
+const updateSearchQueryFilter = () => {
if (searchQuery.value) {
orFilters.value = {
job_title: ['like', `%${searchQuery.value}%`],
@@ -243,13 +264,17 @@ const updateFilters = () => {
} else {
orFilters.value = {}
}
+}
+const updateCountryFilter = () => {
if (country.value) {
filters.value.country = country.value
} else {
delete filters.value.country
}
+}
+const updateTabFilter = () => {
if (activeTab.value === 'Closed') {
filters.value.status = 'Closed'
if (!isModerator.value) {
@@ -269,8 +294,20 @@ watch(country, (val) => {
updateJobs()
})
-watch(jobs, () => {
- jobCount.value = jobs.data?.length || 0
+const tabs = computed(() => {
+ const tabsArray = [
+ {
+ label: __('Open'),
+ },
+ ]
+
+ if (closedJobs.value) {
+ tabsArray.push({
+ label: __('Closed'),
+ })
+ }
+
+ return tabsArray
})
const jobTypes = computed(() => {
@@ -286,9 +323,9 @@ const jobTypes = computed(() => {
const workModes = computed(() => {
return [
{ label: ' ', value: ' ' },
- { label: 'On site', value: 'On-site' },
- { label: 'Hybrid', value: 'Hybrid' },
- { label: 'Remote', value: 'Remote' },
+ { label: __('On-site'), value: 'On-site' },
+ { label: __('Hybrid'), value: 'Hybrid' },
+ { label: __('Remote'), value: 'Remote' },
]
})
diff --git a/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue b/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue
index f9c43bf6..ecde7da9 100644
--- a/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue
+++ b/frontend/src/pages/ProgrammingExercises/ProgrammingExercises.vue
@@ -34,8 +34,8 @@