Create ShareExtensionStack

This commit is contained in:
Diego Mello 2023-03-22 13:48:18 -03:00
parent 60f505c7d8
commit f60a9f6332
6 changed files with 106 additions and 103 deletions

View File

@ -3,17 +3,15 @@ import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { connect } from 'react-redux';
import { SetUsernameStackParamList, StackParamList } from './definitions/navigationTypes';
import Navigation from './lib/navigation/appNavigation';
import { defaultHeader, getActiveRouteName, navigationTheme } from './lib/methods/helpers/navigation';
import { RootEnum } from './definitions';
// Stacks
import AuthLoadingView from './views/AuthLoadingView';
// SetUsername Stack
import SetUsernameView from './views/SetUsernameView';
import OutsideStack from './stacks/OutsideStack';
import InsideStack from './stacks/InsideStack';
import MasterDetailStack from './stacks/MasterDetailStack';
import { SetUsernameStackParamList, StackParamList } from './stacks/types';
import { ThemeContext } from './theme';
import { setCurrentScreen } from './lib/methods/helpers/log';

View File

@ -1,12 +1,5 @@
import { NavigatorScreenParams } from '@react-navigation/core';
import { StackNavigationOptions } from '@react-navigation/stack';
import { TSubscriptionModel } from './ISubscription';
import { TServerModel } from './IServer';
import { IAttachment } from './IAttachment';
import { MasterDetailInsideStackParamList } from '../stacks/MasterDetailStack/types';
import { OutsideParamList, InsideStackParamList } from '../stacks/types';
interface INavigationProps {
route?: any;
navigation?: any;
@ -16,41 +9,3 @@ interface INavigationProps {
export type TNavigationOptions = {
navigationOptions?(props: INavigationProps): StackNavigationOptions;
};
export type SetUsernameStackParamList = {
SetUsernameView: {
title: string;
};
};
export type StackParamList = {
AuthLoading: undefined;
OutsideStack: NavigatorScreenParams<OutsideParamList>;
InsideStack: NavigatorScreenParams<InsideStackParamList>;
MasterDetailStack: NavigatorScreenParams<MasterDetailInsideStackParamList>;
SetUsernameStack: NavigatorScreenParams<SetUsernameStackParamList>;
};
export type ShareInsideStackParamList = {
ShareListView: undefined;
ShareView: {
attachments: IAttachment[];
isShareView?: boolean;
isShareExtension: boolean;
serverInfo: TServerModel;
text: string;
room: TSubscriptionModel;
thread?: any; // TODO: Change
};
SelectServerView: undefined;
};
export type ShareOutsideStackParamList = {
WithoutServersView: undefined;
};
export type ShareAppStackParamList = {
AuthLoading?: undefined;
OutsideStack?: NavigatorScreenParams<ShareOutsideStackParamList>;
InsideStack?: NavigatorScreenParams<ShareInsideStackParamList>;
};

View File

@ -1,7 +1,6 @@
import React, { useContext, useEffect, useLayoutEffect, useState } from 'react';
import React, { useEffect, useLayoutEffect, useState } from 'react';
import { Dimensions } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Provider } from 'react-redux';
import { getTheme, setNativeTheme, initialTheme as initialThemeFunction, unsubscribeTheme } from './lib/methods/helpers/theme';
@ -10,67 +9,18 @@ import Navigation from './lib/navigation/shareNavigation';
import store from './lib/store';
import { initStore } from './lib/store/auxStore';
import { closeShareExtension, shareExtensionInit } from './lib/methods/shareExtension';
import { defaultHeader, getActiveRouteName, navigationTheme, themedHeader } from './lib/methods/helpers/navigation';
import { getActiveRouteName, navigationTheme } from './lib/methods/helpers/navigation';
import { ThemeContext } from './theme';
import { localAuthenticate } from './lib/methods/helpers/localAuthentication';
import ScreenLockedView from './views/ScreenLockedView';
// Outside Stack
import WithoutServersView from './views/WithoutServersView';
// Inside Stack
import ShareListView from './views/ShareListView';
import ShareView from './views/ShareView';
import SelectServerView from './views/SelectServerView';
import { setCurrentScreen } from './lib/methods/helpers/log';
import AuthLoadingView from './views/AuthLoadingView';
import { DimensionsContext } from './dimensions';
import { ShareInsideStackParamList, ShareOutsideStackParamList, ShareAppStackParamList } from './definitions/navigationTypes';
import { colors, CURRENT_SERVER } from './lib/constants';
import Loading from './containers/Loading';
import ShareExtensionStack from './stacks/ShareExtensionStack';
initStore(store);
const Inside = createStackNavigator<ShareInsideStackParamList>();
const InsideStack = () => {
const { theme } = useContext(ThemeContext);
const screenOptions = {
...defaultHeader,
...themedHeader(theme)
};
screenOptions.headerStyle = { ...screenOptions.headerStyle, height: 57 };
return (
<Inside.Navigator screenOptions={screenOptions}>
<Inside.Screen name='ShareListView' component={ShareListView} />
<Inside.Screen name='ShareView' component={ShareView} />
<Inside.Screen name='SelectServerView' component={SelectServerView} />
</Inside.Navigator>
);
};
const Outside = createStackNavigator<ShareOutsideStackParamList>();
const OutsideStack = () => {
const { theme } = useContext(ThemeContext);
return (
<Outside.Navigator screenOptions={{ ...defaultHeader, ...themedHeader(theme) }}>
<Outside.Screen name='WithoutServersView' component={WithoutServersView} />
</Outside.Navigator>
);
};
// App
const Stack = createStackNavigator<ShareAppStackParamList>();
export const App = ({ root }: { root: string }): React.ReactElement => (
<Stack.Navigator screenOptions={{ headerShown: false, animationEnabled: false }}>
<>
{!root ? <Stack.Screen name='AuthLoading' component={AuthLoadingView} /> : null}
{root === 'outside' ? <Stack.Screen name='OutsideStack' component={OutsideStack} /> : null}
{root === 'inside' ? <Stack.Screen name='InsideStack' component={InsideStack} /> : null}
</>
</Stack.Navigator>
);
const { width, height, scale, fontScale } = Dimensions.get('screen');
const initialTheme = initialThemeFunction();
const theme = getTheme(initialTheme);
@ -131,7 +81,7 @@ const Root = (): React.ReactElement => {
Navigation.routeNameRef.current = currentRouteName;
}}
>
<App root={root} />
<ShareExtensionStack root={root} />
<Loading />
</NavigationContainer>
<ScreenLockedView />

