Brijesh619 commented on code in PR #688:
URL: https://github.com/apache/atlas/pull/688#discussion_r3923344458


##########
dashboard/src/views/SideBar/SideBarBody.tsx:
##########
@@ -308,198 +389,124 @@ const SideBarBody = (props: {
                     data-cy="atlas-logo"
                   />
                 </span>
-                <Paper
-                  sx={{
-                    width: "100%",
-                  }}
-                  className="sidebar-searchbar"
-                >
-                  <InputBase
-                    fullWidth
-                    sx={{ color: "rgba(0, 0, 0, 0.7)" }}
-                    placeholder="Entities, Classifications, Glossaries"
-                    inputProps={{ "aria-label": "search" }}
-                    value={searchTerm}
-                    onChange={(e: ChangeEvent<HTMLInputElement>) => {
-                      setSearchTerm(e.target.value);
-                    }}
-                    data-cy="searchNode"
-                  />
-
-                  <IconButton type="submit" size="small" aria-label="search">
-                    <SearchIcon fontSize="inherit" />
-                  </IconButton>
-                </Paper>
+                <SidebarSearchInput
+                  searchTerm={searchTerm}
+                  onChange={setSearchTerm}
+                  dataCy="searchNode"
+                />
               </Stack>
             </DrawerHeader>
           )}
           <Paper
-            className="sidebar-wrapper"
-            sx={{
-              flex: 1,
-              overflow: "hidden auto",
-              paddingBottom: "0px", // Account for bottom toggle button
-              ...(open == false && {
-                overflow: "hidden",
-              }),
-            }}
+            className={`sidebar-wrapper ${!open ? "sidebar-wrapper--hidden" : 
""}`}
           >
-            <div
-              className="sidebar-treeview-container"
-              data-cy="r_entityTreeRender"
-            >
-              <Suspense
-                fallback={
-                  <SkeletonLoader
-                    animation="pulse"
-                    variant="text"
-                    width={330}
-                    count={5}
-                  />
-                  // <Stack className="tree-item-loader-box">
-                  // </Stack>
-                }
-              >
-                <EntitiesTree
-                  sideBarOpen={open}
-                  loading={loading}
-                  searchTerm={searchTerm}
-                />
-              </Suspense>
-            </div>
+                <div
+                  className="sidebar-treeview-container"
+                  data-cy="r_entityTreeRender"
+                >
+                  <Suspense
+                    fallback={<TreeSkeletonLoader count={2} />}
+                  >
+                    <EntitiesTree
+                      sideBarOpen={open}
+                      searchTerm={searchTerm}
+                    />
+                  </Suspense>
+                </div>
 
-            <div
-              className="sidebar-treeview-container"
-              data-cy="r_classificationTreeRender"
-            >
-              <Suspense
-                fallback={
-                  <SkeletonLoader
-                    animation="pulse"
-                    variant="text"
-                    width={330}
-                    count={5}
-                  />
-                  // <Stack className="tree-item-loader-box">
-                  // </Stack>
-                }
-              >
-                <ClassificationTree
-                  sideBarOpen={open}
-                  loading={loader}
-                  searchTerm={searchTerm}
-                />
-              </Suspense>
-            </div>
+                <div
+                  className="sidebar-treeview-container"
+                  data-cy="r_classificationTreeRender"
+                >
+                  <Suspense
+                    fallback={<TreeSkeletonLoader count={2} />}
+                  >
+                    <ClassificationTree
+                      sideBarOpen={open}
+                      searchTerm={searchTerm}
+                    />
+                  </Suspense>
+                </div>
 
-            <div
-              className="sidebar-treeview-container"
-              data-cy="r_businessMetadataTreeRender"
-            >
-              <Suspense
-                fallback={
-                  <SkeletonLoader
-                    animation="pulse"
-                    variant="text"
-                    width={330}
-                    count={5}
-                  />
-                  // <Stack className="tree-item-loader-box">
-                  // </Stack>
-                }
-              >
-                <BusinessMetadataTree
-                  sideBarOpen={open}
-                  searchTerm={searchTerm}
-                />
-              </Suspense>
-            </div>
+                <div
+                  className="sidebar-treeview-container"
+                  data-cy="r_glossaryTreeRender"
+                >
+                  <Suspense
+                    fallback={<TreeSkeletonLoader count={2} />}
+                  >
+                    <GlossaryTree sideBarOpen={open} searchTerm={searchTerm} />
+                  </Suspense>
+                </div>
 
