mscodepl-react-sidebar
Version:
compitable with react js and next js.
367 lines (352 loc) • 17.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var cg = require('react-icons/cg');
var io = require('react-icons/io');
var Gravatar = _interopDefault(require('react-gravatar'));
var ai = require('react-icons/ai');
var fi = require('react-icons/fi');
var SideBarContext = /*#__PURE__*/React.createContext({});
/**
* @description wrape your react router using this sidebarbar wrapper or wrape all component in _App.tsx in next js application
*/
function SidebarWrapper(_ref) {
var _ref$title = _ref.title,
title = _ref$title === void 0 ? undefined : _ref$title,
logoUrl = _ref.logoUrl,
userName = _ref.userName,
userEmail = _ref.userEmail,
_ref$activeStyle = _ref.activeStyle,
activeStyle = _ref$activeStyle === void 0 ? "fill" : _ref$activeStyle,
children = _ref.children,
mobileHeaderContent = _ref.mobileHeaderContent,
navItems = _ref.navItems,
onLogOut = _ref.onLogOut,
_ref$onProfileImgClic = _ref.onProfileImgClick,
onProfileImgClick = _ref$onProfileImgClic === void 0 ? function () {} : _ref$onProfileImgClic,
_ref$onLogoClick = _ref.onLogoClick,
onLogoClick = _ref$onLogoClick === void 0 ? function () {} : _ref$onLogoClick;
var _useState = React.useState(false),
small = _useState[0],
setSmall = _useState[1];
return React__default.createElement(SideBarContext.Provider, {
value: {
title: title,
small: small,
setSmall: setSmall,
logoUrl: logoUrl,
userName: userName,
userEmail: userEmail,
activeStyle: activeStyle,
mobileHeaderContent: mobileHeaderContent,
navItems: navItems,
onLogOut: onLogOut,
onProfileImgClick: onProfileImgClick,
onLogoClick: onLogoClick
}
}, children);
}
function Footer() {
var _useContext = React.useContext(SideBarContext),
small = _useContext.small,
setSmall = _useContext.setSmall,
userName = _useContext.userName,
userEmail = _useContext.userEmail,
onLogOut = _useContext.onLogOut,
onProfileImgClick = _useContext.onProfileImgClick;
return React__default.createElement("div", {
className: "rs_user rs-w-full " + (small === true ? "sm:rs-w-[65px]" : "sm:rs-w-[240px]") + " rs-overflow-x-hidden rs-fixed rs-bottom-0 rs-left-0 rs-px-4 rs-py-3 rs-bg-white"
}, React__default.createElement("div", {
className: 'rs-flex rs-gap-2 rs-justify-between rs-items-center'
}, React__default.createElement("div", {
className: "rs-w-8 rs-h-8 rs-cursor-pointer",
onClick: onProfileImgClick
}, React__default.createElement(Gravatar, {
email: userEmail,
size: 100,
rating: "pg",
className: "rs-rounded-full rs-shadow rs-w-8 rs-h-8 rs-overflow-hidden rs-object-cover"
})), React__default.createElement("a", {
href: "/account",
className: (small === true ? "rs-hidden" : "rs-block") + " font-bold rs-whitespace-pre-line truncate rs-leading-none " + userName
}, "Moje Konto"), React__default.createElement(io.IoMdExit, {
onClick: onLogOut,
className: (small === true ? "rs-hidden" : "rs-block") + " rs-text-3xl rs-rounded rs-bg-slate-200 rs-p-2 rs-cursor-pointer"
})), small === true && React__default.createElement(io.IoIosArrowForward, {
onClick: function onClick() {
setSmall(function (old) {
return !old;
});
},
className: 'rs-my-2 rs-text-3xl rs-rounded rs-bg-slate-200 rs-p-2 rs-cursor-pointer'
}));
}
function LeftOffCanvas(_ref) {
var show = _ref.show,
title = _ref.title,
setShow = _ref.setShow,
children = _ref.children;
var show_class = 'rs-offcanvas rs-offcanvas-end rs-fixed rs-bottom-0 rs-flex rs-flex-col rs-max-w-full rs-bg-white rs-bg-clip-padding rs-outline-none rs-transition rs-translate-x-0 rs-duration-300 rs-ease-in-out rs-text-gray-700 rs-top-0 rs-left-0 rs-border-none rs-w-64 md:rs-w-80 rs-shadow-xl rs-z-[1200]';
var hide_class = 'rs-offcanvas rs-offcanvas-end rs-fixed rs-bottom-0 rs-flex rs-flex-col rs-max-w-full rs-bg-white rs-bg-clip-padding rs-outline-none rs-transition -rs-translate-x-full rs-duration-300 rs-ease-in-out rs-text-gray-700 rs-top-0 rs-left-0 rs-border-none rs-w-64 md:rs-w-80 rs-shadow-xl rs-z-[1200]';
var hide = function hide() {
setShow(false);
};
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
className: show === true ? show_class : hide_class
}, React__default.createElement("div", {
className: "rs-offcanvas-header rs-flex rs-items-center rs-justify-between rs-p-4"
}, React__default.createElement("h5", {
className: "rs-offcanvas-title rs-mb-0 rs-leading-normal rs-font-semibold rs-uppercase"
}, title), React__default.createElement(ai.AiOutlineCloseCircle, {
onClick: hide,
className: 'rs-text-2xl rs-cursor-pointer'
})), React__default.createElement("hr", null), React__default.createElement("div", {
className: "rs-offcanvas-body rs-flex-grow rs-p-4 rs-overflow-y-auto"
}, children)), React__default.createElement("div", {
className: show === true ? "rs-absolute rs-top-0 rs-left-0 rs-bg-black rs-bg-opacity-50 rs-block rs-h-full rs-w-full " : "rs-hidden",
onClick: hide
}));
}
function Navs() {
var _useContext = React.useContext(SideBarContext),
navItems = _useContext.navItems,
small = _useContext.small;
return React__default.createElement("ul", {
className: "rs_menus " + (small === true ? "sm:rs-mb-[90px]" : "sm:rs-mb-[45px]")
}, navItems.map(function (Item, idx) {
return React__default.createElement("li", {
key: idx
}, React__default.createElement(Item, null));
}));
}
function MobileSidebar() {
var _useState = React.useState(false),
show = _useState[0],
setShow = _useState[1];
var _useContext = React.useContext(SideBarContext),
title = _useContext.title,
logoUrl = _useContext.logoUrl,
userEmail = _useContext.userEmail,
onProfileImgClick = _useContext.onProfileImgClick,
onLogoClick = _useContext.onLogoClick,
mobileHeaderContent = _useContext.mobileHeaderContent;
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
className: 'rs-flex sm:rs-hidden rs-px-5 rs-py-2 rs-bg-white rs-shadow'
}, React__default.createElement("div", {
className: "rs-flex rs-w-full rs-gap-2 rs-justify-start rs-items-center"
}, React__default.createElement(cg.CgMenuLeft, {
className: 'rs-text-3xl rs-cursor-pointer',
onClick: function onClick() {
return setShow(true);
}
}), React__default.createElement("img", {
src: logoUrl,
className: "rs-w-9 rs-h-9 rs-max-w-full rs-rounded-full rs-cursor-pointer",
alt: "",
onClick: onLogoClick
})), React__default.createElement("div", {
className: 'rs-flex justify-end items-center rs-gap-2'
}, mobileHeaderContent && React__default.createElement(React__default.Fragment, null, mobileHeaderContent), React__default.createElement("div", {
className: 'rs-w-9 rs-h-9 rs-cursor-pointer rs-flex rs-items-center',
onClick: onProfileImgClick
}, React__default.createElement(Gravatar, {
email: userEmail,
size: 100,
rating: "pg",
className: "rs-rounded-full rs-shadow rs-w-8 rs-h-8 rs-overflow-hidden rs-object-cover"
})))), React__default.createElement(LeftOffCanvas, {
title: title || 'Options',
show: show,
setShow: setShow
}, React__default.createElement(Navs, null), React__default.createElement("div", {
className: 'rs-py-5'
}), React__default.createElement(Footer, null)));
}
function Sidebar() {
var _useContext = React.useContext(SideBarContext),
title = _useContext.title,
small = _useContext.small,
setSmall = _useContext.setSmall,
logoUrl = _useContext.logoUrl,
onLogoClick = _useContext.onLogoClick;
return (
// w-[65px] md:w-[240px]
React__default.createElement("div", {
className: "rs_main_sidebar rs_scrollbar " + (small === true ? "sm:rs-w-[65px]" : "sm:rs-w-[240px]") + " rs-transition-all rs-hidden sm:rs-block rs-bg-white rs-shadow rs-p-4 rs-fixed rs-overflow-x-hidden rs-h-full rs-top-0 rs-left-0"
}, React__default.createElement("div", {
className: "rs-flex rs-gap-2 rs-items-center"
}, React__default.createElement("img", {
src: logoUrl,
className: "rs-w-10 rs-max-w-full rs-cursor-pointer",
alt: "",
onClick: onLogoClick
}), title && !small && React__default.createElement("p", {
className: 'rs-font-bold rs-text-2xl rs-hidden md:rs-block'
}, title), React__default.createElement("div", {
className: "rs-w-full rs-justify-end " + (small === true ? "rs-hidden" : "rs-flex") + " "
}, React__default.createElement(io.IoIosArrowBack, {
onClick: function onClick() {
setSmall(function (old) {
return !old;
});
},
className: 'rs-text-3xl rs-rounded rs-bg-slate-200 rs-p-2 rs-cursor-pointer'
}))), React__default.createElement("hr", {
className: 'rs-my-2'
}), React__default.createElement("div", {
className: 'rs-flex rs-flex-col '
}, React__default.createElement(Navs, null), React__default.createElement(Footer, null)))
);
}
function PageWrapper(_ref) {
var children = _ref.children,
_ref$className = _ref.className,
className = _ref$className === void 0 ? 'rs-p-5' : _ref$className;
var _useContext = React.useContext(SideBarContext),
small = _useContext.small;
return React__default.createElement("div", {
className: "rs-w-full rs-h-full rs-min-h-screen sm:rs-flex"
}, React__default.createElement(Sidebar, null), React__default.createElement(MobileSidebar, null), React__default.createElement("div", {
className: "rs-transition-all rs-w-full " + (small === true ? "sm:rs-pl-[65px]" : "sm:rs-pl-[240px]") + " "
}, React__default.createElement("div", {
className: "rs-page-wrapper " + className
}, children)));
}
var Define = {
BG: 'rs-bg-slate-100',
H_BG: 'hover:rs-bg-slate-200',
BORDER: 'rs-border rs-border-slate-200',
ROUND: 'rs-rounded-md'
};
var createReactNavLink = function createReactNavLink(MainNavLink, title, to, icon, subMenus) {
if (subMenus === void 0) {
subMenus = [];
}
return function () {
var _useContext = React.useContext(SideBarContext),
small = _useContext.small,
activeStyle = _useContext.activeStyle;
var _useState = React.useState(false),
open = _useState[0],
setOpen = _useState[1];
// const [subActive, setSubActive] = useState(false)
var _useState2 = React.useState(''),
path = _useState2[0],
setPath = _useState2[1];
React.useEffect(function () {
setPath(window.location.pathname);
}, []);
// const path = typeof window !== "undefined" ? window.location.pathname : ""
// if submenus are there ....
//path.split('/')[1] === to.replace('/', '')
if (subMenus.length > 0) {
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
onClick: function onClick() {
setOpen(function (old) {
return !old;
});
},
className: "rs_downdown rs-cursor-pointer rs-my-2 " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " rs-flex rs-gap-2 " + Define.H_BG + " rs-justify-between rs-items-center " + (subMenus.map(function (item) {
return item.to;
}).includes(path) ? (activeStyle == "fill" ? Define.BG : Define.BORDER) + " " : "")
}, React__default.createElement("div", {
className: "rs-flex rs-gap-2 rs-justify-between rs-items-center"
}, React__default.createElement("span", {
className: "rs_my_icon"
}, " ", icon), React__default.createElement("span", {
className: (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem]"
}, title)), open === true ? React__default.createElement(fi.FiChevronUp, null) : React__default.createElement(fi.FiChevronDown, null)), React__default.createElement("div", {
className: (open === true ? "rs-block" : "rs-hidden") + " " + Define.ROUND + " " + (small ? "" : "rs-pl-1")
}, subMenus.map(function (item, idx) {
return React__default.createElement(MainNavLink, {
key: idx,
to: item.to,
className: function className(navinfo) {
return "rs_dropdown_item " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " rs-flex rs-gap-2 rs-items-center " + Define.H_BG + " " + (navinfo.isActive === true ? Define.BORDER : "");
}
}, React__default.createElement("span", {
className: "rs_my_icon"
}, " ", item.icon), React__default.createElement("span", {
className: "rs_nav_title " + (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem]"
}, item.title));
})));
}
return React__default.createElement(React__default.Fragment, null, React__default.createElement(MainNavLink, {
to: to,
className: function className(navinfo) {
return "rs-my-2 " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " " + Define.H_BG + " rs-flex rs-gap-2 rs-items-center " + (navinfo.isActive === true ? (activeStyle == "fill" ? Define.BG : Define.BORDER) + " " : "");
}
}, React__default.createElement("span", {
className: "rs_my_icon"
}, icon), React__default.createElement("span", {
className: "rs_nav_title " + (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem]"
}, title)));
};
};
var createNextNavLink = function createNextNavLink(MainNavLink, title, to, icon, subMenus) {
if (subMenus === void 0) {
subMenus = [];
}
return function () {
var _useContext = React.useContext(SideBarContext),
small = _useContext.small,
activeStyle = _useContext.activeStyle;
var _useState = React.useState(''),
path = _useState[0],
setPath = _useState[1];
var _useState2 = React.useState(false),
open = _useState2[0],
setOpen = _useState2[1];
React.useEffect(function () {
setPath(window.location.pathname);
}, []);
// if submenus are there ....
if (subMenus.length > 0) {
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
onClick: function onClick() {
setOpen(function (old) {
return !old;
});
},
className: "rs_downdown rs-cursor-pointer rs-my-2 " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " rs-flex rs-gap-2 " + Define.H_BG + " rs-justify-between rs-items-center " + (subMenus.map(function (item) {
return item.to;
}).includes(path) ? (activeStyle == "fill" ? Define.BG : Define.BORDER) + " " : "")
}, React__default.createElement("div", {
className: "rs-flex rs-gap-2 rs-justify-between rs-items-center"
}, React__default.createElement("span", {
className: "rs_my_icon"
}, icon), React__default.createElement("span", {
className: (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem] "
}, title)), open === true ? React__default.createElement(fi.FiChevronUp, null) : React__default.createElement(fi.FiChevronDown, null)), React__default.createElement("div", {
className: (open === true ? " rs-block" : "rs-hidden") + " " + Define.ROUND + " " + (small ? "" : "rs-pl-1")
}, subMenus.map(function (item, idx) {
return React__default.createElement(MainNavLink, {
key: idx,
href: item.to
}, React__default.createElement("a", {
className: "rs_dropdown_item " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " rs-flex rs-gap-2 rs-items-center " + Define.H_BG + " " + (path === item.to ? ' rs-border rs-border-slate-200' : '')
}, React__default.createElement("span", {
className: "rs_my_icon"
}, item.icon), React__default.createElement("span", {
className: "rs_nav_title " + (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem] "
}, item.title)));
})));
}
return React__default.createElement(React__default.Fragment, null, React__default.createElement(MainNavLink, {
href: to
}, React__default.createElement("a", {
className: "rs-my-2 " + (small ? 'rs-p-[7px]' : 'rs-px-2.5 rs-py-2.5') + " " + Define.ROUND + " " + Define.H_BG + " rs-flex rs-gap-2 rs-items-center " + (path === to ? "" + (activeStyle == "fill" ? Define.BG : Define.BORDER) : "")
}, React__default.createElement("span", {
className: "rs_my_icon"
}, icon), React__default.createElement("span", {
className: "rs_nav_title " + (small === true ? "rs-hidden" : "rs-block") + " rs-text-[0.8rem]"
}, title))));
};
};
exports.PageWrapper = PageWrapper;
exports.SidebarWrapper = SidebarWrapper;
exports.createNextNavLink = createNextNavLink;
exports.createReactNavLink = createReactNavLink;
//# sourceMappingURL=mscodepl-react-sidebar.cjs.development.js.map