Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions packages/lib/src/tabs/Tab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ const Underline = styled.span<{ active: boolean }>`

const DxcTab = forwardRef(
(
{ active, disabled, icon, label, notificationNumber, onClick, onHover, title, tabId }: TabProps,
{ active, disabled, icon, label, notificationNumber, onClick, onHover, title, tabId = label }: TabProps,
ref: Ref<HTMLButtonElement>
) => {
const {
Expand Down Expand Up @@ -124,7 +124,7 @@ const DxcTab = forwardRef(
}, [focusedTabId, tabId]);

useEffect(() => {
if (active) setActiveTabId?.(tabId);
if (active) setActiveTabId?.(tabId ?? "");
}, [active, tabId, setActiveTabId]);

return (
Expand All @@ -135,7 +135,9 @@ const DxcTab = forwardRef(
hasLabelAndIcon={Boolean(icon && label)}
iconPosition={iconPosition}
onClick={() => {
if (!isControlled) setActiveTabId?.(tabId);
if (!isControlled) {
setActiveTabId?.(tabId ?? "");
}
onClick?.();
}}
onKeyDown={handleOnKeyDown}
Expand All @@ -153,10 +155,11 @@ const DxcTab = forwardRef(
role="tab"
tabIndex={activeTabId === label && !disabled ? tabIndex : -1}
type="button"
aria-label={label ?? tabId ?? "tab"}
>
<LabelIconContainer iconPosition={iconPosition}>
{icon && <IconContainer>{typeof icon === "string" ? <DxcIcon icon={icon} /> : icon}</IconContainer>}
<Label>{label}</Label>
{label && <Label>{label}</Label>}
</LabelIconContainer>
{!disabled && notificationNumber && (
<BadgeContainer hasLabelAndIcon={Boolean(icon && label)} iconPosition={iconPosition}>
Expand Down
96 changes: 62 additions & 34 deletions packages/lib/src/tabs/Tabs.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,131 +24,157 @@ const iconSVG = (

const tabs = (margin?: Space | Margin) => (
<DxcTabs margin={margin}>
<DxcTabs.Tab label="Tab 1" tabId="Tab 1" title="test tooltip">
<DxcTabs.Tab label="Tab 1" title="test tooltip">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2">
<DxcTabs.Tab label="Tab 2">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3" disabled>
<DxcTabs.Tab label="Tab 3" disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 4" label="Tab 4">
<DxcTabs.Tab label="Tab 4">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 5" label="Tab 5">
<DxcTabs.Tab label="Tab 5">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 6" label="Tab 6">
<DxcTabs.Tab label="Tab 6">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 7" label="Tab 7">
<DxcTabs.Tab label="Tab 7">
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const disabledTabs = (
<DxcTabs>
<DxcTabs.Tab tabId="Tab 1" label="Tab 1" disabled>
<DxcTabs.Tab label="Tab 1" disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2" disabled>
<DxcTabs.Tab label="Tab 2" disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3" disabled>
<DxcTabs.Tab label="Tab 3" disabled>
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const firstDisabledTabs = (
<DxcTabs>
<DxcTabs.Tab tabId="Tab 1" label="Tab 1" disabled>
<DxcTabs.Tab label="Tab 1" disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2" disabled>
<DxcTabs.Tab label="Tab 2" disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3">
<DxcTabs.Tab label="Tab 3">
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const tabsNotification = (iconPosition?: "top" | "left") => (
<DxcTabs iconPosition={iconPosition}>
<DxcTabs.Tab tabId="Tab 1" label="Tab 1" notificationNumber={true}>
<DxcTabs.Tab label="Tab 1" notificationNumber={true}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2" notificationNumber={5}>
<DxcTabs.Tab label="Tab 2" notificationNumber={5}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3" notificationNumber={100} disabled>
<DxcTabs.Tab label="Tab 3" notificationNumber={100} disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 4" label="Tab 4" notificationNumber={200}>
<DxcTabs.Tab label="Tab 4" notificationNumber={200}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 5" label="Tab 5">
<DxcTabs.Tab label="Tab 5">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 6" label="Tab 6">
<DxcTabs.Tab label="Tab 6">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 7" label="Tab 7">
<DxcTabs.Tab label="Tab 7">
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const tabsIcon = (iconPosition?: "top" | "left") => (
<DxcTabs iconPosition={iconPosition}>
<DxcTabs.Tab tabId="Tab 1" label="Tab 1" icon={iconSVG}>
<DxcTabs.Tab tabId="Tab 1" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2" icon={iconSVG}>
<DxcTabs.Tab tabId="Tab 2" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3" icon={iconSVG} disabled>
<DxcTabs.Tab tabId="Tab 3" icon={iconSVG} disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 4" label="Tab 4">
<DxcTabs.Tab tabId="Tab 4" icon="filled_star">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 5" label="Tab 5" icon="mail">
<DxcTabs.Tab tabId="Tab 5" icon="mail">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 6" label="Tab 6" icon="mail">
<DxcTabs.Tab tabId="Tab 6" icon="mail">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 7" label="Tab 7" icon="mail">
<DxcTabs.Tab tabId="Tab 7" icon="mail">
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const tabsIconLabel = (iconPosition?: "top" | "left") => (
<DxcTabs iconPosition={iconPosition}>
<DxcTabs.Tab label="Tab 1" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 2" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 3" icon={iconSVG} disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 4" icon="filled_star">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 5" icon="mail">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 6" icon="mail">
<></>
</DxcTabs.Tab>
<DxcTabs.Tab label="Tab 7" icon="mail">
<></>
</DxcTabs.Tab>
</DxcTabs>
);

const tabsNotificationIcon = (iconPosition?: "top" | "left") => (
<DxcTabs iconPosition={iconPosition}>
<DxcTabs.Tab tabId="Tab 1" label="Tab 1" icon={iconSVG} notificationNumber={true}>
<DxcTabs.Tab label="Tab 1" icon={iconSVG} notificationNumber={true}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 2" label="Tab 2" icon={iconSVG} notificationNumber={5}>
<DxcTabs.Tab label="Tab 2" icon={iconSVG} notificationNumber={5}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 3" label="Tab 3" icon={iconSVG} notificationNumber={100} disabled>
<DxcTabs.Tab label="Tab 3" icon={iconSVG} notificationNumber={100} disabled>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 4" label="Tab 4" icon={iconSVG} notificationNumber={200}>
<DxcTabs.Tab label="Tab 4" icon={iconSVG} notificationNumber={200}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 5" label="Tab 5" icon={iconSVG}>
<DxcTabs.Tab label="Tab 5" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 6" label="Tab 6" icon={iconSVG}>
<DxcTabs.Tab label="Tab 6" icon={iconSVG}>
<></>
</DxcTabs.Tab>
<DxcTabs.Tab tabId="Tab 7" label="Tab 7" icon={iconSVG}>
<DxcTabs.Tab label="Tab 7" icon={iconSVG}>
<></>
</DxcTabs.Tab>
</DxcTabs>
Expand Down Expand Up @@ -187,10 +213,12 @@ const Tabs = () => (
<ExampleContainer>
<Title title="With icon position left" theme="light" level={4} />
{tabsIcon()}
{tabsIconLabel()}
</ExampleContainer>
<ExampleContainer>
<Title title="With icon position top" theme="light" level={4} />
{tabsIcon("top")}
{tabsIconLabel("top")}
</ExampleContainer>
<ExampleContainer>
<Title title="With icon and notification number" theme="light" level={4} />
Expand Down
Loading