58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
|
|
import {
|
||
|
|
maxSelectedSkillClubPercent,
|
||
|
|
moduleSkillSummaryKey,
|
||
|
|
summaryHasSkill,
|
||
|
|
} from './skillProfileListHelpers'
|
||
|
|
|
||
|
|
export const EMPTY_TRAINING_MODULE_FILTERS = {
|
||
|
|
query: '',
|
||
|
|
skillIds: [],
|
||
|
|
skillSort: 'title',
|
||
|
|
skillMinClubPercent: 0,
|
||
|
|
skillDisplayLimit: 12,
|
||
|
|
}
|
||
|
|
|
||
|
|
export function hasActiveTrainingModuleFilters(filters = {}) {
|
||
|
|
const f = { ...EMPTY_TRAINING_MODULE_FILTERS, ...filters }
|
||
|
|
if ((f.query || '').trim()) return true
|
||
|
|
if ((f.skillIds || []).length) return true
|
||
|
|
if (Number(f.skillMinClubPercent) > 0) return true
|
||
|
|
if (f.skillSort === 'skill_strength' && (f.skillIds || []).length) return true
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
export function filterTrainingModules(rows, filters = {}, skillSummaries = null) {
|
||
|
|
const f = { ...EMPTY_TRAINING_MODULE_FILTERS, ...filters }
|
||
|
|
const q = (f.query || '').trim().toLowerCase()
|
||
|
|
const skillIds = f.skillIds || []
|
||
|
|
const minClubPct = Number(f.skillMinClubPercent) || 0
|
||
|
|
|
||
|
|
let list = (rows || []).filter((r) => {
|
||
|
|
if (q) {
|
||
|
|
const blob = [r.title, r.summary].filter(Boolean).join(' ').toLowerCase()
|
||
|
|
if (!blob.includes(q)) return false
|
||
|
|
}
|
||
|
|
return true
|
||
|
|
})
|
||
|
|
|
||
|
|
if (skillIds.length && skillSummaries) {
|
||
|
|
list = list.filter((r) => {
|
||
|
|
const summary = skillSummaries[moduleSkillSummaryKey(r.id)]
|
||
|
|
if (!summary) return false
|
||
|
|
return skillIds.some((sid) => summaryHasSkill(summary, sid, minClubPct))
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
if (f.skillSort === 'skill_strength' && skillIds.length && skillSummaries) {
|
||
|
|
list = [...list].sort((a, b) => {
|
||
|
|
const sa = skillSummaries[moduleSkillSummaryKey(a.id)]
|
||
|
|
const sb = skillSummaries[moduleSkillSummaryKey(b.id)]
|
||
|
|
const pa = maxSelectedSkillClubPercent(sa, skillIds) ?? -1
|
||
|
|
const pb = maxSelectedSkillClubPercent(sb, skillIds) ?? -1
|
||
|
|
return pb - pa
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
return list
|
||
|
|
}
|