mirror of
https://github.com/Nezumi-2711/next-gdrive-index.git
synced 2026-09-22 20:01:36 +00:00
44 lines
935 B
TypeScript
44 lines
935 B
TypeScript
import React, { useEffect, useState } from "react";
|
|
import LoadingFeedback from "components/APIFeedback/Loading";
|
|
import ErrorFeedback from "components/APIFeedback/Error";
|
|
|
|
type Props = {
|
|
data: unknown;
|
|
error: unknown;
|
|
isLoading: boolean;
|
|
useCard?: boolean;
|
|
children: React.ReactNode;
|
|
};
|
|
|
|
export default function SWRLayout({
|
|
data,
|
|
error,
|
|
isLoading,
|
|
useCard = true,
|
|
children,
|
|
}: Props) {
|
|
const [isMounted, setIsMounted] = useState<boolean>(false);
|
|
|
|
useEffect(() => {
|
|
if (!isLoading && !error && data) {
|
|
setIsMounted(true);
|
|
}
|
|
}, [data, error, isLoading]);
|
|
|
|
return (
|
|
<>
|
|
{isLoading && (
|
|
<div className={useCard ? "card" : ""}>
|
|
<LoadingFeedback />
|
|
</div>
|
|
)}
|
|
{!isLoading && error && (
|
|
<div className={useCard ? "card" : ""}>
|
|
<ErrorFeedback />
|
|
</div>
|
|
)}
|
|
{!isLoading && isMounted && <>{children}</>}
|
|
</>
|
|
);
|
|
}
|