Files
frontend/src/components/common/Loading.tsx
lan 3968660048 Initial frontend repository commit.
Include app source and update .gitignore to exclude local release artifacts and signing files.

Made-with: Cursor
2026-03-09 21:29:03 +08:00

66 lines
1.3 KiB
TypeScript

/**
* Loading 加载组件
* 支持不同尺寸、全屏模式
*/
import React from 'react';
import { View, ActivityIndicator, StyleSheet, ViewStyle } from 'react-native';
import { colors } from '../../theme';
type LoadingSize = 'sm' | 'md' | 'lg';
interface LoadingProps {
size?: LoadingSize;
color?: string;
fullScreen?: boolean;
style?: ViewStyle;
}
const Loading: React.FC<LoadingProps> = ({
size = 'md',
color = colors.primary.main,
fullScreen = false,
style,
}) => {
const getSize = (): 'small' | 'large' | undefined => {
switch (size) {
case 'sm':
return 'small';
case 'lg':
return 'large';
default:
return undefined;
}
};
if (fullScreen) {
return (
<View style={[styles.fullScreen, style]}>
<ActivityIndicator size={getSize()} color={color} />
</View>
);
}
return (
<View style={[styles.container, style]}>
<ActivityIndicator size={getSize()} color={color} />
</View>
);
};
const styles = StyleSheet.create({
container: {
padding: 20,
alignItems: 'center',
justifyContent: 'center',
},
fullScreen: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: colors.background.default,
},
});
export default Loading;