-
Notifications
You must be signed in to change notification settings - Fork 179
/
header.js
129 lines (118 loc) · 3.04 KB
/
header.js
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* External dependencies
*/
import { useRef, useEffect } from '@googleforcreators/react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { __ } from '@googleforcreators/i18n';
import {
Button,
Icons,
ButtonSize,
ButtonType,
ButtonVariant,
} from '@googleforcreators/design-system';
/**
* Internal dependencies
*/
import { focusStyle } from '../panels/shared/styles';
import { noop } from '../../utils/noop';
const HEADER_HEIGHT = 44;
const Wrapper = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
height: ${HEADER_HEIGHT}px;
padding: 4px 8px 4px 8px;
position: relative;
border-bottom: 1px solid ${({ theme }) => theme.colors.divider.tertiary};
`;
const Actions = styled.div`
display: flex;
margin-left: auto;
`;
const StyledButton = styled(Button)`
margin-left: 8px;
${focusStyle};
`;
function Header({
children,
handleClose,
isEditMode = false,
setIsEditMode = noop,
hasPresets = false,
}) {
const ref = useRef();
useEffect(() => {
ref.current?.focus();
}, []);
const buttonProps = {
type: ButtonType.Tertiary,
size: ButtonSize.Small,
variant: ButtonVariant.Square,
onClick: (evt) => {
evt.stopPropagation();
setIsEditMode(!isEditMode);
},
isEditMode,
};
return (
<Wrapper>
{children}
<Actions>
{hasPresets ? (
isEditMode ? (
<StyledButton
{...buttonProps}
variant={ButtonVariant.Rectangle}
aria-label={__('Exit edit mode', 'web-stories')}
>
{__('Done', 'web-stories')}
</StyledButton>
) : (
<StyledButton
{...buttonProps}
variant={ButtonVariant.Square}
aria-label={__('Edit colors', 'web-stories')}
>
<Icons.Pencil />
</StyledButton>
)
) : null}
<StyledButton
aria-label={__('Close', 'web-stories')}
onClick={handleClose}
type={ButtonType.Tertiary}
size={ButtonSize.Small}
variant={ButtonVariant.Square}
ref={ref}
>
<Icons.Cross />
</StyledButton>
</Actions>
</Wrapper>
);
}
Header.propTypes = {
children: PropTypes.node,
handleClose: PropTypes.func.isRequired,
isEditMode: PropTypes.bool,
setIsEditMode: PropTypes.func,
hasPresets: PropTypes.bool,
};
export default Header;