You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by pp...@apache.org on 2025/12/12 07:28:48 UTC

(atlas) branch ATLAS-5168 created (now 033df62a5)

This is an automated email from the ASF dual-hosted git repository.

ppawar pushed a change to branch ATLAS-5168
in repository https://gitbox.apache.org/repos/asf/atlas.git


      at 033df62a5 ATLAS-5168: React UI: Classification searches parent classification instead of child

This branch includes the following new commits:

     new 033df62a5 ATLAS-5168: React UI: Classification searches parent classification instead of child

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(atlas) 01/01: ATLAS-5168: React UI: Classification searches parent classification instead of child

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppawar pushed a commit to branch ATLAS-5168
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 033df62a520d8340b33c72c46865f9bedc10973c
Author: Prasad Pawar <pr...@freestoneinfotech.com>
AuthorDate: Fri Dec 12 12:58:22 2025 +0530

    ATLAS-5168: React UI: Classification searches parent classification instead of child
---
 dashboard/src/components/Table/TableFilters.tsx    |  4 ++-
 dashboard/src/components/Table/TableLayout.tsx     |  4 ++-
 dashboard/src/components/TreeNodeIcons.tsx         | 27 ++++++++++-----
 dashboard/src/models/tableLayoutType.ts            |  1 +
 .../views/Administrator/BusinessMetadataTab.tsx    | 39 +++++++++-------------
 .../DetailPage/ClassificationDetailsLayout.tsx     |  2 +-
 .../PropertiesTab/BMAttributesFields.tsx           | 26 +++++++--------
 .../GlossaryDetails/GlossaryDetailsLayout.tsx      |  2 +-
 dashboard/src/views/SearchResult/SearchResult.tsx  | 10 +++---
 .../src/views/SideBar/SideBarTree/SideBarTree.tsx  | 18 +++++-----
 10 files changed, 69 insertions(+), 64 deletions(-)

