-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathHeader.tsx
More file actions
103 lines (95 loc) · 2.58 KB
/
Header.tsx
File metadata and controls
103 lines (95 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import clsx from 'clsx';
import React from 'react';
import { ClassTokens, Icons } from '../theme';
import { IconButton } from './primitives';
interface HeaderProps {
title: string;
showBackButton: boolean;
showClearNotificationsButton?: boolean;
showSettingsButton: boolean;
showCloseButton: boolean;
onBackClick?: () => void;
onClearNotificationsClick?: () => void;
onSettingsClick?: () => void;
onCloseClick?: () => void;
}
const BackButton: React.FC<{ onBackClick: HeaderProps['onBackClick'] }> = ({
onBackClick,
}) => (
<IconButton
className={ClassTokens.Icon.Secondary}
onClick={onBackClick}
icon={<Icons.ArrowLeft />}
/>
);
const ClearNotificationsButton: React.FC<{ onClearNotificationsClick: HeaderProps['onClearNotificationsClick'] }> = ({
onClearNotificationsClick,
}) => (
<IconButton
className={ClassTokens.Icon.Secondary}
onClick={onClearNotificationsClick}
icon={<Icons.Trash />}
/>
);
const SettingsButton: React.FC<{
onSettingsClick: HeaderProps['onSettingsClick'];
}> = ({ onSettingsClick }) => (
<IconButton
className={ClassTokens.Icon.Secondary}
onClick={onSettingsClick}
icon={<Icons.Settings />}
/>
);
const CloseButton: React.FC<{
onCloseClick: HeaderProps['onCloseClick'];
}> = ({ onCloseClick }) => (
<IconButton
className={ClassTokens.Icon.Secondary}
onClick={onCloseClick}
icon={<Icons.Close />}
/>
);
export function Header({
title,
showCloseButton = true,
showSettingsButton = true,
showBackButton = true,
showClearNotificationsButton = false,
onSettingsClick,
onBackClick,
onCloseClick,
onClearNotificationsClick,
}: HeaderProps) {
const leftButtons = (
<>{showBackButton && <BackButton onBackClick={onBackClick} />}</>
);
const rightButtons = (
<div className="dt-flex dt-gap-3">
{showClearNotificationsButton && (
<ClearNotificationsButton onClearNotificationsClick={onClearNotificationsClick} />
)}
{showSettingsButton && (
<SettingsButton onSettingsClick={onSettingsClick} />
)}
{showCloseButton && <CloseButton onCloseClick={onCloseClick} />}
</div>
);
return (
<div
className={clsx(
ClassTokens.Background.Secondary,
'dt-flex dt-flex-row dt-items-center dt-justify-between dt-gap-4 dt-px-4 dt-py-4',
)}
>
<div className="dt-flex dt-flex-row dt-items-center dt-gap-2">
{leftButtons}
<span
className={clsx(ClassTokens.Text.Primary, 'dt-text-h2 dt-font-bold')}
>
{title}
</span>
</div>
{rightButtons}
</div>
);
}