Loading.tsx31 lines · main
| 1 | import { Loader2 } from 'lucide-react' |
| 2 | import React from 'react' |
| 3 | |
| 4 | import styleHandler from '../../lib/theme/styleHandler' |
| 5 | import { cn } from '../../lib/utils/cn' |
| 6 | |
| 7 | interface Props { |
| 8 | children: React.ReactNode |
| 9 | active: boolean |
| 10 | isFullHeight?: boolean |
| 11 | } |
| 12 | export default function Loading({ children, active, isFullHeight = false }: Props) { |
| 13 | const __styles = styleHandler('loading') |
| 14 | |
| 15 | let classNames = [__styles.base] |
| 16 | |
| 17 | let contentClasses = [__styles.content.base] |
| 18 | |
| 19 | if (active) { |
| 20 | contentClasses.push(__styles.content.active) |
| 21 | } |
| 22 | |
| 23 | let spinnerClasses = [__styles.spinner] |
| 24 | |
| 25 | return ( |
| 26 | <div className={cn(classNames.join(' '), isFullHeight && 'h-full')}> |
| 27 | <div className={cn(contentClasses.join(' '), isFullHeight && 'h-full')}>{children}</div> |
| 28 | {active && <Loader2 size={24} className={spinnerClasses.join(' ')} />} |
| 29 | </div> |
| 30 | ) |
| 31 | } |