diff --git a/dashboard/src/components/Table/TableFilters.tsx b/dashboard/src/components/Table/TableFilters.tsx
index 94d424296..a60d2e959 100644
--- a/dashboard/src/components/Table/TableFilters.tsx
+++ b/dashboard/src/components/Table/TableFilters.tsx
@@ -104,7 +104,8 @@ export const TableFilter = ({
   columnVisibilityParams,
   setUpdateTable,
   getSelectedRowModel,
-  memoizedData
+  memoizedData,
+  customLeftButton
 }: any) => {
   const [open, setOpen] = useState<null | HTMLElement>(null);
   const location = useLocation();
@@ -299,6 +300,7 @@ export const TableFilter = ({
     <>
       <Stack direction="row" justifyContent={"space-between"}>
         <Stack direction="row" spacing={1}>
+          {customLeftButton}
           {allTableFilters && (
             <CustomButton
               variant="outlined"
diff --git a/dashboard/src/components/Table/TableLayout.tsx b/dashboard/src/components/Table/TableLayout.tsx
index 97143aa65..0eed92e27 100644
--- a/dashboard/src/components/Table/TableLayout.tsx
+++ b/dashboard/src/components/Table/TableLayout.tsx
@@ -352,7 +352,8 @@ const TableLayout: FC<TableProps> = ({
   isClientSidePagination,
   isEmptyData,
   setIsEmptyData,
-  showGoToPage
+  showGoToPage,
+  customLeftButton
 }) => {
   let defaultHideColumns = { ...defaultColumnVisibility };
   const location = useLocation();
@@ -550,6 +551,7 @@ const TableLayout: FC<TableProps> = ({
                   setUpdateTable={setUpdateTable}
                   getSelectedRowModel={getSelectedRowModel}
                   memoizedData={memoizedData}
+                  customLeftButton={customLeftButton}
                 />
               )}
               {isfilterQuery && <Divider />}
diff --git a/dashboard/src/components/TreeNodeIcons.tsx b/dashboard/src/components/TreeNodeIcons.tsx
index ea835dae6..93c734a7b 100644
--- a/dashboard/src/components/TreeNodeIcons.tsx
+++ b/dashboard/src/components/TreeNodeIcons.tsx
@@ -277,14 +277,12 @@ const TreeNodeIcons = (props: {
             onClick={(_e) => {
               if (treeName == "Classifications") {
                 const searchParams = new URLSearchParams();
-                searchParams.set(
-                  "tag",
-                  node.types == "child" ? node.label : node.nodeName
-                );
+                const classificationName = node.label
+                  ? node.label.split(" (")[0]
+                  : node.nodeName || node.id;
+                searchParams.set("tag", classificationName);
                 navigate({
-                  pathname: `/tag/tagAttribute/${
-                    node.types == "child" ? node.label : node.nodeName
-                  }`,
+                  pathname: `/tag/tagAttribute/${classificationName}`,
                   search: searchParams.toString()
                 });
                 setExpandNode(null);
@@ -380,9 +378,20 @@ const TreeNodeIcons = (props: {
               const searchParams = new URLSearchParams();
               searchParams.set("searchType", "basic");
               if (treeName == "Classifications") {
-                searchParams.set("tag", node.nodeName || node.id);
+                let classificationName: string;
+                if (node.label) {
+                  classificationName = node.label.split(" (")[0];
+                } else if (node.nodeName) {
+                  classificationName = node.nodeName;
+                } else {
+                  classificationName = node.id;
+                }
+                searchParams.set("tag", classificationName);
               } else if (treeName == "Glossary") {
-                searchParams.set("term", node.id);
+                const termValue = node.types == "child" && node.parent
+                  ? `${node.id}@${node.parent}`
+                  : node.id;
+                searchParams.set("term", termValue);
               }
               navigate({
                 pathname: "/search/searchResult",
diff --git a/dashboard/src/models/tableLayoutType.ts b/dashboard/src/models/tableLayoutType.ts
index 0baeb064f..0e8258cb2 100644
--- a/dashboard/src/models/tableLayoutType.ts
+++ b/dashboard/src/models/tableLayoutType.ts
@@ -56,4 +56,5 @@ export interface TableProps {
   isEmptyData?: boolean;
   setIsEmptyData?: React.Dispatch<React.SetStateAction<boolean>>;
   showGoToPage?: boolean;
+  customLeftButton?: React.ReactNode;
 }
diff --git a/dashboard/src/views/Administrator/BusinessMetadataTab.tsx b/dashboard/src/views/Administrator/BusinessMetadataTab.tsx
index 6c4a69e30..327561db3 100644
--- a/dashboard/src/views/Administrator/BusinessMetadataTab.tsx
+++ b/dashboard/src/views/Administrator/BusinessMetadataTab.tsx
@@ -197,29 +197,7 @@ const BusinessMetadataTab = ({ setForm, setBMAttribute }: any) => {
 
   return (
     <Stack direction="column">
-      <Stack padding={2} position="relative">
-        <div style={{ height: "0" }}>
-          <CustomButton
-            variant="contained"
-            sx={{
-              position: "absolute",
-              marginTop: "13px",
-              marginLeft: "13px",
-              left: "16px"
-            }}
-            size="small"
-            onClick={(_e: any) => {
-              setForm(true);
-              setBMAttribute({});
-              dispatchState(setEditBMAttribute({}));
-            }}
-            startIcon={<AddIcon fontSize="small" />}
-            data-cy="createBusinessMetadata"
-          >
-            Create Business Metadata
-          </CustomButton>
-        </div>
-
+      <Stack padding={2}>
         <TableLayout
           data={businessMetadataDefs || []}
           columns={defaultColumns}
@@ -233,6 +211,21 @@ const BusinessMetadataTab = ({ setForm, setBMAttribute }: any) => {
           showRowSelection={false}
           tableFilters={true}
           expandRow={true}
+          customLeftButton={
+            <CustomButton
+              variant="contained"
+              size="small"
+              onClick={(_e: any) => {
+                setForm(true);
+                setBMAttribute({});
+                dispatchState(setEditBMAttribute({}));
+              }}
+              startIcon={<AddIcon fontSize="small" />}
+              data-cy="createBusinessMetadata"
+            >
+              Create Business Metadata
+            </CustomButton>
+          }
           auditTableDetails={{
             Component: BusinessMetadataAtrribute,
             componentProps: {
diff --git a/dashboard/src/views/DetailPage/ClassificationDetailsLayout.tsx b/dashboard/src/views/DetailPage/ClassificationDetailsLayout.tsx
index 48adc6111..8f954565e 100644
--- a/dashboard/src/views/DetailPage/ClassificationDetailsLayout.tsx
+++ b/dashboard/src/views/DetailPage/ClassificationDetailsLayout.tsx
@@ -56,7 +56,7 @@ const ClassificationDetailsLayout = () => {
         loading={loading}
         attributeDefs={attributeDefs}
       />
-      <SearchResult classificationParams={tagName} />
+      <SearchResult classificationParams={tagName} hideFilters={true} />
     </Stack>
   );
 };
diff --git a/dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/BMAttributesFields.tsx b/dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/BMAttributesFields.tsx
index 76f618e8d..e5da5fb97 100644
--- a/dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/BMAttributesFields.tsx
+++ b/dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/BMAttributesFields.tsx
@@ -140,20 +140,20 @@ const BMAttributesFields = ({ obj, control, index }: any) => {
         defaultValue={""}
         render={({ field }) => {
           return (
-            <Stack gap="0.5rem">
-              <div style={{ position: "relative", flexBasis: "100%" }}>
-                {typeName == "string" ? (
-                  <ReactQuill
+          <Stack gap="0.5rem">
+            <div style={{ position: "relative", flexBasis: "100%" }}>
+              {typeName == "string" ? (
+                <ReactQuill
                     key={`quill-${index}-${name}`}
-                    theme="snow"
-                    placeholder={"Enter String"}
-                    onChange={(text) => {
-                      field.onChange(text);
-                    }}
-                    className="classification-form-editor"
-                    value={typeof field.value === "string" ? field.value : ""}
-                  />
-                ) : (
+                  theme="snow"
+                  placeholder={"Enter String"}
+                  onChange={(text) => {
+                    field.onChange(text);
+                  }}
+                  className="classification-form-editor"
+                  value={typeof field.value === "string" ? field.value : ""}
+                />
+              ) : (
                 <TextField
                   margin="none"
                   fullWidth
diff --git a/dashboard/src/views/DetailPage/GlossaryDetails/GlossaryDetailsLayout.tsx b/dashboard/src/views/DetailPage/GlossaryDetails/GlossaryDetailsLayout.tsx
index d724a4cde..6cd480eea 100644
--- a/dashboard/src/views/DetailPage/GlossaryDetails/GlossaryDetailsLayout.tsx
+++ b/dashboard/src/views/DetailPage/GlossaryDetails/GlossaryDetailsLayout.tsx
@@ -142,7 +142,7 @@ const GlossaryDetailLayout = () => {
                 {(activeTab == undefined || activeTab === "entities") &&
                   !isEmpty(data) && (
                     <div style={{ padding: "16px" }}>
-                      <SearchResult glossaryTypeParams={qualifiedName} />
+                      <SearchResult glossaryTypeParams={qualifiedName} hideFilters={true} />
                     </div>
                   )}
                 {activeTab === "entitiesProperties" && (
diff --git a/dashboard/src/views/SearchResult/SearchResult.tsx b/dashboard/src/views/SearchResult/SearchResult.tsx
index e2e4cca9f..ff5d9d90d 100644
--- a/dashboard/src/views/SearchResult/SearchResult.tsx
+++ b/dashboard/src/views/SearchResult/SearchResult.tsx
@@ -83,7 +83,7 @@ let defaultColumnsName: Array<string> = [
   "term"
 ];
 
-const SearchResult = ({ classificationParams, glossaryTypeParams }: any) => {
+const SearchResult = ({ classificationParams, glossaryTypeParams, hideFilters }: any) => {
   const [searchParams, setSearchParams] = useSearchParams();
   const [searchData, setSearchData] = useState<any>([]);
   const [loader, setLoader] = useState(true);
@@ -947,7 +947,7 @@ const SearchResult = ({ classificationParams, glossaryTypeParams }: any) => {
         showPagination={true}
         showRowSelection={!isDslAggregate}
         // showRowSelection={true}
-        tableFilters={true}
+        tableFilters={!hideFilters}
         assignFilters={
           !isEmpty(classificationParams || glossaryTypeParams)
             ? {
@@ -956,10 +956,10 @@ const SearchResult = ({ classificationParams, glossaryTypeParams }: any) => {
               }
             : null
         }
-        queryBuilder={true}
-        allTableFilters={true}
+        queryBuilder={!hideFilters}
+        allTableFilters={!hideFilters}
         setUpdateTable={setUpdateTable}
-        isfilterQuery={true}
+        isfilterQuery={!hideFilters}
         isEmptyData={isEmptyData}
         setIsEmptyData={setIsEmptyData}
         showGoToPage={true}
diff --git a/dashboard/src/views/SideBar/SideBarTree/SideBarTree.tsx b/dashboard/src/views/SideBar/SideBarTree/SideBarTree.tsx
index fd4bf92f9..b3bf46a5d 100644
--- a/dashboard/src/views/SideBar/SideBarTree/SideBarTree.tsx
+++ b/dashboard/src/views/SideBar/SideBarTree/SideBarTree.tsx
@@ -595,15 +595,13 @@ const BarTreeView: FC<{
         break;
     }
 
-    // Note: Don't delete filters here for CustomFilters - they will be set by setCustomFiltersSearchParams
     if (treeName !== "CustomFilters") {
-      searchParams.delete("attributes");
-      searchParams.delete("entityFilters");
-      searchParams.delete("tagFilters");
-      searchParams.delete("relationshipFilters");
-      // Always reset pagination defaults on tree navigation
-      searchParams.set("pageLimit", "25");
-      searchParams.set("pageOffset", "0");
+    searchParams.delete("attributes");
+    searchParams.delete("entityFilters");
+    searchParams.delete("tagFilters");
+    searchParams.delete("relationshipFilters");
+    searchParams.set("pageLimit", "25");
+    searchParams.set("pageOffset", "0");
     }
   };
 
@@ -654,7 +652,7 @@ const BarTreeView: FC<{
         
         // Step 1: Set searchType based on saved search type
         if (params.searchType) {
-          const searchTypeValue = params.searchType.toLowerCase() === "advanced" ? "advanced" : "basic";
+          const searchTypeValue = params.searchType === "ADVANCED" ? "dsl" : "basic";
           searchParams.set("searchType", searchTypeValue);
         }
         
@@ -729,7 +727,7 @@ const BarTreeView: FC<{
           }
         }
         
-        searchParams.set("isCF", "true");
+      searchParams.set("isCF", "true");
       }
     } else {
       searchParams.set("relationshipName", node.id);