69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
|
/**
|
||
|
* Project iLinkWorld
|
||
|
* File SpinnerOverlayComponent
|
||
|
* Path components
|
||
|
* Created by BRICE ZELE
|
||
|
* Date: 01/02/2022
|
||
|
*/
|
||
|
import React, {ReactNode} from 'react';
|
||
|
import {ActivityIndicator, Modal, View} from 'react-native';
|
||
|
import Text from './Text';
|
||
|
import I18n from "react-native-i18n";
|
||
|
|
||
|
interface SpinnerOverlayProps {
|
||
|
show: boolean;
|
||
|
color?: string;
|
||
|
backgroundColor?: string;
|
||
|
dimLights?: number;
|
||
|
children: ReactNode;
|
||
|
loadingMessage?: string;
|
||
|
}
|
||
|
|
||
|
const SpinnerOverlay = ({
|
||
|
show = false,
|
||
|
color = '',
|
||
|
backgroundColor = '',
|
||
|
dimLights = 0.6,
|
||
|
loadingMessage = '',
|
||
|
children = null
|
||
|
}: SpinnerOverlayProps) => {
|
||
|
return (
|
||
|
<Modal transparent animationType="none" visible={show}>
|
||
|
<View
|
||
|
style={{
|
||
|
flex: 1,
|
||
|
alignItems: 'center',
|
||
|
justifyContent: 'center',
|
||
|
backgroundColor: `rgba(0,0,0,${dimLights})`,
|
||
|
}}>
|
||
|
<View
|
||
|
style={{
|
||
|
padding: 13,
|
||
|
backgroundColor: `transparent`,
|
||
|
borderRadius: 13,
|
||
|
}}>
|
||
|
{children !== null ?
|
||
|
React.Children.map(children, child =>
|
||
|
React.cloneElement(child, {}),
|
||
|
)
|
||
|
:
|
||
|
<ActivityIndicator
|
||
|
animating={show}
|
||
|
color="white"
|
||
|
size="large"
|
||
|
/>
|
||
|
}
|
||
|
<Text style={{color: 'white'}}>
|
||
|
{loadingMessage === ''
|
||
|
? I18n.t('LOADING_DOTS')
|
||
|
: loadingMessage}
|
||
|
</Text>
|
||
|
|
||
|
</View>
|
||
|
</View>
|
||
|
</Modal>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default SpinnerOverlay;
|