简体   繁体   English

如何根据用户呈现侧边栏

[英]How can I render sidebar depend on user

I have 5 types of users and all users access sidebar depending on which users are they.我有 5 种类型的用户,所有用户都可以访问侧边栏,具体取决于他们是哪些用户。 I shared with you the user details in the screenshot.我在屏幕截图中与您分享了用户详细信息。 you can check walletClasList, and also issuerAccess, userAccess, macAccess, nodeAccess.你可以查看 walletClasList,还有 issuerAccess、userAccess、macAccess、nodeAccess。

If you have any query or questions so you can contact me on my stack overflow account or insta dhansukh_katariya如果您有任何疑问或问题,可以通过我的堆栈溢出帐户或insta dhansukh_katariya与我联系

import { Link } from 'react-router-dom';
import { webwalletnavbar } from '../Constatnts/Sidebaritems';
import { useEffect, useState } from 'react';
import http from '../api/httpService';

function Sidebar() {
  let pathname = window.location.pathname;
  const [menu, setMenu] = useState([]);
  // const [userSidebar, setUserSidebar] = useState();
  
  useEffect(() => {
    async function fetchData() {
      let response = await http.get('api/security/GetNavigation');
      setMenu(response.data);
    }
    fetchData();
  }, []);
  let dynamicClassId = '';
  console.log(menu);

  return (
    <>
      {/* <div className="container-fluid p-0"> */}
      {/* <div className="row m-0"> */}
      {/* <div className="col-md-3 col-lg-3 col-xxl-2 p-0"> */}
      <div className='sidebar'>
        {menu &&
          menu.map((menu, index) => {
            // let id=menu.itemLevel===1&&menu.keycode;
            if (menu.itemLevel === 1) {
              dynamicClassId =
                menu.displayname.replace(/ /g, '') + menu.navbarID;
            }
            return (
              <div className='accordion sidebar-main' key={index} id='sd'>
                <div
                  // className="issuers"
                  className={
                    menu.walletClassList === 'NODE,MA,ISSUER,USER'
                      ? 'issuers d-block'
                      : 'issuers d-none'
                  }
                >
                  {menu.itemLevel === 1 && (
                    <h2
                      // className="accordion-header active"
                      className={
                        webwalletnavbar.includes(pathname)
                          ? 'accordion-header active'
                          : 'accordion-header'
                      }
                      // {
                      // Issuer.includes(pathname)
                      // ? "accordion-header active"
                      // : "accordion-header"
                      // }
                      id={menu.keycode}
                    >
                      <button
                        className='accordion-button'
                        type='button'
                        data-bs-toggle='collapse'
                        data-bs-target={'#' + dynamicClassId}
                      >
                        <div className='sidebar-main-label d-flex align-items-center '>
                          {webwalletnavbar.includes(pathname) ? (
                            <img
                              src='../icons/Issuers-icon-active.png'
                              className='issuers-icon-img show'
                              alt='Issuers-icon-img'
                            ></img>
                          ) : (
                            <img
                              src='../icons/Issuers-icon.png'
                              className='issuers-icon-img none'
                              alt='issuers-icon-img'
                            ></img>
                          )}
                          <h3>{menu.displayname}</h3>
                        </div>
                      </button>
                    </h2>
                  )}
                  {menu.itemLevel === 2 && (
                    <div
                      id={dynamicClassId}
                      // className={
                      //   menu.walletClassList === "NODE,MA,0,0" &&
                      //   menu.itemLevel === 2
                      //     ? "accordion-collapse collapse show d-block"
                      //     : "accordion-collapse collapse show d-none"
                      // }
                      className={
                        webwalletnavbar.includes(pathname)
                          ? 'accordion-collapse collapse '
                          : 'accordion-collapse collapse show'
                      }
                      aria-labelledby='issuers'
                      data-bs-parent='#sd'
                    >
                      <ul>
                        <li>
                          <Link
                            to={{
                              pathname: '/webwallet/model2',
                              // query: { backUrl: "/webwallet/createissuer" },
                              search: `?backUrl=${menu.webURL}`,
                            }}
                            className={
                              pathname === menu.webURL ? ' active' : ''
                            }
                          >
                            {menu.displayname}
                          </Link>
                        </li>
                      </ul>
                    </div>
                  )}
                </div>
              </div>
            );
          })}
      </div>
      {/* </div> */}
      {/* </div> */}
      {/* </div> */}
    </>
  );
}

export default Sidebar;

this is a image of data base, as you can see user data.这是数据库的图像,您可以看到用户数据。

enter image description here在此处输入图像描述

You should divide all menus in to different components.您应该将所有菜单分成不同的组件。 and then render those conditionally.然后有条件地渲染那些。

Like for whole sidebar create a Component <SideBar></SideBar> then for each menu create components <wallet></wallet> <issuer></issuer> etc就像为整个侧边栏创建一个组件<SideBar></SideBar>然后为每个菜单创建组件<wallet></wallet> <issuer></issuer>

Then if user has_access to wallet render it similarly others.然后,如果用户has_access可以像其他人一样呈现钱包。

Code should look like:代码应如下所示:

<SideBar>
  {
     user.type === "walletClasList" ?
     </wallet>
     : user.type === "issuer" ? </issuer> : <so-on>
  }
</SideBar>

Now you just call Sidebar wherever you need现在您只需在任何需要的地方调用Sidebar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM