mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
49 lines
1.0 KiB
TypeScript
49 lines
1.0 KiB
TypeScript
import React from 'react';
|
|
|
|
import type { ColorMode } from 'toolkit/next/color-mode';
|
|
import { Image } from '@luxfi/ui/image';
|
|
import { Skeleton } from '@luxfi/ui/skeleton';
|
|
|
|
interface Props {
|
|
src: string | undefined;
|
|
onLoad?: () => void;
|
|
onError?: () => void;
|
|
isInvalid: boolean;
|
|
className?: string;
|
|
fallback: React.ReactElement;
|
|
colorMode?: ColorMode;
|
|
}
|
|
|
|
export const FormFieldImagePreview = React.memo(({
|
|
src,
|
|
isInvalid,
|
|
onError,
|
|
onLoad,
|
|
className,
|
|
fallback: fallbackProp,
|
|
colorMode,
|
|
}: Props) => {
|
|
const skeleton = <Skeleton loading className={ [ 'w-full h-full', className, colorMode === 'dark' ? 'dark' : undefined ].filter(Boolean).join(' ') }/>;
|
|
|
|
const fallback = (() => {
|
|
if (src && !isInvalid) {
|
|
return skeleton;
|
|
}
|
|
return fallbackProp;
|
|
})();
|
|
|
|
return (
|
|
<Image
|
|
key={ src }
|
|
className={ className }
|
|
src={ src }
|
|
alt="Image preview"
|
|
w="auto"
|
|
h="100%"
|
|
fallback={ fallback }
|
|
onError={ onError }
|
|
onLoad={ onLoad }
|
|
/>
|
|
);
|
|
});
|