[NEW] Share extension (#942)
This commit is contained in:
parent
b4a062e574
commit
18ef6c5430
|
@ -0,0 +1,3 @@
|
|||
export default {
|
||||
realmPath: ''
|
||||
};
|
|
@ -174,6 +174,8 @@ android {
|
|||
dependencies {
|
||||
addUnimodulesDependencies()
|
||||
implementation "org.webkit:android-jsc:r241213"
|
||||
implementation project(':rn-extensions-share')
|
||||
implementation project(':rn-fetch-blob')
|
||||
implementation project(':react-native-document-picker')
|
||||
implementation project(':react-native-firebase')
|
||||
implementation project(':react-native-webview')
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
|
||||
<uses-permission-sdk-23 android:name="android.permission.VIBRATE"/>
|
||||
|
||||
<application
|
||||
|
@ -25,6 +27,7 @@
|
|||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
|
||||
</intent-filter>
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
@ -36,6 +39,19 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||
<activity
|
||||
android:noHistory="true"
|
||||
android:name=".share.ShareActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/share_extension_name"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
|
@ -34,6 +34,8 @@ import com.learnium.RNDeviceInfo.RNDeviceInfo;
|
|||
import com.actionsheet.ActionSheetPackage;
|
||||
import io.realm.react.RealmReactPackage;
|
||||
import com.swmansion.rnscreens.RNScreensPackage;
|
||||
import chat.rocket.SharePackage;
|
||||
import com.RNFetchBlob.RNFetchBlobPackage;
|
||||
|
||||
import chat.rocket.reactnative.generated.BasePackageList;
|
||||
|
||||
|
@ -69,6 +71,8 @@ public class MainApplication extends Application implements ReactApplication, IN
|
|||
new RNCWebViewPackage(),
|
||||
new OrientationPackage(),
|
||||
new SplashScreenReactPackage(),
|
||||
new SharePackage(),
|
||||
new RNFetchBlobPackage(),
|
||||
new RNGestureHandlerPackage(),
|
||||
new RNScreensPackage(),
|
||||
new ActionSheetPackage(),
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package chat.rocket.reactnative.share;
|
||||
|
||||
import com.facebook.react.ReactActivity;
|
||||
import com.facebook.react.ReactActivityDelegate;
|
||||
import com.facebook.react.ReactRootView;
|
||||
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
|
||||
|
||||
public class ShareActivity extends ReactActivity {
|
||||
@Override
|
||||
protected String getMainComponentName() {
|
||||
return "ShareRocketChatRN";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReactActivityDelegate createReactActivityDelegate() {
|
||||
return new ReactActivityDelegate(this, getMainComponentName()) {
|
||||
@Override
|
||||
protected ReactRootView createRootView() {
|
||||
return new RNGestureHandlerEnabledRootView(ShareActivity.this);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package chat.rocket.reactnative.share;
|
||||
|
||||
import chat.rocket.reactnative.BuildConfig;
|
||||
|
||||
import chat.rocket.SharePackage;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
import com.facebook.react.shell.MainReactPackage;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactPackage;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class ShareApplication extends Application implements ReactApplication {
|
||||
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
|
||||
@Override
|
||||
public boolean getUseDeveloperSupport() {
|
||||
return BuildConfig.DEBUG;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<ReactPackage> getPackages() {
|
||||
return Arrays.<ReactPackage>asList(
|
||||
new MainReactPackage(),
|
||||
new SharePackage()
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public ReactNativeHost getReactNativeHost() {
|
||||
return mReactNativeHost;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
<resources>
|
||||
<string name="app_name">Rocket.Chat Experimental</string>
|
||||
|
||||
<string name="share_extension_name">Rocket.Chat Experimental</string>
|
||||
<string name="no_browser_found">No Browser Found</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,4 +2,19 @@
|
|||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:colorEdgeEffect">#aaaaaa</item>
|
||||
</style>
|
||||
|
||||
<style name="Share.Window" parent="android:Theme">
|
||||
<item name="android:windowEnterAnimation">@null</item>
|
||||
<item name="android:windowExitAnimation">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Share.Transparent" parent="android:Theme">
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowBackground">@color/primary_dark</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="android:windowAnimationStyle">@style/Share.Window</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
|
@ -38,4 +38,8 @@ include ':realm'
|
|||
project(':realm').projectDir = new File(rootProject.projectDir, '../node_modules/realm/android')
|
||||
include ':reactnativenotifications'
|
||||
project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android')
|
||||
include ':app'
|
||||
include ':rn-fetch-blob'
|
||||
project(':rn-fetch-blob').projectDir = new File(rootProject.projectDir, '../node_modules/rn-fetch-blob/android')
|
||||
include ':app', ':rn-extensions-share'
|
||||
project(':rn-extensions-share').projectDir = new File(rootProject.projectDir, '../node_modules/rn-extensions-share/android')
|
||||
|
||||
|
|
1
app.json
1
app.json
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"name": "RocketChatRN",
|
||||
"share": "ShareRocketChatRN",
|
||||
"displayName": "RocketChatRN"
|
||||
}
|
|
@ -68,16 +68,16 @@ export default {
|
|||
Threads_enabled: {
|
||||
type: null
|
||||
},
|
||||
API_Gitlab_URL: {
|
||||
type: 'valueAsString'
|
||||
},
|
||||
AutoTranslate_Enabled: {
|
||||
type: 'valueAsBoolean'
|
||||
},
|
||||
FileUpload_MediaTypeWhiteList: {
|
||||
type: 'valueAsString'
|
||||
},
|
||||
FileUpload_MaxFileSize: {
|
||||
type: 'valueAsNumber'
|
||||
},
|
||||
API_Gitlab_URL: {
|
||||
type: 'valueAsString'
|
||||
},
|
||||
AutoTranslate_Enabled: {
|
||||
type: 'valueAsBoolean'
|
||||
}
|
||||
};
|
||||
|
|
|
@ -32,6 +32,15 @@ export const CloseModalButton = React.memo(({ navigation, testID }) => (
|
|||
</CustomHeaderButtons>
|
||||
));
|
||||
|
||||
export const CloseShareExtensionButton = React.memo(({ onPress, testID }) => (
|
||||
<CustomHeaderButtons left>
|
||||
{isIOS
|
||||
? <Item title='cancel' onPress={onPress} testID={testID} />
|
||||
: <Item title='close' iconName='cross' onPress={onPress} testID={testID} />
|
||||
}
|
||||
</CustomHeaderButtons>
|
||||
));
|
||||
|
||||
export const MoreButton = React.memo(({ onPress, testID }) => (
|
||||
<CustomHeaderButtons>
|
||||
<Item title='more' iconName='menu' onPress={onPress} testID={testID} />
|
||||
|
@ -50,6 +59,10 @@ CloseModalButton.propTypes = {
|
|||
navigation: PropTypes.object.isRequired,
|
||||
testID: PropTypes.string.isRequired
|
||||
};
|
||||
CloseShareExtensionButton.propTypes = {
|
||||
onPress: PropTypes.func.isRequired,
|
||||
testID: PropTypes.string.isRequired
|
||||
};
|
||||
MoreButton.propTypes = {
|
||||
onPress: PropTypes.func.isRequired,
|
||||
testID: PropTypes.string.isRequired
|
||||
|
|
|
@ -7,8 +7,12 @@ import { COLOR_TEXT_DESCRIPTION } from '../constants/colors';
|
|||
const styles = StyleSheet.create({
|
||||
style: {
|
||||
marginRight: 7,
|
||||
marginTop: 3,
|
||||
tintColor: COLOR_TEXT_DESCRIPTION,
|
||||
marginTop: 3
|
||||
},
|
||||
imageColor: {
|
||||
tintColor: COLOR_TEXT_DESCRIPTION
|
||||
},
|
||||
iconColor: {
|
||||
color: COLOR_TEXT_DESCRIPTION
|
||||
},
|
||||
discussion: {
|
||||
|
@ -23,13 +27,15 @@ const RoomTypeIcon = React.memo(({ type, size, style }) => {
|
|||
|
||||
if (type === 'discussion') {
|
||||
// FIXME: These are temporary only. We should have all room icons on <Customicon />, but our design team is still working on this.
|
||||
return <CustomIcon name='chat' size={13} style={[styles.style, styles.discussion]} />;
|
||||
return <CustomIcon name='chat' size={13} style={[styles.style, styles.iconColor, styles.discussion]} />;
|
||||
}
|
||||
|
||||
if (type === 'c') {
|
||||
return <Image source={{ uri: 'hashtag' }} style={[styles.style, style, { width: size, height: size }]} />;
|
||||
return <Image source={{ uri: 'hashtag' }} style={[styles.style, styles.imageColor, style, { width: size, height: size }]} />;
|
||||
} if (type === 'd') {
|
||||
return <CustomIcon name='at' size={13} style={[styles.style, styles.iconColor, styles.discussion]} />;
|
||||
}
|
||||
return <Image source={{ uri: 'lock' }} style={[styles.style, style, { width: size, height: size }]} />;
|
||||
return <Image source={{ uri: 'lock' }} style={[styles.style, styles.imageColor, style, { width: size, height: size }]} />;
|
||||
});
|
||||
|
||||
RoomTypeIcon.propTypes = {
|
||||
|
|
|
@ -103,6 +103,7 @@ export default {
|
|||
Avatar_changed_successfully: 'Avatar changed successfully!',
|
||||
Avatar_Url: 'Avatar URL',
|
||||
Away: 'Away',
|
||||
Back: 'Back',
|
||||
Block_user: 'Block user',
|
||||
Broadcast_channel_Description: 'Only authorized users can write new messages, but the other users will be able to reply',
|
||||
Broadcast_Channel: 'Broadcast Channel',
|
||||
|
@ -310,6 +311,8 @@ export default {
|
|||
Search_global_users: 'Search for global users',
|
||||
Search_global_users_description: 'If you turn-on, you can search for any user from others companies or servers.',
|
||||
Select_Avatar: 'Select Avatar',
|
||||
Select_Channels: 'Select Channels',
|
||||
Select_Server: 'Select Server',
|
||||
Select_Users: 'Select Users',
|
||||
Send: 'Send',
|
||||
Send_audio_message: 'Send audio message',
|
||||
|
@ -349,6 +352,7 @@ export default {
|
|||
Thread: 'Thread',
|
||||
Threads: 'Threads',
|
||||
Timezone: 'Timezone',
|
||||
To: 'To',
|
||||
topic: 'topic',
|
||||
Topic: 'Topic',
|
||||
Translate: 'Translate',
|
||||
|
@ -389,6 +393,7 @@ export default {
|
|||
Welcome: 'Welcome',
|
||||
Welcome_to_RocketChat: 'Welcome to Rocket.Chat',
|
||||
Whats_your_2fa: 'What\'s your 2FA code?',
|
||||
Without_Servers: 'Without Servers',
|
||||
Yes_action_it: 'Yes, {{action}} it!',
|
||||
Yesterday: 'Yesterday',
|
||||
You_are_in_preview_mode: 'You are in preview mode',
|
||||
|
@ -398,6 +403,7 @@ export default {
|
|||
you_were_mentioned: 'you were mentioned',
|
||||
you: 'you',
|
||||
You: 'You',
|
||||
You_need_to_access_at_least_one_RocketChat_server_to_share_something: 'You need to access at least one Rocket.Chat server to share something.',
|
||||
Version_no: 'Version: {{version}}',
|
||||
You_will_not_be_able_to_recover_this_message: 'You will not be able to recover this message!',
|
||||
Change_Language: 'Change Language',
|
||||
|
|
|
@ -108,6 +108,7 @@ export default {
|
|||
Avatar_changed_successfully: 'Avatar alterado com sucesso!',
|
||||
Avatar_Url: 'Avatar URL',
|
||||
Away: 'Ausente',
|
||||
Back: 'Voltar',
|
||||
Block_user: 'Bloquear usuário',
|
||||
Broadcast_channel_Description: 'Somente usuários autorizados podem escrever novas mensagens, mas os outros usuários poderão responder',
|
||||
Broadcast_Channel: 'Canal de Transmissão',
|
||||
|
@ -301,6 +302,8 @@ export default {
|
|||
Search_global_users: 'Busca por usuários globais',
|
||||
Search_global_users_description: 'Caso ativado, busca por usuários de outras empresas ou servidores.',
|
||||
Select_Avatar: 'Selecionar Avatar',
|
||||
Select_Channels: 'Selecionar Canais',
|
||||
Select_Server: 'Selecionar Servidor',
|
||||
Select_Users: 'Selecionar Usuários',
|
||||
Send: 'Enviar',
|
||||
Send_audio_message: 'Enviar mensagem de áudio',
|
||||
|
@ -333,6 +336,7 @@ export default {
|
|||
Thread: 'Tópico',
|
||||
Threads: 'Tópicos',
|
||||
Timezone: 'Fuso horário',
|
||||
To: 'Para',
|
||||
topic: 'tópico',
|
||||
Topic: 'Tópico',
|
||||
Try_again: 'Tentar novamente',
|
||||
|
@ -369,6 +373,7 @@ export default {
|
|||
Welcome: 'Bem vindo',
|
||||
Welcome_to_RocketChat: 'Bem vindo ao Rocket.Chat',
|
||||
Whats_your_2fa: 'Qual seu código de autenticação?',
|
||||
Without_Servers: 'Sem Servidores',
|
||||
Yes_action_it: 'Sim, {{action}}!',
|
||||
Yesterday: 'Ontem',
|
||||
You_are_in_preview_mode: 'Está é uma prévia do canal',
|
||||
|
|
36
app/index.js
36
app/index.js
|
@ -5,18 +5,17 @@ import {
|
|||
import { Provider } from 'react-redux';
|
||||
import { useScreens } from 'react-native-screens'; // eslint-disable-line import/no-unresolved
|
||||
import { Linking } from 'react-native';
|
||||
import firebase from 'react-native-firebase';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { appInit } from './actions';
|
||||
import { deepLinkingOpen } from './actions/deepLinking';
|
||||
import Navigation from './lib/Navigation';
|
||||
import Sidebar from './views/SidebarView';
|
||||
import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from './constants/colors';
|
||||
import parseQuery from './lib/methods/helpers/parseQuery';
|
||||
import { initializePushNotifications, onNotification } from './notifications/push';
|
||||
import store from './lib/createStore';
|
||||
import NotificationBadge from './notifications/inApp';
|
||||
import { defaultHeader, onNavigationStateChange } from './utils/navigation';
|
||||
|
||||
useScreens();
|
||||
|
||||
|
@ -34,17 +33,6 @@ const parseDeepLinking = (url) => {
|
|||
return null;
|
||||
};
|
||||
|
||||
const defaultHeader = {
|
||||
headerStyle: {
|
||||
backgroundColor: HEADER_BACKGROUND
|
||||
},
|
||||
headerTitleStyle: {
|
||||
color: HEADER_TITLE
|
||||
},
|
||||
headerBackTitle: null,
|
||||
headerTintColor: HEADER_BACK
|
||||
};
|
||||
|
||||
// Outside
|
||||
const OutsideStack = createStackNavigator({
|
||||
OnboardingView: {
|
||||
|
@ -262,28 +250,6 @@ const App = createAppContainer(createSwitchNavigator(
|
|||
}
|
||||
));
|
||||
|
||||
// gets the current screen from navigation state
|
||||
const getActiveRouteName = (navigationState) => {
|
||||
if (!navigationState) {
|
||||
return null;
|
||||
}
|
||||
const route = navigationState.routes[navigationState.index];
|
||||
// dive into nested navigators
|
||||
if (route.routes) {
|
||||
return getActiveRouteName(route);
|
||||
}
|
||||
return route.routeName;
|
||||
};
|
||||
|
||||
const onNavigationStateChange = (prevState, currentState) => {
|
||||
const currentScreen = getActiveRouteName(currentState);
|
||||
const prevScreen = getActiveRouteName(prevState);
|
||||
|
||||
if (prevScreen !== currentScreen) {
|
||||
firebase.analytics().setCurrentScreen(currentScreen);
|
||||
}
|
||||
};
|
||||
|
||||
export default class Root extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import Realm from 'realm';
|
||||
import RNRealmPath from 'react-native-realm-path';
|
||||
|
||||
// import { AsyncStorage } from 'react-native';
|
||||
// Realm.clearTestState();
|
||||
|
@ -408,7 +409,7 @@ const inMemorySchema = [usersTypingSchema, activeUsersSchema];
|
|||
class DB {
|
||||
databases = {
|
||||
serversDB: new Realm({
|
||||
path: 'default.realm',
|
||||
path: `${ RNRealmPath.realmPath }default.realm`,
|
||||
schema: [
|
||||
userSchema,
|
||||
serversSchema
|
||||
|
@ -426,7 +427,7 @@ class DB {
|
|||
}
|
||||
}),
|
||||
inMemoryDB: new Realm({
|
||||
path: 'memory.realm',
|
||||
path: `${ RNRealmPath.realmPath }memory.realm`,
|
||||
schema: inMemorySchema,
|
||||
schemaVersion: 2,
|
||||
inMemory: true
|
||||
|
@ -468,7 +469,7 @@ class DB {
|
|||
setActiveDB(database = '') {
|
||||
const path = database.replace(/(^\w+:|^)\/\//, '');
|
||||
return this.databases.activeDB = new Realm({
|
||||
path: `${ path }.realm`,
|
||||
path: `${ RNRealmPath.realmPath }${ path }.realm`,
|
||||
schema,
|
||||
schemaVersion: 13,
|
||||
migration: (oldRealm, newRealm) => {
|
||||
|
|
|
@ -730,14 +730,14 @@ const RocketChat = {
|
|||
return JSON.parse(useMarkdown);
|
||||
},
|
||||
async getSortPreferences() {
|
||||
const prefs = await AsyncStorage.getItem(SORT_PREFS_KEY);
|
||||
return JSON.parse(prefs);
|
||||
const prefs = await RNUserDefaults.objectForKey(SORT_PREFS_KEY);
|
||||
return prefs;
|
||||
},
|
||||
async saveSortPreference(param) {
|
||||
try {
|
||||
let prefs = await RocketChat.getSortPreferences();
|
||||
prefs = { ...prefs, ...param };
|
||||
return await AsyncStorage.setItem(SORT_PREFS_KEY, JSON.stringify(prefs));
|
||||
return await RNUserDefaults.setObjectForKey(SORT_PREFS_KEY, prefs);
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,9 @@ import PropTypes from 'prop-types';
|
|||
import Avatar from '../../containers/Avatar';
|
||||
import Touch from '../../utils/touch';
|
||||
import RoomTypeIcon from '../../containers/RoomTypeIcon';
|
||||
import styles from './styles';
|
||||
import styles, { ROW_HEIGHT } from './styles';
|
||||
|
||||
export { ROW_HEIGHT };
|
||||
|
||||
const DirectoryItemLabel = React.memo(({ text }) => {
|
||||
if (!text) {
|
||||
|
@ -30,7 +32,7 @@ const DirectoryItem = ({
|
|||
/>
|
||||
<View style={styles.directoryItemTextContainer}>
|
||||
<View style={styles.directoryItemTextTitle}>
|
||||
<RoomTypeIcon type='c' />
|
||||
<RoomTypeIcon type={type} />
|
||||
<Text style={styles.directoryItemName} numberOfLines={1}>{title}</Text>
|
||||
</View>
|
||||
<Text style={styles.directoryItemUsername} numberOfLines={1}>{description}</Text>
|
|
@ -0,0 +1,49 @@
|
|||
import { StyleSheet } from 'react-native';
|
||||
|
||||
import { COLOR_WHITE } from '../../constants/colors';
|
||||
import sharedStyles from '../../views/Styles';
|
||||
|
||||
export const ROW_HEIGHT = 54;
|
||||
|
||||
export default StyleSheet.create({
|
||||
directoryItemButton: {
|
||||
height: ROW_HEIGHT,
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
directoryItemContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
paddingHorizontal: 15
|
||||
},
|
||||
directoryItemAvatar: {
|
||||
marginRight: 12
|
||||
},
|
||||
directoryItemTextTitle: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center'
|
||||
},
|
||||
directoryItemTextContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'center'
|
||||
},
|
||||
directoryItemName: {
|
||||
flex: 1,
|
||||
fontSize: 17,
|
||||
...sharedStyles.textMedium,
|
||||
...sharedStyles.textColorNormal
|
||||
},
|
||||
directoryItemUsername: {
|
||||
fontSize: 14,
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textColorDescription
|
||||
},
|
||||
directoryItemLabel: {
|
||||
fontSize: 14,
|
||||
paddingLeft: 10,
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textColorDescription
|
||||
}
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { View, Text } from 'react-native';
|
||||
import FastImage from 'react-native-fast-image';
|
||||
import { RectButton } from 'react-native-gesture-handler';
|
||||
|
||||
import log from '../../utils/log';
|
||||
import Check from '../../containers/Check';
|
||||
import styles, { ROW_HEIGHT } from './styles';
|
||||
|
||||
export { ROW_HEIGHT };
|
||||
|
||||
const ServerItem = React.memo(({
|
||||
server, item, onPress, hasCheck
|
||||
}) => (
|
||||
<RectButton onPress={onPress} style={styles.serverItem} testID={`rooms-list-header-server-${ item.id }`}>
|
||||
<View style={styles.serverItemContainer}>
|
||||
{item.iconURL
|
||||
? (
|
||||
<FastImage
|
||||
source={{
|
||||
uri: item.iconURL,
|
||||
priority: FastImage.priority.high
|
||||
}}
|
||||
defaultSource={{ uri: 'logo' }}
|
||||
style={styles.serverIcon}
|
||||
onError={() => log('err_loading_server_icon')}
|
||||
/>
|
||||
)
|
||||
: (
|
||||
<FastImage
|
||||
source={{ uri: 'logo' }}
|
||||
style={styles.serverIcon}
|
||||
/>
|
||||
)
|
||||
}
|
||||
<View style={styles.serverTextContainer}>
|
||||
<Text style={styles.serverName}>{item.name || item.id}</Text>
|
||||
<Text style={styles.serverUrl}>{item.id}</Text>
|
||||
</View>
|
||||
{item.id === server && hasCheck ? <Check /> : null}
|
||||
</View>
|
||||
</RectButton>
|
||||
));
|
||||
|
||||
ServerItem.propTypes = {
|
||||
onPress: PropTypes.func.isRequired,
|
||||
item: PropTypes.object.isRequired,
|
||||
hasCheck: PropTypes.bool,
|
||||
server: PropTypes.string
|
||||
};
|
||||
|
||||
export default ServerItem;
|
|
@ -0,0 +1,39 @@
|
|||
import { StyleSheet } from 'react-native';
|
||||
|
||||
import sharedStyles from '../../views/Styles';
|
||||
import { COLOR_WHITE } from '../../constants/colors';
|
||||
|
||||
export const ROW_HEIGHT = 56;
|
||||
|
||||
export default StyleSheet.create({
|
||||
serverItem: {
|
||||
height: ROW_HEIGHT,
|
||||
backgroundColor: COLOR_WHITE,
|
||||
justifyContent: 'center'
|
||||
},
|
||||
serverItemContainer: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center'
|
||||
},
|
||||
serverIcon: {
|
||||
width: 38,
|
||||
height: 38,
|
||||
marginHorizontal: 15,
|
||||
borderRadius: 4
|
||||
},
|
||||
serverTextContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'center'
|
||||
},
|
||||
serverName: {
|
||||
fontSize: 18,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textSemibold
|
||||
},
|
||||
serverUrl: {
|
||||
fontSize: 15,
|
||||
...sharedStyles.textColorDescription,
|
||||
...sharedStyles.textRegular
|
||||
}
|
||||
});
|
|
@ -0,0 +1,78 @@
|
|||
import React from 'react';
|
||||
import { View } from 'react-native';
|
||||
import { createAppContainer, createStackNavigator, createSwitchNavigator } from 'react-navigation';
|
||||
import { Provider } from 'react-redux';
|
||||
|
||||
import Navigation from './lib/Navigation';
|
||||
import store from './lib/createStore';
|
||||
import { appInit } from './actions';
|
||||
import ShareListView from './views/ShareListView';
|
||||
import ShareView from './views/ShareView';
|
||||
import SelectServerView from './views/SelectServerView';
|
||||
import AuthLoadingView from './views/AuthLoadingView';
|
||||
import WithoutServersView from './views/WithoutServersView';
|
||||
import sharedStyles from './views/Styles';
|
||||
import { isNotch } from './utils/deviceInfo';
|
||||
import { defaultHeader, onNavigationStateChange } from './utils/navigation';
|
||||
|
||||
|
||||
const InsideNavigator = createStackNavigator({
|
||||
ShareListView,
|
||||
ShareView,
|
||||
SelectServerView
|
||||
}, {
|
||||
initialRouteName: 'ShareListView',
|
||||
defaultNavigationOptions: defaultHeader
|
||||
});
|
||||
|
||||
const OutsideNavigator = createStackNavigator({
|
||||
WithoutServersView
|
||||
}, {
|
||||
initialRouteName: 'WithoutServersView',
|
||||
defaultNavigationOptions: defaultHeader
|
||||
});
|
||||
|
||||
const AppContainer = createAppContainer(createSwitchNavigator({
|
||||
OutsideStack: OutsideNavigator,
|
||||
InsideStack: InsideNavigator,
|
||||
AuthLoading: AuthLoadingView
|
||||
},
|
||||
{
|
||||
initialRouteName: 'AuthLoading'
|
||||
}));
|
||||
|
||||
class Root extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
store.dispatch(appInit());
|
||||
this.state = {
|
||||
isLandscape: false
|
||||
};
|
||||
}
|
||||
|
||||
handleLayout = (event) => {
|
||||
const { width, height } = event.nativeEvent.layout;
|
||||
this.setState({ isLandscape: width > height });
|
||||
}
|
||||
|
||||
render() {
|
||||
const { isLandscape } = this.state;
|
||||
return (
|
||||
<View
|
||||
style={[sharedStyles.container, isLandscape && isNotch ? sharedStyles.notchLandscapeContainer : {}]}
|
||||
onLayout={this.handleLayout}
|
||||
>
|
||||
<Provider store={store}>
|
||||
<AppContainer
|
||||
ref={(navigatorRef) => {
|
||||
Navigation.setTopLevelNavigator(navigatorRef);
|
||||
}}
|
||||
onNavigationStateChange={onNavigationStateChange}
|
||||
/>
|
||||
</Provider>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Root;
|
|
@ -0,0 +1,36 @@
|
|||
import firebase from 'react-native-firebase';
|
||||
|
||||
import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from '../constants/colors';
|
||||
|
||||
export const defaultHeader = {
|
||||
headerStyle: {
|
||||
backgroundColor: HEADER_BACKGROUND
|
||||
},
|
||||
headerTitleStyle: {
|
||||
color: HEADER_TITLE
|
||||
},
|
||||
headerBackTitle: null,
|
||||
headerTintColor: HEADER_BACK
|
||||
};
|
||||
|
||||
// gets the current screen from navigation state
|
||||
export const getActiveRouteName = (navigationState) => {
|
||||
if (!navigationState) {
|
||||
return null;
|
||||
}
|
||||
const route = navigationState.routes[navigationState.index];
|
||||
// dive into nested navigators
|
||||
if (route.routes) {
|
||||
return getActiveRouteName(route);
|
||||
}
|
||||
return route.routeName;
|
||||
};
|
||||
|
||||
export const onNavigationStateChange = (prevState, currentState) => {
|
||||
const currentScreen = getActiveRouteName(currentState);
|
||||
const prevScreen = getActiveRouteName(prevState);
|
||||
|
||||
if (prevScreen !== currentScreen) {
|
||||
firebase.analytics().setCurrentScreen(currentScreen);
|
||||
}
|
||||
};
|
|
@ -2,6 +2,27 @@ import moment from 'moment';
|
|||
|
||||
import I18n from '../i18n';
|
||||
|
||||
export const isOwner = room => room && room.roles && room.roles.length && !!room.roles.find(role => role === 'owner');
|
||||
|
||||
export const isMuted = (room, user) => room && room.muted && room.muted.find && !!room.muted.find(m => m === user.username);
|
||||
|
||||
export const isReadOnly = (room, user) => {
|
||||
if (isOwner(room)) {
|
||||
return false;
|
||||
}
|
||||
return (room && room.ro) || isMuted(room, user);
|
||||
};
|
||||
|
||||
export const isBlocked = (room) => {
|
||||
if (room) {
|
||||
const { t, blocked, blocker } = room;
|
||||
if (t === 'd' && (blocked || blocker)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
export const capitalize = (s) => {
|
||||
if (typeof s !== 'string') { return ''; }
|
||||
return s.charAt(0).toUpperCase() + s.slice(1);
|
||||
|
|
|
@ -7,7 +7,7 @@ import { connect } from 'react-redux';
|
|||
import { SafeAreaView } from 'react-navigation';
|
||||
|
||||
import RocketChat from '../../lib/rocketchat';
|
||||
import DirectoryItem from './DirectoryItem';
|
||||
import DirectoryItem from '../../presentation/DirectoryItem';
|
||||
import sharedStyles from '../Styles';
|
||||
import I18n from '../../i18n';
|
||||
import Touch from '../../utils/touch';
|
||||
|
|
|
@ -98,46 +98,6 @@ export default StyleSheet.create({
|
|||
marginHorizontal: 15,
|
||||
flex: 1
|
||||
},
|
||||
directoryItemButton: {
|
||||
height: 54,
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
directoryItemContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
paddingHorizontal: 15
|
||||
},
|
||||
directoryItemAvatar: {
|
||||
marginRight: 12
|
||||
},
|
||||
directoryItemTextTitle: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center'
|
||||
},
|
||||
directoryItemTextContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'center'
|
||||
},
|
||||
directoryItemName: {
|
||||
flex: 1,
|
||||
fontSize: 17,
|
||||
...sharedStyles.textMedium,
|
||||
...sharedStyles.textColorNormal
|
||||
},
|
||||
directoryItemUsername: {
|
||||
fontSize: 14,
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textColorDescription
|
||||
},
|
||||
directoryItemLabel: {
|
||||
fontSize: 14,
|
||||
paddingLeft: 10,
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textColorDescription
|
||||
},
|
||||
inverted: {
|
||||
transform: [{ scaleY: -1 }]
|
||||
},
|
||||
|
|
|
@ -42,6 +42,7 @@ import buildMessage from '../../lib/methods/helpers/buildMessage';
|
|||
import FileModal from '../../containers/FileModal';
|
||||
import ReactionsModal from '../../containers/ReactionsModal';
|
||||
import { Toast } from '../../utils/info';
|
||||
import { isReadOnly, isBlocked } from '../../utils/room';
|
||||
|
||||
@connect(state => ({
|
||||
user: {
|
||||
|
@ -455,37 +456,6 @@ export default class RoomView extends React.Component {
|
|||
}
|
||||
};
|
||||
|
||||
isOwner = () => {
|
||||
const { room } = this.state;
|
||||
return room && room.roles && room.roles.length && !!room.roles.find(role => role === 'owner');
|
||||
}
|
||||
|
||||
isMuted = () => {
|
||||
const { room } = this.state;
|
||||
const { user } = this.props;
|
||||
return room && room.muted && room.muted.find && !!room.muted.find(m => m === user.username);
|
||||
}
|
||||
|
||||
isReadOnly = () => {
|
||||
const { room } = this.state;
|
||||
if (this.isOwner()) {
|
||||
return false;
|
||||
}
|
||||
return (room && room.ro) || this.isMuted();
|
||||
}
|
||||
|
||||
isBlocked = () => {
|
||||
const { room } = this.state;
|
||||
|
||||
if (room) {
|
||||
const { t, blocked, blocker } = room;
|
||||
if (t === 'd' && (blocked || blocker)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line react/sort-comp
|
||||
fetchThreadName = async(tmid) => {
|
||||
try {
|
||||
|
@ -576,7 +546,7 @@ export default class RoomView extends React.Component {
|
|||
|
||||
renderFooter = () => {
|
||||
const { joined, room } = this.state;
|
||||
const { navigation } = this.props;
|
||||
const { navigation, user } = this.props;
|
||||
|
||||
if (!joined && !this.tmid) {
|
||||
return (
|
||||
|
@ -593,14 +563,14 @@ export default class RoomView extends React.Component {
|
|||
</View>
|
||||
);
|
||||
}
|
||||
if (this.isReadOnly()) {
|
||||
if (isReadOnly(room, user)) {
|
||||
return (
|
||||
<View style={styles.readOnly}>
|
||||
<Text style={styles.previewMode}>{I18n.t('This_room_is_read_only')}</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
if (this.isBlocked()) {
|
||||
if (isBlocked(room)) {
|
||||
return (
|
||||
<View style={styles.readOnly}>
|
||||
<Text style={styles.previewMode}>{I18n.t('This_room_is_blocked')}</Text>
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
import React from 'react';
|
||||
import {
|
||||
FlatList, StyleSheet, View
|
||||
} from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
import { connect } from 'react-redux';
|
||||
import { SafeAreaView } from 'react-navigation';
|
||||
|
||||
import I18n from '../i18n';
|
||||
import database from '../lib/realm';
|
||||
import StatusBar from '../containers/StatusBar';
|
||||
import { selectServerRequest as selectServerRequestAction } from '../actions/server';
|
||||
|
||||
import {
|
||||
COLOR_BACKGROUND_CONTAINER
|
||||
} from '../constants/colors';
|
||||
import Navigation from '../lib/Navigation';
|
||||
import ServerItem, { ROW_HEIGHT } from '../presentation/ServerItem';
|
||||
import sharedStyles from './Styles';
|
||||
|
||||
const getItemLayout = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index });
|
||||
const keyExtractor = item => item.id;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER
|
||||
},
|
||||
list: {
|
||||
marginVertical: 32,
|
||||
...sharedStyles.separatorVertical
|
||||
},
|
||||
separator: {
|
||||
...sharedStyles.separatorBottom,
|
||||
marginLeft: 48
|
||||
}
|
||||
});
|
||||
|
||||
@connect(state => ({
|
||||
server: state.server.server
|
||||
}), dispatch => ({
|
||||
selectServerRequest: server => dispatch(selectServerRequestAction(server))
|
||||
}))
|
||||
export default class SelectServerView extends React.Component {
|
||||
static navigationOptions = () => ({
|
||||
title: I18n.t('Select_Server')
|
||||
})
|
||||
|
||||
static propTypes = {
|
||||
server: PropTypes.string,
|
||||
selectServerRequest: PropTypes.func
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const { serversDB } = database.databases;
|
||||
const servers = serversDB.objects('servers');
|
||||
const filteredServers = servers.filter(server => server.roomsUpdatedAt);
|
||||
this.state = {
|
||||
servers: filteredServers
|
||||
};
|
||||
}
|
||||
|
||||
select = (server) => {
|
||||
const {
|
||||
server: currentServer, selectServerRequest
|
||||
} = this.props;
|
||||
|
||||
if (currentServer !== server) {
|
||||
selectServerRequest(server);
|
||||
}
|
||||
Navigation.navigate('ShareListView');
|
||||
}
|
||||
|
||||
renderItem = ({ item }) => {
|
||||
const { server } = this.props;
|
||||
return (
|
||||
<ServerItem
|
||||
server={server}
|
||||
onPress={() => this.select(item.id)}
|
||||
item={item}
|
||||
hasCheck
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
renderSeparator = () => <View style={styles.separator} />;
|
||||
|
||||
render() {
|
||||
const { servers } = this.state;
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={styles.container}
|
||||
forceInset={{ bottom: 'never' }}
|
||||
>
|
||||
<StatusBar />
|
||||
<View style={styles.list}>
|
||||
<FlatList
|
||||
data={servers}
|
||||
keyExtractor={keyExtractor}
|
||||
renderItem={this.renderItem}
|
||||
getItemLayout={getItemLayout}
|
||||
ItemSeparatorComponent={this.renderSeparator}
|
||||
enableEmptySections
|
||||
removeClippedSubviews
|
||||
keyboardShouldPersistTaps='always'
|
||||
windowSize={7}
|
||||
bounces={false}
|
||||
/>
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
import React, { PureComponent } from 'react';
|
||||
import {
|
||||
View, StyleSheet, Text, Platform
|
||||
} from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
import { connect } from 'react-redux';
|
||||
import { TextInput } from 'react-native-gesture-handler';
|
||||
|
||||
import I18n from '../../i18n';
|
||||
import { COLOR_WHITE, HEADER_TITLE } from '../../constants/colors';
|
||||
import sharedStyles from '../Styles';
|
||||
import { setSearch as setSearchAction } from '../../actions/rooms';
|
||||
import { isAndroid } from '../../utils/deviceInfo';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: 'center'
|
||||
},
|
||||
search: {
|
||||
fontSize: 20,
|
||||
color: COLOR_WHITE,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
title: {
|
||||
...Platform.select({
|
||||
ios: {
|
||||
fontSize: 17,
|
||||
...sharedStyles.textSemibold,
|
||||
color: HEADER_TITLE
|
||||
},
|
||||
android: {
|
||||
fontSize: 20,
|
||||
...sharedStyles.textRegular,
|
||||
color: HEADER_TITLE
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
@connect(state => ({
|
||||
showSearchHeader: state.rooms.showSearchHeader
|
||||
}), dispatch => ({
|
||||
setSearch: searchText => dispatch(setSearchAction(searchText))
|
||||
}))
|
||||
class ShareListHeader extends PureComponent {
|
||||
static propTypes = {
|
||||
showSearchHeader: PropTypes.bool,
|
||||
setSearch: PropTypes.func
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
const { showSearchHeader } = this.props;
|
||||
if (showSearchHeader && prevProps.showSearchHeader !== showSearchHeader) {
|
||||
setTimeout(() => {
|
||||
this.searchInputRef.focus();
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
onSearchChangeText = (text) => {
|
||||
const { setSearch } = this.props;
|
||||
setSearch(text.trim());
|
||||
}
|
||||
|
||||
setSearchInputRef = (ref) => {
|
||||
this.searchInputRef = ref;
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
showSearchHeader
|
||||
} = this.props;
|
||||
|
||||
if (showSearchHeader && isAndroid) {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<TextInput
|
||||
ref={this.setSearchInputRef}
|
||||
style={styles.search}
|
||||
placeholder={I18n.t('Search')}
|
||||
placeholderTextColor='rgba(255, 255, 255, 0.5)'
|
||||
onChangeText={this.onSearchChangeText}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
return <Text style={styles.title}>{I18n.t('Select_Channels')}</Text>;
|
||||
}
|
||||
}
|
||||
|
||||
export default ShareListHeader;
|
|
@ -0,0 +1,494 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
View, Text, LayoutAnimation, InteractionManager, FlatList, ScrollView, ActivityIndicator, Keyboard
|
||||
} from 'react-native';
|
||||
import { SafeAreaView } from 'react-navigation';
|
||||
import ShareExtension from 'rn-extensions-share';
|
||||
import { connect } from 'react-redux';
|
||||
import RNFetchBlob from 'rn-fetch-blob';
|
||||
import * as mime from 'react-native-mime-types';
|
||||
import { isEqual } from 'lodash';
|
||||
|
||||
import Navigation from '../../lib/Navigation';
|
||||
import database, { safeAddListener } from '../../lib/realm';
|
||||
import debounce from '../../utils/debounce';
|
||||
import { isIOS, isAndroid } from '../../utils/deviceInfo';
|
||||
import I18n from '../../i18n';
|
||||
import { CustomIcon } from '../../lib/Icons';
|
||||
import log from '../../utils/log';
|
||||
import {
|
||||
openSearchHeader as openSearchHeaderAction,
|
||||
closeSearchHeader as closeSearchHeaderAction
|
||||
} from '../../actions/rooms';
|
||||
import DirectoryItem, { ROW_HEIGHT } from '../../presentation/DirectoryItem';
|
||||
import ServerItem, { ROW_HEIGHT as ROW_HEIGHT_SERVER } from '../../presentation/ServerItem';
|
||||
import { CloseShareExtensionButton, CustomHeaderButtons, Item } from '../../containers/HeaderButton';
|
||||
import SearchBar from '../RoomsListView/ListHeader/SearchBar';
|
||||
import ShareListHeader from './Header';
|
||||
|
||||
import styles from './styles';
|
||||
|
||||
const SCROLL_OFFSET = 56;
|
||||
const getItemLayoutChannel = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index });
|
||||
const getItemLayoutServer = (data, index) => ({ length: ROW_HEIGHT_SERVER, offset: ROW_HEIGHT_SERVER * index, index });
|
||||
const keyExtractor = item => item.rid;
|
||||
|
||||
@connect(state => ({
|
||||
userId: state.login.user && state.login.user.id,
|
||||
token: state.login.user && state.login.user.token,
|
||||
useRealName: state.settings.UI_Use_Real_Name,
|
||||
searchText: state.rooms.searchText,
|
||||
server: state.server.server,
|
||||
loading: state.server.loading,
|
||||
FileUpload_MediaTypeWhiteList: state.settings.FileUpload_MediaTypeWhiteList,
|
||||
FileUpload_MaxFileSize: state.settings.FileUpload_MaxFileSize,
|
||||
baseUrl: state.settings.baseUrl || state.server ? state.server.server : '',
|
||||
sortBy: state.sortPreferences.sortBy,
|
||||
groupByType: state.sortPreferences.groupByType,
|
||||
showFavorites: state.sortPreferences.showFavorites
|
||||
}), dispatch => ({
|
||||
openSearchHeader: () => dispatch(openSearchHeaderAction()),
|
||||
closeSearchHeader: () => dispatch(closeSearchHeaderAction())
|
||||
}))
|
||||
/** @extends React.Component */
|
||||
export default class ShareListView extends React.Component {
|
||||
static navigationOptions = ({ navigation }) => {
|
||||
const searching = navigation.getParam('searching');
|
||||
const cancelSearchingAndroid = navigation.getParam('cancelSearchingAndroid');
|
||||
const initSearchingAndroid = navigation.getParam('initSearchingAndroid', () => {});
|
||||
|
||||
return {
|
||||
headerBackTitle: isIOS ? I18n.t('Back') : null,
|
||||
headerLeft: searching
|
||||
? (
|
||||
<CustomHeaderButtons left>
|
||||
<Item title='cancel' iconName='cross' onPress={cancelSearchingAndroid} />
|
||||
</CustomHeaderButtons>
|
||||
)
|
||||
: (
|
||||
<CloseShareExtensionButton
|
||||
onPress={ShareExtension.close}
|
||||
testID='share-extension-close'
|
||||
/>
|
||||
),
|
||||
headerTitle: <ShareListHeader />,
|
||||
headerRight: (
|
||||
searching
|
||||
? null
|
||||
: (
|
||||
<CustomHeaderButtons>
|
||||
{isAndroid ? <Item title='search' iconName='magnifier' onPress={initSearchingAndroid} /> : null}
|
||||
</CustomHeaderButtons>
|
||||
)
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
navigation: PropTypes.object,
|
||||
server: PropTypes.string,
|
||||
useRealName: PropTypes.bool,
|
||||
searchText: PropTypes.string,
|
||||
FileUpload_MediaTypeWhiteList: PropTypes.string,
|
||||
FileUpload_MaxFileSize: PropTypes.number,
|
||||
openSearchHeader: PropTypes.func,
|
||||
closeSearchHeader: PropTypes.func,
|
||||
baseUrl: PropTypes.string,
|
||||
token: PropTypes.string,
|
||||
userId: PropTypes.string,
|
||||
sortBy: PropTypes.string,
|
||||
groupByType: PropTypes.bool,
|
||||
showFavorites: PropTypes.bool,
|
||||
loading: PropTypes.bool
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.data = [];
|
||||
this.state = {
|
||||
searching: false,
|
||||
value: '',
|
||||
isMedia: false,
|
||||
mediaLoading: false,
|
||||
loading: true,
|
||||
fileInfo: null,
|
||||
search: [],
|
||||
discussions: [],
|
||||
channels: [],
|
||||
favorites: [],
|
||||
chats: [],
|
||||
privateGroup: [],
|
||||
direct: [],
|
||||
livechat: [],
|
||||
servers: []
|
||||
};
|
||||
}
|
||||
|
||||
async componentDidMount() {
|
||||
this.getSubscriptions();
|
||||
|
||||
const { navigation } = this.props;
|
||||
navigation.setParams({
|
||||
initSearchingAndroid: this.initSearchingAndroid,
|
||||
cancelSearchingAndroid: this.cancelSearchingAndroid
|
||||
});
|
||||
|
||||
try {
|
||||
const { value, type } = await ShareExtension.data();
|
||||
let fileInfo = null;
|
||||
const isMedia = (type === 'media');
|
||||
if (isMedia) {
|
||||
this.setState({ mediaLoading: true });
|
||||
const data = await RNFetchBlob.fs.stat(this.uriToPath(value));
|
||||
fileInfo = {
|
||||
name: data.filename,
|
||||
description: '',
|
||||
size: data.size,
|
||||
type: mime.lookup(data.path),
|
||||
store: 'Uploads',
|
||||
path: isIOS ? data.path : `file://${ data.path }`
|
||||
};
|
||||
}
|
||||
this.setState({
|
||||
value, fileInfo, isMedia, mediaLoading: false
|
||||
});
|
||||
} catch (e) {
|
||||
log('err_process_media_share_extension', e);
|
||||
this.setState({ mediaLoading: false });
|
||||
}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const { searchText, loading } = this.props;
|
||||
|
||||
if (nextProps.server && loading !== nextProps.loading) {
|
||||
if (nextProps.loading) {
|
||||
this.internalSetState({ loading: true });
|
||||
} else {
|
||||
this.getSubscriptions();
|
||||
}
|
||||
} else if (searchText !== nextProps.searchText) {
|
||||
this.search(nextProps.searchText);
|
||||
}
|
||||
}
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
const { loading, searching } = this.state;
|
||||
if (nextState.loading !== loading) {
|
||||
return true;
|
||||
}
|
||||
if (nextState.searching !== searching) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const { search } = this.state;
|
||||
if (!isEqual(nextState.search, search)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line react/sort-comp
|
||||
internalSetState = (...args) => {
|
||||
const { navigation } = this.props;
|
||||
if (isIOS && navigation.isFocused()) {
|
||||
LayoutAnimation.easeInEaseOut();
|
||||
}
|
||||
this.setState(...args);
|
||||
}
|
||||
|
||||
getSubscriptions = debounce(() => {
|
||||
if (this.data && this.data.removeAllListeners) {
|
||||
this.data.removeAllListeners();
|
||||
}
|
||||
|
||||
const {
|
||||
server, sortBy, showFavorites, groupByType
|
||||
} = this.props;
|
||||
const { serversDB } = database.databases;
|
||||
|
||||
if (server) {
|
||||
this.data = database.objects('subscriptions').filtered('archived != true && open == true');
|
||||
if (sortBy === 'alphabetical') {
|
||||
this.data = this.data.sorted('name', false);
|
||||
} else {
|
||||
this.data = this.data.sorted('roomUpdatedAt', true);
|
||||
}
|
||||
// servers
|
||||
this.servers = serversDB.objects('servers');
|
||||
|
||||
// favorites
|
||||
if (showFavorites) {
|
||||
this.favorites = this.data.filtered('f == true');
|
||||
} else {
|
||||
this.favorites = [];
|
||||
}
|
||||
|
||||
// type
|
||||
if (groupByType) {
|
||||
this.discussions = this.data.filtered('prid != null');
|
||||
this.channels = this.data.filtered('t == $0 AND prid == null', 'c');
|
||||
this.privateGroup = this.data.filtered('t == $0 AND prid == null', 'p');
|
||||
this.direct = this.data.filtered('t == $0 AND prid == null', 'd');
|
||||
this.livechat = this.data.filtered('t == $0 AND prid == null', 'l');
|
||||
} else {
|
||||
this.chats = this.data;
|
||||
}
|
||||
safeAddListener(this.data, this.updateState);
|
||||
}
|
||||
}, 300);
|
||||
|
||||
uriToPath = uri => decodeURIComponent(isIOS ? uri.replace(/^file:\/\//, '') : uri);
|
||||
|
||||
// eslint-disable-next-line react/sort-comp
|
||||
updateState = debounce(() => {
|
||||
this.updateStateInteraction = InteractionManager.runAfterInteractions(() => {
|
||||
this.internalSetState({
|
||||
chats: this.chats ? this.chats.slice() : [],
|
||||
favorites: this.favorites ? this.favorites.slice() : [],
|
||||
discussions: this.discussions ? this.discussions.slice() : [],
|
||||
channels: this.channels ? this.channels.slice() : [],
|
||||
privateGroup: this.privateGroup ? this.privateGroup.slice() : [],
|
||||
direct: this.direct ? this.direct.slice() : [],
|
||||
livechat: this.livechat ? this.livechat.slice() : [],
|
||||
servers: this.servers ? this.servers.slice() : [],
|
||||
loading: false
|
||||
});
|
||||
this.forceUpdate();
|
||||
});
|
||||
}, 300);
|
||||
|
||||
getRoomTitle = (item) => {
|
||||
const { useRealName } = this.props;
|
||||
return ((item.prid || useRealName) && item.fname) || item.name;
|
||||
}
|
||||
|
||||
shareMessage = (item) => {
|
||||
const { value, isMedia, fileInfo } = this.state;
|
||||
const { navigation } = this.props;
|
||||
|
||||
navigation.navigate('ShareView', {
|
||||
rid: item.rid,
|
||||
value,
|
||||
isMedia,
|
||||
fileInfo,
|
||||
name: this.getRoomTitle(item)
|
||||
});
|
||||
}
|
||||
|
||||
canUploadFile = () => {
|
||||
const { FileUpload_MediaTypeWhiteList, FileUpload_MaxFileSize } = this.props;
|
||||
const { fileInfo: file, mediaLoading, loading } = this.state;
|
||||
|
||||
if (loading || mediaLoading) {
|
||||
return true;
|
||||
}
|
||||
if (!(file && file.path)) {
|
||||
return true;
|
||||
}
|
||||
if (file.size > FileUpload_MaxFileSize) {
|
||||
return false;
|
||||
}
|
||||
if (!FileUpload_MediaTypeWhiteList) {
|
||||
return false;
|
||||
}
|
||||
const allowedMime = FileUpload_MediaTypeWhiteList.split(',');
|
||||
if (allowedMime.includes(file.type)) {
|
||||
return true;
|
||||
}
|
||||
const wildCardGlob = '/*';
|
||||
const wildCards = allowedMime.filter(item => item.indexOf(wildCardGlob) > 0);
|
||||
if (wildCards.includes(file.type.replace(/(\/.*)$/, wildCardGlob))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
search = (text) => {
|
||||
const result = database.objects('subscriptions').filtered('name CONTAINS[c] $0', text);
|
||||
const subscriptions = database.objects('subscriptions');
|
||||
const data = result.length !== subscriptions.length ? result : [];
|
||||
this.internalSetState({
|
||||
search: data
|
||||
});
|
||||
}
|
||||
|
||||
initSearchingAndroid = () => {
|
||||
const { openSearchHeader, navigation } = this.props;
|
||||
this.setState({ searching: true });
|
||||
navigation.setParams({ searching: true });
|
||||
openSearchHeader();
|
||||
}
|
||||
|
||||
cancelSearchingAndroid = () => {
|
||||
if (isAndroid) {
|
||||
const { closeSearchHeader, navigation } = this.props;
|
||||
this.setState({ searching: false });
|
||||
navigation.setParams({ searching: false });
|
||||
closeSearchHeader();
|
||||
this.internalSetState({ search: [] });
|
||||
Keyboard.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
renderListHeader = () => <SearchBar onChangeSearchText={this.search} />;
|
||||
|
||||
renderSectionHeader = header => (
|
||||
<View style={styles.headerContainer}>
|
||||
<Text style={styles.headerText}>
|
||||
{I18n.t(header)}
|
||||
</Text>
|
||||
</View>
|
||||
)
|
||||
|
||||
renderItem = ({ item }) => {
|
||||
const { userId, token, baseUrl } = this.props;
|
||||
return (
|
||||
<DirectoryItem
|
||||
user={{
|
||||
userId,
|
||||
token
|
||||
}}
|
||||
title={this.getRoomTitle(item)}
|
||||
baseUrl={baseUrl}
|
||||
avatar={this.getRoomTitle(item)}
|
||||
description={
|
||||
item.t === 'c'
|
||||
? (item.topic || item.description)
|
||||
: item.fname
|
||||
}
|
||||
type={item.t}
|
||||
onPress={() => this.shareMessage(item)}
|
||||
testID={`share-extension-item-${ item.name }`}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
renderSeparator = () => <View style={styles.separator} />;
|
||||
|
||||
renderSection = (data, header) => {
|
||||
if (data && data.length > 0) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
{this.renderSectionHeader(header)}
|
||||
<View style={styles.bordered}>
|
||||
<FlatList
|
||||
data={data}
|
||||
keyExtractor={keyExtractor}
|
||||
style={styles.flatlist}
|
||||
renderItem={this.renderItem}
|
||||
ItemSeparatorComponent={this.renderSeparator}
|
||||
getItemLayout={getItemLayoutServer}
|
||||
enableEmptySections
|
||||
removeClippedSubviews
|
||||
keyboardShouldPersistTaps='always'
|
||||
initialNumToRender={12}
|
||||
windowSize={20}
|
||||
/>
|
||||
</View>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
renderServerSelector = () => {
|
||||
const { servers } = this.state;
|
||||
const { server } = this.props;
|
||||
const currentServer = servers.find(serverFiltered => serverFiltered.id === server);
|
||||
return currentServer ? (
|
||||
<React.Fragment>
|
||||
{this.renderSectionHeader('Select_Server')}
|
||||
<View style={styles.bordered}>
|
||||
<ServerItem
|
||||
server={server}
|
||||
onPress={() => Navigation.navigate('SelectServerView')}
|
||||
item={currentServer}
|
||||
/>
|
||||
</View>
|
||||
</React.Fragment>
|
||||
) : null;
|
||||
}
|
||||
|
||||
renderContent = () => {
|
||||
const {
|
||||
discussions, channels, privateGroup, direct, livechat, search, chats, favorites
|
||||
} = this.state;
|
||||
|
||||
if (search.length > 0) {
|
||||
return (
|
||||
<FlatList
|
||||
data={search}
|
||||
extraData={search}
|
||||
keyExtractor={keyExtractor}
|
||||
style={styles.flatlist}
|
||||
renderItem={this.renderItem}
|
||||
getItemLayout={getItemLayoutChannel}
|
||||
ItemSeparatorComponent={this.renderSeparator}
|
||||
enableEmptySections
|
||||
removeClippedSubviews
|
||||
keyboardShouldPersistTaps='always'
|
||||
initialNumToRender={12}
|
||||
windowSize={20}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={styles.content}>
|
||||
{this.renderServerSelector()}
|
||||
{this.renderSection(favorites, 'Favorites')}
|
||||
{this.renderSection(discussions, 'Discussions')}
|
||||
{this.renderSection(channels, 'Channels')}
|
||||
{this.renderSection(direct, 'Direct_Messages')}
|
||||
{this.renderSection(privateGroup, 'Private_Groups')}
|
||||
{this.renderSection(livechat, 'Livechat')}
|
||||
{this.renderSection(chats, 'Chats')}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
renderScrollView = () => {
|
||||
const { mediaLoading, loading } = this.state;
|
||||
if (mediaLoading || loading) {
|
||||
return <ActivityIndicator style={styles.loading} />;
|
||||
}
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
style={styles.scroll}
|
||||
contentOffset={isIOS ? { x: 0, y: SCROLL_OFFSET } : {}}
|
||||
keyboardShouldPersistTaps='always'
|
||||
>
|
||||
{this.renderListHeader()}
|
||||
{this.renderContent()}
|
||||
</ScrollView>
|
||||
);
|
||||
}
|
||||
|
||||
renderError = () => {
|
||||
const { fileInfo: file } = this.state;
|
||||
const { FileUpload_MaxFileSize } = this.props;
|
||||
const errorMessage = (FileUpload_MaxFileSize < file.size)
|
||||
? 'error-file-too-large'
|
||||
: 'error-invalid-file-type';
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text style={styles.title}>{I18n.t(errorMessage)}</Text>
|
||||
<CustomIcon name='circle-cross' size={120} style={styles.errorIcon} />
|
||||
<Text style={styles.fileMime}>{ file.type }</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
const showError = !this.canUploadFile();
|
||||
return (
|
||||
<SafeAreaView style={styles.container} forceInset={{ bottom: 'never' }}>
|
||||
{ showError ? this.renderError() : this.renderScrollView() }
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
import { StyleSheet } from 'react-native';
|
||||
import { isIOS } from '../../utils/deviceInfo';
|
||||
import sharedStyles from '../Styles';
|
||||
|
||||
import {
|
||||
COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_DANGER
|
||||
} from '../../constants/colors';
|
||||
|
||||
export default StyleSheet.create({
|
||||
container: {
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER
|
||||
},
|
||||
content: {
|
||||
flex: 1,
|
||||
backgroundColor: isIOS ? COLOR_WHITE : '#E1E5E8'
|
||||
},
|
||||
flatlist: {
|
||||
width: '100%',
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
bordered: {
|
||||
...sharedStyles.separatorVertical
|
||||
},
|
||||
scroll: {
|
||||
width: '100%'
|
||||
},
|
||||
headerContainer: {
|
||||
paddingHorizontal: 15,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER,
|
||||
paddingBottom: 10,
|
||||
paddingTop: 17
|
||||
},
|
||||
headerText: {
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular,
|
||||
fontSize: 17,
|
||||
letterSpacing: 0.27,
|
||||
flex: 1
|
||||
},
|
||||
separator: {
|
||||
...sharedStyles.separatorBottom,
|
||||
marginLeft: 48
|
||||
},
|
||||
loading: {
|
||||
flex: 1
|
||||
},
|
||||
errorIcon: {
|
||||
color: COLOR_DANGER
|
||||
},
|
||||
fileMime: {
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textBold,
|
||||
...sharedStyles.textAlignCenter,
|
||||
fontSize: 20,
|
||||
marginBottom: 20
|
||||
},
|
||||
title: {
|
||||
fontSize: 14,
|
||||
...sharedStyles.textColorTitle,
|
||||
...sharedStyles.textBold
|
||||
}
|
||||
});
|
|
@ -0,0 +1,23 @@
|
|||
import React from 'react';
|
||||
import {
|
||||
StyleSheet, ActivityIndicator, View
|
||||
} from 'react-native';
|
||||
import { COLOR_TEXT } from '../../constants/colors';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
height: '100%',
|
||||
width: '100%',
|
||||
position: 'absolute',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
}
|
||||
});
|
||||
|
||||
const Loading = React.memo(() => (
|
||||
<View style={styles.container}>
|
||||
<ActivityIndicator size='large' color={COLOR_TEXT} />
|
||||
</View>
|
||||
));
|
||||
|
||||
export default Loading;
|
|
@ -0,0 +1,231 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
View, Text, TextInput, Image
|
||||
} from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import ShareExtension from 'rn-extensions-share';
|
||||
|
||||
import {
|
||||
COLOR_TEXT_DESCRIPTION
|
||||
} from '../../constants/colors';
|
||||
import I18n from '../../i18n';
|
||||
import RocketChat from '../../lib/rocketchat';
|
||||
import { CustomIcon } from '../../lib/Icons';
|
||||
import log from '../../utils/log';
|
||||
import styles from './styles';
|
||||
import Loading from './Loading';
|
||||
import database from '../../lib/realm';
|
||||
import { CustomHeaderButtons, Item } from '../../containers/HeaderButton';
|
||||
import { isReadOnly, isBlocked } from '../../utils/room';
|
||||
|
||||
@connect(state => ({
|
||||
username: state.login.user && state.login.user.username
|
||||
}))
|
||||
export default class ShareView extends React.Component {
|
||||
static navigationOptions = ({ navigation }) => {
|
||||
const canSend = navigation.getParam('canSend', false);
|
||||
|
||||
return ({
|
||||
title: I18n.t('Share'),
|
||||
headerRight:
|
||||
canSend
|
||||
? (
|
||||
<CustomHeaderButtons>
|
||||
<Item
|
||||
title={I18n.t('Send')}
|
||||
onPress={navigation.getParam('sendMessage')}
|
||||
testID='send-message-share-view'
|
||||
buttonStyle={styles.send}
|
||||
/>
|
||||
</CustomHeaderButtons>
|
||||
)
|
||||
: null
|
||||
});
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
navigation: PropTypes.object,
|
||||
username: PropTypes.string.isRequired
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const { navigation } = this.props;
|
||||
const rid = navigation.getParam('rid', '');
|
||||
const name = navigation.getParam('name', '');
|
||||
const value = navigation.getParam('value', '');
|
||||
const isMedia = navigation.getParam('isMedia', false);
|
||||
const fileInfo = navigation.getParam('fileInfo', {});
|
||||
|
||||
this.rooms = database.objects('subscriptions').filtered('rid = $0', rid);
|
||||
|
||||
this.state = {
|
||||
rid,
|
||||
value,
|
||||
isMedia,
|
||||
name,
|
||||
fileInfo,
|
||||
loading: false,
|
||||
room: this.rooms[0] || { rid },
|
||||
file: {
|
||||
name: fileInfo ? fileInfo.name : '',
|
||||
description: ''
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { room } = this.state;
|
||||
const { navigation, username } = this.props;
|
||||
navigation.setParams({ sendMessage: this._sendMessage, canSend: !(isReadOnly(room, { username }) || isBlocked(room)) });
|
||||
}
|
||||
|
||||
bytesToSize = bits => `${ ((bits / 8) / 1048576).toFixed(2) }MB`;
|
||||
|
||||
_sendMessage = async() => {
|
||||
const { isMedia } = this.state;
|
||||
this.setState({ loading: true });
|
||||
|
||||
if (isMedia) {
|
||||
await this.sendMediaMessage();
|
||||
} else {
|
||||
await this.sendTextMessage();
|
||||
}
|
||||
|
||||
this.setState({ loading: false });
|
||||
ShareExtension.close();
|
||||
}
|
||||
|
||||
sendMediaMessage = async() => {
|
||||
const { rid, fileInfo, file } = this.state;
|
||||
const { name, description } = file;
|
||||
const fileMessage = { ...fileInfo, name, description };
|
||||
if (fileInfo && rid !== '') {
|
||||
try {
|
||||
await RocketChat.sendFileMessage(rid, fileMessage, undefined);
|
||||
} catch (e) {
|
||||
log('err_send_media_message', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sendTextMessage = async() => {
|
||||
const { value, rid } = this.state;
|
||||
if (value !== '' && rid !== '') {
|
||||
try {
|
||||
await RocketChat.sendMessage(rid, value, undefined);
|
||||
} catch (error) {
|
||||
log('err_share_extension_send_message', error);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
renderPreview = () => {
|
||||
const { fileInfo } = this.state;
|
||||
|
||||
const icon = fileInfo.type.match(/image/)
|
||||
? <Image source={{ isStatic: true, uri: fileInfo.path }} style={styles.mediaImage} />
|
||||
: (
|
||||
<View style={styles.mediaIconContainer}>
|
||||
<CustomIcon name='file-generic' style={styles.mediaIcon} />
|
||||
</View>
|
||||
);
|
||||
|
||||
return (
|
||||
<View style={styles.mediaContent}>
|
||||
{icon}
|
||||
<View style={styles.mediaInfo}>
|
||||
<Text style={styles.mediaText} numberOfLines={1}>{fileInfo.name}</Text>
|
||||
<Text style={styles.mediaText}>{this.bytesToSize(fileInfo.size)}</Text>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
renderMediaContent = () => {
|
||||
const { fileInfo, file } = this.state;
|
||||
return fileInfo ? (
|
||||
<View style={styles.mediaContainer}>
|
||||
{this.renderPreview()}
|
||||
<View style={styles.mediaInputContent}>
|
||||
<TextInput
|
||||
style={[styles.mediaNameInput, styles.input]}
|
||||
placeholder={I18n.t('File_name')}
|
||||
onChangeText={name => this.setState({ file: { ...file, name } })}
|
||||
underlineColorAndroid='transparent'
|
||||
defaultValue={file.name}
|
||||
placeholderTextColor={COLOR_TEXT_DESCRIPTION}
|
||||
/>
|
||||
<TextInput
|
||||
style={[styles.mediaDescriptionInput, styles.input]}
|
||||
placeholder={I18n.t('File_description')}
|
||||
onChangeText={description => this.setState({ file: { ...file, description } })}
|
||||
underlineColorAndroid='transparent'
|
||||
defaultValue={file.description}
|
||||
multiline
|
||||
textAlignVertical='top'
|
||||
placeholderTextColor={COLOR_TEXT_DESCRIPTION}
|
||||
autoFocus
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
) : null;
|
||||
};
|
||||
|
||||
renderInput = () => {
|
||||
const { value } = this.state;
|
||||
return (
|
||||
<TextInput
|
||||
style={[styles.input, styles.textInput]}
|
||||
placeholder=''
|
||||
onChangeText={handleText => this.setState({ value: handleText })}
|
||||
underlineColorAndroid='transparent'
|
||||
defaultValue={value}
|
||||
multiline
|
||||
textAlignVertical='top'
|
||||
placeholderTextColor={COLOR_TEXT_DESCRIPTION}
|
||||
autoFocus
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
renderError = () => {
|
||||
const { room } = this.state;
|
||||
return (
|
||||
<View style={[styles.container, styles.centered]}>
|
||||
<Text style={styles.title}>
|
||||
{
|
||||
isBlocked(room) ? I18n.t('This_room_is_blocked') : I18n.t('This_room_is_read_only')
|
||||
}
|
||||
</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { username } = this.props;
|
||||
const {
|
||||
name, loading, isMedia, room
|
||||
} = this.state;
|
||||
|
||||
if (isReadOnly(room, { username }) || isBlocked(room)) {
|
||||
return this.renderError();
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<View style={isMedia ? styles.toContent : styles.toContentText}>
|
||||
<Text style={styles.text} numberOfLines={1}>
|
||||
<Text style={styles.to}>{`${ I18n.t('To') }: `}</Text>
|
||||
<Text style={styles.name}>{`${ name }`}</Text>
|
||||
</Text>
|
||||
</View>
|
||||
<View style={styles.content}>
|
||||
{isMedia ? this.renderMediaContent() : this.renderInput()}
|
||||
</View>
|
||||
{ loading ? <Loading /> : null }
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
import { StyleSheet } from 'react-native';
|
||||
|
||||
import sharedStyles from '../Styles';
|
||||
import {
|
||||
COLOR_BACKGROUND_CONTAINER, COLOR_WHITE
|
||||
} from '../../constants/colors';
|
||||
|
||||
export default StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER
|
||||
},
|
||||
centered: {
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
},
|
||||
title: {
|
||||
fontSize: 18,
|
||||
...sharedStyles.textBold,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textAlignCenter
|
||||
},
|
||||
text: {
|
||||
paddingHorizontal: 16,
|
||||
paddingVertical: 8,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
to: {
|
||||
...sharedStyles.textColorDescription,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
toContent: {
|
||||
width: '100%',
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
toContentText: {
|
||||
width: '100%',
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
name: {
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textColorTitle
|
||||
},
|
||||
content: {
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
mediaContainer: {
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER
|
||||
},
|
||||
mediaContent: {
|
||||
flexDirection: 'row',
|
||||
padding: 16,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER,
|
||||
alignItems: 'center'
|
||||
},
|
||||
mediaImage: {
|
||||
height: 64,
|
||||
width: 64
|
||||
},
|
||||
mediaIcon: {
|
||||
fontSize: 64,
|
||||
...sharedStyles.textColorNormal
|
||||
},
|
||||
mediaIconContainer: {
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center'
|
||||
},
|
||||
mediaInfo: {
|
||||
marginLeft: 16,
|
||||
flex: 1
|
||||
},
|
||||
mediaText: {
|
||||
fontSize: 16,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
mediaInputContent: {
|
||||
width: '100%',
|
||||
...sharedStyles.separatorVertical,
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
input: {
|
||||
fontSize: 16,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular,
|
||||
backgroundColor: COLOR_WHITE
|
||||
},
|
||||
textInput: {
|
||||
flex: 1,
|
||||
paddingHorizontal: 16
|
||||
},
|
||||
mediaNameInput: {
|
||||
marginLeft: 16,
|
||||
paddingRight: 16,
|
||||
paddingVertical: 8,
|
||||
backgroundColor: COLOR_WHITE,
|
||||
...sharedStyles.separatorBottom
|
||||
},
|
||||
mediaDescriptionInput: {
|
||||
marginLeft: 16,
|
||||
paddingRight: 16,
|
||||
marginVertical: 8,
|
||||
backgroundColor: COLOR_WHITE,
|
||||
height: 100
|
||||
},
|
||||
send: {
|
||||
...sharedStyles.textColorHeaderBack,
|
||||
...sharedStyles.textSemibold,
|
||||
fontSize: 16
|
||||
}
|
||||
});
|
|
@ -1,7 +1,7 @@
|
|||
import { StyleSheet, Platform } from 'react-native';
|
||||
|
||||
import {
|
||||
COLOR_DANGER, COLOR_BUTTON_PRIMARY, COLOR_SEPARATOR, COLOR_TEXT, COLOR_TEXT_DESCRIPTION, COLOR_TITLE, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_PRIMARY
|
||||
COLOR_DANGER, COLOR_BUTTON_PRIMARY, COLOR_SEPARATOR, COLOR_TEXT, COLOR_TEXT_DESCRIPTION, COLOR_TITLE, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_PRIMARY, HEADER_BACK
|
||||
} from '../constants/colors';
|
||||
|
||||
export default StyleSheet.create({
|
||||
|
@ -72,6 +72,9 @@ export default StyleSheet.create({
|
|||
textAlignRight: {
|
||||
textAlign: 'right'
|
||||
},
|
||||
textAlignCenter: {
|
||||
textAlign: 'center'
|
||||
},
|
||||
opacity5: {
|
||||
opacity: 0.5
|
||||
},
|
||||
|
@ -176,6 +179,9 @@ export default StyleSheet.create({
|
|||
textColorDescription: {
|
||||
color: COLOR_TEXT_DESCRIPTION
|
||||
},
|
||||
textColorHeaderBack: {
|
||||
color: HEADER_BACK
|
||||
},
|
||||
colorPrimary: {
|
||||
color: COLOR_PRIMARY
|
||||
},
|
||||
|
@ -192,5 +198,10 @@ export default StyleSheet.create({
|
|||
borderBottomWidth: StyleSheet.hairlineWidth,
|
||||
backgroundColor: COLOR_WHITE,
|
||||
marginVertical: 10
|
||||
},
|
||||
notchLandscapeContainer: {
|
||||
marginTop: -44,
|
||||
paddingHorizontal: 30,
|
||||
backgroundColor: COLOR_BACKGROUND_CONTAINER
|
||||
}
|
||||
});
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
import React from 'react';
|
||||
import {
|
||||
StyleSheet, View, Text
|
||||
} from 'react-native';
|
||||
import ShareExtension from 'rn-extensions-share';
|
||||
|
||||
import { CloseShareExtensionButton } from '../containers/HeaderButton';
|
||||
import sharedStyles from './Styles';
|
||||
import I18n from '../i18n';
|
||||
import { COLOR_WHITE } from '../constants/colors';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: COLOR_WHITE,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
},
|
||||
title: {
|
||||
fontSize: 18,
|
||||
...sharedStyles.textBold,
|
||||
...sharedStyles.textColorNormal
|
||||
},
|
||||
content: {
|
||||
fontSize: 14,
|
||||
...sharedStyles.textAlignCenter,
|
||||
...sharedStyles.textColorNormal,
|
||||
...sharedStyles.textRegular
|
||||
}
|
||||
});
|
||||
|
||||
export default class WithoutServerView extends React.Component {
|
||||
static navigationOptions = () => ({
|
||||
headerLeft: (
|
||||
<CloseShareExtensionButton
|
||||
onPress={ShareExtension.close}
|
||||
testID='share-extension-close'
|
||||
/>
|
||||
)
|
||||
})
|
||||
|
||||
render() {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text style={styles.title}>{I18n.t('Without_Servers')}</Text>
|
||||
<Text style={styles.content}>{I18n.t('You_need_to_access_at_least_one_RocketChat_server_to_share_something')}</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
6
index.js
6
index.js
|
@ -2,10 +2,10 @@ import 'react-native-console-time-polyfill';
|
|||
|
||||
import './app/ReactotronConfig';
|
||||
import { AppRegistry } from 'react-native';
|
||||
import App from './app/index';
|
||||
import { name as appName } from './app.json';
|
||||
import { name as appName, share as shareName } from './app.json';
|
||||
|
||||
AppRegistry.registerComponent(appName, () => App);
|
||||
AppRegistry.registerComponent(appName, () => require('./app/index').default);
|
||||
AppRegistry.registerComponent(shareName, () => require('./app/share').default);
|
||||
|
||||
// For storybook, comment everything above and uncomment below
|
||||
// import './storybook';
|
||||
|
|
34
ios/Podfile
34
ios/Podfile
|
@ -52,6 +52,40 @@ target 'RocketChatRN' do
|
|||
|
||||
end
|
||||
|
||||
target 'ShareRocketChatRN' do
|
||||
|
||||
rn_path = '../node_modules/react-native'
|
||||
|
||||
pod 'React', path: rn_path, subspecs: [
|
||||
'Core',
|
||||
'RCTActionSheet',
|
||||
'RCTAnimation',
|
||||
# 'RCTGeolocation',
|
||||
'RCTImage',
|
||||
'RCTLinkingIOS',
|
||||
'RCTNetwork',
|
||||
'RCTSettings',
|
||||
'RCTText',
|
||||
'RCTVibration',
|
||||
'RCTWebSocket'
|
||||
]
|
||||
|
||||
pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'
|
||||
pod 'RNLocalize', :path => '../node_modules/react-native-localize'
|
||||
|
||||
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
|
||||
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
|
||||
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
|
||||
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
|
||||
|
||||
pod 'Firebase/Core', '~> 5.20.1'
|
||||
pod 'Fabric', '~> 1.9.0'
|
||||
pod 'Crashlytics', '~> 3.12.0'
|
||||
pod 'GoogleIDFASupport', '~> 3.14.0'
|
||||
pod 'Firebase/Performance', '~> 5.20.1'
|
||||
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
if target.name == "React"
|
||||
|
|
|
@ -145,7 +145,7 @@ PODS:
|
|||
- React/RCTBlob
|
||||
- RNDeviceInfo (1.6.1):
|
||||
- React
|
||||
- RNImageCropPicker (0.21.1):
|
||||
- RNImageCropPicker (0.24.1):
|
||||
- QBImagePickerController
|
||||
- React/Core
|
||||
- RSKImageCropper
|
||||
|
@ -356,7 +356,7 @@ SPEC CHECKSUMS:
|
|||
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
|
||||
react-native-webview: f3e28b48461c78db833f727feec08b13285e7b61
|
||||
RNDeviceInfo: 958a1ed6f94e04557b865b8ef848cfc83db0ebba
|
||||
RNImageCropPicker: e608efe182652dc8690268cb99cb5a201f2b5ea3
|
||||
RNImageCropPicker: 6134b66a3d5bc13e2895a97c630a4254006902b4
|
||||
RNLocalize: 62a949d2ec5bee0eb8f39a80a48f01e2f4f67080
|
||||
RNScreens: 720a9e6968beb73e8196239801e887d8401f86ed
|
||||
RSKImageCropper: 98296ad26b41753f796b6898d015509598f13d97
|
||||
|
@ -374,6 +374,6 @@ SPEC CHECKSUMS:
|
|||
UMTaskManagerInterface: 296793ab2a7e181fe5ebe2ba9b40ae208ab4b8fa
|
||||
yoga: 92b2102c3d373d1a790db4ab761d2b0ffc634f64
|
||||
|
||||
PODFILE CHECKSUM: 1aa23cca853663acc12b10c4eb90f42b7b91533a
|
||||
PODFILE CHECKSUM: 7875ef440f1c2fb6583ee808c642c97d1410140d
|
||||
|
||||
COCOAPODS: 1.6.2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "RNImageCropPicker",
|
||||
"version": "0.21.1",
|
||||
"version": "0.24.1",
|
||||
"summary": "Select single or multiple images, with cropping option",
|
||||
"requires_arc": true,
|
||||
"license": "MIT",
|
||||
|
|
|
@ -145,7 +145,7 @@ PODS:
|
|||
- React/RCTBlob
|
||||
- RNDeviceInfo (1.6.1):
|
||||
- React
|
||||
- RNImageCropPicker (0.21.1):
|
||||
- RNImageCropPicker (0.24.1):
|
||||
- QBImagePickerController
|
||||
- React/Core
|
||||
- RSKImageCropper
|
||||
|
@ -356,7 +356,7 @@ SPEC CHECKSUMS:
|
|||
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
|
||||
react-native-webview: f3e28b48461c78db833f727feec08b13285e7b61
|
||||
RNDeviceInfo: 958a1ed6f94e04557b865b8ef848cfc83db0ebba
|
||||
RNImageCropPicker: e608efe182652dc8690268cb99cb5a201f2b5ea3
|
||||
RNImageCropPicker: 6134b66a3d5bc13e2895a97c630a4254006902b4
|
||||
RNLocalize: 62a949d2ec5bee0eb8f39a80a48f01e2f4f67080
|
||||
RNScreens: 720a9e6968beb73e8196239801e887d8401f86ed
|
||||
RSKImageCropper: 98296ad26b41753f796b6898d015509598f13d97
|
||||
|
@ -374,6 +374,6 @@ SPEC CHECKSUMS:
|
|||
UMTaskManagerInterface: 296793ab2a7e181fe5ebe2ba9b40ae208ab4b8fa
|
||||
yoga: 92b2102c3d373d1a790db4ab761d2b0ffc634f64
|
||||
|
||||
PODFILE CHECKSUM: 1aa23cca853663acc12b10c4eb90f42b7b91533a
|
||||
PODFILE CHECKSUM: 7875ef440f1c2fb6583ee808c642c97d1410140d
|
||||
|
||||
COCOAPODS: 1.6.2
|
||||
|
|
File diff suppressed because it is too large
Load Diff
1486
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-acknowledgements.markdown
generated
Normal file
1486
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-acknowledgements.markdown
generated
Normal file
File diff suppressed because it is too large
Load Diff
1644
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-acknowledgements.plist
generated
Normal file
1644
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-acknowledgements.plist
generated
Normal file
File diff suppressed because it is too large
Load Diff
5
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN-dummy.m
generated
Normal file
|
@ -0,0 +1,5 @@
|
|||
#import <Foundation/Foundation.h>
|
||||
@interface PodsDummy_Pods_ShareRocketChatRN : NSObject
|
||||
@end
|
||||
@implementation PodsDummy_Pods_ShareRocketChatRN
|
||||
@end
|
9
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.debug.xcconfig
generated
Normal file
9
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.debug.xcconfig
generated
Normal file
|
@ -0,0 +1,9 @@
|
|||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseABTesting/Frameworks" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebasePerformance/Frameworks" "${PODS_ROOT}/FirebaseRemoteConfig/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/EXAppLoaderProvider" "${PODS_ROOT}/Headers/Public/EXConstants" "${PODS_ROOT}/Headers/Public/EXFileSystem" "${PODS_ROOT}/Headers/Public/EXHaptics" "${PODS_ROOT}/Headers/Public/EXPermissions" "${PODS_ROOT}/Headers/Public/EXWebBrowser" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/GoogleUtilities" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/QBImagePickerController" "${PODS_ROOT}/Headers/Public/RNDeviceInfo" "${PODS_ROOT}/Headers/Public/RNImageCropPicker" "${PODS_ROOT}/Headers/Public/RNLocalize" "${PODS_ROOT}/Headers/Public/RNScreens" "${PODS_ROOT}/Headers/Public/RSKImageCropper" "${PODS_ROOT}/Headers/Public/React" "${PODS_ROOT}/Headers/Public/UMBarCodeScannerInterface" "${PODS_ROOT}/Headers/Public/UMCameraInterface" "${PODS_ROOT}/Headers/Public/UMConstantsInterface" "${PODS_ROOT}/Headers/Public/UMCore" "${PODS_ROOT}/Headers/Public/UMFaceDetectorInterface" "${PODS_ROOT}/Headers/Public/UMFileSystemInterface" "${PODS_ROOT}/Headers/Public/UMFontInterface" "${PODS_ROOT}/Headers/Public/UMImageLoaderInterface" "${PODS_ROOT}/Headers/Public/UMPermissionsInterface" "${PODS_ROOT}/Headers/Public/UMReactNativeAdapter" "${PODS_ROOT}/Headers/Public/UMSensorsInterface" "${PODS_ROOT}/Headers/Public/UMTaskManagerInterface" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/nanopb" "${PODS_ROOT}/Headers/Public/react-native-document-picker" "${PODS_ROOT}/Headers/Public/react-native-orientation-locker" "${PODS_ROOT}/Headers/Public/react-native-splash-screen" "${PODS_ROOT}/Headers/Public/react-native-webview" "${PODS_ROOT}/Headers/Public/yoga" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/Folly" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo" "${PODS_CONFIGURATION_BUILD_DIR}/RNLocalize" "${PODS_CONFIGURATION_BUILD_DIR}/React" "${PODS_CONFIGURATION_BUILD_DIR}/glog" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/yoga" "${PODS_ROOT}/GoogleIDFASupport/Libraries"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"AdIdAccessLibrary" -l"DoubleConversion" -l"FirebaseCore" -l"FirebaseInstanceID" -l"Folly" -l"GTMSessionFetcher" -l"GoogleToolboxForMac" -l"GoogleUtilities" -l"Protobuf" -l"RNDeviceInfo" -l"RNLocalize" -l"React" -l"c++" -l"glog" -l"nanopb" -l"sqlite3" -l"stdc++" -l"yoga" -l"z" -framework "AdSupport" -framework "CoreTelephony" -framework "Crashlytics" -framework "FIRAnalyticsConnector" -framework "Fabric" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseCoreDiagnostics" -framework "FirebasePerformance" -framework "FirebaseRemoteConfig" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "JavaScriptCore" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit"
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||
PODS_ROOT = ${SRCROOT}/Pods
|
9
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.release.xcconfig
generated
Normal file
9
ios/Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.release.xcconfig
generated
Normal file
|
@ -0,0 +1,9 @@
|
|||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseABTesting/Frameworks" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebasePerformance/Frameworks" "${PODS_ROOT}/FirebaseRemoteConfig/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/EXAppLoaderProvider" "${PODS_ROOT}/Headers/Public/EXConstants" "${PODS_ROOT}/Headers/Public/EXFileSystem" "${PODS_ROOT}/Headers/Public/EXHaptics" "${PODS_ROOT}/Headers/Public/EXPermissions" "${PODS_ROOT}/Headers/Public/EXWebBrowser" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/GoogleUtilities" "${PODS_ROOT}/Headers/Public/Protobuf" "${PODS_ROOT}/Headers/Public/QBImagePickerController" "${PODS_ROOT}/Headers/Public/RNDeviceInfo" "${PODS_ROOT}/Headers/Public/RNImageCropPicker" "${PODS_ROOT}/Headers/Public/RNLocalize" "${PODS_ROOT}/Headers/Public/RNScreens" "${PODS_ROOT}/Headers/Public/RSKImageCropper" "${PODS_ROOT}/Headers/Public/React" "${PODS_ROOT}/Headers/Public/UMBarCodeScannerInterface" "${PODS_ROOT}/Headers/Public/UMCameraInterface" "${PODS_ROOT}/Headers/Public/UMConstantsInterface" "${PODS_ROOT}/Headers/Public/UMCore" "${PODS_ROOT}/Headers/Public/UMFaceDetectorInterface" "${PODS_ROOT}/Headers/Public/UMFileSystemInterface" "${PODS_ROOT}/Headers/Public/UMFontInterface" "${PODS_ROOT}/Headers/Public/UMImageLoaderInterface" "${PODS_ROOT}/Headers/Public/UMPermissionsInterface" "${PODS_ROOT}/Headers/Public/UMReactNativeAdapter" "${PODS_ROOT}/Headers/Public/UMSensorsInterface" "${PODS_ROOT}/Headers/Public/UMTaskManagerInterface" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/nanopb" "${PODS_ROOT}/Headers/Public/react-native-document-picker" "${PODS_ROOT}/Headers/Public/react-native-orientation-locker" "${PODS_ROOT}/Headers/Public/react-native-splash-screen" "${PODS_ROOT}/Headers/Public/react-native-webview" "${PODS_ROOT}/Headers/Public/yoga" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/Folly" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo" "${PODS_CONFIGURATION_BUILD_DIR}/RNLocalize" "${PODS_CONFIGURATION_BUILD_DIR}/React" "${PODS_CONFIGURATION_BUILD_DIR}/glog" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/yoga" "${PODS_ROOT}/GoogleIDFASupport/Libraries"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"AdIdAccessLibrary" -l"DoubleConversion" -l"FirebaseCore" -l"FirebaseInstanceID" -l"Folly" -l"GTMSessionFetcher" -l"GoogleToolboxForMac" -l"GoogleUtilities" -l"Protobuf" -l"RNDeviceInfo" -l"RNLocalize" -l"React" -l"c++" -l"glog" -l"nanopb" -l"sqlite3" -l"stdc++" -l"yoga" -l"z" -framework "AdSupport" -framework "CoreTelephony" -framework "Crashlytics" -framework "FIRAnalyticsConnector" -framework "Fabric" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseCoreDiagnostics" -framework "FirebasePerformance" -framework "FirebaseRemoteConfig" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "JavaScriptCore" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit"
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||
PODS_ROOT = ${SRCROOT}/Pods
|
|
@ -12,6 +12,7 @@
|
|||
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
||||
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||
0BFA93B8E2ED67D4832E0C76 /* libPods-ShareRocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0B41F834F20FC0ACC547296 /* libPods-ShareRocketChatRN.a */; };
|
||||
0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; };
|
||||
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
||||
|
@ -21,6 +22,39 @@
|
|||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
1E02221122B2F76B00001862 /* libRNUserDefaults.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E02220D22B2F76400001862 /* libRNUserDefaults.a */; };
|
||||
1E25743122CBA2BE005A877F /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E25741F22CBA263005A877F /* libReactNativeShareExtension.a */; };
|
||||
1E25743222CBA2C2005A877F /* libRNRealmPath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E25743022CBA2AD005A877F /* libRNRealmPath.a */; };
|
||||
1E25743322CBA2C7005A877F /* libRNUserDefaults.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E02220D22B2F76400001862 /* libRNUserDefaults.a */; };
|
||||
1E25743422CBA2CF005A877F /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */; };
|
||||
1E25743B22CBA301005A877F /* libRNFetchBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E25743A22CBA2F9005A877F /* libRNFetchBlob.a */; };
|
||||
1E25743C22CBA313005A877F /* (null) in Frameworks */ = {isa = PBXBuildFile; };
|
||||
1E25743D22CBA31B005A877F /* libRNNotifications.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A8DEB5220ED0BDE00C5DCE4 /* libRNNotifications.a */; };
|
||||
1E25743E22CBA322005A877F /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AD44CF521518C610099D147 /* libRNGestureHandler.a */; };
|
||||
1E25743F22CBA32B005A877F /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
1E25744022CBA333005A877F /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
|
||||
1E25744122CBA33B005A877F /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||
1E25744222CBA33F005A877F /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
||||
1E25744322CBA345005A877F /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
||||
1E25744422CBA34B005A877F /* libRCTPushNotification.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88F58461FBF55E200B352B8 /* libRCTPushNotification.a */; };
|
||||
1E25744522CBA351005A877F /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
||||
1E25744622CBA356005A877F /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
||||
1E25744722CBA362005A877F /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
||||
1E25744822CBA36A005A877F /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
|
||||
1E25744922CBA36E005A877F /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
|
||||
1E25744C22CBA37F005A877F /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 607D61111F325B7E00F639C4 /* libdouble-conversion.a */; };
|
||||
1E25744D22CBA385005A877F /* libcxxreact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */; };
|
||||
1E25744E22CBA38C005A877F /* libRNFirebase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AB8E718229C6146006B474A /* libRNFirebase.a */; };
|
||||
1E25744F22CBA391005A877F /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 607D61161F325B7E00F639C4 /* libRealmReact.a */; };
|
||||
1E25745022CBA39A005A877F /* libFastImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A770EC220BECDC7001AD51A /* libFastImage.a */; };
|
||||
1E25745722CBA3E1005A877F /* libSplashScreen.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E25745622CBA3DB005A877F /* libSplashScreen.a */; };
|
||||
1E25745822CBA3E6005A877F /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B8E79A911F3CCC6D005B464F /* libRNVectorIcons.a */; };
|
||||
1E25745922CBA3F1005A877F /* libRNRealmPath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E25743022CBA2AD005A877F /* libRNRealmPath.a */; };
|
||||
1EC6ACB722CB9FC300A41C61 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1EC6ACB522CB9FC300A41C61 /* MainInterface.storyboard */; };
|
||||
1EC6ACBB22CB9FC300A41C61 /* ShareRocketChatRN.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
1EC6ACF622CBA01500A41C61 /* ShareRocketChatRN.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EC6ACF522CBA01500A41C61 /* ShareRocketChatRN.m */; };
|
||||
1ED59D4C22CBA77D00C54289 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1ED59D4B22CBA77D00C54289 /* GoogleService-Info.plist */; };
|
||||
1ED59D5022CBA8ED00C54289 /* custom.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7A55F1C42236D541005109A0 /* custom.ttf */; };
|
||||
1EDDE57A22DFAD8E0078F69D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1EDDE57922DFAD8E0078F69D /* Images.xcassets */; };
|
||||
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; };
|
||||
38CEA0ED468E49CFABCD82FD /* libRNFirebase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A36F9982B71E4662AA8DEB77 /* libRNFirebase.a */; };
|
||||
50046CB6BDA69B9232CF66D9 /* libPods-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C235DC7B31A4D1578EDEF219 /* libPods-RocketChatRN.a */; };
|
||||
|
@ -105,6 +139,41 @@
|
|||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNUserDefaults;
|
||||
};
|
||||
1E25741E22CBA263005A877F /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1E2573F022CBA263005A877F /* ReactNativeShareExtension.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 41B5DE301D0B505800949BD5;
|
||||
remoteInfo = ReactNativeShareExtension;
|
||||
};
|
||||
1E25742F22CBA2AD005A877F /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1E25742B22CBA2AC005A877F /* RNRealmPath.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNRealmPath;
|
||||
};
|
||||
1E25743922CBA2F9005A877F /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1E25743522CBA2F8005A877F /* RNFetchBlob.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = A15C300E1CD25C330074CB35;
|
||||
remoteInfo = RNFetchBlob;
|
||||
};
|
||||
1E25745522CBA3DB005A877F /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1E25745122CBA3DB005A877F /* SplashScreen.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D7682761D8E76B80014119E;
|
||||
remoteInfo = SplashScreen;
|
||||
};
|
||||
1EC6ACB922CB9FC300A41C61 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 1EC6ACAF22CB9FC300A41C61;
|
||||
remoteInfo = ShareRocketChatRN;
|
||||
};
|
||||
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
|
||||
|
@ -402,6 +471,17 @@
|
|||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
1EC6ACF422CB9FC300A41C61 /* Embed App Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
1EC6ACBB22CB9FC300A41C61 /* ShareRocketChatRN.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
7A6EDBE020ED6E020086E097 /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -421,6 +501,8 @@
|
|||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
||||
037C33B0D9A54FB4CB670FB7 /* Pods-ShareRocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareRocketChatRN.release.xcconfig"; path = "Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.release.xcconfig"; sourceTree = "<group>"; };
|
||||
0383633C4523666C176CAA52 /* Pods-ShareRocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareRocketChatRN.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
06BB44DD4855498082A744AD /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||
1132AD7934954A958E143199 /* RNFirebase.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFirebase.xcodeproj; path = "../node_modules/react-native-firebase/ios/RNFirebase.xcodeproj"; sourceTree = "<group>"; };
|
||||
1142E3442BA94B19BCF52814 /* libRNAudio.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNAudio.a; sourceTree = "<group>"; };
|
||||
|
@ -437,6 +519,18 @@
|
|||
1A34D902CC074FF1BCC7DB48 /* libimageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libimageCropPicker.a; sourceTree = "<group>"; };
|
||||
1D3BB00B9ABF44EA9BD71318 /* libSafariViewManager.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSafariViewManager.a; sourceTree = "<group>"; };
|
||||
1E0221D522B2F76300001862 /* RNUserDefaults.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNUserDefaults.xcodeproj; path = "../node_modules/rn-user-defaults/ios/RNUserDefaults.xcodeproj"; sourceTree = "<group>"; };
|
||||
1E2573F022CBA263005A877F /* ReactNativeShareExtension.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeShareExtension.xcodeproj; path = "../node_modules/rn-extensions-share/ios/ReactNativeShareExtension.xcodeproj"; sourceTree = "<group>"; };
|
||||
1E25742B22CBA2AC005A877F /* RNRealmPath.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNRealmPath.xcodeproj; path = "../node_modules/react-native-realm-path/ios/RNRealmPath.xcodeproj"; sourceTree = "<group>"; };
|
||||
1E25743522CBA2F8005A877F /* RNFetchBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNFetchBlob.xcodeproj; path = "../node_modules/rn-fetch-blob/ios/RNFetchBlob.xcodeproj"; sourceTree = "<group>"; };
|
||||
1E25744A22CBA374005A877F /* libDoubleConversion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libDoubleConversion.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1E25745122CBA3DB005A877F /* SplashScreen.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SplashScreen.xcodeproj; path = "../node_modules/react-native-splash-screen/ios/SplashScreen.xcodeproj"; sourceTree = "<group>"; };
|
||||
1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ShareRocketChatRN.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1EC6ACB622CB9FC300A41C61 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
|
||||
1EC6ACB822CB9FC300A41C61 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
1EC6ACF522CBA01500A41C61 /* ShareRocketChatRN.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ShareRocketChatRN.m; sourceTree = "<group>"; };
|
||||
1EC6AD6022CBA20C00A41C61 /* ShareRocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ShareRocketChatRN.entitlements; sourceTree = "<group>"; };
|
||||
1ED59D4B22CBA77D00C54289 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = SOURCE_ROOT; };
|
||||
1EDDE57922DFAD8E0078F69D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
20CE3E407E0D4D9E8C9885F2 /* libRCTVideo.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTVideo.a; sourceTree = "<group>"; };
|
||||
22A8B76C8EBA443BB97CE82D /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
|
||||
3B696712EE2345A59F007A88 /* libRNImagePicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNImagePicker.a; sourceTree = "<group>"; };
|
||||
|
@ -457,6 +551,7 @@
|
|||
A36F9982B71E4662AA8DEB77 /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFirebase.a; sourceTree = "<group>"; };
|
||||
ACD75701AFD1CB848CAB0CB3 /* Pods-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RocketChatRN.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
AD0379F2BCE84C968538CDAF /* RCTVideo.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTVideo.xcodeproj; path = "../node_modules/react-native-video/ios/RCTVideo.xcodeproj"; sourceTree = "<group>"; };
|
||||
B0B41F834F20FC0ACC547296 /* libPods-ShareRocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ShareRocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B1A58A7ACB0E4453A44AEC38 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = "<group>"; };
|
||||
B2607FA180F14E6584301101 /* libSplashScreen.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSplashScreen.a; sourceTree = "<group>"; };
|
||||
B37C79D9BD0742CE936B6982 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
|
||||
|
@ -475,6 +570,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1E25745922CBA3F1005A877F /* libRNRealmPath.a in Frameworks */,
|
||||
1E02221122B2F76B00001862 /* libRNUserDefaults.a in Frameworks */,
|
||||
7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */,
|
||||
7A8DEB5A20ED0BEC00C5DCE4 /* libRNNotifications.a in Frameworks */,
|
||||
|
@ -505,6 +601,40 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
1EC6ACAD22CB9FC300A41C61 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1E25745822CBA3E6005A877F /* libRNVectorIcons.a in Frameworks */,
|
||||
1E25745722CBA3E1005A877F /* libSplashScreen.a in Frameworks */,
|
||||
1E25745022CBA39A005A877F /* libFastImage.a in Frameworks */,
|
||||
1E25744F22CBA391005A877F /* libRealmReact.a in Frameworks */,
|
||||
1E25744E22CBA38C005A877F /* libRNFirebase.a in Frameworks */,
|
||||
1E25744D22CBA385005A877F /* libcxxreact.a in Frameworks */,
|
||||
1E25744C22CBA37F005A877F /* libdouble-conversion.a in Frameworks */,
|
||||
1E25744922CBA36E005A877F /* libRCTActionSheet.a in Frameworks */,
|
||||
1E25744822CBA36A005A877F /* libRCTAnimation.a in Frameworks */,
|
||||
1E25744722CBA362005A877F /* libRCTImage.a in Frameworks */,
|
||||
1E25744622CBA356005A877F /* libRCTLinking.a in Frameworks */,
|
||||
1E25744522CBA351005A877F /* libRCTNetwork.a in Frameworks */,
|
||||
1E25744422CBA34B005A877F /* libRCTPushNotification.a in Frameworks */,
|
||||
1E25744322CBA345005A877F /* libRCTSettings.a in Frameworks */,
|
||||
1E25744222CBA33F005A877F /* libRCTText.a in Frameworks */,
|
||||
1E25744122CBA33B005A877F /* libRCTVibration.a in Frameworks */,
|
||||
1E25744022CBA333005A877F /* libRCTWebSocket.a in Frameworks */,
|
||||
1E25743F22CBA32B005A877F /* libReact.a in Frameworks */,
|
||||
1E25743E22CBA322005A877F /* libRNGestureHandler.a in Frameworks */,
|
||||
1E25743D22CBA31B005A877F /* libRNNotifications.a in Frameworks */,
|
||||
1E25743C22CBA313005A877F /* (null) in Frameworks */,
|
||||
1E25743422CBA2CF005A877F /* JavaScriptCore.framework in Frameworks */,
|
||||
1E25743B22CBA301005A877F /* libRNFetchBlob.a in Frameworks */,
|
||||
1E25743322CBA2C7005A877F /* libRNUserDefaults.a in Frameworks */,
|
||||
1E25743222CBA2C2005A877F /* libRNRealmPath.a in Frameworks */,
|
||||
1E25743122CBA2BE005A877F /* libReactNativeShareExtension.a in Frameworks */,
|
||||
0BFA93B8E2ED67D4832E0C76 /* libPods-ShareRocketChatRN.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
|
@ -616,11 +746,58 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1E2573F122CBA263005A877F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25741F22CBA263005A877F /* libReactNativeShareExtension.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1E25742C22CBA2AC005A877F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25743022CBA2AD005A877F /* libRNRealmPath.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1E25743622CBA2F8005A877F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25743A22CBA2F9005A877F /* libRNFetchBlob.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1E25745222CBA3DB005A877F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25745622CBA3DB005A877F /* libSplashScreen.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1EC6ACB122CB9FC300A41C61 /* ShareRocketChatRN */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1ED59D4B22CBA77D00C54289 /* GoogleService-Info.plist */,
|
||||
1EDDE57922DFAD8E0078F69D /* Images.xcassets */,
|
||||
1EC6AD6022CBA20C00A41C61 /* ShareRocketChatRN.entitlements */,
|
||||
1EC6ACB522CB9FC300A41C61 /* MainInterface.storyboard */,
|
||||
1EC6ACB822CB9FC300A41C61 /* Info.plist */,
|
||||
1EC6ACF522CBA01500A41C61 /* ShareRocketChatRN.m */,
|
||||
);
|
||||
path = ShareRocketChatRN;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
22CA7F59107E0C79C2506C7C /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ACD75701AFD1CB848CAB0CB3 /* Pods-RocketChatRN.debug.xcconfig */,
|
||||
66D6B1D0567051BE541450C9 /* Pods-RocketChatRN.release.xcconfig */,
|
||||
0383633C4523666C176CAA52 /* Pods-ShareRocketChatRN.debug.xcconfig */,
|
||||
037C33B0D9A54FB4CB670FB7 /* Pods-ShareRocketChatRN.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
|
@ -704,6 +881,10 @@
|
|||
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25745122CBA3DB005A877F /* SplashScreen.xcodeproj */,
|
||||
1E25743522CBA2F8005A877F /* RNFetchBlob.xcodeproj */,
|
||||
1E25742B22CBA2AC005A877F /* RNRealmPath.xcodeproj */,
|
||||
1E2573F022CBA263005A877F /* ReactNativeShareExtension.xcodeproj */,
|
||||
1E0221D522B2F76300001862 /* RNUserDefaults.xcodeproj */,
|
||||
7A8DEB1B20ED0BDE00C5DCE4 /* RNNotifications.xcodeproj */,
|
||||
B8971BAC202A091D0000D245 /* KeyboardTrackingView.xcodeproj */,
|
||||
|
@ -745,6 +926,7 @@
|
|||
children = (
|
||||
13B07FAE1A68108700A75B9A /* RocketChatRN */,
|
||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||
1EC6ACB122CB9FC300A41C61 /* ShareRocketChatRN */,
|
||||
83CBBA001A601CBA00E9B192 /* Products */,
|
||||
BB4B591B5FC44CD9986DB2A6 /* Frameworks */,
|
||||
AF5E16F0398347E6A80C8CBE /* Resources */,
|
||||
|
@ -759,6 +941,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
13B07F961A680F5B00A75B9A /* RocketChatRN.app */,
|
||||
1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -829,10 +1012,12 @@
|
|||
BB4B591B5FC44CD9986DB2A6 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1E25744A22CBA374005A877F /* libDoubleConversion.a */,
|
||||
7ACD4853222860DE00442C55 /* JavaScriptCore.framework */,
|
||||
B37C79D9BD0742CE936B6982 /* libc++.tbd */,
|
||||
06BB44DD4855498082A744AD /* libz.tbd */,
|
||||
C235DC7B31A4D1578EDEF219 /* libPods-RocketChatRN.a */,
|
||||
B0B41F834F20FC0ACC547296 /* libPods-ShareRocketChatRN.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
@ -852,22 +1037,44 @@
|
|||
7A6EDBE020ED6E020086E097 /* Embed Frameworks */,
|
||||
FD0EBB93B02BAD0637E4F286 /* [CP] Copy Pods Resources */,
|
||||
7A006EDA229C7F0A00803143 /* Run Script */,
|
||||
1EC6ACF422CB9FC300A41C61 /* Embed App Extensions */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
1EC6ACBA22CB9FC300A41C61 /* PBXTargetDependency */,
|
||||
);
|
||||
name = RocketChatRN;
|
||||
productName = "Hello World";
|
||||
productReference = 13B07F961A680F5B00A75B9A /* RocketChatRN.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1EC6ACF322CB9FC300A41C61 /* Build configuration list for PBXNativeTarget "ShareRocketChatRN" */;
|
||||
buildPhases = (
|
||||
A68B7A0986AFB750F727793A /* [CP] Check Pods Manifest.lock */,
|
||||
1EC6ACAC22CB9FC300A41C61 /* Sources */,
|
||||
1EC6ACAD22CB9FC300A41C61 /* Frameworks */,
|
||||
1EC6ACAE22CB9FC300A41C61 /* Resources */,
|
||||
1EFE4DC322CBF36300B766B7 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ShareRocketChatRN;
|
||||
productName = ShareRocketChatRN;
|
||||
productReference = 1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
DefaultBuildSystemTypeForWorkspace = Original;
|
||||
LastUpgradeCheck = 610;
|
||||
ORGANIZATIONNAME = Facebook;
|
||||
TargetAttributes = {
|
||||
|
@ -886,6 +1093,16 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
1EC6ACAF22CB9FC300A41C61 = {
|
||||
CreatedOnToolsVersion = 10.2.1;
|
||||
DevelopmentTeam = S6UPZG7ZR3;
|
||||
ProvisioningStyle = Automatic;
|
||||
SystemCapabilities = {
|
||||
com.apple.ApplicationGroups.iOS = {
|
||||
enabled = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RocketChatRN" */;
|
||||
|
@ -965,6 +1182,10 @@
|
|||
ProductGroup = 146834001AC3E56700842450 /* Products */;
|
||||
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1E2573F122CBA263005A877F /* Products */;
|
||||
ProjectRef = 1E2573F022CBA263005A877F /* ReactNativeShareExtension.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 607D60ED1F325B7D00F639C4 /* Products */;
|
||||
ProjectRef = 5A8684E7C27E426C9206E980 /* RealmReact.xcodeproj */;
|
||||
|
@ -973,6 +1194,10 @@
|
|||
ProductGroup = A9A6C941204DD556006B7D9D /* Products */;
|
||||
ProjectRef = C21010507E5B4B37BA0E4C9D /* RNAudio.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1E25743622CBA2F8005A877F /* Products */;
|
||||
ProjectRef = 1E25743522CBA2F8005A877F /* RNFetchBlob.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 7AB8E714229C6145006B474A /* Products */;
|
||||
ProjectRef = 1132AD7934954A958E143199 /* RNFirebase.xcodeproj */;
|
||||
|
@ -985,6 +1210,10 @@
|
|||
ProductGroup = 7A8DEB1C20ED0BDE00C5DCE4 /* Products */;
|
||||
ProjectRef = 7A8DEB1B20ED0BDE00C5DCE4 /* RNNotifications.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1E25742C22CBA2AC005A877F /* Products */;
|
||||
ProjectRef = 1E25742B22CBA2AC005A877F /* RNRealmPath.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1E0221D622B2F76300001862 /* Products */;
|
||||
ProjectRef = 1E0221D522B2F76300001862 /* RNUserDefaults.xcodeproj */;
|
||||
|
@ -993,10 +1222,15 @@
|
|||
ProductGroup = B8E79A8A1F3CCC6C005B464F /* Products */;
|
||||
ProjectRef = 22A8B76C8EBA443BB97CE82D /* RNVectorIcons.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1E25745222CBA3DB005A877F /* Products */;
|
||||
ProjectRef = 1E25745122CBA3DB005A877F /* SplashScreen.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
13B07F861A680F5B00A75B9A /* RocketChatRN */,
|
||||
1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -1065,6 +1299,34 @@
|
|||
remoteRef = 1E02220C22B2F76400001862 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
1E25741F22CBA263005A877F /* libReactNativeShareExtension.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libReactNativeShareExtension.a;
|
||||
remoteRef = 1E25741E22CBA263005A877F /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
1E25743022CBA2AD005A877F /* libRNRealmPath.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNRealmPath.a;
|
||||
remoteRef = 1E25742F22CBA2AD005A877F /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
1E25743A22CBA2F9005A877F /* libRNFetchBlob.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNFetchBlob.a;
|
||||
remoteRef = 1E25743922CBA2F9005A877F /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
1E25745622CBA3DB005A877F /* libSplashScreen.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libSplashScreen.a;
|
||||
remoteRef = 1E25745522CBA3DB005A877F /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
@ -1372,6 +1634,17 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
1EC6ACAE22CB9FC300A41C61 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1ED59D5022CBA8ED00C54289 /* custom.ttf in Resources */,
|
||||
1EDDE57A22DFAD8E0078F69D /* Images.xcassets in Resources */,
|
||||
1EC6ACB722CB9FC300A41C61 /* MainInterface.storyboard in Resources */,
|
||||
1ED59D4C22CBA77D00C54289 /* GoogleService-Info.plist in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
|
@ -1389,6 +1662,23 @@
|
|||
shellPath = /bin/sh;
|
||||
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
|
||||
};
|
||||
1EFE4DC322CBF36300B766B7 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
|
||||
};
|
||||
7A006EDA229C7F0A00803143 /* Run Script */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1407,6 +1697,28 @@
|
|||
shellPath = /bin/sh;
|
||||
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n";
|
||||
};
|
||||
A68B7A0986AFB750F727793A /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-ShareRocketChatRN-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
FB4AC4FF76ACF097F2431C74 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1457,8 +1769,35 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
1EC6ACAC22CB9FC300A41C61 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1EC6ACF622CBA01500A41C61 /* ShareRocketChatRN.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
1EC6ACBA22CB9FC300A41C61 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */;
|
||||
targetProxy = 1EC6ACB922CB9FC300A41C61 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
1EC6ACB522CB9FC300A41C61 /* MainInterface.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
1EC6ACB622CB9FC300A41C61 /* Base */,
|
||||
);
|
||||
name = MainInterface.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
|
@ -1555,6 +1894,99 @@
|
|||
};
|
||||
name = Release;
|
||||
};
|
||||
1EC6ACBC22CB9FC300A41C61 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 0383633C4523666C176CAA52 /* Pods-ShareRocketChatRN.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_ENTITLEMENTS = ShareRocketChatRN/ShareRocketChatRN.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = S6UPZG7ZR3;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(SRCROOT)/../node_modules/rn-extensions-share/ios/**",
|
||||
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**",
|
||||
$PODS_CONFIGURATION_BUILD_DIR/Firebase,
|
||||
);
|
||||
INFOPLIST_FILE = ShareRocketChatRN/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.ShareRocketChatRN;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1EC6ACBD22CB9FC300A41C61 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 037C33B0D9A54FB4CB670FB7 /* Pods-ShareRocketChatRN.release.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_ENTITLEMENTS = ShareRocketChatRN/ShareRocketChatRN.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = S6UPZG7ZR3;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(SRCROOT)/../node_modules/rn-extensions-share/ios/**",
|
||||
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**",
|
||||
$PODS_CONFIGURATION_BUILD_DIR/Firebase,
|
||||
);
|
||||
INFOPLIST_FILE = ShareRocketChatRN/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.ShareRocketChatRN;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
83CBBA201A601CBA00E9B192 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
|
@ -1643,6 +2075,15 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
1EC6ACF322CB9FC300A41C61 /* Build configuration list for PBXNativeTarget "ShareRocketChatRN" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1EC6ACBC22CB9FC300A41C61 /* Debug */,
|
||||
1EC6ACBD22CB9FC300A41C61 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RocketChatRN" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1020"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "1EC6ACAF22CB9FC300A41C61"
|
||||
BuildableName = "ShareRocketChatRN.appex"
|
||||
BlueprintName = "ShareRocketChatRN"
|
||||
ReferencedContainer = "container:RocketChatRN.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "RocketChatRN.app"
|
||||
BlueprintName = "RocketChatRN"
|
||||
ReferencedContainer = "container:RocketChatRN.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "1EC6ACAF22CB9FC300A41C61"
|
||||
BuildableName = "ShareRocketChatRN.appex"
|
||||
BlueprintName = "ShareRocketChatRN"
|
||||
ReferencedContainer = "container:RocketChatRN.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<RemoteRunnable
|
||||
runnableDebuggingMode = "1"
|
||||
BundleIdentifier = "com.apple.mobileslideshow"
|
||||
RemotePath = "/Applications/MobileSlideShow.app">
|
||||
</RemoteRunnable>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "RocketChatRN.app"
|
||||
BlueprintName = "RocketChatRN"
|
||||
ReferencedContainer = "container:RocketChatRN.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "RocketChatRN.app"
|
||||
BlueprintName = "RocketChatRN"
|
||||
ReferencedContainer = "container:RocketChatRN.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="j1y-V4-xli">
|
||||
<device id="retina6_1" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Share Rocket ChatRN-->
|
||||
<scene sceneID="ceB-am-kn3">
|
||||
<objects>
|
||||
<viewController id="j1y-V4-xli" customClass="ShareRocketChatRN" sceneMemberID="viewController">
|
||||
<view key="view" opaque="NO" contentMode="scaleToFill" id="wbc-yd-nQP">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<viewLayoutGuide key="safeArea" id="1Xd-am-t49"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="CEy-Cv-SGf" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "hashtag.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "hashtag@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "hashtag@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 147 B |
BIN
ios/ShareRocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@2x.png
vendored
Normal file
BIN
ios/ShareRocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 227 B |
BIN
ios/ShareRocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@3x.png
vendored
Normal file
BIN
ios/ShareRocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 307 B |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "lock.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "lock@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "lock@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 351 B |
Binary file not shown.
After Width: | Height: | Size: 658 B |
Binary file not shown.
After Width: | Height: | Size: 949 B |
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Rocket.Chat Experimental</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionActivationSupportsAttachmentsWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
<key>NSExtensionAttributes</key>
|
||||
<dict>
|
||||
<key>NSExtensionActionWantsFullScreenPresentation</key>
|
||||
<false/>
|
||||
<key>NSExtensionActivationRule</key>
|
||||
<dict>
|
||||
<key>NSExtensionActivationDictionaryVersion</key>
|
||||
<integer>2</integer>
|
||||
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
<key>NSExtensionActivationSupportsText</key>
|
||||
<true/>
|
||||
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSExtensionMainStoryboard</key>
|
||||
<string>MainInterface</string>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.share-services</string>
|
||||
</dict>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>custom.ttf</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.ios.chat.rocket</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,44 @@
|
|||
//
|
||||
// ShareRocketChatRN.m
|
||||
// ShareRocketChatRN
|
||||
//
|
||||
// Created by Djorkaeff Alexandre Vilela Pereira on 16/05/19.
|
||||
// Copyright © 2019 Facebook. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "ReactNativeShareExtension.h"
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTRootView.h>
|
||||
#import <React/RCTLog.h>
|
||||
#import <Firebase.h>
|
||||
|
||||
@interface ShareRocketChatRN : ReactNativeShareExtension
|
||||
@end
|
||||
|
||||
@implementation ShareRocketChatRN
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
|
||||
- (UIView*) shareView {
|
||||
NSURL *jsCodeLocation;
|
||||
|
||||
if(![FIRApp defaultApp]){
|
||||
[FIRApp configure];
|
||||
}
|
||||
|
||||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
|
||||
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
||||
moduleName:@"ShareRocketChatRN"
|
||||
initialProperties:nil
|
||||
launchOptions:nil];
|
||||
rootView.backgroundColor = nil;
|
||||
|
||||
// Uncomment for console output in Xcode console for release mode on device:
|
||||
// RCTSetLogThreshold(RCTLogLevelInfo - 1);
|
||||
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@end
|
|
@ -53,12 +53,14 @@
|
|||
"react-native-keyboard-tracking-view": "^5.5.0",
|
||||
"react-native-localize": "^1.1.4",
|
||||
"react-native-markdown-renderer": "^3.2.8",
|
||||
"react-native-mime-types": "^2.2.1",
|
||||
"react-native-modal": "10.0.0",
|
||||
"react-native-notifications": "1.2.6",
|
||||
"react-native-optimized-flatlist": "^1.0.4",
|
||||
"react-native-orientation-locker": "^1.1.5",
|
||||
"react-native-picker-select": "^5.2.3",
|
||||
"react-native-platform-touchable": "^1.1.1",
|
||||
"react-native-realm-path": "^1.2.10",
|
||||
"react-native-responsive-ui": "^1.1.1",
|
||||
"react-native-screens": "^1.0.0-alpha.22",
|
||||
"react-native-scrollable-tab-view": "0.10.0",
|
||||
|
@ -80,6 +82,8 @@
|
|||
"redux-immutable-state-invariant": "^2.1.0",
|
||||
"redux-saga": "^0.16.2",
|
||||
"remove-markdown": "^0.3.0",
|
||||
"rn-extensions-share": "^2.3.7",
|
||||
"rn-fetch-blob": "^0.10.15",
|
||||
"rn-user-defaults": "^1.3.4",
|
||||
"semver": "6.0.0",
|
||||
"snyk": "^1.156.0",
|
||||
|
|
49
yarn.lock
49
yarn.lock
|
@ -3509,6 +3509,11 @@ balanced-match@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
base-64@0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
|
||||
integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs=
|
||||
|
||||
base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
|
||||
|
@ -6553,6 +6558,18 @@ glob-to-regexp@^0.3.0:
|
|||
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
|
||||
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
|
||||
|
||||
glob@7.0.6:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
|
||||
integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.2"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||
|
@ -9631,6 +9648,11 @@ mime-db@~1.23.0:
|
|||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659"
|
||||
integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=
|
||||
|
||||
mime-db@~1.25.0:
|
||||
version "1.25.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
|
||||
integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
|
||||
|
||||
mime-types@2.1.11:
|
||||
version "2.1.11"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c"
|
||||
|
@ -9682,7 +9704,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4:
|
||||
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
|
@ -11609,6 +11631,13 @@ react-native-markdown-renderer@^3.2.8:
|
|||
prop-types "^15.5.10"
|
||||
react-native-fit-image "^1.5.2"
|
||||
|
||||
react-native-mime-types@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-mime-types/-/react-native-mime-types-2.2.1.tgz#a9760e9916e4e7df03512c60516668f23543f2c0"
|
||||
integrity sha512-2H0jjW5l2driXiiKx9PZsJDCFgS8LeMaVLVZPy3iRkBrNcstpQosEr6+YJfihLbW3WvFtmS2qcyFKB7mYw/iJg==
|
||||
dependencies:
|
||||
mime-db "~1.25.0"
|
||||
|
||||
react-native-modal@10.0.0:
|
||||
version "10.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-10.0.0.tgz#1b0b15cc6cda9584f122cced106a9f9f37befc08"
|
||||
|
@ -11657,6 +11686,11 @@ react-native-platform-touchable@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/react-native-platform-touchable/-/react-native-platform-touchable-1.1.1.tgz#fde4acc65eea585d28b164d0c3716a42129a68e4"
|
||||
integrity sha1-/eSsxl7qWF0osWTQw3FqQhKaaOQ=
|
||||
|
||||
react-native-realm-path@^1.2.10:
|
||||
version "1.2.10"
|
||||
resolved "https://registry.yarnpkg.com/react-native-realm-path/-/react-native-realm-path-1.2.10.tgz#886493e334c62279bee631789172cfa7cfd6dc8d"
|
||||
integrity sha512-+FFjA+8fH2ubmAOeF+++4t+QG9qUEg4u3nvVN21zIMpkqj8TIuA0NZ5cdW5YZOx3hjFrYSxyCkq24Zu5QHv2Jw==
|
||||
|
||||
react-native-responsive-ui@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-responsive-ui/-/react-native-responsive-ui-1.1.1.tgz#eb41839d4f3951ff025660185c36a9a9ce33759f"
|
||||
|
@ -12595,6 +12629,19 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
|
|||
hash-base "^3.0.0"
|
||||
inherits "^2.0.1"
|
||||
|
||||
rn-extensions-share@^2.3.7:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/rn-extensions-share/-/rn-extensions-share-2.3.7.tgz#9f1387af25124c21e92854570cd088ed788b60ac"
|
||||
integrity sha512-8SP3HTKf9g+/4hm/ER+IcbpImaqsTny7WUNOC18Vvq5Js+2O9MAKaQB+gHSP7IC6JYsbOzh+cc2jNRfc0zJpOA==
|
||||
|
||||
rn-fetch-blob@^0.10.15:
|
||||
version "0.10.15"
|
||||
resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.10.15.tgz#3526860c1c57e0bf4c09bdbe409c919264afffba"
|
||||
integrity sha512-/m/gurTaPAvR3J843uehHhznj5k89x7XClyO5ejmbspNLNQ4ByF+kZs80wiiKGWntj+Wqo0jJu1goArXEfc0kA==
|
||||
dependencies:
|
||||
base-64 "0.1.0"
|
||||
glob "7.0.6"
|
||||
|
||||
rn-user-defaults@^1.3.4:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/rn-user-defaults/-/rn-user-defaults-1.3.4.tgz#1fbdd1bf29d9f853918dca5219e45db54d19fe37"
|
||||
|
|
Loading…
Reference in New Issue