ATLAS-5324: Enhance Collapsed Sidebar with Module Icons, Interactive Tree Tooltips, and Active State Markers - #688
Open
Brijesh619 wants to merge 23 commits into
Open
ATLAS-5324: Enhance Collapsed Sidebar with Module Icons, Interactive Tree Tooltips, and Active State Markers#688Brijesh619 wants to merge 23 commits into
Brijesh619 wants to merge 23 commits into
Conversation
Contributor
Author
Contributor
Author
pawarprasad123
self-requested a review
July 8, 2026 06:59
Brijesh619
force-pushed
the
ATLAS-5324
branch
3 times, most recently
from
July 8, 2026 13:49
fdc0a62 to
95130fa
Compare
Contributor
Author
Contributor
Author
Contributor
Author
|
CC. @mneethiraj |
Contributor
Author
Contributor
Author
Contributor
Author
Contributor
Author
Brijesh619
force-pushed
the
ATLAS-5324
branch
2 times, most recently
from
September 10, 2026 15:16
3d3004e to
506dd63
Compare
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
…Tree Tooltips, and Active State Markers
Brijesh619
force-pushed
the
ATLAS-5324
branch
from
September 11, 2026 09:05
506dd63 to
7d46b2b
Compare
Contributor
Author
…Tree Tooltips, and Active State Markers
Brijesh619
force-pushed
the
ATLAS-5324
branch
from
September 11, 2026 10:24
7d46b2b to
927e614
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.













