Skip to content

Commit 1b0fd00

Browse files
committed
ok use context
1 parent 0276dbf commit 1b0fd00

File tree

4 files changed

+51
-17
lines changed

4 files changed

+51
-17
lines changed

static/app/views/app/index.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import type {InstallWizardProps} from 'sentry/views/admin/installWizard';
3636
import {AsyncSDKIntegrationContextProvider} from 'sentry/views/app/asyncSDKIntegrationProvider';
3737
import LastKnownRouteContextProvider from 'sentry/views/lastKnownRouteContextProvider';
3838
import {OrganizationContextProvider} from 'sentry/views/organizationContext';
39+
import {ReleasesDrawerProvider} from 'sentry/views/releases/drawer/releasesDrawerContext';
3940
import RouteAnalyticsContextProvider from 'sentry/views/routeAnalyticsContextProvider';
4041

4142
type Props = {
@@ -257,13 +258,15 @@ function App({children, params}: Props) {
257258
{renderOrganizationContextProvider(
258259
<AsyncSDKIntegrationContextProvider>
259260
<GlobalFeedbackForm>
260-
<GlobalDrawer>
261-
<MainContainer tabIndex={-1} ref={mainContainerRef}>
262-
<GlobalModal onClose={handleModalClose} />
263-
<Indicators className="indicators-container" />
264-
<ErrorBoundary>{renderBody()}</ErrorBoundary>
265-
</MainContainer>
266-
</GlobalDrawer>
261+
<ReleasesDrawerProvider>
262+
<GlobalDrawer>
263+
<MainContainer tabIndex={-1} ref={mainContainerRef}>
264+
<GlobalModal onClose={handleModalClose} />
265+
<Indicators className="indicators-container" />
266+
<ErrorBoundary>{renderBody()}</ErrorBoundary>
267+
</MainContainer>
268+
</GlobalDrawer>
269+
</ReleasesDrawerProvider>
267270
</GlobalFeedbackForm>
268271
</AsyncSDKIntegrationContextProvider>
269272
)}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {createContext, type ReactElement, useCallback, useMemo, useRef} from 'react';
2+
3+
import type {ChartRendererProps} from 'sentry/views/releases/releaseBubbles/types';
4+
5+
type ChartRenderer = (props: ChartRendererProps) => ReactElement;
6+
7+
export const ReleasesDrawerContext = createContext<{
8+
getChart: (id: string) => ChartRenderer | undefined;
9+
registerChart: (id: string, chartRenderer: ChartRenderer) => void;
10+
}>({
11+
getChart: () => undefined,
12+
registerChart: () => {},
13+
});
14+
15+
export function ReleasesDrawerProvider({children}: {children: ReactElement}) {
16+
const chartMapRef = useRef(new Map<string, ChartRenderer>());
17+
18+
const registerChart = useCallback(
19+
(id: string, chartRenderer: ChartRenderer) => {
20+
console.log('registering chart in provider: ', id);
21+
chartMapRef.current.set(id, chartRenderer);
22+
},
23+
[chartMapRef]
24+
);
25+
const getChart = useCallback((id: string) => chartMapRef.current.get(id), []);
26+
const context = useMemo(
27+
() => ({
28+
registerChart,
29+
getChart,
30+
}),
31+
[getChart, registerChart]
32+
);
33+
34+
return <ReleasesDrawerContext value={context}>{children}</ReleasesDrawerContext>;
35+
}

static/app/views/releases/drawer/releasesDrawerList.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@ import {Widget} from 'sentry/views/dashboards/widgets/widget/widget';
2424
import type {ChartRendererProps} from 'sentry/views/releases/releaseBubbles/types';
2525

2626
type ChartRenderer = (props: ChartRendererProps) => ReactElement;
27-
import {
28-
ReleasesDrawerContext,
29-
ReleasesDrawerProvider,
30-
} from 'sentry/views/releases/drawer/releasesDrawerContext';
27+
import {ReleasesDrawerContext} from 'sentry/views/releases/drawer/releasesDrawerContext';
3128

3229
import {ReleaseDrawerTable} from './releasesDrawerTable';
3330

@@ -118,7 +115,7 @@ export function ReleasesDrawerList({
118115
end: endTs ? new Date(endTs).toISOString() : null,
119116
},
120117
});
121-
// const {getChart} = useContext(ReleasesDrawerContext);
118+
const {getChart} = useContext(ReleasesDrawerContext);
122119
const chartRef = useRef<ReactEchartsRef | null>(null);
123120

124121
const handleMouseOverRelease = useCallback((release: string) => {
@@ -151,9 +148,8 @@ export function ReleasesDrawerList({
151148
label: t('Releases'),
152149
},
153150
];
154-
const chartRenderer = charts.get(String(location.query.rdChartId));
155-
// const chartRenderer = charts[String(location.query.rdChartId)];
156-
// const chartRenderer = getChart(String(location.query.rdChartId));
151+
// const chartRenderer = charts.get(String(location.query.rdChartId));
152+
const chartRenderer = getChart(String(location.query.rdChartId));
157153

158154
return (
159155
<EventDrawerContainer>

static/app/views/releases/releaseBubbles/useReleaseBubbles.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,8 @@ export function useReleaseBubbles({
403403
const theme = useTheme();
404404
const {options} = useUser();
405405
const {selection} = usePageFilters();
406-
const {cleanup, charts, registerChart} = useReleasesDrawer();
407-
// const {registerChart} = useContext(ReleasesDrawerContext);
406+
const {cleanup, charts, registerChart: registerChartHook} = useReleasesDrawer();
407+
const {registerChart} = useContext(ReleasesDrawerContext);
408408
// `maxTime` refers to the max time on x-axis for charts.
409409
// There may be the need to include releases that are > maxTime (e.g. in the
410410
// case of relative date selection). This is used for the tooltip to show the

0 commit comments

Comments
 (0)