import Spinner from '@/components/ui/Spinner' import classNames from 'classnames' import type { CommonProps } from '@/@types/common' import type { ElementType, ReactNode } from 'react' interface BaseLoadingProps extends CommonProps { asElement?: ElementType customLoader?: ReactNode loading: boolean spinnerClass?: string } interface LoadingProps extends BaseLoadingProps { type?: 'default' | 'cover' } const DefaultLoading = (props: BaseLoadingProps) => { const { loading, children, spinnerClass, className, asElement: Component = 'div', customLoader, } = props return loading ? ( {customLoader ? ( <>{customLoader}> ) : ( )} ) : ( <>{children}> ) } const CoveredLoading = (props: BaseLoadingProps) => { const { loading, children, spinnerClass, className, asElement: Component = 'div', customLoader, } = props return ( {children} {loading && ( )} {loading && ( {customLoader ? ( <>{customLoader}> ) : ( )} )} ) } const Loading = ({ type, ...rest }: LoadingProps) => { switch (type) { case 'default': return case 'cover': return default: return } } export default Loading