Skip to content

Commit 4bb373d

Browse files
committed
fix
1 parent 27a94a0 commit 4bb373d

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// scaffold basic context provider and hook
2+
3+
import {createContext, useContext} from 'react';
4+
import {
5+
useAsyncQueuer,
6+
type AsyncQueuerOptions,
7+
type ReactAsyncQueuer,
8+
} from '@tanstack/react-pacer';
9+
10+
import type GenericWidgetQueries from 'sentry/views/dashboards/widgetCard/genericWidgetQueries';
11+
12+
export type QueueItem<SeriesResponse, TableResponse> = {
13+
widget: GenericWidgetQueries<SeriesResponse, TableResponse>;
14+
};
15+
16+
type Context = {
17+
queue: ReactAsyncQueuer<QueueItem<unknown, unknown>>;
18+
};
19+
20+
const WidgetQueueContext = createContext<Context | undefined>(undefined);
21+
22+
export function useWidgetQueryQueue() {
23+
return useContext(WidgetQueueContext);
24+
}
25+
26+
export function WidgetQueryQueueProvider({children}: {children: React.ReactNode}) {
27+
const queueOptions: AsyncQueuerOptions<QueueItem<unknown, unknown>> = {
28+
concurrency: 2,
29+
wait: 5000,
30+
started: true,
31+
};
32+
33+
const queue = useAsyncQueuer<QueueItem<unknown, unknown>>(
34+
fetchWidgetItem,
35+
queueOptions
36+
);
37+
38+
const context = {
39+
queue,
40+
};
41+
return (
42+
<WidgetQueueContext.Provider value={context}>{children}</WidgetQueueContext.Provider>
43+
);
44+
}
45+
46+
const fetchWidgetItem = async (item: QueueItem<unknown, unknown>) => {
47+
const result = await item.widget.fetchData();
48+
return result;
49+
};

0 commit comments

Comments
 (0)