This is an automated email from the ASF dual-hosted git repository. dhavalshah9131 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 6cdb6dafc88d9e832ab2b79ea017ca751b38b2f8 Author: Brijesh Bhalala <brijeshbhalala2...@gmail.com> AuthorDate: Mon Nov 20 12:20:47 2023 +0530 RANGER-4493: Keep the UI behaviour for tag based and resource based services filtering for zone without any service --- .../main/webapp/react-webapp/src/views/Home.jsx | 49 ++++++-------- .../views/ServiceManager/ServiceDefinitions.jsx | 75 ++++++++++++++-------- .../src/views/ServiceManager/ServiceForm.jsx | 16 ----- .../react-webapp/src/views/SideBar/TopNavBar.jsx | 16 ----- 4 files changed, 67 insertions(+), 89 deletions(-) diff --git a/security-admin/src/main/webapp/react-webapp/src/views/Home.jsx b/security-admin/src/main/webapp/react-webapp/src/views/Home.jsx index 67f71ec79..54854d760 100644 --- a/security-admin/src/main/webapp/react-webapp/src/views/Home.jsx +++ b/security-admin/src/main/webapp/react-webapp/src/views/Home.jsx @@ -59,39 +59,26 @@ class Home extends Component { }; disableTabs = (loader) => { - loader == true && - document - .getElementById("resourceSelectedZone") - ?.classList?.add("disabledEvents"); - loader == true && - document - .getElementById("tagSelectedZone") - ?.classList?.add("disabledEvents"); - loader == true && - document - .getElementsByClassName("sidebar-header")?.[0] - ?.classList?.add("disabledEvents"); - loader == true && - document.getElementById("rangerIcon")?.classList?.add("disabledCursor"); + const elements = [ + { id: "resourceSelectedZone", className: "disabledEvents" }, + { id: "tagSelectedZone", className: "disabledEvents" }, + { selector: "sidebar-header", className: "disabledEvents" }, + { id: "rangerIcon", className: "disabledCursor" } + ]; + elements.forEach((element) => { + const target = element.id + ? document.getElementById(element.id) + : document.getElementsByClassName(element.selector)?.[0]; + if (target) { + if (loader) { + target.classList.add(element.className); + } else { + target.classList.remove(element.className); + } + } + }); this.setState({ loader: loader }); - loader == false && - document - .getElementsByClassName("sidebar-header")?.[0] - ?.classList.remove("disabledEvents"); - loader == false && - document - .getElementById("rangerIcon") - ?.classList?.remove("disabledCursor"); - - loader == false && - document - .getElementById("resourceSelectedZone") - ?.classList?.remove("disabledEvents"); - loader == false && - document - .getElementById("tagSelectedZone") - ?.classList?.remove("disabledEvents"); }; render() { diff --git a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceDefinitions.jsx b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceDefinitions.jsx index 8c222d080..49d93ee4a 100644 --- a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceDefinitions.jsx +++ b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceDefinitions.jsx @@ -176,16 +176,16 @@ class ServiceDefinitions extends Component { try { let zonesResp = []; if (e && e !== undefined) { - zonesResp = await fetchApi({ + const response = await fetchApi({ url: `public/v2/api/zones/${e && e.value}/service-headers` }); - + zonesResp = response?.data || []; zonesResp && this.props.navigate( `${this.props.location.pathname}?securityZone=${e.label}` ); - let zoneServiceNames = map(zonesResp.data, "name"); + let zoneServiceNames = map(zonesResp, "name"); let zoneServices = zoneServiceNames.map((zoneService) => { return this.state.services.filter((service) => { @@ -206,19 +206,16 @@ class ServiceDefinitions extends Component { } let zoneServiceDefTypes = uniq(map(zoneServices, "type")); - let filterZoneServiceDef; - if (!this.state.isTagView) { - filterZoneServiceDef = sortBy( - zoneServiceDefTypes.map((obj) => { - return this.state.serviceDefs.find((serviceDef) => { - return serviceDef.name == obj; - }); - }), - "id" - ); - } else { - filterZoneServiceDef = this.state.serviceDefs; - } + let filterZoneServiceDef = []; + filterZoneServiceDef = sortBy( + zoneServiceDefTypes.map((obj) => { + return this.state.serviceDefs.find((serviceDef) => { + return serviceDef.name == obj; + }); + }), + "id" + ); + let zoneDetails = {}; zoneDetails["label"] = e.label; zoneDetails["value"] = e.value; @@ -249,7 +246,6 @@ class ServiceDefinitions extends Component { deleteService = async (sid) => { let localStorageZoneDetails = localStorage.getItem("zoneDetails"); let zonesResp = []; - try { this.setState({ blockUI: true }); @@ -262,19 +258,41 @@ class ServiceDefinitions extends Component { localStorageZoneDetails !== undefined && localStorageZoneDetails !== null ) { - zonesResp = await fetchApi({ + let filterZoneServiceDef = []; + + const response = await fetchApi({ url: `public/v2/api/zones/${ JSON.parse(localStorageZoneDetails)?.value }/service-headers` }); - if (isEmpty(zonesResp?.data)) { - this.setState({ - zones: this.state.zones.filter( - (z) => z.id !== JSON.parse(localStorageZoneDetails)?.value - ) + zonesResp = response?.data || []; + + if (!isEmpty(zonesResp)) { + let zoneServiceNames = filter(zonesResp, ["isTagService", false]); + + zoneServiceNames = map(zoneServiceNames, "name"); + + let zoneServices = zoneServiceNames?.map((zoneService) => { + return this.state.services?.filter((service) => { + return service.name === zoneService; + }); }); + + let zoneServiceDefTypes = uniq(map(zoneServices?.flat(), "type")); + + filterZoneServiceDef = sortBy( + zoneServiceDefTypes?.map((obj) => { + return this.state.serviceDefs?.find((serviceDef) => { + return serviceDef.name == obj; + }); + }), + "id" + ); } + this.setState({ + filterServiceDefs: filterZoneServiceDef + }); } this.setState({ @@ -378,7 +396,6 @@ class ServiceDefinitions extends Component { this.state.selectedZone.value } } - //isDisabled={true} formatOptionLabel={this.formatOptionLabel} isDisabled={isEmpty(zones) ? true : false} onChange={this.getSelectedZone} @@ -402,10 +419,13 @@ class ServiceDefinitions extends Component { <Button variant="outline-secondary" size="sm" - className="ml-2" + className={`${ + isEmpty(filterServiceDefs) ? "not-allowed" : "pe-auto" + } ml-2`} onClick={this.showImportModal} data-id="importBtn" data-cy="importBtn" + disabled={isEmpty(filterServiceDefs) ? true : false} > <i className="fa fa-fw fa-rotate-180 fa-external-link-square" /> Import @@ -428,10 +448,13 @@ class ServiceDefinitions extends Component { <Button variant="outline-secondary" size="sm" - className="ml-2" + className={`${ + isEmpty(filterServiceDefs) ? "not-allowed" : "pe-auto" + } ml-2`} onClick={this.showExportModal} data-id="exportBtn" data-cy="exportBtn" + disabled={isEmpty(filterServiceDefs) ? true : false} > <i className="fa fa-fw fa-external-link-square" /> Export diff --git a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx index 47763fb9d..abb98954f 100644 --- a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx +++ b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx @@ -469,8 +469,6 @@ class ServiceForm extends Component { }); }; deleteService = async (serviceId) => { - let localStorageZoneDetails = localStorage.getItem("zoneDetails"); - let zonesResp = []; this.hideDeleteModal(); try { this.setState({ blockUI: true }); @@ -478,20 +476,6 @@ class ServiceForm extends Component { url: `plugins/services/${serviceId}`, method: "delete" }); - if ( - localStorageZoneDetails !== undefined && - localStorageZoneDetails !== null - ) { - zonesResp = await fetchApi({ - url: `public/v2/api/zones/${ - JSON.parse(localStorageZoneDetails)?.value - }/service-headers` - }); - - if (isEmpty(zonesResp?.data)) { - localStorage.removeItem("zoneDetails"); - } - } this.setState({ blockUI: false }); toast.success("Successfully deleted the service"); this.props.navigate( diff --git a/security-admin/src/main/webapp/react-webapp/src/views/SideBar/TopNavBar.jsx b/security-admin/src/main/webapp/react-webapp/src/views/SideBar/TopNavBar.jsx index d4dbc57d1..860b1ab78 100644 --- a/security-admin/src/main/webapp/react-webapp/src/views/SideBar/TopNavBar.jsx +++ b/security-admin/src/main/webapp/react-webapp/src/views/SideBar/TopNavBar.jsx @@ -161,28 +161,12 @@ export const TopNavBar = (props) => { }; const deleteService = async (serviceId) => { - let localStorageZoneDetails = localStorage.getItem("zoneDetails"); - let zonesResp = []; hideDeleteModal(); try { await fetchApi({ url: `plugins/services/${serviceId}`, method: "delete" }); - if ( - localStorageZoneDetails !== undefined && - localStorageZoneDetails !== null - ) { - zonesResp = await fetchApi({ - url: `public/v2/api/zones/${ - JSON.parse(localStorageZoneDetails)?.value - }/service-headers` - }); - - if (isEmpty(zonesResp?.data)) { - localStorage.removeItem("zoneDetails"); - } - } toast.success("Successfully deleted the service"); navigate( serviceDefData?.name === "tag"