-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathcomponent.js
53 lines (46 loc) · 1.45 KB
/
component.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
/**
* Internal dependencies
*/
import { useFlyoutContext } from '../context';
import { FlyoutContentView, CardView } from '../styles';
import { contextConnect, useContextSystem } from '../../ui/context';
/**
*
* @param {import('../../ui/context').WordPressComponentProps<import('../types').ContentProps, 'div', false>} props
* @param {import('react').Ref<any>} forwardedRef
*/
function FlyoutContent( props, forwardedRef ) {
const {
children,
elevation,
maxWidth,
style = {},
...otherProps
} = useContextSystem( props, 'FlyoutContent' );
const { label, flyoutState } = useFlyoutContext();
if ( ! flyoutState ) {
throw new Error(
'`FlyoutContent` must only be used inside a `Flyout`.'
);
}
const showContent = flyoutState.visible || flyoutState.animating;
return (
<FlyoutContentView
aria-label={ label }
// maxWidth is applied via inline styles in order to avoid the `React does
// not recognize the maxWidth prop on a DOM element` error that comes from
// passing `maxWidth` as a prop to `FlyoutContentView`
style={ { maxWidth, ...style } }
{ ...otherProps }
{ ...flyoutState }
>
{ showContent && (
<CardView elevation={ elevation } ref={ forwardedRef }>
{ children }
</CardView>
) }
</FlyoutContentView>
);
}
const ConnectedFlyoutContent = contextConnect( FlyoutContent, 'FlyoutContent' );
export default ConnectedFlyoutContent;