mirror of
https://github.com/roleypoly/roleypoly.git
synced 2025-04-24 11:29:12 +00:00
* feat(design-system): add editor skeletons * use css media queries rather than JS media queries * init remake * feat: add basis of toggle atom * finish toggle * use pointer cursor with toggle * sync * feat: add server message in editor * cleanup storybook * add short editor item and data model for categories * chore: fix build by moving jest version downward * chore: remove old category editor * chore: fix EditorCategoryShort index * add editor wiring and styling updates * fix linting issues
85 lines
2.1 KiB
TypeScript
85 lines
2.1 KiB
TypeScript
// thing should be everything visible on desktop/tablet and a popover when small
|
|
|
|
import { Popover } from '@roleypoly/design-system/atoms/popover';
|
|
import { useState } from 'react';
|
|
import { GoChevronDown } from 'react-icons/go';
|
|
import {
|
|
DropdownNavCurrent,
|
|
DropdownNavIcon,
|
|
DropdownNavOpener,
|
|
HideIfNotSmall,
|
|
HideIfSmall,
|
|
NavItem,
|
|
} from './QuickNav.styled';
|
|
|
|
export type QuickNavProps = {
|
|
navItems: string[];
|
|
onNavChange?: (newNavItem: string) => void;
|
|
currentNavItem?: string;
|
|
};
|
|
|
|
export const QuickNav = (props: QuickNavProps) => {
|
|
return (
|
|
<>
|
|
<QuickNavExpanded {...props} />
|
|
<QuickNavCollapsed {...props} />
|
|
</>
|
|
);
|
|
};
|
|
|
|
export const QuickNavExpanded = (props: QuickNavProps) => {
|
|
return (
|
|
<HideIfSmall>
|
|
{props.navItems.map((navItem) => (
|
|
<NavItem
|
|
onClick={() => props.onNavChange?.(navItem)}
|
|
selected={props.currentNavItem === navItem}
|
|
key={navItem}
|
|
>
|
|
{navItem}
|
|
</NavItem>
|
|
))}
|
|
</HideIfSmall>
|
|
);
|
|
};
|
|
|
|
export const QuickNavCollapsed = (props: QuickNavProps) => {
|
|
const [popoverState, setPopoverState] = useState(false);
|
|
|
|
return (
|
|
<HideIfNotSmall>
|
|
{popoverState ? (
|
|
<Popover
|
|
headContent={<>Server Editor</>}
|
|
position={'top left'}
|
|
active={popoverState}
|
|
onExit={() => setPopoverState(false)}
|
|
>
|
|
{() => (
|
|
<>
|
|
{props.navItems.map((navItem) => (
|
|
<NavItem
|
|
onClick={() => {
|
|
setPopoverState(false);
|
|
props.onNavChange?.(navItem);
|
|
}}
|
|
selected={props.currentNavItem === navItem}
|
|
key={navItem}
|
|
>
|
|
{navItem}
|
|
</NavItem>
|
|
))}
|
|
</>
|
|
)}
|
|
</Popover>
|
|
) : (
|
|
<DropdownNavOpener onClick={() => setPopoverState(true)}>
|
|
<DropdownNavIcon>
|
|
<GoChevronDown />
|
|
</DropdownNavIcon>
|
|
<DropdownNavCurrent>{props.currentNavItem}</DropdownNavCurrent>
|
|
</DropdownNavOpener>
|
|
)}
|
|
</HideIfNotSmall>
|
|
);
|
|
};
|