-            <div
-              className="sidebar-treeview-container"
-              data-cy="r_glossaryTreeRender"
-            >
-              <Suspense
-                fallback={
-                  <SkeletonLoader
-                    animation="pulse"
-                    variant="text"
-                    width={330}
-                    count={5}
-                  />
-                  // <Stack className="tree-item-loader-box">
-                  // </Stack>
-                }
-              >
-                <GlossaryTree sideBarOpen={open} searchTerm={searchTerm} />
-              </Suspense>
-            </div>
-            {relationshipSearch && (
-              <div
-                className="sidebar-treeview-container"
-                data-cy="r_relationshipTreeRender"
-              >
-                <Suspense
-                  fallback={
-                    <SkeletonLoader
-                      animation="pulse"
-                      variant="text"
-                      width={330}
-                      count={5}
+                <div
+                  className="sidebar-treeview-container"
+                  data-cy="r_businessMetadataTreeRender"
+                >
+                  <Suspense
+                    fallback={<TreeSkeletonLoader count={2} />}
+                  >
+                    <BusinessMetadataTree
+                      sideBarOpen={open}
+                      searchTerm={searchTerm}
                     />
-                    // <Stack className="tree-item-loader-box">
-                    // </Stack>
-                  }
+                  </Suspense>
+                </div>
+                {relationshipSearch && (
+                  <div
+                    className="sidebar-treeview-container"
+                    data-cy="r_relationshipTreeRender"
+                  >
+                    <Suspense
+                      fallback={<TreeSkeletonLoader count={2} />}
+                    >
+                      <RelationshipsTree
+                        sideBarOpen={open}
+                        searchTerm={searchTerm}
+                      />
+                    </Suspense>
+                  </div>
+                )}
+
+                <div
+                  className="sidebar-treeview-container"
+                  data-cy="r_customFilterTreeRender"
                 >
-                  <RelationshipsTree
-                    sideBarOpen={open}
-                    searchTerm={searchTerm}
-                  />
-                </Suspense>
+                  <Suspense
+                    fallback={<TreeSkeletonLoader count={2} />}
+                  >
+                    <CustomFiltersTree sideBarOpen={open} 
searchTerm={searchTerm} />
+                  </Suspense>
+                </div>
+            </Paper>
+          <div
+            className={`sidebar-toggle-container ${open ? 
"sidebar-toggle-open" : "sidebar-toggle-closed"}`}
+          >
+            {open && (
+              <div className="sidebar-version-container">
+                <Typography variant="body2" className="sidebar-version-text">
+                  {isVersionLoading ? (
+                    <CircularProgress size={12} 
className="sidebar-version-loader" />
+                  ) : versionError ? (

Review Comment:
   I have added a test in SideBarBody.test.tsx that explicitly documents the 
current behavior. Toggling the sidebar between expanded and collapsed preserves 
the DOM of the original trees in the wrapper (hidden via CSS), but opening and 
interacting with the popover instantiates a new, separate tree instance. I'll 
also update the PR description to accurately reflect that the popovers mount 
separate instances while the collapsed state simply hides the main wrapper



##########
dashboard/src/redux/slice/sessionSlice.ts:
##########
@@ -77,6 +93,27 @@ const sessionSlice = createSlice({
           data: null,
           error: (action.payload as string) || action.error?.message || 'An 
error occurred'
         };
+      }),
+      builder.addCase(fetchVersionData.pending, (state) => {
+        state.versionData.loading = true;
+        state.versionData.error = null;
+      }),

Review Comment:
   The sessionSlice.ts and its test sessionSlice.test.ts were already set up to 
preserve state.versionData.data on pending (stale-while-revalidate). The 
flashing empty text was actually a UI-layer issue in SideBarBody.tsx, which was 
replacing the text with the loading spinner. I've updated the component so it 
now correctly displays both the spinner and the existing version text during a 
refetch, fixing the empty flash.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to