Skip to content

Commit fb9826c

Browse files
authored
feat(react-headless-components-preview): export Drawer context (#36479)
1 parent 88fc286 commit fb9826c

5 files changed

Lines changed: 48 additions & 1 deletion

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "feat: export Drawer context utilities",
4+
"packageName": "@fluentui/react-headless-components-preview",
5+
"email": "vgenaev@gmail.com",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/react-headless-components-preview/library/etc/drawer.api.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type { ComponentState } from '@fluentui/react-utilities';
99
import { DrawerBodyProps } from '@fluentui/react-drawer';
1010
import { DrawerBodySlots } from '@fluentui/react-drawer';
1111
import { DrawerBodyState } from '@fluentui/react-drawer';
12-
import type { DrawerContextValue } from '@fluentui/react-drawer';
12+
import { DrawerContextValue } from '@fluentui/react-drawer';
1313
import { DrawerFooterProps } from '@fluentui/react-drawer';
1414
import { DrawerFooterSlots } from '@fluentui/react-drawer';
1515
import { DrawerFooterState as DrawerFooterState_2 } from '@fluentui/react-drawer';
@@ -22,6 +22,7 @@ import { DrawerHeaderState as DrawerHeaderState_2 } from '@fluentui/react-drawer
2222
import { DrawerHeaderTitleProps } from '@fluentui/react-drawer';
2323
import { DrawerHeaderTitleSlots } from '@fluentui/react-drawer';
2424
import { DrawerHeaderTitleState } from '@fluentui/react-drawer';
25+
import { DrawerProvider } from '@fluentui/react-drawer';
2526
import type { EventHandler } from '@fluentui/react-utilities';
2627
import type { ForwardRefComponent } from '@fluentui/react-utilities';
2728
import type { InlineDrawerBaseState } from '@fluentui/react-drawer';
@@ -32,6 +33,8 @@ import type { OverlayDrawerProps as OverlayDrawerProps_2 } from '@fluentui/react
3233
import * as React_2 from 'react';
3334
import { Ref } from 'react';
3435
import type { Slot } from '@fluentui/react-utilities';
36+
import { useDrawerContext_unstable as useDrawerContext } from '@fluentui/react-drawer';
37+
import { useDrawerContextValue } from '@fluentui/react-drawer';
3538

3639
// @public
3740
export const Drawer: ForwardRefComponent<DrawerProps>;
@@ -45,6 +48,8 @@ export { DrawerBodySlots }
4548

4649
export { DrawerBodyState }
4750

51+
export { DrawerContextValue }
52+
4853
// @public
4954
export const DrawerFooter: ForwardRefComponent<DrawerFooterProps>;
5055

@@ -98,6 +103,8 @@ export type DrawerProps = (ComponentProps<DrawerSlots> & {
98103
type: 'inline';
99104
} & InlineDrawerProps);
100105

106+
export { DrawerProvider }
107+
101108
// @public (undocumented)
102109
export type DrawerSlots = Pick<OverlayDrawerSlots, 'root'> | Pick<InlineDrawerSlots, 'root'>;
103110

@@ -168,6 +175,10 @@ export const useDrawer: (props: DrawerProps, ref: React_2.Ref<HTMLElement>) => D
168175
// @public
169176
export const useDrawerBody: (props: DrawerBodyProps, ref: Ref<HTMLElement>) => DrawerBodyState;
170177

178+
export { useDrawerContext }
179+
180+
export { useDrawerContextValue }
181+
171182
// @public
172183
export const useDrawerFooter: (props: DrawerFooterProps, ref: React_2.Ref<HTMLElement>) => DrawerFooterState;
173184

packages/react-components/react-headless-components-preview/library/src/components/Drawer/Drawer.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { DrawerFooter } from './DrawerFooter';
99
import { DrawerHeader } from './DrawerHeader';
1010
import { DrawerHeaderNavigation } from './DrawerHeaderNavigation';
1111
import { DrawerHeaderTitle } from './DrawerHeaderTitle';
12+
import { DrawerProvider, useDrawerContext } from './index';
1213

1314
describe('Drawer', () => {
1415
isConformant({
@@ -42,6 +43,22 @@ describe('Drawer', () => {
4243
expect(drawer).toHaveAttribute('data-open');
4344
expect(drawer).toHaveAttribute('data-position', 'end');
4445
});
46+
47+
it('exposes the Drawer context through the headless API', () => {
48+
const ContextConsumer = () => {
49+
const { scrollState } = useDrawerContext();
50+
51+
return <div>{scrollState}</div>;
52+
};
53+
54+
const result = render(
55+
<DrawerProvider value={{ scrollState: 'middle', setScrollState: jest.fn() }}>
56+
<ContextConsumer />
57+
</DrawerProvider>,
58+
);
59+
60+
expect(result.getByText('middle')).toBeInTheDocument();
61+
});
4562
});
4663

4764
describe('OverlayDrawer', () => {

packages/react-components/react-headless-components-preview/library/src/components/Drawer/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ export { Drawer } from './Drawer';
22
export { renderDrawer } from './renderDrawer';
33
export { useDrawer } from './useDrawer';
44
export type { DrawerProps, DrawerSlots, DrawerState } from './Drawer.types';
5+
export {
6+
DrawerProvider,
7+
useDrawerContext_unstable as useDrawerContext,
8+
useDrawerContextValue,
9+
} from '@fluentui/react-drawer';
10+
export type { DrawerContextValue } from '@fluentui/react-drawer';
511

612
export { OverlayDrawer, renderOverlayDrawer, useOverlayDrawer } from './OverlayDrawer';
713
export type { OverlayDrawerProps, OverlayDrawerSlots, OverlayDrawerState } from './OverlayDrawer';

packages/react-components/react-headless-components-preview/library/src/drawer.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
export { Drawer, renderDrawer, useDrawer } from './components/Drawer';
22
export type { DrawerProps, DrawerSlots, DrawerState } from './components/Drawer';
3+
export {
4+
DrawerProvider,
5+
useDrawerContext_unstable as useDrawerContext,
6+
useDrawerContextValue,
7+
} from '@fluentui/react-drawer';
8+
export type { DrawerContextValue } from '@fluentui/react-drawer';
39

410
export { OverlayDrawer, renderOverlayDrawer, useOverlayDrawer } from './components/Drawer';
511
export type { OverlayDrawerProps, OverlayDrawerSlots, OverlayDrawerState } from './components/Drawer';

0 commit comments

Comments
 (0)