@mcmhomes/panorama-viewer
Version:
Provides React components to render panoramas.
42 lines (32 loc) • 1.46 kB
JSX
import React from 'react';
import {PanoramaLoaderVariationsParser} from './PanoramaLoaderVariationsParser.jsx';
import {useVariationJsonData} from '../utils/PanoramaVariationObtainingUtilsReact.jsx';
import {memo, useMemo} from '../utils/PanoramaUtilsReact.jsx';
import {STRING} from '../utils/PanoramaUtils.jsx';
export const PanoramaLoaderVariationsRetriever = memo(({variations:givenVariations = undefined, homeVersion:givenHomeVersion, ...props}) =>
{
const {homeId, host, getErrorWidget, getLoadingWidget} = props;
const [variations, variationsLoading, variationsError] = useVariationJsonData({homeId, homeVersion:givenHomeVersion, host});
const errorComponent = useMemo(() =>
{
if(variationsLoading)
{
return null;
}
if(!variations?.version || !variations?.url || !variations?.data)
{
return getErrorWidget({canRetry:true, id:'could-not-connect-to-home', message:'Couldn\'t connect to home: ' + homeId, reason:STRING(variationsError), data:{homeId, homeVersion:givenHomeVersion, host}});
}
}, [variationsLoading, variationsError, homeId, givenHomeVersion, host, getErrorWidget, variations?.version, variations?.url, variations?.data]);
if(variationsLoading)
{
return getLoadingWidget();
}
if(errorComponent)
{
return errorComponent;
}
return (<>
<PanoramaLoaderVariationsParser homeVersion={STRING(variations.version)} homeUrl={STRING(variations.url)} variations={variations.data} {...props}/>
</>);
});