mirror of
https://github.com/frappe/lms.git
synced 2026-05-02 13:39:31 +03:00
Merge branch 'frappe:develop' into fix/loading-state
This commit is contained in:
+14
-20
@@ -32,7 +32,7 @@
|
||||
>
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="text-lg font-semibold text-ink-gray-9 md:mb-0">
|
||||
{{ __('{0} {1} Jobs').format(totalJobs, activeTab) }}
|
||||
{{ __('{0} {1} Jobs').format(jobCount.data ?? 0, activeTab) }}
|
||||
</div>
|
||||
<TabButtons
|
||||
v-if="tabs.length > 1"
|
||||
@@ -123,7 +123,7 @@
|
||||
<div v-if="jobs.hasNextPage" class="h-8 border-s"></div>
|
||||
<div class="text-ink-gray-5">
|
||||
{{ jobs.data?.length }} {{ __('of') }}
|
||||
{{ totalJobs }}
|
||||
{{ jobCount.data ?? 0 }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -160,7 +160,6 @@ const orFilters = ref({})
|
||||
const closedJobs = ref(0)
|
||||
const activeTab = ref('Open')
|
||||
const readOnlyMode = window.read_only_mode
|
||||
const totalJobs = ref(0)
|
||||
|
||||
onMounted(() => {
|
||||
getClosedJobCount()
|
||||
@@ -191,6 +190,17 @@ const getClosedJobCount = () => {
|
||||
})
|
||||
}
|
||||
|
||||
const jobCount = createResource({
|
||||
url: 'lms.lms.api.get_job_opportunities_count',
|
||||
cache: ['jobCount'],
|
||||
makeParams() {
|
||||
return {
|
||||
filters: filters.value,
|
||||
or_filters: orFilters.value,
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const setFiltersFromURL = () => {
|
||||
let queries = new URLSearchParams(location.search)
|
||||
if (queries.has('type')) {
|
||||
@@ -207,10 +217,6 @@ const jobs = createListResource({
|
||||
start: 0,
|
||||
cache: ['jobs'],
|
||||
pageLength: 40,
|
||||
transform(data) {
|
||||
totalJobs.value = data.total
|
||||
return data.jobs
|
||||
},
|
||||
})
|
||||
|
||||
const updateJobs = () => {
|
||||
@@ -220,6 +226,7 @@ const updateJobs = () => {
|
||||
orFilters: orFilters.value,
|
||||
})
|
||||
jobs.reload()
|
||||
jobCount.reload()
|
||||
}
|
||||
|
||||
const updateFilters = () => {
|
||||
@@ -228,7 +235,6 @@ const updateFilters = () => {
|
||||
updateWorkModeFilter()
|
||||
updateSearchQueryFilter()
|
||||
updateCountryFilter()
|
||||
updateTabFilter()
|
||||
}
|
||||
|
||||
const updateJobTypeFilter = () => {
|
||||
@@ -267,18 +273,6 @@ const updateCountryFilter = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const updateTabFilter = () => {
|
||||
if (activeTab.value === 'Closed') {
|
||||
filters.value.status = 'Closed'
|
||||
if (!isModerator.value) {
|
||||
filters.value.owner = user.data?.name
|
||||
}
|
||||
} else {
|
||||
filters.value.status = 'Open'
|
||||
delete filters.value.owner
|
||||
}
|
||||
}
|
||||
|
||||
watch(activeTab, (val) => {
|
||||
updateJobs()
|
||||
})
|
||||
|
||||
+21
-8
@@ -231,14 +231,24 @@ def get_job_details(job: str):
|
||||
)
|
||||
|
||||
|
||||
def sanitize_job_filters(filters, or_filters):
|
||||
ALLOWED_FILTERS = ("status", "type", "work_mode", "country")
|
||||
ALLOWED_OR_FILTERS = ("job_title", "company_name", "location")
|
||||
|
||||
filters = {f: v for f, v in (filters or {}).items() if f in ALLOWED_FILTERS}
|
||||
or_filters = {f: v for f, v in (or_filters or {}).items() if f in ALLOWED_OR_FILTERS}
|
||||
|
||||
if filters.get("status") == "Closed" and "Moderator" not in frappe.get_roles():
|
||||
filters["owner"] = frappe.session.user
|
||||
|
||||
return filters, or_filters
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_job_opportunities(
|
||||
filters: dict = None, or_filters: dict = None, start: int = 0, page_length: int = 40
|
||||
):
|
||||
if not filters:
|
||||
filters = {}
|
||||
|
||||
total_jobs = frappe.db.count("Job Opportunity", filters, or_filters)
|
||||
filters, or_filters = sanitize_job_filters(filters, or_filters)
|
||||
|
||||
jobs = frappe.get_all(
|
||||
"Job Opportunity",
|
||||
@@ -264,10 +274,13 @@ def get_job_opportunities(
|
||||
for job in jobs:
|
||||
job.description = frappe.utils.strip_html_tags(job.description)
|
||||
job.applicants = frappe.db.count("LMS Job Application", {"job": job.name})
|
||||
return {
|
||||
"jobs": jobs,
|
||||
"total": total_jobs,
|
||||
}
|
||||
return jobs
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_job_opportunities_count(filters: dict = None, or_filters: dict = None):
|
||||
filters, or_filters = sanitize_job_filters(filters, or_filters)
|
||||
return frappe.db.count("Job Opportunity", filters, or_filters)
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
|
||||
+199
-192
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user