import React, { useEffect, useState, useMemo } from "react"; import { classNames, M, Icon, Button } from "@jambonz/ui-kit"; import { Link, useLocation, useNavigate } from "react-router-dom"; import { Icons, ModalForm } from "src/components"; import { naviTop, naviByo } from "./items"; import { UserMe } from "../user-me"; import { useSelectState, useDispatch, toastSuccess, toastError, } from "src/store"; import { getActiveSP, setActiveSP } from "src/store/localStore"; import { postServiceProviders } from "src/api"; import type { NaviItem } from "./items"; import "./styles.scss"; import { ScopedAccess } from "src/components/scoped-access"; import { Scope, UserData } from "src/store/types"; import { USER_ADMIN } from "src/api/constants"; import { ROUTE_LOGIN } from "src/router/routes"; import { Lcr } from "src/api/types"; type CommonProps = { handleMenu: () => void; }; type NaviProps = CommonProps & { mobile: boolean; className: string; handleLogout: () => void; }; type ItemProps = CommonProps & { item: NaviItem; user?: UserData; lcr?: Lcr; }; const Item = ({ item, user, lcr, handleMenu }: ItemProps) => { const location = useLocation(); const active = location.pathname.includes(item.route(user)); return (
  • {item.label}
  • ); }; export const Navi = ({ mobile, className, handleMenu, handleLogout, }: NaviProps) => { const dispatch = useDispatch(); const navigate = useNavigate(); const user = useSelectState("user"); const lcr = useSelectState("lcr"); const accessControl = useSelectState("accessControl"); const serviceProviders = useSelectState("serviceProviders"); const currentServiceProvider = useSelectState("currentServiceProvider"); const [sid, setSid] = useState(""); const [modal, setModal] = useState(false); const [name, setName] = useState(""); const naviByoFiltered = useMemo(() => { return naviByo.filter( (item) => !item.acl || (item.acl && accessControl[item.acl]), ); }, [accessControl, currentServiceProvider]); const naviTopFiltered = useMemo(() => { return naviTop.filter((item) => { if (item.scope === undefined) { return true; } else if (user) { if (item.restrict) { return user.access === item.scope; } return user.access >= item.scope; } }); }, [user]); const handleSubmit = () => { postServiceProviders({ name }) .then(({ json }) => { toastSuccess( <> Added new service provider {name} , ); dispatch({ type: "serviceProviders" }); setSid(json.sid); setActiveSP(json.sid); setName(""); setModal(false); }) .catch((error) => { toastError(error.msg); }); }; const handleCancel = () => { setName(""); setModal(false); }; /** Subscribe to change events on the service provider { setSid(e.target.value); setActiveSP(e.target.value); navigate(ROUTE_LOGIN); }} disabled={user?.scope !== USER_ADMIN} > {currentServiceProvider ? ( serviceProviders.map((serviceProvider) => { return ( ); }) ) : ( )}
    BYO Services:
    jambonz
    {modal && (
    setName(e.target.value)} />
    )} ); };