import { CircularProgress } from '@availity/mui-progress'; import { Img } from 'react-image'; import { useSpaces, useSpacesContext } from './Spaces'; type BaseSpacesImageProps = { imageType?: | 'url' | 'images.logo' | 'images.tile' | 'images.billboard' | 'images.promotional' | 'images.promotionalHover'; fallback?: string; id?: string; Loader?: ({ id }: { id: string }) => React.JSX.Element; }; type SpacesImageSpaceId = { spaceId: string; payerId?: string; } & BaseSpacesImageProps; type SpacesImagePayerId = { spaceId?: string; payerId: string; } & BaseSpacesImageProps; export type SpacesImageProps = SpacesImageSpaceId | SpacesImagePayerId; export const SpacesImage = ({ spaceId, payerId, imageType = 'url', fallback, Loader = CircularProgress, ...props }: SpacesImageProps) => { let spaces; if (spaceId) { spaces = useSpaces(spaceId); } else if (payerId) { spaces = useSpaces(payerId); } const { loading } = useSpacesContext(); const id = spaceId || payerId || spaces?.[0].id || spaces?.[0].configurationId; const imageMap = { 'images.logo': spaces?.[0]?.images?.logo, 'images.tile': spaces?.[0]?.images?.tile, 'images.billboard': spaces?.[0]?.images?.billboard, 'images.promotional': spaces?.[0]?.images?.promotional, 'images.promotionalHover': spaces?.[0]?.images?.promotionalHover, url: spaces?.[0]?.url, }; let url = imageMap[imageType]; if (!url && loading) { return ; } if (!url && !loading && fallback) { url = fallback; } if (!url || !id) return null; return ( {`Space} {...props} /> ); };