From f22e7139684e174ddf6b1e0753f6837fcad42673 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 12 Apr 2026 11:52:23 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20review=20issues=20=E2=80=94=20import=20s?= =?UTF-8?q?ize=20limit,=20aria=20labels,=20CSS=20vars,=20Set=20reactivity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/ResumeLibraryCard.vue | 22 ++++++------- web/src/components/ResumeOptimizerPanel.vue | 30 ++++++++++-------- web/src/components/ResumeReviewModal.vue | 3 +- web/src/views/ResumesView.vue | 34 ++++++++++----------- 4 files changed, 48 insertions(+), 41 deletions(-) diff --git a/web/src/components/ResumeLibraryCard.vue b/web/src/components/ResumeLibraryCard.vue index 829d9e4..00dc33d 100644 --- a/web/src/components/ResumeLibraryCard.vue +++ b/web/src/components/ResumeLibraryCard.vue @@ -89,8 +89,8 @@ onMounted(load) diff --git a/web/src/components/ResumeOptimizerPanel.vue b/web/src/components/ResumeOptimizerPanel.vue index 57e762c..e076ac0 100644 --- a/web/src/components/ResumeOptimizerPanel.vue +++ b/web/src/components/ResumeOptimizerPanel.vue @@ -425,32 +425,38 @@ async function runFullRewrite() { } function toggleGap(term: string) { - if (selectedGaps.value.has(term)) selectedGaps.value.delete(term) - else selectedGaps.value.add(term) + const next = new Set(selectedGaps.value) + if (next.has(term)) next.delete(term) + else next.add(term) + selectedGaps.value = next } function toggleSkill(skill: string) { - if (approvedSkills.value.has(skill)) { + const nextSkills = new Set(approvedSkills.value) + const nextFramings = new Map(skillFramings.value) + if (nextSkills.has(skill)) { // Unchecking: move to framing state, defaulting to 'skip' - approvedSkills.value.delete(skill) - if (!skillFramings.value.has(skill)) { - skillFramings.value.set(skill, { mode: 'skip', context: '' }) + nextSkills.delete(skill) + if (!nextFramings.has(skill)) { + nextFramings.set(skill, { mode: 'skip', context: '' }) } } else { // Re-checking: back to approved, remove framing - approvedSkills.value.add(skill) - skillFramings.value.delete(skill) + nextSkills.add(skill) + nextFramings.delete(skill) } + approvedSkills.value = nextSkills + skillFramings.value = nextFramings } function setFramingMode(skill: string, mode: GapFramingMode) { - const existing = skillFramings.value.get(skill) ?? { mode: 'skip', context: '' } - skillFramings.value.set(skill, { ...existing, mode }) + const existing = skillFramings.value.get(skill) ?? { mode: 'skip' as GapFramingMode, context: '' } + skillFramings.value = new Map(skillFramings.value).set(skill, { ...existing, mode }) } function setFramingContext(skill: string, context: string) { - const existing = skillFramings.value.get(skill) ?? { mode: 'skip', context: '' } - skillFramings.value.set(skill, { ...existing, context }) + const existing = skillFramings.value.get(skill) ?? { mode: 'skip' as GapFramingMode, context: '' } + skillFramings.value = new Map(skillFramings.value).set(skill, { ...existing, context }) } async function handleReviewSubmit(decisions: Record) { diff --git a/web/src/components/ResumeReviewModal.vue b/web/src/components/ResumeReviewModal.vue index a5f9eb1..6fe07cb 100644 --- a/web/src/components/ResumeReviewModal.vue +++ b/web/src/components/ResumeReviewModal.vue @@ -22,6 +22,7 @@ v-for="(page, idx) in pages" :key="page.id" role="tab" + :id="`rrm-tab-${page.id}`" :aria-selected="idx === currentIdx" :aria-controls="`rrm-panel-${page.id}`" class="rrm__tab" @@ -43,7 +44,7 @@ :id="`rrm-panel-${currentPage.id}`" class="rrm__content" role="tabpanel" - :aria-labelledby="`rrm-title-${jobId}`" + :aria-labelledby="`rrm-tab-${currentPage.id}`" >