import React, { useState, useCallback } from 'react'; import { View, StyleSheet, ScrollView, StatusBar, Dimensions } from 'react-native'; import { useNavigation, useFocusEffect } from '@react-navigation/native'; import { NavigationProp } from '@react-navigation/native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useTheme } from '../../contexts/ThemeContext'; import { mmkvStorage } from '../../services/mmkvStorage'; import { RootStackParamList } from '../../navigation/AppNavigator'; import ScreenHeader from '../../components/common/ScreenHeader'; import MDBListIcon from '../../components/icons/MDBListIcon'; import TMDBIcon from '../../components/icons/TMDBIcon'; import { SettingsCard, SettingItem, ChevronRight } from './SettingsComponents'; import { useRealtimeConfig } from '../../hooks/useRealtimeConfig'; import { useTranslation } from 'react-i18next'; const { width } = Dimensions.get('window'); interface IntegrationsSettingsContentProps { isTablet?: boolean; } /** * Reusable IntegrationsSettingsContent component * Can be used inline (tablets) or wrapped in a screen (mobile) */ export const IntegrationsSettingsContent: React.FC = ({ isTablet = false }) => { const navigation = useNavigation>(); const { currentTheme } = useTheme(); const config = useRealtimeConfig(); const { t } = useTranslation(); const [mdblistKeySet, setMdblistKeySet] = useState(false); const [openRouterKeySet, setOpenRouterKeySet] = useState(false); const loadData = useCallback(async () => { try { const mdblistKey = await mmkvStorage.getItem('mdblist_api_key'); setMdblistKeySet(!!mdblistKey); const openRouterKey = await mmkvStorage.getItem('openrouter_api_key'); setOpenRouterKeySet(!!openRouterKey); } catch (error) { if (__DEV__) console.error('Error loading integration data:', error); } }, []); useFocusEffect( useCallback(() => { loadData(); }, [loadData]) ); const isItemVisible = (itemId: string) => { if (!config?.items) return true; const item = config.items[itemId]; if (item && item.visible === false) return false; return true; }; const hasVisibleItems = (itemIds: string[]) => { return itemIds.some(id => isItemVisible(id)); }; return ( <> {hasVisibleItems(['mdblist', 'tmdb']) && ( {isItemVisible('mdblist') && ( } renderControl={() => } onPress={() => navigation.navigate('MDBListSettings')} isTablet={isTablet} /> )} {isItemVisible('tmdb') && ( } renderControl={() => } onPress={() => navigation.navigate('TMDBSettings')} isLast isTablet={isTablet} /> )} )} {hasVisibleItems(['openrouter']) && ( {isItemVisible('openrouter') && ( } onPress={() => navigation.navigate('AISettings')} isLast isTablet={isTablet} /> )} )} ); }; /** * IntegrationsSettingsScreen - Wrapper for mobile navigation */ const IntegrationsSettingsScreen: React.FC = () => { const navigation = useNavigation>(); const { currentTheme } = useTheme(); const { t } = useTranslation(); const insets = useSafeAreaInsets(); const screenIsTablet = width >= 768; return ( navigation.goBack()} /> ); }; const styles = StyleSheet.create({ container: { flex: 1, }, scrollView: { flex: 1, }, scrollContent: { paddingTop: 16, }, }); export default IntegrationsSettingsScreen;