View File

@ -0,0 +1,57 @@
import React, { useContext } from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import { defaultHeader, themedHeader } from '../../lib/methods/helpers/navigation';
import { ThemeContext } from '../../theme';
// Outside Stack
import WithoutServersView from '../../views/WithoutServersView';
// Inside Stack
import ShareListView from '../../views/ShareListView';
import ShareView from '../../views/ShareView';
import SelectServerView from '../../views/SelectServerView';
import AuthLoadingView from '../../views/AuthLoadingView';
import { ShareAppStackParamList, ShareInsideStackParamList, ShareOutsideStackParamList } from './types';
const Inside = createStackNavigator<ShareInsideStackParamList>();
const InsideStack = () => {
const { theme } = useContext(ThemeContext);
const screenOptions = {
...defaultHeader,
...themedHeader(theme)
};
screenOptions.headerStyle = { ...screenOptions.headerStyle, height: 57 };
return (
<Inside.Navigator screenOptions={screenOptions}>
<Inside.Screen name='ShareListView' component={ShareListView} />
<Inside.Screen name='ShareView' component={ShareView} />
<Inside.Screen name='SelectServerView' component={SelectServerView} />
</Inside.Navigator>
);
};
const Outside = createStackNavigator<ShareOutsideStackParamList>();
const OutsideStack = () => {
const { theme } = useContext(ThemeContext);
return (
<Outside.Navigator screenOptions={{ ...defaultHeader, ...themedHeader(theme) }}>
<Outside.Screen name='WithoutServersView' component={WithoutServersView} />
</Outside.Navigator>
);
};
// App
const Stack = createStackNavigator<ShareAppStackParamList>();
const ShareExtensionStack = ({ root }: { root: string }): React.ReactElement => (
<Stack.Navigator screenOptions={{ headerShown: false, animationEnabled: false }}>
<>
{!root ? <Stack.Screen name='AuthLoading' component={AuthLoadingView} /> : null}
{root === 'outside' ? <Stack.Screen name='OutsideStack' component={OutsideStack} /> : null}
{root === 'inside' ? <Stack.Screen name='InsideStack' component={InsideStack} /> : null}
</>
</Stack.Navigator>
);
export default ShareExtensionStack;

View File

@ -0,0 +1,29 @@
import { NavigatorScreenParams } from '@react-navigation/core';
import { TSubscriptionModel } from '../../definitions/ISubscription';
import { TServerModel } from '../../definitions/IServer';
import { IAttachment } from '../../definitions/IAttachment';
export type ShareInsideStackParamList = {
ShareListView: undefined;
ShareView: {
attachments: IAttachment[];
isShareView?: boolean;
isShareExtension: boolean;
serverInfo: TServerModel;
text: string;
room: TSubscriptionModel;
thread?: any; // TODO: Change
};
SelectServerView: undefined;
};
export type ShareOutsideStackParamList = {
WithoutServersView: undefined;
};
export type ShareAppStackParamList = {
AuthLoading?: undefined;
OutsideStack?: NavigatorScreenParams<ShareOutsideStackParamList>;
InsideStack?: NavigatorScreenParams<ShareInsideStackParamList>;
};

View File

@ -9,11 +9,25 @@ import { IMessage, TAnyMessageModel, TMessageModel } from '../definitions/IMessa
import { ISubscription, SubscriptionType, TSubscriptionModel } from '../definitions/ISubscription';
import { ICannedResponse } from '../definitions/ICannedResponse';
import { TDataSelect } from '../definitions/IDataSelect';
import { ModalStackParamList } from './MasterDetailStack/types';
import { MasterDetailInsideStackParamList, ModalStackParamList } from './MasterDetailStack/types';
import { TThreadModel } from '../definitions';
import { ILivechatDepartment } from '../definitions/ILivechatDepartment';
import { ILivechatTag } from '../definitions/ILivechatTag';
export type SetUsernameStackParamList = {
SetUsernameView: {
title: string;
};
};
export type StackParamList = {
AuthLoading: undefined;
OutsideStack: NavigatorScreenParams<OutsideParamList>;
InsideStack: NavigatorScreenParams<InsideStackParamList>;
MasterDetailStack: NavigatorScreenParams<MasterDetailInsideStackParamList>;
SetUsernameStack: NavigatorScreenParams<SetUsernameStackParamList>;
};
export type ChatsStackParamList = {
ModalStackNavigator: NavigatorScreenParams<ModalStackParamList>;
E2ESaveYourPasswordStackNavigator: NavigatorScreenParams<E2ESaveYourPasswordStackParamList>;