-
Notifications
You must be signed in to change notification settings - Fork 112
/
Disclosure.tsx
47 lines (41 loc) · 1.4 KB
/
Disclosure.tsx
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
import * as React from 'react';
import * as PropTypes from 'prop-types';
import {
useDisclosurePrimitiveState,
DisclosurePrimitiveInitialState,
DisclosurePrimitveStateReturn,
} from '@twilio-paste/disclosure-primitive';
import {Card} from '@twilio-paste/card';
export type Variants = 'contained' | 'default';
export interface DisclosureContextProps {
disclosure: DisclosurePrimitveStateReturn;
variant: Variants;
}
export const DisclosureContext = React.createContext<DisclosureContextProps>({} as any);
export interface DisclosureProps extends DisclosurePrimitiveInitialState {
children: NonNullable<React.ReactNode>;
variant?: Variants;
}
const Disclosure: React.FC<DisclosureProps> = ({children, variant = 'default', ...props}) => {
const disclosure = useDisclosurePrimitiveState({...props});
const disclosureContext = {
disclosure,
variant,
};
if (variant === 'contained') {
return (
<DisclosureContext.Provider value={disclosureContext}>
<Card padding="space0">{children}</Card>
</DisclosureContext.Provider>
);
}
return <DisclosureContext.Provider value={disclosureContext}>{children}</DisclosureContext.Provider>;
};
Disclosure.displayName = 'Disclosure';
if (process.env.NODE_ENV === 'development') {
Disclosure.propTypes = {
children: PropTypes.node.isRequired,
variant: PropTypes.oneOf(['default', 'contained']),
};
}
export {Disclosure};