zRains commented on code in PR #3970:
URL: https://github.com/apache/ambari/pull/3970#discussion_r2020148856


##########
ambari-admin/src/main/resources/ui/ambari-admin/src/NavBar.tsx:
##########
@@ -0,0 +1,98 @@
+import { faUser } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { useEffect, useState } from "react";
+import {
+    Container,
+    Navbar,
+    Nav,
+    Dropdown,
+    DropdownDivider,
+} from "react-bootstrap";
+import {
+    decryptData,
+    getFromLocalStorage,
+    parseJSONData
+} from "./api/Utility.ts";
+import { get } from "lodash";
+import AmbariAboutModal from "./AmbariAboutModal";
+
+type NavBarProps = {
+    subPath: string;
+    clusterName: string;
+};
+
+export default function NavBar({ subPath, clusterName }: NavBarProps) {
+    const [showAmbariAboutModal, setShowAmbariAboutModal] = useState(false);
+    const [loginUserName, setLoginUserName] = useState("");
+    const [ambariLsVal, setAmbariLsVal] = useState(null);
+
+    useEffect(() => {
+        let ambariKey = getFromLocalStorage('ambari');
+        if (ambariKey) {
+            setAmbariLsVal(parseJSONData(decryptData(ambariKey)));
+        }
+    }, []);
+
+    useEffect(() => {
+        if (ambariLsVal) {
+            const loginName = get(ambariLsVal, 'app.loginName');
+            if (loginName) {
+                setLoginUserName(loginName);
+            }
+        }
+    }, [ambariLsVal]);
+
+    return (
+        <div>
+            {showAmbariAboutModal ? (
+                <AmbariAboutModal
+                    isOpen={showAmbariAboutModal}
+                    onClose={() => setShowAmbariAboutModal(false)}
+                />
+            ) : null}
+            <Navbar collapseOnSelect expand="lg" className="bg-white">
+                <Container className="d-flex justify-content-between">
+                    <Navbar.Brand
+                        className="text-black m-0 breadcrumb d-flex 
align-items-center"
+                        style={{ fontSize: 24 }}
+                    >
+                        {" "}

Review Comment:
   Remove redundant strings.



##########
ambari-admin/src/main/resources/ui/ambari-admin/src/api/logout.ts:
##########
@@ -0,0 +1,35 @@
+import { encryptData, decryptData, getFromLocalStorage, parseJSONData, 
setInLocalStorage } from "./Utility.ts";
+import { adminApi } from "./configs/axiosConfig.ts";
+import { AxiosError } from 'axios';
+
+const signOut = async () => {
+    // var data = JSON.parse(decryptData(localStorage.getItem("ambari")));
+    let ambariKey = getFromLocalStorage('ambari');
+    let data;
+    if (ambariKey) {
+        data = parseJSONData(decryptData(ambariKey));
+    }
+    delete data.app.authenticated;
+    delete data.app.loginName;
+    delete data.app.user;
+
+    //with encrypting set data in LS
+    setInLocalStorage('ambari', encryptData(JSON.stringify(data)));
+
+    const headers = {
+        'Authorization': 'Basic ' + 'invalid_username:password'

Review Comment:
   The current ambari-server uses cookie-based authentication, but it seems 
you’ve implemented it using a JWT approach. What is the purpose of this here?



##########
ambari-admin/src/main/resources/ui/ambari-admin/src/NavBar.tsx:
##########
@@ -0,0 +1,98 @@
+import { faUser } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { useEffect, useState } from "react";
+import {
+    Container,
+    Navbar,
+    Nav,
+    Dropdown,
+    DropdownDivider,
+} from "react-bootstrap";
+import {
+    decryptData,
+    getFromLocalStorage,
+    parseJSONData
+} from "./api/Utility.ts";
+import { get } from "lodash";
+import AmbariAboutModal from "./AmbariAboutModal";

Review Comment:
   File missing.



##########
ambari-admin/src/main/resources/ui/ambari-admin/src/NavBar.tsx:
##########
@@ -0,0 +1,98 @@
+import { faUser } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { useEffect, useState } from "react";
+import {
+    Container,
+    Navbar,
+    Nav,
+    Dropdown,
+    DropdownDivider,
+} from "react-bootstrap";
+import {
+    decryptData,
+    getFromLocalStorage,
+    parseJSONData
+} from "./api/Utility.ts";
+import { get } from "lodash";
+import AmbariAboutModal from "./AmbariAboutModal";
+
+type NavBarProps = {
+    subPath: string;
+    clusterName: string;
+};
+
+export default function NavBar({ subPath, clusterName }: NavBarProps) {
+    const [showAmbariAboutModal, setShowAmbariAboutModal] = useState(false);
+    const [loginUserName, setLoginUserName] = useState("");
+    const [ambariLsVal, setAmbariLsVal] = useState(null);
+
+    useEffect(() => {
+        let ambariKey = getFromLocalStorage('ambari');
+        if (ambariKey) {
+            setAmbariLsVal(parseJSONData(decryptData(ambariKey)));
+        }
+    }, []);
+
+    useEffect(() => {
+        if (ambariLsVal) {
+            const loginName = get(ambariLsVal, 'app.loginName');
+            if (loginName) {
+                setLoginUserName(loginName);
+            }
+        }
+    }, [ambariLsVal]);
+
+    return (
+        <div>
+            {showAmbariAboutModal ? (
+                <AmbariAboutModal
+                    isOpen={showAmbariAboutModal}
+                    onClose={() => setShowAmbariAboutModal(false)}
+                />
+            ) : null}

Review Comment:
   My understanding is that `isOpen` alone can control the display and hiding 
of `AmbariAboutModal`. Why is an additional layer of render conditional 
wrapping needed?



-- 
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: dev-unsubscr...@ambari.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ambari.apache.org
For additional commands, e-mail: dev-h...@ambari.apache.org

Reply via email to