import React, { CSSProperties, FC, useCallback, useMemo, useReducer, useState, } from 'react'; import classNames from 'classnames'; import { LoaderCircle } from '~/components/input/LoaderCircle'; import { DivProps } from '~/utils/types'; import styles from './styles.module.scss'; interface ImageLoadingWrapperProps extends Omit { children: (props: { loading: boolean; onLoad: () => void }) => void; preview?: string; } const ImageLoadingWrapper: FC = ({ className, children, preview, color, ...props }) => { const [loading, onLoad] = useReducer((v) => false, true); const style = useMemo( () => ({ backgroundImage: `url('${preview}')`, backgroundColor: color || 'var(--color-primary)', }), [preview, color], ); return (
{!!loading && !!preview && (
)} {children({ loading, onLoad })}
); }; export { ImageLoadingWrapper };