Improve parallel React Query handling
This commit is contained in:
19
src/App.tsx
19
src/App.tsx
@@ -9,28 +9,33 @@ import { getSampleData } from "./lib/data";
|
|||||||
import { fetchCategoryMetadata } from "./lib/metadata";
|
import { fetchCategoryMetadata } from "./lib/metadata";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const { data: categoryMetadata } = useQuery({
|
const metadataQuery = useQuery({
|
||||||
queryKey: ["categoryMetadata"],
|
queryKey: ["categoryMetadata"],
|
||||||
queryFn: fetchCategoryMetadata,
|
queryFn: fetchCategoryMetadata,
|
||||||
});
|
});
|
||||||
const { data, isPending, isError } = useQuery({
|
const responseQuery = useQuery({
|
||||||
queryKey: ["responses"],
|
queryKey: ["responses"],
|
||||||
queryFn: getSampleData,
|
queryFn: getSampleData,
|
||||||
refetchInterval: 2 * 1000, // Refresh every 5 seconds
|
refetchInterval: 2 * 1000, // Refresh every 5 seconds
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isPending) return <div>Loading...</div>;
|
if (metadataQuery.isPending || responseQuery.isPending)
|
||||||
if (isError) return <div>Error loading data</div>;
|
return <div>Loading...</div>;
|
||||||
|
if (metadataQuery.isError || responseQuery.isError)
|
||||||
|
return <div>Error loading data</div>;
|
||||||
|
|
||||||
if (!data.length) return null;
|
const responses = responseQuery.data;
|
||||||
|
const categoryMetadata = metadataQuery.data;
|
||||||
|
|
||||||
|
if (!responses.length) return null;
|
||||||
|
|
||||||
// Group data by question (outside the component)
|
// Group data by question (outside the component)
|
||||||
const questionGroups = Array.from(
|
const questionGroups = Array.from(
|
||||||
d3.group(data, (d) => d.question).entries()
|
d3.group(responses, (d) => d.question).entries()
|
||||||
);
|
);
|
||||||
|
|
||||||
// Get unique response categories (sorted for consistent ordering)
|
// Get unique response categories (sorted for consistent ordering)
|
||||||
const allResponses = [...new Set(data.map((d) => d.response))];
|
const allResponses = [...new Set(responses.map((d) => d.response))];
|
||||||
const sortedResponses = allResponses.sort((a, b) => a - b);
|
const sortedResponses = allResponses.sort((a, b) => a - b);
|
||||||
|
|
||||||
// Create scales
|
// Create scales
|
||||||
|
|||||||
Reference in New Issue
Block a user