import {Suspense} from 'react';
import StatsGrid from './StatsGrid';
import TableRow from './TableRow';
import TableHeader from './TableHeader';
import Pagination from './Pagination';
import ActivityItem from './ActivityItem';
import ChartPanel from './ChartPanel';
import Skeleton from './Skeleton';
import {generateProducts, generateActivities, generateStats} from './data';
function fetchData(generator, ...args) {
return new Promise(resolve => {
setTimeout(() => resolve(generator(...args)), 1);
});
}
function fetchDelayed(value, delayMs) {
return new Promise(resolve => {
setTimeout(() => resolve(value), delayMs);
});
}
async function AsyncStatsSection() {
const stats = await fetchData(generateStats);
return ;
}
const productColumns = [
{key: 'name', label: 'Product'},
{key: 'sku', label: 'SKU'},
{key: 'category', label: 'Category'},
{key: 'price', label: 'Price'},
{key: 'stock', label: 'Stock'},
{key: 'status', label: 'Status'},
{key: 'rating', label: 'Rating'},
];
async function AsyncProductRow({product, delay}) {
const resolved = await fetchDelayed(product, delay);
return ;
}
async function AsyncProductSection({itemCount}) {
const products = await fetchData(generateProducts, itemCount);
return (
Products
{products.length} items
{productColumns.map(col => (
))}
{products.map((product, i) => (
Loading... |
}>
))}
);
}
async function AsyncChartSection() {
const stats = await fetchData(generateStats);
return ;
}
async function AsyncActivityItem({activity, delay}) {
const resolved = await fetchDelayed(activity, delay);
return (
);
}
async function AsyncActivitySection({itemCount}) {
const activities = await fetchData(
generateActivities,
Math.min(itemCount, 50)
);
return (
Recent Activity
{activities.map((activity, i) => (
Loading...}>
))}
);
}
export default function DashboardAsync({itemCount}) {
return (
Dashboard Overview
Welcome back. Here is what is happening with your store today.
}>
);
}