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 }