forked from Ivasoft/mattermost-mobile
* edit screen - in progress * edit screen - in progress * edit post screen - post input - in progress * edit post screen - post input - in progress * edit post screen - post input - in progress * edit post screen - post input - in progress * edit post screen - post error component - in progress * edit post screen - post error component - in progress * edit post screen -emitEditing - in progress * edit post screen - in progress * edit post screen - in progress * edit post screen - in progress * able to edit post * edit post screen - in progress * edit post screen - in progress * edit post screen - in progress * edit post screen - in progress * updated errorLine * corrections * edit post screen - in progress * edit post screen - in progress * edit post screen - in progress * properly closes modal on tablets * starts with Save button set to false * refactored onTextSelectionChange * added useTheme to ErrorTextComponent * passing canEdit and hasFilesAttached * passing canEdit and hasFilesAttached * fix API call * change canEdit to canDelete * nearly there * displays alert * maxPostSize * autocomplete - fixing layout * autocomplete - fixing layout * autocomplete - work in progress * autocomplete - work in progress * clean up delete * fixing autocomplete * code fix * added server error message * update i18n * removed comment * code fix * fix bug on empty post message * post input top corrections * post draft limit * code corrections as per review * removed theme from useEffect * update edit_post - delete call * refactor PostInputRef to EditPostInputRef * autocomplete position fix and feedback addressed * Navigation title & subtitle fonts / navigation button builder * ux feedback * delay focus of edit input by 20 frames * properly dismiss the PostOptions screen this comes from the fix for the BottomSheet screen * using device info to check for physical keyboard * autocomplete with keyboard closed Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
149 lines
5.3 KiB
TypeScript
149 lines
5.3 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {withManagedConfig} from '@mattermost/react-native-emm';
|
|
import React from 'react';
|
|
import {IntlProvider} from 'react-intl';
|
|
import {Platform, StyleProp, ViewStyle} from 'react-native';
|
|
import {GestureHandlerRootView} from 'react-native-gesture-handler';
|
|
import {Navigation} from 'react-native-navigation';
|
|
import {SafeAreaProvider} from 'react-native-safe-area-context';
|
|
|
|
import {Screens} from '@constants';
|
|
import {withServerDatabase} from '@database/components';
|
|
import {DEFAULT_LOCALE, getTranslations} from '@i18n';
|
|
|
|
const withGestures = (Screen: React.ComponentType, styles: StyleProp<ViewStyle>) => {
|
|
return function gestureHoc(props: any) {
|
|
if (Platform.OS === 'android') {
|
|
return (
|
|
<GestureHandlerRootView style={[{flex: 1}, styles]}>
|
|
<Screen {...props}/>
|
|
</GestureHandlerRootView>
|
|
);
|
|
}
|
|
|
|
return <Screen {...props}/>;
|
|
};
|
|
};
|
|
|
|
const withIntl = (Screen: React.ComponentType) => {
|
|
return function IntlEnabledComponent(props: any) {
|
|
return (
|
|
<IntlProvider
|
|
locale={DEFAULT_LOCALE}
|
|
messages={getTranslations()}
|
|
>
|
|
<Screen {...props}/>
|
|
</IntlProvider>
|
|
);
|
|
};
|
|
};
|
|
|
|
const withSafeAreaInsets = (Screen: React.ComponentType) => {
|
|
return function SafeAreaInsets(props: any) {
|
|
return (
|
|
<SafeAreaProvider>
|
|
<Screen {...props}/>
|
|
</SafeAreaProvider>
|
|
);
|
|
};
|
|
};
|
|
|
|
Navigation.setLazyComponentRegistrator((screenName) => {
|
|
let screen: any|undefined;
|
|
let extraStyles: StyleProp<ViewStyle>;
|
|
switch (screenName) {
|
|
case Screens.ABOUT:
|
|
screen = withServerDatabase(require('@screens/about').default);
|
|
break;
|
|
case Screens.BOTTOM_SHEET:
|
|
screen = withServerDatabase(
|
|
require('@screens/bottom_sheet').default,
|
|
);
|
|
break;
|
|
case Screens.CHANNEL:
|
|
screen = withServerDatabase(require('@screens/channel').default);
|
|
break;
|
|
case Screens.CUSTOM_STATUS:
|
|
screen = withServerDatabase(
|
|
require('@screens/custom_status').default,
|
|
);
|
|
break;
|
|
case Screens.CUSTOM_STATUS_CLEAR_AFTER:
|
|
screen = withServerDatabase(
|
|
require('@screens/custom_status_clear_after').default,
|
|
);
|
|
break;
|
|
case Screens.EDIT_POST:
|
|
screen = withServerDatabase(require('@screens/edit_post').default);
|
|
break;
|
|
case Screens.EDIT_PROFILE:
|
|
screen = withServerDatabase(
|
|
require('@screens/edit_profile').default,
|
|
);
|
|
break;
|
|
case Screens.EDIT_SERVER:
|
|
screen = withIntl(require('@screens/edit_server').default);
|
|
break;
|
|
case Screens.EMOJI_PICKER:
|
|
screen = withServerDatabase(
|
|
require('@screens/emoji_picker').default,
|
|
);
|
|
break;
|
|
case Screens.FORGOT_PASSWORD:
|
|
screen = withIntl(require('@screens/forgot_password').default);
|
|
break;
|
|
case Screens.GALLERY:
|
|
screen = withServerDatabase(require('@screens/gallery').default);
|
|
break;
|
|
case Screens.IN_APP_NOTIFICATION: {
|
|
const notificationScreen =
|
|
require('@screens/in_app_notification').default;
|
|
Navigation.registerComponent(Screens.IN_APP_NOTIFICATION, () =>
|
|
Platform.select({
|
|
default: notificationScreen,
|
|
ios: withSafeAreaInsets(notificationScreen),
|
|
}),
|
|
);
|
|
return;
|
|
}
|
|
case Screens.LOGIN:
|
|
screen = withIntl(require('@screens/login').default);
|
|
break;
|
|
case Screens.MFA:
|
|
screen = withIntl(require('@screens/mfa').default);
|
|
break;
|
|
case Screens.BROWSE_CHANNELS:
|
|
screen = withServerDatabase(
|
|
require('@screens/browse_channels').default,
|
|
);
|
|
break;
|
|
case Screens.POST_OPTIONS:
|
|
screen = withServerDatabase(
|
|
require('@screens/post_options').default,
|
|
);
|
|
break;
|
|
case Screens.SAVED_POSTS:
|
|
screen = withServerDatabase((require('@screens/home/saved_posts').default));
|
|
break;
|
|
case Screens.SSO:
|
|
screen = withIntl(require('@screens/sso').default);
|
|
break;
|
|
case Screens.THREAD:
|
|
screen = withServerDatabase(require('@screens/thread').default);
|
|
break;
|
|
}
|
|
|
|
if (screen) {
|
|
Navigation.registerComponent(screenName, () => withGestures(withSafeAreaInsets(withManagedConfig(screen)), extraStyles));
|
|
}
|
|
});
|
|
|
|
export function registerScreens() {
|
|
const homeScreen = require('@screens/home').default;
|
|
const serverScreen = require('@screens/server').default;
|
|
Navigation.registerComponent(Screens.SERVER, () => withGestures(withIntl(withManagedConfig(serverScreen)), undefined));
|
|
Navigation.registerComponent(Screens.HOME, () => withGestures(withSafeAreaInsets(withServerDatabase(withManagedConfig(homeScreen))), undefined));
|
|
}
|