mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-17 21:30:31 +00:00
re-structure to monorepo.
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
// @ts-nocheck
|
||||
import React from 'react';
|
||||
import { Overlay, OverlayProps } from '@blueprintjs/core';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { SidebarOverlayContainer } from './SidebarOverlayContainer';
|
||||
import { ISidebarMenuItem, ISidebarMenuItemType } from '../Sidebar/interfaces';
|
||||
|
||||
export interface ISidebarOverlayItem {
|
||||
text: string;
|
||||
href: string;
|
||||
divider?: boolean;
|
||||
label?: boolean;
|
||||
}
|
||||
|
||||
export interface ISidebarOverlayProps {
|
||||
items: ISidebarMenuItem[];
|
||||
}
|
||||
|
||||
export interface ISidebarOverlayItemProps {
|
||||
text: string | JSX.Element;
|
||||
href: string;
|
||||
onClick?: any;
|
||||
}
|
||||
|
||||
export interface ISidebarOverlayItemDivider {
|
||||
divider: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay item.
|
||||
* @param {ISidebarOverlayItemProps}
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
export function SidebarOverlayItemLink({
|
||||
text,
|
||||
href,
|
||||
onClick,
|
||||
}: ISidebarOverlayItemProps) {
|
||||
return (
|
||||
<div className="sidebar-overlay__item">
|
||||
<Link to={href} onClick={onClick}>
|
||||
{text}
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export interface ISidebarOverlayItemLabel {
|
||||
text: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay label item.
|
||||
* @param {ISidebarOverlayItemLabel}
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
export function SidebarOverlayLabel({
|
||||
text,
|
||||
}: ISidebarOverlayItemLabel): JSX.Element {
|
||||
return <div className="sidebar-overlay__label">{text}</div>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay divider item.
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
export function SidebarOverlayDivider() {
|
||||
return <div className={'sidebar-overlay__divider'}></div>;
|
||||
}
|
||||
|
||||
interface SidebarOverlayItemProps {
|
||||
item: ISidebarMenuItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay item.
|
||||
* @param {SidebarOverlayItemProps} props -
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
function SidebarOverlayItem({ item }: SidebarOverlayItemProps) {
|
||||
//
|
||||
return item.type === ISidebarMenuItemType.Group ? (
|
||||
<SidebarOverlayLabel text={item.text} />
|
||||
) : //
|
||||
item.type === ISidebarMenuItemType.Link ||
|
||||
item.type === ISidebarMenuItemType.Dialog ? (
|
||||
<SidebarOverlayItemLink text={item.text} href={item.href} onClick={item.onClick} />
|
||||
) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export interface ISidebarOverlayMenu {
|
||||
items: ISidebarMenuItem[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay menu.
|
||||
* @param {ISidebarOverlayMenu}
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
function SidebarOverlayMenu({ items }: ISidebarOverlayMenu) {
|
||||
return (
|
||||
<div className="sidebar-overlay__menu">
|
||||
{items.map((item) => (
|
||||
<SidebarOverlayItem item={item} />
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export interface SidebarOverlayProps extends OverlayProps {
|
||||
items: ISidebarMenuItem[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay component.
|
||||
* @param {SidebarOverlayProps}
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
export function SidebarOverlay({ items, label, ...rest }: SidebarOverlayProps) {
|
||||
return (
|
||||
<Overlay
|
||||
portalContainer={
|
||||
(document.querySelector('.Pane.vertical.Pane2') as HTMLElement) ||
|
||||
document.body
|
||||
}
|
||||
transitionDuration={100}
|
||||
backdropClassName={'sidebar-overlay-backdrop'}
|
||||
{...rest}
|
||||
>
|
||||
<div className="sidebar-overlay sidebar-overlay-transition">
|
||||
<SidebarOverlayContainer>
|
||||
{label && <SidebarOverlayLabel text={label} />}
|
||||
|
||||
<SidebarOverlayMenu items={items} />
|
||||
</SidebarOverlayContainer>
|
||||
</div>
|
||||
</Overlay>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// @ts-nocheck
|
||||
import React from 'react';
|
||||
import * as R from 'ramda';
|
||||
|
||||
import { SidebarOverlay } from './SidebarOverlay';
|
||||
import withDashboardSidebarActions from '@/containers/Dashboard/Sidebar/withDashboardSidebarActions';
|
||||
import withDashboardSidebar from '@/containers/Dashboard/Sidebar/withDashboardSidebar';
|
||||
|
||||
import { useSubSidebarMenu } from '../Sidebar/hooks';
|
||||
|
||||
/**
|
||||
* Dashboard sidebar menu.
|
||||
* @returns {JSX.Element}
|
||||
*/
|
||||
function SidebarOverlayBindedRoot({
|
||||
// #withDashboardSidebar
|
||||
sidebarSubmenuOpen,
|
||||
sidebarSubmenuId,
|
||||
|
||||
// #withDashboardSidebarActions
|
||||
closeDashboardSidebarSubmenu,
|
||||
}) {
|
||||
const handleSidebarClosing = React.useCallback(() => {
|
||||
closeDashboardSidebarSubmenu();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<SidebarOverlayBindedRouter
|
||||
sidebarSubmenuId={sidebarSubmenuId}
|
||||
isOpen={sidebarSubmenuOpen}
|
||||
onClose={handleSidebarClosing}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dashboard sidebar submenu router.
|
||||
*/
|
||||
function SidebarOverlayBindedRouter({ sidebarSubmenuId, ...rest }) {
|
||||
const sidebarItems = useSubSidebarMenu(sidebarSubmenuId);
|
||||
|
||||
return <SidebarOverlay items={sidebarItems} {...rest} />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay binded with redux.
|
||||
*/
|
||||
export const SidebarOverlayBinded = R.compose(
|
||||
withDashboardSidebar(({ sidebarSubmenuOpen, sidebarSubmenuId }) => ({
|
||||
sidebarSubmenuOpen,
|
||||
sidebarSubmenuId,
|
||||
})),
|
||||
withDashboardSidebarActions,
|
||||
)(SidebarOverlayBindedRoot);
|
||||
@@ -0,0 +1,22 @@
|
||||
// @ts-nocheck
|
||||
import React from 'react';
|
||||
import { Scrollbar } from 'react-scrollbars-custom';
|
||||
|
||||
export interface ISidebarOverlayContainerProps {
|
||||
children: JSX.Element | JSX.Element[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sidebar overlay container.
|
||||
*/
|
||||
export function SidebarOverlayContainer({
|
||||
children,
|
||||
}: ISidebarOverlayContainerProps) {
|
||||
return (
|
||||
<div className={'sidebar-overlay__scroll-wrapper'}>
|
||||
<Scrollbar noDefaultStyles={true}>
|
||||
<div className="sidebar-overlay__inner">{children}</div>
|
||||
</Scrollbar>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// @ts-nocheck
|
||||
export * from './SidebarOverlay';
|
||||
export * from './SidebarOverlayContainer';
|
||||
export * from './SidebarOverlayBinded'
|
||||
Reference in New Issue
Block a user