import * as React from 'react'; import DismissibleDialog, { DialogVariant } from '../DismissibleDialog'; import { AppState } from '../../utils/types'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { useCallback } from 'react'; import { Icon, Text } from 'react-native-paper'; import { _ } from '@joplin/lib/locale'; import JoplinCloudIcon from './JoplinCloudIcon'; import NavService from '@joplin/lib/services/NavService'; import { StyleSheet, View } from 'react-native'; import CardButton from '../buttons/CardButton'; import Setting from '@joplin/lib/models/Setting'; interface Props { dispatch: Dispatch; visible: boolean; themeId: number; } const iconSize = 24; const styles = StyleSheet.create({ titleContainer: { flexDirection: 'row', gap: 8, paddingBottom: 6, alignItems: 'center', }, subheading: { marginBottom: 24, }, cardContent: { padding: 12, borderRadius: 14, }, syncProviderList: { gap: 8, }, featuresList: { marginTop: 4, }, listItem: { flexDirection: 'row', gap: 8, marginVertical: 6, verticalAlign: 'middle', }, }); interface SyncProviderProps { title: string; icon: ()=> React.ReactNode; description: string; onPress: ()=> void; featuresList: string[]; disabled: boolean; } const SyncProvider: React.FC = props => { return {props.icon()} {props.title}{props.disabled ? ' (Not supported)' : ''} {props.description && {props.description}} {props.featuresList.map((feature, index) => ( {feature} ))} ; }; const SyncWizard: React.FC = ({ themeId, visible, dispatch }) => { const onDismiss = useCallback(() => { dispatch({ type: 'SYNC_WIZARD_VISIBLE_CHANGE', visible: false, }); }, [dispatch]); const onManualDismiss = useCallback(() => { Setting.setValue('sync.wizard.autoShowOnStartup', false); onDismiss(); }, [onDismiss]); const onSelectJoplinCloud = useCallback(async () => { onDismiss(); await NavService.go('JoplinCloudLogin'); }, [onDismiss]); const onSelectOtherTarget = useCallback(async () => { onDismiss(); await NavService.go('Config', { sectionName: 'sync' }); }, [onDismiss]); return { _('Joplin can synchronise your notes using various providers. Select one from the list below.') } } onPress={onSelectJoplinCloud} disabled={false} /> } featuresList={[]} onPress={onSelectOtherTarget} disabled={false} /> ; }; export default connect((state: AppState) => ({ visible: state.syncWizardVisible, themeId: state.settings.theme, }))(SyncWizard);