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

fimugdha pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a4784bb7 RANGER-5697 : Fix redendering policy-condition in dataset 
access grant (#1090)
1a4784bb7 is described below

commit 1a4784bb7267f8188ec3f084c219d7cc11ea3a56
Author: Mugdha Varadkar <[email protected]>
AuthorDate: Mon Jul 20 15:31:20 2026 +0530

    RANGER-5697 : Fix redendering policy-condition in dataset access grant 
(#1090)
---
 .../views/GovernedData/Dataset/AccessGrantForm.jsx | 118 ++++++++++-----------
 .../GovernedData/Dataset/DatasetDetailLayout.jsx   |  21 ++--
 .../GovernedData/Dataset/MyDatasetListing.jsx      |   2 +-
 .../Datashare/DatashareDetailLayout.jsx            |  56 +++-------
 4 files changed, 84 insertions(+), 113 deletions(-)

diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/AccessGrantForm.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/AccessGrantForm.jsx
index e53402f6c..423dc2813 100755
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/AccessGrantForm.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/AccessGrantForm.jsx
@@ -29,11 +29,20 @@ import {
   dragOver,
   getAllTimeZoneList,
   policyConditionUpdatedJSON,
-  isSystemAdmin
+  isSystemAdmin,
+  getPolicyConditionDisplayLbl
 } from "../../../utils/XAUtils";
 import { fetchApi } from "Utils/fetchAPI";
-import { isPerRowCondition } from "Utils/policyConditionUtils";
-import { maxBy, find, isEmpty, isArray, isEqual, isObject } from "lodash";
+import {
+  map,
+  maxBy,
+  find,
+  isEmpty,
+  isArray,
+  isEqual,
+  isObject,
+  join
+} from "lodash";
 import userGreyIcon from "../../../images/user-grey.svg";
 import groupGreyIcon from "../../../images/group-grey.svg";
 import roleGreyIcon from "../../../images/role-grey.svg";
@@ -194,7 +203,21 @@ function AccessGrantForm({
         if (policyData?.conditions?.length > 0) {
           data.conditions = {};
           for (let val of policyData.conditions) {
-            data.conditions[val?.type] = val?.values?.join(",");
+            let conditionObj = find(
+              policyConditionUpdatedJSON(serviceCompData?.policyConditions),
+              function (m) {
+                if (m.name == val.type) {
+                  return m;
+                }
+              }
+            );
+
+            if (!isEmpty(conditionObj.uiHint)) {
+              data.conditions[val?.type] = JSON.parse(conditionObj.uiHint)
+                .isMultiValue
+                ? val?.values
+                : val?.values.toString().trim();
+            }
           }
         }
       }
@@ -292,9 +315,7 @@ function AccessGrantForm({
     });
   };
 
-  const handleSubmit = async (values) => {
-    saveAccessGrant(values);
-  };
+  const handleSubmit = async () => {};
 
   const fetchPrincipleData = async (inputValue) => {
     let params = { name: inputValue || "", isVisible: 1 };
@@ -335,11 +356,7 @@ function AccessGrantForm({
     return null;
   };
 
-  const onConditionChange = () => {
-    onDataChange(formValues, policyData);
-  };
-
-  const onRemovingPolicyItem = (index) => {
+  const onRemovingPolicyItem = () => {
     onDataChange(undefined, undefined);
   };
 
@@ -358,15 +375,6 @@ function AccessGrantForm({
           modifiedVal = true;
           break;
         }
-        if (
-          dirtyFieldVal == "policyItems" &&
-          values.policyItems.length == 1 &&
-          values.policyItems[0] == undefined
-        ) {
-        } else if (!isEqual(values.policyItems, initialValues.policyItems)) {
-          modifiedVal = true;
-          break;
-        }
       }
     }
     if (
@@ -664,7 +672,7 @@ function AccessGrantForm({
                         <></>
                       )}
 
-                      {values?.conditions && !isEmpty(values.conditions) && (
+                      {!isEmpty(values.conditions) && (
                         <div className="gds-action-card mb-5 pl-0 pr-0">
                           <div className="gds-section-title">
                             <p className="gds-card-heading">Conditions</p>
@@ -680,49 +688,39 @@ function AccessGrantForm({
                               Edit Conditions
                             </Button>
                           </div>
-                          {Object.keys(values.conditions).map((keyName) => {
-                            if (isPerRowCondition(keyName)) {
-                              return null;
-                            }
-                            if (
-                              values.conditions[keyName] != "" &&
-                              values.conditions[keyName] != null
-                            ) {
-                              let conditionObj = find(
-                                serviceCompDetails?.policyConditions,
-                                function (m) {
-                                  if (m.name == keyName) {
-                                    return m;
-                                  }
-                                }
-                              );
+
+                          {(() => {
+                            const policyConditions =
+                              serviceCompDetails?.policyConditions || [];
+
+                            return map(values.conditions, (val, key) => {
+                              const conditionConfig = find(policyConditions, {
+                                name: key
+                              });
+                              const displayLabel =
+                                getPolicyConditionDisplayLbl(
+                                  conditionConfig?.label
+                                ) || conditionConfig?.label;
+
                               return (
-                                <div className="pt-3">
-                                  {isObject(values.conditions[keyName]) ? (
-                                    <div>
-                                      <span className="fnt-14">
-                                        {values.conditions[keyName].length > 1
-                                          ? values.conditions[keyName].map(
-                                              (m) => {
-                                                return ` ${m.label} `;
-                                              }
-                                            )
-                                          : values.conditions[keyName].label}
-                                      </span>
-                                    </div>
-                                  ) : (
-                                    <div>
-                                      <span className="fnt-14">
-                                        {values.conditions[keyName]}
-                                      </span>
-                                    </div>
-                                  )}
+                                <div className="pt-3" key={key}>
+                                  <div className="d-flex align-items-center">
+                                    <span className="fnt-14 font-weight-bold 
me-2">
+                                      {displayLabel} :
+                                    </span>
+                                    <span className="fnt-14">
+                                      {isArray(val)
+                                        ? join(val, ", ")
+                                        : String(val)}
+                                    </span>
+                                  </div>
                                 </div>
                               );
-                            }
-                          })}
+                            });
+                          })()}
                         </div>
                       )}
+
                       {isAdmin && showModal && (
                         <Field
                           className="form-control"
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/DatasetDetailLayout.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/DatasetDetailLayout.jsx
index c8ad8b369..9b06d8616 100755
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/DatasetDetailLayout.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/DatasetDetailLayout.jsx
@@ -58,7 +58,7 @@ import groupColourIcon from 
"../../../images/group-colour.svg";
 import roleColourIcon from "../../../images/role-colour.svg";
 import historyDetailsIcon from "../../../images/history-details.svg";
 import arrayMutators from "final-form-arrays";
-import { groupBy, isEmpty, isArray } from "lodash";
+import { groupBy, isEmpty, isArray, map } from "lodash";
 import PrinciplePermissionComp from "./PrinciplePermissionComp";
 import ReactPaginate from "react-paginate";
 import CustomBreadcrumb from "Views/CustomBreadcrumb";
@@ -1027,10 +1027,10 @@ const DatasetDetailLayout = () => {
     /*Policy Condition*/
     if (values?.conditions) {
       data.conditions = [];
-      Object.entries(values.conditions).map(([key, value]) => {
+      map(values.conditions, (value, key) => {
         return data.conditions.push({
           type: key,
-          values: value?.split(",")
+          values: isArray(value) ? [...value] : [value]
         });
       });
     } else {
@@ -1589,7 +1589,7 @@ const DatasetDetailLayout = () => {
                                   >
                                     <span className="gds-label-color">ID</span>
                                   </div>
-                                  <div 
line-height="30px">{datasetInfo.id}</div>
+                                  <div>{datasetInfo.id}</div>
                                 </div>
                                 <div className="wrapper">
                                   <div
@@ -1600,7 +1600,7 @@ const DatasetDetailLayout = () => {
                                       Date Updated
                                     </span>
                                   </div>
-                                  <div line-height="30px">
+                                  <div>
                                     {dateFormat(
                                       datasetInfo.updateTime,
                                       "mm/dd/yyyy hh:MM:ss TT"
@@ -1609,15 +1609,12 @@ const DatasetDetailLayout = () => {
                                 </div>
 
                                 <div className="wrapper">
-                                  <div
-                                    className="gds-left-inline-field"
-                                    line-height="30px"
-                                  >
+                                  <div className="gds-left-inline-field">
                                     <span className="gds-label-color">
                                       Date Created
                                     </span>
                                   </div>
-                                  <div line-height="30px">
+                                  <div>
                                     {dateFormat(
                                       datasetInfo.createTime,
                                       "mm/dd/yyyy hh:MM:ss TT"
@@ -2255,8 +2252,8 @@ const DatasetDetailLayout = () => {
             <Modal show={showDeleteDatasetModal} onHide={toggleClose}>
               <Modal.Header closeButton>
                 <span className="text-word-break">
-                  Are you sure you want to delete dataset&nbsp;"
-                  <b>{datasetInfo.name}</b>" ?
+                  Are you sure you want to delete dataset&nbsp;
+                  <b>{datasetInfo.name}</b> ?
                 </span>
               </Modal.Header>
               <Modal.Footer>
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/MyDatasetListing.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/MyDatasetListing.jsx
index abc9dfa13..180f13604 100755
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/MyDatasetListing.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Dataset/MyDatasetListing.jsx
@@ -139,7 +139,7 @@ const MyDatasetListing = () => {
             url: "gds/dataset/summary",
             params: params
           });
-          datasetList = resp.data.list;
+          datasetList = resp.data.list || [];
           totalCount = resp.data.totalCount;
         } catch (error) {
           serverError(error);
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Datashare/DatashareDetailLayout.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Datashare/DatashareDetailLayout.jsx
index 094ace3fa..85b437f14 100755
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Datashare/DatashareDetailLayout.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/GovernedData/Datashare/DatashareDetailLayout.jsx
@@ -49,7 +49,6 @@ import {
   policyConditionUpdatedJSON,
   capitalizeFirstLetter
 } from "Utils/XAUtils";
-import { isPerRowCondition } from "Utils/policyConditionUtils";
 import XATableLayout from "Components/XATableLayout";
 import moment from "moment-timezone";
 import { getServiceDef } from "Utils/appState";
@@ -1243,24 +1242,18 @@ const DatashareDetailLayout = () => {
                           <div className="gds-tab-content gds-content-border 
px-3">
                             <div className="gds-inline-field-grp">
                               <div className="wrapper">
-                                <div
-                                  className="gds-left-inline-field"
-                                  height="30px"
-                                >
+                                <div className="gds-left-inline-field">
                                   <span className="gds-label-color">ID</span>
                                 </div>
-                                <div 
line-height="30px">{datashareInfo.id}</div>
+                                <div>{datashareInfo.id}</div>
                               </div>
                               <div className="wrapper">
-                                <div
-                                  className="gds-left-inline-field pl-1 fnt-14"
-                                  height="30px"
-                                >
+                                <div className="gds-left-inline-field pl-1 
fnt-14">
                                   <span className="gds-label-color">
                                     Date Updated
                                   </span>
                                 </div>
-                                <div className="fnt-14" line-height="30px">
+                                <div className="fnt-14">
                                   {dateFormat(
                                     datashareInfo?.updateTime,
                                     "mm/dd/yyyy hh:MM:ss TT"
@@ -1269,15 +1262,12 @@ const DatashareDetailLayout = () => {
                               </div>
 
                               <div className="wrapper">
-                                <div
-                                  className="gds-left-inline-field pl-1 fnt-14"
-                                  line-height="30px"
-                                >
+                                <div className="gds-left-inline-field pl-1 
fnt-14">
                                   <span className="gds-label-color">
                                     Date Created
                                   </span>
                                 </div>
-                                <div className="fnt-14" line-height="30px">
+                                <div className="fnt-14">
                                   {dateFormat(
                                     datashareInfo?.createTime,
                                     "mm/dd/yyyy hh:MM:ss TT"
@@ -1341,21 +1331,10 @@ const DatashareDetailLayout = () => {
                             </div>
                             {values.conditions !== undefined &&
                               Object.keys(values.conditions).map((keyName) => {
-                                if (isPerRowCondition(keyName)) {
-                                  return null;
-                                }
                                 if (
                                   values.conditions[keyName] != "" &&
                                   values.conditions[keyName] != null
                                 ) {
-                                  let conditionObj = find(
-                                    DSpolicyConditions,
-                                    function (m) {
-                                      if (m.name == keyName) {
-                                        return m;
-                                      }
-                                    }
-                                  );
                                   return (
                                     <div className="pt-3">
                                       {isObject(values.conditions[keyName]) ? (
@@ -1716,11 +1695,11 @@ const DatashareDetailLayout = () => {
                 <Modal show={confirmDeleteModal.showPopup} 
onHide={toggleClose}>
                   <Modal.Header closeButton>
                     <span className="text-word-break">
-                      Are you sure you want to delete shared resource &nbsp;"
+                      Are you sure you want to delete shared resource &nbsp;
                       <b>
                         {confirmDeleteModal?.sharedResourceDetails?.shareName}
                       </b>
-                      " ?
+                      ?
                     </span>
                   </Modal.Header>
                   <Modal.Footer>
@@ -1752,20 +1731,20 @@ const DatashareDetailLayout = () => {
                     <div className="p-1">
                       <div className="gds-inline-field-grp">
                         <div className="wrapper">
-                          <div className="gds-left-inline-field" height="30px">
+                          <div className="gds-left-inline-field">
                             Boolean Expression :
                           </div>
-                          <div line-height="30px">
+                          <div>
                             {conditionModalData?.conditionExpr != undefined
                               ? conditionModalData.conditionExpr
                               : ""}
                           </div>
                         </div>
                         <div className="wrapper">
-                          <div className="gds-left-inline-field" height="30px">
+                          <div className="gds-left-inline-field">
                             Access Type :
                           </div>
-                          <div line-height="30px">
+                          <div>
                             {conditionModalData?.accessTypes != undefined
                               ? conditionModalData.accessTypes.toString()
                               : ""}
@@ -1773,13 +1752,10 @@ const DatashareDetailLayout = () => {
                         </div>
                         {false && (
                           <div className="wrapper">
-                            <div
-                              className="gds-left-inline-field"
-                              height="30px"
-                            >
+                            <div className="gds-left-inline-field">
                               Row Filter :
                             </div>
-                            <div line-height="30px">
+                            <div>
                               {conditionModalData?.rowFilter != undefined
                                 ? conditionModalData.rowFilter.filterExpr
                                 : ""}
@@ -1854,8 +1830,8 @@ const DatashareDetailLayout = () => {
                 <Modal show={showDeleteDatashareModal} onHide={toggleClose}>
                   <Modal.Header closeButton>
                     <span className="text-word-break">
-                      Are you sure you want to delete datashare&nbsp;"
-                      <b>{datashareInfo?.name}</b>" ?
+                      Are you sure you want to delete datashare&nbsp;
+                      <b>{datashareInfo?.name}</b> ?
                     </span>
                   </Modal.Header>
                   <Modal.Footer>

Reply via email to