Merge branch 'frappe:develop' into fix/loading-state

This commit is contained in:
Raizaaa
2026-04-22 23:52:28 +05:30
3 changed files with 234 additions and 220 deletions
+14 -20
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff