Skip to content

Commit d48464f

Browse files
committed
fix(events): Separate the events context
1 parent 37e31c1 commit d48464f

File tree

7 files changed

+35
-29
lines changed

7 files changed

+35
-29
lines changed

packages/module/patternfly-docs/content/extensions/data-view/examples/Context/Context.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ source: react
1313
sortValue: 3
1414
sourceLink: https://github.com/patternfly/react-data-view/blob/main/packages/module/patternfly-docs/content/extensions/data-view/examples/Events/Events.md
1515
---
16-
import { useState, useEffect, useContext, useRef } from 'react';
16+
import { useState, useEffect, useRef } from 'react';
1717
import { Table, Tbody, Th, Thead, Tr, Td } from '@patternfly/react-table';
1818
import { DataView } from '@patternfly/react-data-view/dist/dynamic/DataView';
19-
import DataViewContext, { DataViewProvider, EventTypes } from '@patternfly/react-data-view/dist/dynamic/DataViewContext';
19+
import { useDataViewEventsContext, DataViewProvider, EventTypes } from '@patternfly/react-data-view/dist/dynamic/DataViewEventsContext';
2020
import { Drawer, DrawerContent, DrawerContentBody } from '@patternfly/react-core';
2121

2222
The **data view** context provides a way to share data across the entire data view tree without having to pass props manually at every level. It also provides a way of listening to the data view events from the outside of the component.
2323

2424

2525
### Events sharing example
26-
The following example demonstrates how to use the `DataViewContext` to manage shared state and handle events. The `DataViewProvider` is used to wrap components that need access to the shared context. This example illustrates how to set up a layout that listens for data view row click events and displays detailed information about the selected row in a [drawer component](/components/drawer).
26+
The following example demonstrates how to use the `DataViewEventsContext` to manage shared state and handle events. The `DataViewEventsProvider` is used to wrap components that need access to the shared context. This example illustrates how to set up a layout that listens for data view row click events and displays detailed information about the selected row in a [drawer component](/components/drawer).
2727

2828

2929
```js file="./EventsExample.tsx"

packages/module/patternfly-docs/content/extensions/data-view/examples/Context/EventsExample.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React, { useContext, useEffect, useState, useRef } from 'react';
1+
import React, { useEffect, useState, useRef } from 'react';
22
import { Drawer, DrawerActions, DrawerCloseButton, DrawerContent, DrawerContentBody, DrawerHead, DrawerPanelContent, Title, Text } from '@patternfly/react-core';
33
import { Table, Tbody, Th, Thead, Tr, Td } from '@patternfly/react-table';
44
import { DataView } from '@patternfly/react-data-view/dist/dynamic/DataView';
5-
import DataViewContext, { DataViewProvider, EventTypes } from '@patternfly/react-data-view/dist/dynamic/DataViewContext';
5+
import { DataViewEventsProvider, EventTypes, useDataViewEventsContext } from '@patternfly/react-data-view/dist/dynamic/DataViewEventsContext';
66

77
interface Repository {
88
name: string;
@@ -37,7 +37,7 @@ interface RepositoryDetailProps {
3737
}
3838

3939
const RepositoryDetail: React.FunctionComponent<RepositoryDetailProps> = ({ selectedRepo, setSelectedRepo }) => {
40-
const context = useContext(DataViewContext);
40+
const context = useDataViewEventsContext();
4141

4242
useEffect(() => {
4343
const unsubscribe = context.subscribe(EventTypes.rowClick, (repo: Repository) => {
@@ -71,7 +71,7 @@ interface RepositoriesTableProps {
7171
}
7272

7373
const RepositoriesTable: React.FunctionComponent<RepositoriesTableProps> = ({ selectedRepo = undefined }) => {
74-
const { trigger } = useContext(DataViewContext);
74+
const { trigger } = useDataViewEventsContext();
7575

7676
const handleRowClick = (repo: Repository | undefined) => {
7777
trigger(EventTypes.rowClick, repo);
@@ -116,7 +116,7 @@ export const BasicExample: React.FunctionComponent = () => {
116116
const drawerRef = useRef<HTMLDivElement>(null);
117117

118118
return (
119-
<DataViewProvider>
119+
<DataViewEventsProvider>
120120
<Drawer isExpanded={Boolean(selectedRepo)} onExpand={() => drawerRef.current?.focus()} data-ouia-component-id="detail-drawer" >
121121
<DrawerContent
122122
panelContent={<RepositoryDetail selectedRepo={selectedRepo} setSelectedRepo={setSelectedRepo} />}
@@ -126,6 +126,6 @@ export const BasicExample: React.FunctionComponent = () => {
126126
</DrawerContentBody>
127127
</DrawerContent>
128128
</Drawer>
129-
</DataViewProvider>
129+
</DataViewEventsProvider>
130130
);
131131
};

packages/module/src/DataViewContext/index.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

packages/module/src/DataViewContext/DataViewContext.test.tsx renamed to packages/module/src/DataViewEventsContext/DataViewEventsContext.test.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { render, fireEvent } from '@testing-library/react';
3-
import { DataViewContext, DataViewProvider, EventTypes } from './DataViewContext';
3+
import { useDataViewEventsContext, DataViewEventsProvider, EventTypes } from './DataViewEventsContext';
44

55
let id = 0;
66

@@ -12,12 +12,12 @@ beforeAll(() => {
1212
});
1313
});
1414

15-
describe('DataViewContext', () => {
15+
describe('DataViewEventsContext', () => {
1616
test('should provide context value and allow subscriptions', () => {
1717
const callback = jest.fn();
1818

1919
const TestComponent = () => {
20-
const { subscribe, trigger } = React.useContext(DataViewContext);
20+
const { subscribe, trigger } = useDataViewEventsContext();
2121

2222
React.useEffect(() => {
2323
const unsubscribe = subscribe(EventTypes.rowClick, callback);
@@ -31,9 +31,9 @@ describe('DataViewContext', () => {
3131
};
3232

3333
const { getByText } = render(
34-
<DataViewProvider>
34+
<DataViewEventsProvider>
3535
<TestComponent />
36-
</DataViewProvider>
36+
</DataViewEventsProvider>
3737
);
3838

3939
fireEvent.click(getByText('Trigger'));
@@ -44,7 +44,7 @@ describe('DataViewContext', () => {
4444
const callback = jest.fn();
4545

4646
const TestComponent = () => {
47-
const { subscribe, trigger } = React.useContext(DataViewContext);
47+
const { subscribe, trigger } = useDataViewEventsContext();
4848

4949
React.useEffect(() => {
5050
const unsubscribe = subscribe(EventTypes.rowClick, callback);
@@ -58,9 +58,9 @@ describe('DataViewContext', () => {
5858
};
5959

6060
const { getByText } = render(
61-
<DataViewProvider>
61+
<DataViewEventsProvider>
6262
<TestComponent />
63-
</DataViewProvider>
63+
</DataViewEventsProvider>
6464
);
6565

6666
fireEvent.click(getByText('Trigger'));
@@ -73,7 +73,7 @@ describe('DataViewContext', () => {
7373
const callback2 = jest.fn();
7474

7575
const TestComponent = () => {
76-
const { subscribe, trigger } = React.useContext(DataViewContext);
76+
const { subscribe, trigger } = useDataViewEventsContext();
7777

7878
React.useEffect(() => {
7979
const unsubscribe1 = subscribe(EventTypes.rowClick, callback1);
@@ -92,9 +92,9 @@ describe('DataViewContext', () => {
9292
};
9393

9494
const { getByText } = render(
95-
<DataViewProvider>
95+
<DataViewEventsProvider>
9696
<TestComponent />
97-
</DataViewProvider>
97+
</DataViewEventsProvider>
9898
);
9999

100100
fireEvent.click(getByText('Trigger'));

packages/module/src/DataViewContext/DataViewContext.tsx renamed to packages/module/src/DataViewEventsContext/DataViewEventsContext.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, {
22
PropsWithChildren,
33
createContext,
44
useCallback,
5+
useContext,
56
useState
67
} from "react";
78

@@ -17,7 +18,7 @@ interface Subscriptions { [id: string]: Callback }
1718
type ContextType = { [event in DataViewEvent]: Subscriptions };
1819
type Subscribe = (event: DataViewEvent, callback: Callback) => () => void;
1920

20-
export const DataViewContext = createContext<{
21+
export const DataViewEventsContext = createContext<{
2122
subscribe: Subscribe;
2223
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2324
trigger: (event: DataViewEvent, ...payload: any[]) => void;
@@ -26,7 +27,7 @@ export const DataViewContext = createContext<{
2627
trigger: () => null
2728
});
2829

29-
export const DataViewProvider = ({ children }: PropsWithChildren) => {
30+
export const DataViewEventsProvider = ({ children }: PropsWithChildren) => {
3031
const [ subscriptions, setSubscriptions ] = useState<ContextType>({
3132
[EventTypes.rowClick]: {}
3233
});
@@ -60,10 +61,12 @@ export const DataViewProvider = ({ children }: PropsWithChildren) => {
6061
);
6162

6263
return (
63-
<DataViewContext.Provider value={{ subscribe, trigger }}>
64+
<DataViewEventsContext.Provider value={{ subscribe, trigger }}>
6465
{children}
65-
</DataViewContext.Provider>
66+
</DataViewEventsContext.Provider>
6667
);
6768
};
6869

69-
export default DataViewContext;
70+
export const useDataViewEventsContext = () => useContext(DataViewEventsContext);
71+
72+
export default DataViewEventsContext;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from './DataViewEventsContext';
2+
export * from './DataViewEventsContext';

packages/module/src/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ export * from './Hooks';
44
export { default as DataViewToolbar } from './DataViewToolbar';
55
export * from './DataViewToolbar';
66

7-
export { default as DataViewContext } from './DataViewContext';
8-
export * from './DataViewContext';
7+
export { default as DataViewTable } from './DataViewTable';
8+
export * from './DataViewTable';
9+
10+
export { default as DataViewEventsContext } from './DataViewEventsContext';
11+
export * from './DataViewEventsContext';
912

1013
export { default as DataView } from './DataView';
1114
export * from './DataView';

0 commit comments

Comments
 (0)