Skip to content

Commit 912d235

Browse files
committed
feat(Settings.Item): add the ability to hide item title
1 parent 3480fc7 commit 912d235

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

src/components/Settings/Settings.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ $block: '.#{variables.$ns}settings';
183183
grid-template-columns: 216px 1fr;
184184
justify-items: start;
185185

186+
&_title_hide {
187+
grid-template-columns: 1fr;
188+
}
189+
186190
&_align_top {
187191
align-items: start;
188192
}

src/components/Settings/Settings.tsx

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ Settings.Item = function SettingsItem(setting: SettingsItemProps) {
241241
renderTitleComponent = identity,
242242
mode,
243243
description,
244+
showTitle = true,
244245
} = setting;
245246

246247
const selected = useSettingsSelectionContext();
@@ -254,26 +255,35 @@ Settings.Item = function SettingsItem(setting: SettingsItemProps) {
254255
);
255256
return (
256257
<div
257-
className={b('item', {align, mode, selected: isSettingSelected})}
258+
className={b('item', {
259+
align,
260+
mode,
261+
selected: isSettingSelected,
262+
title: showTitle ? 'show' : 'hide',
263+
})}
258264
ref={isSettingSelected ? selected.selectedRef : undefined}
259265
>
260-
<label className={b('item-heading')} id={labelId}>
261-
{renderRightAdornment ? (
262-
<Flex className={b('item-title-wrapper')} gap={3}>
263-
{titleNode}
264-
<div
265-
className={b('item-right-adornment', {
266-
hidden: showRightAdornmentOnHover,
267-
})}
268-
>
269-
{renderRightAdornment(setting)}
270-
</div>
271-
</Flex>
272-
) : (
273-
titleNode
274-
)}
275-
{description ? <span className={b('item-description')}>{description}</span> : null}
276-
</label>
266+
{showTitle ? (
267+
<label className={b('item-heading')} id={labelId}>
268+
{renderRightAdornment ? (
269+
<Flex className={b('item-title-wrapper')} gap={3}>
270+
{titleNode}
271+
<div
272+
className={b('item-right-adornment', {
273+
hidden: showRightAdornmentOnHover,
274+
})}
275+
>
276+
{renderRightAdornment(setting)}
277+
</div>
278+
</Flex>
279+
) : (
280+
titleNode
281+
)}
282+
{description ? (
283+
<span className={b('item-description')}>{description}</span>
284+
) : null}
285+
</label>
286+
) : null}
277287
<div className={b('item-content')}>{children}</div>
278288
</div>
279289
);

src/components/Settings/__stories__/SettingsDemo.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,9 @@ export const SettingsComponent = React.memo(
198198
}}
199199
/>
200200
</Settings.Item>
201+
<Settings.Item title="Full width" id="full-width" showTitle={false}>
202+
Place to display full width content
203+
</Settings.Item>
201204
</Settings.Section>
202205
</Settings.Page>
203206
<Settings.Page id="appearance" title="Appearance" icon={{data: Gear}}>

src/components/Settings/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ export interface SettingsItemProps {
8080
withBadge?: boolean;
8181
mode?: 'row';
8282
description?: React.ReactNode;
83+
/**
84+
* Render item with label or with content only
85+
* @default true
86+
*/
87+
showTitle?: boolean;
8388
}
8489

8590
export type SettingsContentProps = Omit<SettingsProps, 'loading' | 'renderLoading'>;

0 commit comments

Comments
 (0)