cal.pub0.org/packages/ui/v2/navigation/tabs/VerticalTabItem.tsx

86 lines
2.5 KiB
TypeScript
Raw Normal View History

Feat/design system (#3051) * Storybook Boilerplate setup * Inital Setup * First story * Color Design System * Badge Story + Comp * Checkbox UI + Stories * Update Red colors + Button Group * Switch+Stories / Default brand color * Update Version + Button Group combined * Compact Butotn Group * Tidy up Selectors * Adds Tooltip to Button * TextInput * Update SB * Prefix Input * Match text area styles * Prefix Controls * Update spacing on text area * Text Input Suffix * Color Picker * Update storybook * Icon Suffix/Prefix * Datepicker + move components to monorepo * Text color on labels * Move Radio over to monorepo * Move CustomBranding to calcom/ib * Radio * IconBadge Component * Update radio indicator background * Disabled radio state * Delete yarn.lock * Revert "Delete yarn.lock" This reverts commit 9b99d244b70872153a16bec1f1f3bc651e94be7a. * Fix webhook test * Replace old toast location * Update radio path * Empty State * Update Badge.tsx * Update Badge.tsx * Banner Component+story * Creation Modal * Creation Dialog updated * Button hover dialog * Confirmation Modal * Datepicker (Booking) * PageHeader * Fix border width * PageHeader update search bar * Fix input height * Fix button group size * Add spacing between badges - font smoothing * Update button position on banner * Banner update * Fixing focus state on suffix/prefix inputs * Implement A11y addon * Add aria label * error && "text-red-800" * Fix button hover * Change colors * Generate snapshot tests for on hover button * Revert colors to demo * Change colors * Fix Linear Issues * Form Stepper component * Add padding back to input * Move ui to UI_V2 * Use V2 * Update imports for v1 * Update imports for v1 * Upgrade to nextjs in storybook root * Update website submodule * Avatar Groups * Fix webpack again * Vertical Tab Item [WIP] - active state on small item is not working currently * Vertical Tab Group * Add Github action * Fix website submodule * Fix GH action * Rename Workflow * Adds lint report for CI * Lint report fixes * NavigationItem comments * VerticalTabItem type fixes * Fix avatar blur * Fix comments * Adding isEmbed to window object * Disable components that use router mock. * Load inter via google fonts * Started select * Adding base Breadcrumb * Update readme * Formatting * Fixes * Dependencies matching * Linting * Update FormStep.stories.tsx * Linting * Update MultiSelectCheckboxes.tsx Co-authored-by: zomars <zomars@me.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2022-07-23 00:39:50 +00:00
import noop from "lodash/noop";
import Link from "next/link";
import { useRouter } from "next/router";
import { FC, Fragment, MouseEventHandler } from "react";
import { ChevronRight } from "react-feather";
import classNames from "@calcom/lib/classNames";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { SVGComponent } from "@calcom/types/SVGComponent";
export type VerticalTabItemProps = {
name: string;
info?: string;
icon?: SVGComponent;
disabled?: boolean;
} & (
| {
/** If you want to change query param tabName as per current tab */
href: string;
tabName?: never;
}
| {
href?: never;
/** If you want to change the path as per current tab */
tabName: string;
}
);
const VerticalTabItem: FC<VerticalTabItemProps> = ({ name, href, tabName, info, ...props }) => {
const router = useRouter();
const { t } = useLocale();
let newHref = "";
let isCurrent;
if (href) {
newHref = href;
isCurrent = router.asPath === href;
} else if (tabName) {
newHref = "";
isCurrent = router.query.tabName === tabName;
}
const onClick: MouseEventHandler = tabName
? (e) => {
e.preventDefault();
router.push({
query: {
...router.query,
tabName,
},
});
}
: noop;
return (
<Fragment key={name}>
<Link key={name} href={props.disabled ? "#" : newHref}>
<a
onClick={onClick}
className={classNames(
isCurrent ? "bg-gray-200 text-gray-900" : "bg-white text-gray-600 hover:bg-gray-100",
"group flex h-14 w-64 flex-row rounded-md px-3 py-[10px]",
props.disabled && "pointer-events-none !opacity-30",
!info ? "h-9" : "h-14"
)}
aria-current={isCurrent ? "page" : undefined}>
{props.icon && <props.icon className="mr-[10px] h-[14px] w-[14px] stroke-[1.5px]" />}
<div
className={classNames(
isCurrent ? "font-bold text-gray-900" : "text-gray-600 group-hover:text-gray-700"
)}>
<p className="pb-1 text-sm font-medium leading-none">{t(name)}</p>
{info && <p className="text-xs font-normal">{t(info)}</p>}
</div>
{isCurrent && (
<div className="ml-auto self-center">
<ChevronRight className="stroke-[1.5px]" />
</div>
)}
</a>
</Link>
</Fragment>
);
};
export default VerticalTabItem;