From 235e0314089c76edd13050d1d4bfa1409a814e73 Mon Sep 17 00:00:00 2001 From: Jacob Smith Date: Fri, 15 May 2026 10:51:04 -0700 Subject: [PATCH 1/2] AB#33047 collapse dismissed AI analysis sections --- .../Pages/GrantApplications/ai-analysis.js | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js index 322acadab..c708ff907 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js @@ -164,21 +164,37 @@ function configureSectionStatus($status, text, statusClass) { .show(); } -function configureCollapseToggle($section, $collapseToggle) { +function setSectionCollapsed($section, $collapseToggle, isCollapsed) { const labels = getAnalysisLabels(); + const $icon = $collapseToggle.find('i'); + + $section.toggleClass('collapsed', isCollapsed); + $collapseToggle + .attr('aria-expanded', (!isCollapsed).toString()) + .attr('title', isCollapsed ? labels.expandTitle : labels.collapseTitle); + + $icon + .toggleClass('fa-chevron-down', !isCollapsed) + .toggleClass('fa-chevron-up', isCollapsed); +} + +function syncSectionCollapseWithVisibleItems($section, $items, $collapseToggle) { + const hasVisibleItems = $items + .children('.ai-analysis-detail-item') + .filter(function() { + return this.style.display !== 'none'; + }) + .length > 0; + + setSectionCollapsed($section, $collapseToggle, !hasVisibleItems); +} + +function configureCollapseToggle($section, $collapseToggle) { $collapseToggle .off('click') .on('click', function() { const isCollapsed = $section.toggleClass('collapsed').hasClass('collapsed'); - const $icon = $(this).find('i'); - - $(this) - .attr('aria-expanded', (!isCollapsed).toString()) - .attr('title', isCollapsed ? labels.expandTitle : labels.collapseTitle); - - $icon - .toggleClass('fa-chevron-down', !isCollapsed) - .toggleClass('fa-chevron-up', isCollapsed); + setSectionCollapsed($section, $(this), isCollapsed); }); } @@ -214,7 +230,7 @@ function appendSectionItems($items, section, isDismissedVisible) { updateVisibleItemLayout($items); } -function configureDismissedItemsToggle($items, $toggle, section, isDismissedVisible) { +function configureDismissedItemsToggle($section, $items, $toggle, $collapseToggle, section, isDismissedVisible) { const labels = getAnalysisLabels(); const hiddenCount = section.hiddenItems.length; @@ -239,6 +255,7 @@ function configureDismissedItemsToggle($items, $toggle, section, isDismissedVisi dismissedSectionVisibility[section.itemType] = shouldShow; $items.find('.dismissed-item').toggle(shouldShow); updateVisibleItemLayout($items); + syncSectionCollapseWithVisibleItems($section, $items, $collapseToggle); $toggle.text(shouldShow ? labels.hideDismissed : labels.showDismissed); }); } @@ -250,7 +267,6 @@ function renderSection(section) { $section .addClass(section.sectionClass) - .toggleClass('compact', section.activeItems.length === 0) .toggleClass('header-only', !section.hasItems); const $items = $section.find('[data-element="items"]'); @@ -264,7 +280,8 @@ function renderSection(section) { $collapseToggle.toggle(section.hasItems); appendSectionItems($items, section, isDismissedVisible); - configureDismissedItemsToggle($items, $toggle, section, isDismissedVisible); + configureDismissedItemsToggle($section, $items, $toggle, $collapseToggle, section, isDismissedVisible); + syncSectionCollapseWithVisibleItems($section, $items, $collapseToggle); return $section; } From 113cd56c12450d0a1f30b45ab01dc7790523f985 Mon Sep 17 00:00:00 2001 From: Jacob Smith Date: Fri, 15 May 2026 11:30:15 -0700 Subject: [PATCH 2/2] AB#33047 collapse dismissed AI analysis sections --- .../Pages/GrantApplications/Details.css | 11 +++++---- .../Pages/GrantApplications/ai-analysis.js | 24 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.css b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.css index 790e48491..9adb01aaf 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.css +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.css @@ -538,11 +538,6 @@ form label.error { line-height: 1.6; } -.ai-analysis-section.compact .ai-analysis-section-body { - padding-top: 10px; - padding-bottom: 10px; -} - .ai-analysis-section.header-only .ai-analysis-section-body { display: none; } @@ -645,6 +640,12 @@ form label.error { background-color: #eef2f6; } +.ai-analysis-collapse-toggle:disabled { + color: #9ca3af; + cursor: default; + pointer-events: none; +} + .ai-analysis-collapse-toggle:focus, .ai-analysis-collapse-toggle:focus-visible { outline: none; diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js index c708ff907..cdadaff88 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/ai-analysis.js @@ -134,14 +134,20 @@ function createFindingItem(item, type, hidden) { function updateVisibleItemLayout($items) { const $allItems = $items.children('.ai-analysis-detail-item'); - const $visibleItems = $allItems.filter(function() { - return this.style.display !== 'none'; - }); + const $visibleItems = getVisibleAnalysisItems($items); $allItems.removeClass('last-visible'); $visibleItems.last().addClass('last-visible'); } +function getVisibleAnalysisItems($items) { + return $items + .children('.ai-analysis-detail-item') + .filter(function() { + return this.style.display !== 'none'; + }); +} + function formatSectionTitle(title, count) { return `${title} (${count})`; } @@ -179,13 +185,9 @@ function setSectionCollapsed($section, $collapseToggle, isCollapsed) { } function syncSectionCollapseWithVisibleItems($section, $items, $collapseToggle) { - const hasVisibleItems = $items - .children('.ai-analysis-detail-item') - .filter(function() { - return this.style.display !== 'none'; - }) - .length > 0; + const hasVisibleItems = getVisibleAnalysisItems($items).length > 0; + $collapseToggle.prop('disabled', !hasVisibleItems); setSectionCollapsed($section, $collapseToggle, !hasVisibleItems); } @@ -193,6 +195,10 @@ function configureCollapseToggle($section, $collapseToggle) { $collapseToggle .off('click') .on('click', function() { + if ($(this).prop('disabled')) { + return; + } + const isCollapsed = $section.toggleClass('collapsed').hasClass('collapsed'); setSectionCollapsed($section, $(this), isCollapsed); });