import React, { useMemo } from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { useTheme } from '../../contexts/themeContext/ThemeContext'; import { useTranslationContext } from '../../contexts/translationContext/TranslationContext'; import { primitives } from '../../theme'; import { Spinner } from '../UIComponents/Spinner'; type LoadingIndicatorWrapperProps = { text: string | undefined }; const LoadingIndicatorWrapper = ({ text }: LoadingIndicatorWrapperProps) => { const styles = useStyles(); return ( {text ? ( {text} ) : null} ); }; export type LoadingProps = { listType?: 'channel' | 'message' | 'threads' | 'default'; loadingText?: string; }; /** * UI Component for LoadingIndicator */ export const LoadingIndicator = (props: LoadingProps) => { const { listType, loadingText } = props; const { t } = useTranslationContext(); if (loadingText) { return ; } switch (listType) { case 'channel': return ; case 'message': return ; case 'threads': return ; default: return ; } }; LoadingIndicator.displayName = 'LoadingIndicator{loadingIndicator}'; const useStyles = () => { const { theme: { loadingIndicator: { container, loadingText }, semantics, }, } = useTheme(); return useMemo(() => { return StyleSheet.create({ container: { alignItems: 'center', flex: 1, justifyContent: 'center', ...container }, loadingText: { fontSize: primitives.typographyFontSizeMd, fontWeight: primitives.typographyFontWeightSemiBold, marginTop: primitives.spacingSm, color: semantics.textPrimary, ...loadingText, }, }); }, [container, loadingText, semantics]); };