ConceptPortal-public/rsconcept/frontend/src/components/DataLoader.tsx

32 lines
794 B
TypeScript
Raw Normal View History

2024-01-07 03:29:16 +03:00
import { AnimatePresence } from 'framer-motion';
import AnimateFade from './AnimateFade';
import InfoError, { ErrorData } from './InfoError';
import Loader from './ui/Loader';
interface DataLoaderProps {
id: string;
isLoading: boolean;
error?: ErrorData;
hasNoData?: boolean;
children: React.ReactNode;
}
function DataLoader({ id, isLoading, hasNoData, error, children }: DataLoaderProps) {
return (
<AnimatePresence mode='wait'>
{isLoading ? <Loader key={`${id}-loader`} /> : null}
{error ? <InfoError key={`${id}-error`} error={error} /> : null}
{!isLoading && !error && !hasNoData ? (
<AnimateFade id={id} key={`${id}-data`}>
{children}
</AnimateFade>
) : null}
</AnimatePresence>
);
}
export default DataLoader;