What changes were proposed in this pull request?
This PR significantly enhances the user experience of the collapsed navigation sidebar by introducing interactive module icons and sleek popover trees. This allows users to access complex navigation (like Business Metadata, Glossary, etc.) without fully expanding the main sidebar, preserving valuable screen real-estate for the main dashboard.
Additionally, it introduces several critical layout stability, styling, strict-typing, and rendering optimizations to ensure these interactions feel instant, seamless, and production-ready:
Sidebar & Layout Enhancements:
"/img/sidebar-icons/...") to native Vite module imports (import iconEntities from ...) ensuring the bundler correctly hashes and dynamically routes the SVGs relative to any base URL path in production.createPortalconsistently, dynamically reparenting the DOM node between thesidebarWrapperand thepopoverContainer. This guarantees exactly one React instance of each tree at all times, preserving Redux/effects states seamlessly without duplicate fetching or node remounting.SideBarTree&SideBarBodyModules): Fixed an issue where toggling the sidebar, remounting layouts, and opening individual tree popovers triggered redundant data-fetching API calls across the mainSideBarBodyand all 6 sidebar tree components (Entities, Classifications, Glossary, etc.). Replaced the loosely typedisEmpty()utility with strict=== null || === undefinedcache checks within theuseEffecthooks, completely stopping infinite network polling loops when the backend actively returns an empty payload (e.g.,{ entityDefs: [] }).refCallbacksfactory functions mapped by component ID inSideBarBody.tsxto securely track portal references without triggering React dependency cascades.<CustomTreeItem>, increased text opacity for readability, and added a strictlabelProps?.node !== undefinedguard to prevent MUI from illegally applying active.Mui-selectedhighlighting to empty states.SideBarBody.tsx): Fixed a major layout bug where collapsing the sidebar caused the main dashboard content to shift left underneath the mini-sidebar, cutting off the left half of the page cards (e.g., theOverviewcard). Refactored the<Main>styled container to eliminate legacy negative margins (marginLeft: -20%) andpadding: theme.spacing(3), converting<Main>into a flex item (flexGrow: 1,minWidth: 0). It now dynamically adapts next to both the 20% expanded drawer and 60px mini-drawer without cutting off content or causing whitespace gaps around the header.SideBarBody): Refactored<Paper>wrappers to use SCSS accessibility-friendly structural concealment (visibility: hidden,width: 0,position: absolute,pointer-events: none) rather thandisplay: noneor conditional rendering. This strictly keeps layout/measurements alive for React while pulling nodes cleanly off the visual rendering thread.sessionSlice.tswhere the sidebar version footer flashed empty during transient network errors. The slice now explicitly retainsstate.versionData.dataandstate.sessionObj.dataduring.rejectedlifecycle events for a seamless UI experience.TreeSkeletonLoader): Added anisPopovercontext flag so the popover tree dynamically renders a minimal 2-row loading skeleton instead of the default 7-row skeleton, perfectly matching the popover bounds without visual snapping. Fortified the skeleton loader to safely handle negative bounds and explicitundefinedfallbacks.Entity Detail & Image Loading Fixes:
EntityDisplayImage.tsx&EntityDetailPage.tsx): Fixed a regression where missing entity icons (likeStorageDesc.png) failed to show the service-level fallback image (likehive.png) on the detail page.serviceTypeon the detail page API response by injecting it manually from the global Type Definitions (entityObj).target.src = fallbackUrl) with native ReactuseStatehooks. This prevents Material-UI's<Avatar>from aggressively unmounting the underlying<img>tag upon anonErrorevent, ensuring the fallback icon triggers a clean re-render and successfully displays.Dashboard Layout Spacing Fixes (
DashBoard.tsx,DashboardOverview.tsx,dashboard.scss):overflow: hiddenon.dash-board-stack-6and applyingsx={{ width: "100%" }}on the Grid container, which constrains the Grid within the padded parent and produces symmetric 24px visual gaps on both left and right sides.spacing={0}on the outer DashBoard Stack and structuring equal 16px white space boundaries throughdashboard.scss.padding={0}on the outer DashBoard Stack to eliminate any MUI default horizontal padding that was contributing to the left/right asymmetry.Rendering, Strict Typing & Code Quality Optimizations:
\n) within the SCSS architecture..classification-distribution-card-box-9for.classification-distribution-card__tooltip), greatly enhancing long-term code readability and CSS maintainability.sxprops) and inline styling (style={{...}}) across all modified components.#ffffff) and raw RGB shadows were wiped globally and re-linked to scalable tokens invariables.scss($card-bg,$dashboard-bg,$primary-blue, etc.).QuickSearch.tsx,TreeNodeIcons.tsx,SideBarTree.tsx,SideBarBody.tsx, and allDashboardOverviewcharts entirely into SCSS abstraction schemas (like.no-records-item).anyRefactoring (AGENTS.mdCompliance): Scoured the workspace to completely eliminateanyand unsafe type assertions:anyusages across the Redux selector pulls inSideBarTree.tsxandSideBarBody.tsx(e.g.,useAppSelectorrelies strictly onRootStateinference rather than explicitstate: anycasts).rootClassificationTypevsrootClassification).toastIdasReact.MutableRefObject<number | string | null>) and downstream method guards.as stringcoercions inconvertApiToQueryBuilderand substituted structured string castingString(...)bindings mapping explicit fallbacks.How was this patch tested?
Note - Sidebar Resize Logic Removal:
The
draggerRefand drawer resizing mouse event listeners (handleMouseDown,handleMouseMove, etc.) were intentionally removed in this PR. This resize logic was pre-existing dead code onmasterthat lacked a functional DOM dragger element, did not actually work, and needlessly bound unmounting event listeners.Manual UI Testing:
createPortal.sxprop or inlinestyleattribute remains on any component touched by this PR, validating complete SCSS segregation.Automated Test Suite Expansion:
SideBarBody.test.tsxverifying that togglingcreatePortalcomponents to/from popovers retains exact component counts, ensuring Redux loops are kept completely isolated.SideBarBody.tsxto strictly enforce the new conditional data-fetching rules. Added mock environments to guaranteedispatchis entirely bypassed when Redux holds an empty target payload instead ofnull.SideBarBody.test.tsxaccurately maps Vite SVG module imports onto the node endpoints, explicitly confirming no hardcoded static strings remain.SideBarTree.test.tsx): Engineered regression tests targeting the fallback "No Records Found" component behavior, actively asserting its structural security and preventing interactive.Mui-selectedstate injections.SideBarBody.test.tsxaccurately firemockNavigatebehaviors, while edge cases enforcing blank param routes load exclusively without triggering phantom active states.TreeSkeletonLoader.test.tsxfor negative bound limits and invalid element strings in table rendering fallbacks..rejectedresponses insessionSlice.test.ts(for both version data and session data) hold onto stale local payloads accurately.Performance & Type Verification:
npm run typecheck,npm run lint, andnpm run testlocally and verified that the refactored native DOM logic, React Portal lifecycle constraints, layout fixes, test suite updates, and TypeScript strict mode types pass flawlessly with 0 errors.