[NEW] Support RTL (#2656)
* wip: RTL (iOS) * wip: RTL (Android) * wip: reload bundle when change between RTL languages * fix: Stack Animation on Android * fix: update snapshot * fix: Swipe Room Actions in RTL mode * fix: snapshots * Move isRTL to i18n * Fix styling * Update tests * Update pods Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
parent
40490ea66c
commit
10ba9d5138
File diff suppressed because it is too large
Load Diff
|
@ -12,6 +12,7 @@
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
|
android:supportsRtl="true"
|
||||||
android:requestLegacyExternalStorage="true"
|
android:requestLegacyExternalStorage="true"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
tools:replace="android:allowBackup"
|
tools:replace="android:allowBackup"
|
||||||
|
|
|
@ -56,7 +56,7 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
text: {
|
text: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
textAlign: 'center',
|
...sharedStyles.textMedium,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -17,8 +17,8 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
text: {
|
text: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
textAlign: 'center',
|
...sharedStyles.textMedium,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
disabled: {
|
disabled: {
|
||||||
opacity: 0.3
|
opacity: 0.3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import { StyleSheet } from 'react-native';
|
import { StyleSheet } from 'react-native';
|
||||||
|
|
||||||
|
import sharedStyles from '../../views/Styles';
|
||||||
|
|
||||||
export default StyleSheet.create({
|
export default StyleSheet.create({
|
||||||
container: {
|
container: {
|
||||||
flex: 1
|
flex: 1
|
||||||
|
@ -46,8 +48,8 @@ export default StyleSheet.create({
|
||||||
flex: 1
|
flex: 1
|
||||||
},
|
},
|
||||||
categoryEmoji: {
|
categoryEmoji: {
|
||||||
|
...sharedStyles.textAlignCenter,
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
textAlign: 'center',
|
|
||||||
color: '#ffffff'
|
color: '#ffffff'
|
||||||
},
|
},
|
||||||
customCategoryEmoji: {
|
customCategoryEmoji: {
|
||||||
|
|
|
@ -13,8 +13,13 @@ const styles = StyleSheet.create({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const ListIcon = React.memo(({ theme, name, color }) => (
|
const ListIcon = React.memo(({
|
||||||
<View style={styles.icon}>
|
theme,
|
||||||
|
name,
|
||||||
|
color,
|
||||||
|
style
|
||||||
|
}) => (
|
||||||
|
<View style={[styles.icon, style]}>
|
||||||
<CustomIcon
|
<CustomIcon
|
||||||
name={name}
|
name={name}
|
||||||
color={color ?? themes[theme].auxiliaryText}
|
color={color ?? themes[theme].auxiliaryText}
|
||||||
|
@ -26,7 +31,8 @@ const ListIcon = React.memo(({ theme, name, color }) => (
|
||||||
ListIcon.propTypes = {
|
ListIcon.propTypes = {
|
||||||
theme: PropTypes.string,
|
theme: PropTypes.string,
|
||||||
name: PropTypes.string,
|
name: PropTypes.string,
|
||||||
color: PropTypes.string
|
color: PropTypes.string,
|
||||||
|
style: PropTypes.object
|
||||||
};
|
};
|
||||||
|
|
||||||
ListIcon.displayName = 'List.Icon';
|
ListIcon.displayName = 'List.Icon';
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Text, StyleSheet } from 'react-native';
|
import {
|
||||||
|
View,
|
||||||
|
Text,
|
||||||
|
StyleSheet,
|
||||||
|
I18nManager
|
||||||
|
} from 'react-native';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import Touch from '../../utils/touch';
|
import Touch from '../../utils/touch';
|
||||||
|
@ -39,6 +44,11 @@ const styles = StyleSheet.create({
|
||||||
subtitle: {
|
subtitle: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textRegular
|
||||||
|
},
|
||||||
|
actionIndicator: {
|
||||||
|
...I18nManager.isRTL
|
||||||
|
? { transform: [{ rotate: '180deg' }] }
|
||||||
|
: {}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -64,7 +74,7 @@ const Content = React.memo(({
|
||||||
? (
|
? (
|
||||||
<View style={styles.rightContainer}>
|
<View style={styles.rightContainer}>
|
||||||
{right ? right() : null}
|
{right ? right() : null}
|
||||||
{showActionIndicator ? <Icon name='chevron-right' /> : null}
|
{showActionIndicator ? <Icon name='chevron-right' style={styles.actionIndicator} /> : null}
|
||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
: null}
|
: null}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import CustomEmoji from '../EmojiPicker/CustomEmoji';
|
||||||
import database from '../../lib/database';
|
import database from '../../lib/database';
|
||||||
import { Button } from '../ActionSheet';
|
import { Button } from '../ActionSheet';
|
||||||
import { useDimensions } from '../../dimensions';
|
import { useDimensions } from '../../dimensions';
|
||||||
|
import sharedStyles from '../../views/Styles';
|
||||||
|
|
||||||
export const HEADER_HEIGHT = 36;
|
export const HEADER_HEIGHT = 36;
|
||||||
const ITEM_SIZE = 36;
|
const ITEM_SIZE = 36;
|
||||||
|
@ -32,7 +33,7 @@ const styles = StyleSheet.create({
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
},
|
},
|
||||||
headerIcon: {
|
headerIcon: {
|
||||||
textAlign: 'center',
|
...sharedStyles.textAlignCenter,
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
color: '#fff'
|
color: '#fff'
|
||||||
},
|
},
|
||||||
|
|
|
@ -55,13 +55,13 @@ export default StyleSheet.create({
|
||||||
width: 46,
|
width: 46,
|
||||||
height: 36,
|
height: 36,
|
||||||
fontSize: isIOS ? 30 : 25,
|
fontSize: isIOS ? 30 : 25,
|
||||||
textAlign: 'center'
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
fixedMentionAvatar: {
|
fixedMentionAvatar: {
|
||||||
textAlign: 'center',
|
|
||||||
width: 46,
|
width: 46,
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
...sharedStyles.textBold
|
...sharedStyles.textBold,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
mentionText: {
|
mentionText: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
|
|
@ -23,9 +23,9 @@ const styles = StyleSheet.create({
|
||||||
paddingVertical: 10
|
paddingVertical: 10
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
textAlign: 'center',
|
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
...sharedStyles.textSemibold
|
...sharedStyles.textSemibold,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
reactCount: {
|
reactCount: {
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
|
|
|
@ -11,7 +11,7 @@ import ActivityIndicator from './ActivityIndicator';
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
error: {
|
error: {
|
||||||
textAlign: 'center',
|
...sharedStyles.textAlignCenter,
|
||||||
paddingTop: 5
|
paddingTop: 5
|
||||||
},
|
},
|
||||||
inputContainer: {
|
inputContainer: {
|
||||||
|
@ -26,8 +26,7 @@ const styles = StyleSheet.create({
|
||||||
...sharedStyles.textRegular,
|
...sharedStyles.textRegular,
|
||||||
height: 48,
|
height: 48,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
paddingLeft: 14,
|
paddingHorizontal: 14,
|
||||||
paddingRight: 14,
|
|
||||||
borderWidth: StyleSheet.hairlineWidth,
|
borderWidth: StyleSheet.hairlineWidth,
|
||||||
borderRadius: 2
|
borderRadius: 2
|
||||||
},
|
},
|
||||||
|
|
|
@ -14,9 +14,9 @@ const styles = StyleSheet.create({
|
||||||
padding: 10
|
padding: 10
|
||||||
},
|
},
|
||||||
text: {
|
text: {
|
||||||
...sharedStyles.textRegular,
|
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
textAlign: 'center'
|
...sharedStyles.textRegular,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ class Markdown extends PureComponent {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Text style={[style, { color: themes[theme].bodyText }]} numberOfLines={numberOfLines}>
|
<Text style={[styles.text, style, { color: themes[theme].bodyText }]} numberOfLines={numberOfLines}>
|
||||||
{children}
|
{children}
|
||||||
</Text>
|
</Text>
|
||||||
);
|
);
|
||||||
|
|
|
@ -140,7 +140,7 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
time: {
|
time: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
paddingLeft: 8,
|
marginLeft: 8,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textRegular
|
||||||
},
|
},
|
||||||
repliedThread: {
|
repliedThread: {
|
||||||
|
|
|
@ -2,6 +2,8 @@ import i18n from 'i18n-js';
|
||||||
import { I18nManager } from 'react-native';
|
import { I18nManager } from 'react-native';
|
||||||
import * as RNLocalize from 'react-native-localize';
|
import * as RNLocalize from 'react-native-localize';
|
||||||
|
|
||||||
|
export * from './isRTL';
|
||||||
|
|
||||||
export const LANGUAGES = [
|
export const LANGUAGES = [
|
||||||
{
|
{
|
||||||
label: 'English',
|
label: 'English',
|
||||||
|
@ -67,6 +69,8 @@ const availableLanguages = Object.keys(i18n.translations);
|
||||||
const { languageTag, isRTL } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage;
|
const { languageTag, isRTL } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage;
|
||||||
|
|
||||||
I18nManager.forceRTL(isRTL);
|
I18nManager.forceRTL(isRTL);
|
||||||
|
I18nManager.swapLeftAndRightInRTL(isRTL);
|
||||||
i18n.locale = languageTag;
|
i18n.locale = languageTag;
|
||||||
|
i18n.isRTL = I18nManager.isRTL;
|
||||||
|
|
||||||
export default i18n;
|
export default i18n;
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// https://github.com/zoontek/react-native-localize/blob/master/src/constants.ts#L5
|
||||||
|
const USES_RTL_LAYOUT = [
|
||||||
|
'ar',
|
||||||
|
'ckb',
|
||||||
|
'fa',
|
||||||
|
'he',
|
||||||
|
'ks',
|
||||||
|
'lrc',
|
||||||
|
'mzn',
|
||||||
|
'ps',
|
||||||
|
'ug',
|
||||||
|
'ur',
|
||||||
|
'yi'
|
||||||
|
];
|
||||||
|
|
||||||
|
export const isRTL = locale => USES_RTL_LAYOUT.includes(locale);
|
|
@ -8,18 +8,18 @@ import styles, { ACTION_WIDTH, LONG_SWIPE } from './styles';
|
||||||
import { CustomIcon } from '../../lib/Icons';
|
import { CustomIcon } from '../../lib/Icons';
|
||||||
import { themes } from '../../constants/colors';
|
import { themes } from '../../constants/colors';
|
||||||
|
|
||||||
|
const reverse = new Animated.Value(I18n.isRTL ? -1 : 1);
|
||||||
|
|
||||||
export const LeftActions = React.memo(({
|
export const LeftActions = React.memo(({
|
||||||
theme, transX, isRead, width, onToggleReadPress
|
theme, transX, isRead, width, onToggleReadPress
|
||||||
}) => {
|
}) => {
|
||||||
const translateX = transX.interpolate({
|
const translateX = Animated.multiply(
|
||||||
|
transX.interpolate({
|
||||||
inputRange: [0, ACTION_WIDTH],
|
inputRange: [0, ACTION_WIDTH],
|
||||||
outputRange: [-ACTION_WIDTH, 0]
|
outputRange: [-ACTION_WIDTH, 0]
|
||||||
});
|
}),
|
||||||
const translateXIcon = transX.interpolate({
|
reverse
|
||||||
inputRange: [0, ACTION_WIDTH, LONG_SWIPE - 2, LONG_SWIPE],
|
);
|
||||||
outputRange: [0, 0, -LONG_SWIPE + ACTION_WIDTH + 2, 0],
|
|
||||||
extrapolate: 'clamp'
|
|
||||||
});
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={[styles.actionsContainer, styles.actionLeftContainer]}
|
style={[styles.actionsContainer, styles.actionLeftContainer]}
|
||||||
|
@ -36,22 +36,14 @@ export const LeftActions = React.memo(({
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<Animated.View
|
<View style={styles.actionLeftButtonContainer}>
|
||||||
style={[
|
|
||||||
styles.actionLeftButtonContainer,
|
|
||||||
{
|
|
||||||
right: 0,
|
|
||||||
transform: [{ translateX: translateXIcon }]
|
|
||||||
}
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<RectButton style={styles.actionButton} onPress={onToggleReadPress}>
|
<RectButton style={styles.actionButton} onPress={onToggleReadPress}>
|
||||||
<>
|
<>
|
||||||
<CustomIcon size={20} name={isRead ? 'flag' : 'check'} color='white' />
|
<CustomIcon size={20} name={isRead ? 'flag' : 'check'} color='white' />
|
||||||
<Text style={[styles.actionText, { color: themes[theme].buttonText }]}>{I18n.t(isRead ? 'Unread' : 'Read')}</Text>
|
<Text style={[styles.actionText, { color: themes[theme].buttonText }]}>{I18n.t(isRead ? 'Unread' : 'Read')}</Text>
|
||||||
</>
|
</>
|
||||||
</RectButton>
|
</RectButton>
|
||||||
</Animated.View>
|
</View>
|
||||||
</Animated.View>
|
</Animated.View>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
|
@ -60,14 +52,20 @@ export const LeftActions = React.memo(({
|
||||||
export const RightActions = React.memo(({
|
export const RightActions = React.memo(({
|
||||||
transX, favorite, width, toggleFav, onHidePress, theme
|
transX, favorite, width, toggleFav, onHidePress, theme
|
||||||
}) => {
|
}) => {
|
||||||
const translateXFav = transX.interpolate({
|
const translateXFav = Animated.multiply(
|
||||||
|
transX.interpolate({
|
||||||
inputRange: [-width / 2, -ACTION_WIDTH * 2, 0],
|
inputRange: [-width / 2, -ACTION_WIDTH * 2, 0],
|
||||||
outputRange: [width / 2, width - ACTION_WIDTH * 2, width]
|
outputRange: [width / 2, width - ACTION_WIDTH * 2, width]
|
||||||
});
|
}),
|
||||||
const translateXHide = transX.interpolate({
|
reverse
|
||||||
|
);
|
||||||
|
const translateXHide = Animated.multiply(
|
||||||
|
transX.interpolate({
|
||||||
inputRange: [-width, -LONG_SWIPE, -ACTION_WIDTH * 2, 0],
|
inputRange: [-width, -LONG_SWIPE, -ACTION_WIDTH * 2, 0],
|
||||||
outputRange: [0, width - LONG_SWIPE, width - ACTION_WIDTH, width]
|
outputRange: [0, width - LONG_SWIPE, width - ACTION_WIDTH, width]
|
||||||
});
|
}),
|
||||||
|
reverse
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {
|
||||||
SMALL_SWIPE,
|
SMALL_SWIPE,
|
||||||
LONG_SWIPE
|
LONG_SWIPE
|
||||||
} from './styles';
|
} from './styles';
|
||||||
|
import I18n from '../../i18n';
|
||||||
import { themes } from '../../constants/colors';
|
import { themes } from '../../constants/colors';
|
||||||
import { LeftActions, RightActions } from './Actions';
|
import { LeftActions, RightActions } from './Actions';
|
||||||
|
|
||||||
|
@ -34,10 +35,15 @@ class Touchable extends React.Component {
|
||||||
super(props);
|
super(props);
|
||||||
this.dragX = new Animated.Value(0);
|
this.dragX = new Animated.Value(0);
|
||||||
this.rowOffSet = new Animated.Value(0);
|
this.rowOffSet = new Animated.Value(0);
|
||||||
|
this.reverse = new Animated.Value(I18n.isRTL ? -1 : 1);
|
||||||
this.transX = Animated.add(
|
this.transX = Animated.add(
|
||||||
this.rowOffSet,
|
this.rowOffSet,
|
||||||
this.dragX
|
this.dragX
|
||||||
);
|
);
|
||||||
|
this.transXReverse = Animated.multiply(
|
||||||
|
this.transX,
|
||||||
|
this.reverse
|
||||||
|
);
|
||||||
this.state = {
|
this.state = {
|
||||||
rowState: 0 // 0: closed, 1: right opened, -1: left opened
|
rowState: 0 // 0: closed, 1: right opened, -1: left opened
|
||||||
};
|
};
|
||||||
|
@ -62,18 +68,36 @@ class Touchable extends React.Component {
|
||||||
let toValue = 0;
|
let toValue = 0;
|
||||||
if (rowState === 0) { // if no option is opened
|
if (rowState === 0) { // if no option is opened
|
||||||
if (translationX > 0 && translationX < LONG_SWIPE) {
|
if (translationX > 0 && translationX < LONG_SWIPE) {
|
||||||
toValue = ACTION_WIDTH; // open left option if he swipe right but not enough to trigger action
|
// open leading option if he swipe right but not enough to trigger action
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
toValue = 2 * ACTION_WIDTH;
|
||||||
|
} else {
|
||||||
|
toValue = ACTION_WIDTH;
|
||||||
|
}
|
||||||
this.setState({ rowState: -1 });
|
this.setState({ rowState: -1 });
|
||||||
} else if (translationX >= LONG_SWIPE) {
|
} else if (translationX >= LONG_SWIPE) {
|
||||||
toValue = 0;
|
toValue = 0;
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
this.hideChannel();
|
||||||
|
} else {
|
||||||
this.toggleRead();
|
this.toggleRead();
|
||||||
|
}
|
||||||
} else if (translationX < 0 && translationX > -LONG_SWIPE) {
|
} else if (translationX < 0 && translationX > -LONG_SWIPE) {
|
||||||
toValue = -2 * ACTION_WIDTH; // open right option if he swipe left
|
// open trailing option if he swipe left
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
toValue = -ACTION_WIDTH;
|
||||||
|
} else {
|
||||||
|
toValue = -2 * ACTION_WIDTH;
|
||||||
|
}
|
||||||
this.setState({ rowState: 1 });
|
this.setState({ rowState: 1 });
|
||||||
} else if (translationX <= -LONG_SWIPE) {
|
} else if (translationX <= -LONG_SWIPE) {
|
||||||
toValue = 0;
|
toValue = 0;
|
||||||
this.setState({ rowState: 0 });
|
this.setState({ rowState: 0 });
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
this.toggleRead();
|
||||||
|
} else {
|
||||||
this.hideChannel();
|
this.hideChannel();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
toValue = 0;
|
toValue = 0;
|
||||||
}
|
}
|
||||||
|
@ -86,7 +110,13 @@ class Touchable extends React.Component {
|
||||||
} else if (this._value > LONG_SWIPE) {
|
} else if (this._value > LONG_SWIPE) {
|
||||||
toValue = 0;
|
toValue = 0;
|
||||||
this.setState({ rowState: 0 });
|
this.setState({ rowState: 0 });
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
this.hideChannel();
|
||||||
|
} else {
|
||||||
this.toggleRead();
|
this.toggleRead();
|
||||||
|
}
|
||||||
|
} else if (I18n.isRTL) {
|
||||||
|
toValue = 2 * ACTION_WIDTH;
|
||||||
} else {
|
} else {
|
||||||
toValue = ACTION_WIDTH;
|
toValue = ACTION_WIDTH;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +129,13 @@ class Touchable extends React.Component {
|
||||||
} else if (this._value < -LONG_SWIPE) {
|
} else if (this._value < -LONG_SWIPE) {
|
||||||
toValue = 0;
|
toValue = 0;
|
||||||
this.setState({ rowState: 0 });
|
this.setState({ rowState: 0 });
|
||||||
|
if (I18n.isRTL) {
|
||||||
|
this.toggleRead();
|
||||||
|
} else {
|
||||||
this.hideChannel();
|
this.hideChannel();
|
||||||
|
}
|
||||||
|
} else if (I18n.isRTL) {
|
||||||
|
toValue = -ACTION_WIDTH;
|
||||||
} else {
|
} else {
|
||||||
toValue = -2 * ACTION_WIDTH;
|
toValue = -2 * ACTION_WIDTH;
|
||||||
}
|
}
|
||||||
|
@ -182,14 +218,14 @@ class Touchable extends React.Component {
|
||||||
>
|
>
|
||||||
<Animated.View>
|
<Animated.View>
|
||||||
<LeftActions
|
<LeftActions
|
||||||
transX={this.transX}
|
transX={this.transXReverse}
|
||||||
isRead={isRead}
|
isRead={isRead}
|
||||||
width={width}
|
width={width}
|
||||||
onToggleReadPress={this.onToggleReadPress}
|
onToggleReadPress={this.onToggleReadPress}
|
||||||
theme={theme}
|
theme={theme}
|
||||||
/>
|
/>
|
||||||
<RightActions
|
<RightActions
|
||||||
transX={this.transX}
|
transX={this.transXReverse}
|
||||||
favorite={favorite}
|
favorite={favorite}
|
||||||
width={width}
|
width={width}
|
||||||
toggleFav={this.toggleFav}
|
toggleFav={this.toggleFav}
|
||||||
|
|
|
@ -84,7 +84,8 @@ export default StyleSheet.create({
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
height: ROW_HEIGHT,
|
height: ROW_HEIGHT,
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
top: 0
|
top: 0,
|
||||||
|
right: 0
|
||||||
},
|
},
|
||||||
actionRightButtonContainer: {
|
actionRightButtonContainer: {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { TextInput } from 'react-native';
|
import { TextInput, StyleSheet, I18nManager } from 'react-native';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import { themes } from '../constants/colors';
|
import { themes } from '../constants/colors';
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
input: {
|
||||||
|
...I18nManager.isRTL
|
||||||
|
? { textAlign: 'right' }
|
||||||
|
: { textAlign: 'left' }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const ThemedTextInput = React.forwardRef(({ style, theme, ...props }, ref) => (
|
const ThemedTextInput = React.forwardRef(({ style, theme, ...props }, ref) => (
|
||||||
<TextInput
|
<TextInput
|
||||||
ref={ref}
|
ref={ref}
|
||||||
style={[{ color: themes[theme].titleText }, style]}
|
style={[{ color: themes[theme].titleText }, style, styles.input]}
|
||||||
placeholderTextColor={themes[theme].auxiliaryText}
|
placeholderTextColor={themes[theme].auxiliaryText}
|
||||||
keyboardAppearance={theme === 'light' ? 'light' : 'dark'}
|
keyboardAppearance={theme === 'light' ? 'light' : 'dark'}
|
||||||
{...props}
|
{...props}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import 'moment/min/locales';
|
import 'moment/min/locales';
|
||||||
import { Q } from '@nozbe/watermelondb';
|
import { Q } from '@nozbe/watermelondb';
|
||||||
|
import { I18nManager } from 'react-native';
|
||||||
|
|
||||||
import * as types from '../actions/actionsTypes';
|
import * as types from '../actions/actionsTypes';
|
||||||
import {
|
import {
|
||||||
|
@ -18,7 +19,7 @@ import { roomsRequest } from '../actions/rooms';
|
||||||
import { toMomentLocale } from '../utils/moment';
|
import { toMomentLocale } from '../utils/moment';
|
||||||
import RocketChat from '../lib/rocketchat';
|
import RocketChat from '../lib/rocketchat';
|
||||||
import log, { logEvent, events } from '../utils/log';
|
import log, { logEvent, events } from '../utils/log';
|
||||||
import I18n, { LANGUAGES } from '../i18n';
|
import I18n, { LANGUAGES, isRTL } from '../i18n';
|
||||||
import database from '../lib/database';
|
import database from '../lib/database';
|
||||||
import EventEmitter from '../utils/events';
|
import EventEmitter from '../utils/events';
|
||||||
import { inviteLinksRequest } from '../actions/inviteLinks';
|
import { inviteLinksRequest } from '../actions/inviteLinks';
|
||||||
|
@ -275,6 +276,8 @@ const handleSetUser = function* handleSetUser({ user }) {
|
||||||
if (user && user.language) {
|
if (user && user.language) {
|
||||||
const locale = LANGUAGES.find(l => l.value.toLowerCase() === user.language)?.value || user.language;
|
const locale = LANGUAGES.find(l => l.value.toLowerCase() === user.language)?.value || user.language;
|
||||||
I18n.locale = locale;
|
I18n.locale = locale;
|
||||||
|
I18nManager.forceRTL(isRTL(locale));
|
||||||
|
I18nManager.swapLeftAndRightInRTL(isRTL(locale));
|
||||||
moment.locale(toMomentLocale(locale));
|
moment.locale(toMomentLocale(locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { I18nManager } from 'react-native';
|
||||||
import { createStackNavigator } from '@react-navigation/stack';
|
import { createStackNavigator } from '@react-navigation/stack';
|
||||||
import { createDrawerNavigator } from '@react-navigation/drawer';
|
import { createDrawerNavigator } from '@react-navigation/drawer';
|
||||||
|
|
||||||
|
@ -282,6 +283,7 @@ const Drawer = createDrawerNavigator();
|
||||||
const DrawerNavigator = () => (
|
const DrawerNavigator = () => (
|
||||||
<Drawer.Navigator
|
<Drawer.Navigator
|
||||||
drawerContent={({ navigation, state }) => <Sidebar navigation={navigation} state={state} />}
|
drawerContent={({ navigation, state }) => <Sidebar navigation={navigation} state={state} />}
|
||||||
|
drawerPosition={I18nManager.isRTL ? 'right' : 'left'}
|
||||||
screenOptions={{ swipeEnabled: false }}
|
screenOptions={{ swipeEnabled: false }}
|
||||||
drawerType='back'
|
drawerType='back'
|
||||||
>
|
>
|
||||||
|
|
|
@ -64,13 +64,10 @@ const forStackAndroid = ({
|
||||||
inverted
|
inverted
|
||||||
);
|
);
|
||||||
|
|
||||||
const opacity = multiply(
|
const opacity = current.progress.interpolate({
|
||||||
current.progress.interpolate({
|
|
||||||
inputRange: [0, 1],
|
inputRange: [0, 1],
|
||||||
outputRange: [0, 1]
|
outputRange: [0, 1]
|
||||||
}),
|
});
|
||||||
inverted
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
cardStyle: {
|
cardStyle: {
|
||||||
|
|
|
@ -2,9 +2,10 @@ import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { FlatList } from 'react-native';
|
import { FlatList } from 'react-native';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
import RNRestart from 'react-native-restart';
|
||||||
|
|
||||||
import RocketChat from '../../lib/rocketchat';
|
import RocketChat from '../../lib/rocketchat';
|
||||||
import I18n, { LANGUAGES } from '../../i18n';
|
import I18n, { LANGUAGES, isRTL } from '../../i18n';
|
||||||
import { showErrorAlert } from '../../utils/info';
|
import { showErrorAlert } from '../../utils/info';
|
||||||
import log, { logEvent, events } from '../../utils/log';
|
import log, { logEvent, events } from '../../utils/log';
|
||||||
import { setUser as setUserAction } from '../../actions/login';
|
import { setUser as setUserAction } from '../../actions/login';
|
||||||
|
@ -61,15 +62,21 @@ class LanguageView extends React.Component {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { appStart } = this.props;
|
const { appStart, user } = this.props;
|
||||||
|
|
||||||
|
const shouldRestart = isRTL(language) || isRTL(user.language);
|
||||||
|
|
||||||
await appStart({ root: ROOT_LOADING, text: I18n.t('Change_language_loading') });
|
await appStart({ root: ROOT_LOADING, text: I18n.t('Change_language_loading') });
|
||||||
|
|
||||||
// shows loading for at least 300ms
|
// shows loading for at least 300ms
|
||||||
await Promise.all([this.changeLanguage(language), new Promise(resolve => setTimeout(resolve, 300))]);
|
await Promise.all([this.changeLanguage(language), new Promise(resolve => setTimeout(resolve, 300))]);
|
||||||
|
|
||||||
|
if (shouldRestart) {
|
||||||
|
await RNRestart.Restart();
|
||||||
|
} else {
|
||||||
await appStart({ root: ROOT_INSIDE });
|
await appStart({ root: ROOT_INSIDE });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
changeLanguage = async(language) => {
|
changeLanguage = async(language) => {
|
||||||
logEvent(events.LANG_SET_LANGUAGE);
|
logEvent(events.LANG_SET_LANGUAGE);
|
||||||
|
|
|
@ -29,9 +29,9 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
description: {
|
description: {
|
||||||
...sharedStyles.textRegular,
|
...sharedStyles.textRegular,
|
||||||
|
...sharedStyles.textAlignCenter,
|
||||||
fontSize: moderateScale(14),
|
fontSize: moderateScale(14),
|
||||||
alignSelf: 'center',
|
alignSelf: 'center',
|
||||||
textAlign: 'center',
|
|
||||||
marginHorizontal: 20
|
marginHorizontal: 20
|
||||||
},
|
},
|
||||||
buttonsContainer: {
|
buttonsContainer: {
|
||||||
|
|
|
@ -22,8 +22,8 @@ const styles = StyleSheet.create({
|
||||||
noResult: {
|
noResult: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
paddingVertical: 56,
|
paddingVertical: 56,
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textSemibold,
|
||||||
...sharedStyles.textSemibold
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -442,7 +442,7 @@ class RoomActionsView extends React.Component {
|
||||||
/>
|
/>
|
||||||
{room.t === 'd' && <Markdown msg={member.statusText} style={[styles.roomDescription, { color: themes[theme].auxiliaryText }]} preview theme={theme} numberOfLines={1} />}
|
{room.t === 'd' && <Markdown msg={member.statusText} style={[styles.roomDescription, { color: themes[theme].auxiliaryText }]} preview theme={theme} numberOfLines={1} />}
|
||||||
</View>
|
</View>
|
||||||
{isGroupChat ? null : <List.Icon name='chevron-right' />}
|
{isGroupChat ? null : <List.Icon name='chevron-right' style={styles.actionIndicator} />}
|
||||||
</View>
|
</View>
|
||||||
</Touch>
|
</Touch>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { StyleSheet } from 'react-native';
|
import { StyleSheet, I18nManager } from 'react-native';
|
||||||
import { PADDING_HORIZONTAL } from '../../containers/List/constants';
|
import { PADDING_HORIZONTAL } from '../../containers/List/constants';
|
||||||
|
|
||||||
import sharedStyles from '../Styles';
|
import sharedStyles from '../Styles';
|
||||||
|
@ -27,5 +27,10 @@ export default StyleSheet.create({
|
||||||
paddingRight: 16,
|
paddingRight: 16,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
|
},
|
||||||
|
actionIndicator: {
|
||||||
|
...I18nManager.isRTL
|
||||||
|
? { transform: [{ rotate: '180deg' }] }
|
||||||
|
: {}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,8 +4,8 @@ import sharedStyles from '../Styles';
|
||||||
|
|
||||||
export default StyleSheet.create({
|
export default StyleSheet.create({
|
||||||
button: {
|
button: {
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textBold,
|
||||||
...sharedStyles.textBold
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
buttonInverted: {
|
buttonInverted: {
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
|
@ -61,8 +61,8 @@ export default StyleSheet.create({
|
||||||
marginVertical: 20
|
marginVertical: 20
|
||||||
},
|
},
|
||||||
broadcast: {
|
broadcast: {
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textSemibold,
|
||||||
...sharedStyles.textSemibold
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
hideSystemMessages: {
|
hideSystemMessages: {
|
||||||
alignItems: 'flex-start'
|
alignItems: 'flex-start'
|
||||||
|
|
|
@ -56,14 +56,14 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
permissionTitle: {
|
permissionTitle: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
textAlign: 'center',
|
|
||||||
marginHorizontal: 30,
|
marginHorizontal: 30,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textMedium,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
permissionMessage: {
|
permissionMessage: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
textAlign: 'center',
|
|
||||||
marginHorizontal: 30,
|
marginHorizontal: 30,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textRegular,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,9 +24,9 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
fileName: {
|
fileName: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
textAlign: 'center',
|
|
||||||
marginHorizontal: 10,
|
marginHorizontal: 10,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textMedium,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
fileSize: {
|
fileSize: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
|
|
@ -63,6 +63,7 @@ export default StyleSheet.create({
|
||||||
borderLeftWidth: StyleSheet.hairlineWidth
|
borderLeftWidth: StyleSheet.hairlineWidth
|
||||||
},
|
},
|
||||||
textRegular: {
|
textRegular: {
|
||||||
|
textAlign: 'left',
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
...Platform.select({
|
...Platform.select({
|
||||||
ios: {
|
ios: {
|
||||||
|
@ -77,6 +78,7 @@ export default StyleSheet.create({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
textMedium: {
|
textMedium: {
|
||||||
|
textAlign: 'left',
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
...Platform.select({
|
...Platform.select({
|
||||||
ios: {
|
ios: {
|
||||||
|
@ -91,6 +93,7 @@ export default StyleSheet.create({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
textSemibold: {
|
textSemibold: {
|
||||||
|
textAlign: 'left',
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
...Platform.select({
|
...Platform.select({
|
||||||
ios: {
|
ios: {
|
||||||
|
@ -105,6 +108,7 @@ export default StyleSheet.create({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
textBold: {
|
textBold: {
|
||||||
|
textAlign: 'left',
|
||||||
backgroundColor: 'transparent',
|
backgroundColor: 'transparent',
|
||||||
...Platform.select({
|
...Platform.select({
|
||||||
ios: {
|
ios: {
|
||||||
|
|
|
@ -22,10 +22,10 @@ const styles = StyleSheet.create({
|
||||||
top: 60,
|
top: 60,
|
||||||
left: 0,
|
left: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
textAlign: 'center',
|
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
paddingHorizontal: 24,
|
paddingHorizontal: 24,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textRegular,
|
||||||
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ const styles = StyleSheet.create({
|
||||||
noResult: {
|
noResult: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
paddingVertical: 56,
|
paddingVertical: 56,
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textSemibold,
|
||||||
...sharedStyles.textSemibold
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
content: {
|
content: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textRegular,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textAlignCenter
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
registrationText: {
|
registrationText: {
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
...sharedStyles.textAlignCenter,
|
...sharedStyles.textRegular,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textAlignCenter
|
||||||
},
|
},
|
||||||
alignItemsCenter: {
|
alignItemsCenter: {
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
|
|
|
@ -382,6 +382,8 @@ PODS:
|
||||||
- React
|
- React
|
||||||
- react-native-orientation-locker (1.1.8):
|
- react-native-orientation-locker (1.1.8):
|
||||||
- React
|
- React
|
||||||
|
- react-native-restart (0.0.17):
|
||||||
|
- React
|
||||||
- react-native-safe-area-context (3.1.1):
|
- react-native-safe-area-context (3.1.1):
|
||||||
- React
|
- React
|
||||||
- react-native-simple-crypto (0.4.0):
|
- react-native-simple-crypto (0.4.0):
|
||||||
|
@ -598,6 +600,7 @@ DEPENDENCIES:
|
||||||
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
||||||
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
||||||
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
|
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
|
||||||
|
- react-native-restart (from `../node_modules/react-native-restart`)
|
||||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||||
- react-native-simple-crypto (from `../node_modules/react-native-simple-crypto`)
|
- react-native-simple-crypto (from `../node_modules/react-native-simple-crypto`)
|
||||||
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
||||||
|
@ -759,6 +762,8 @@ EXTERNAL SOURCES:
|
||||||
:path: "../node_modules/react-native-notifications"
|
:path: "../node_modules/react-native-notifications"
|
||||||
react-native-orientation-locker:
|
react-native-orientation-locker:
|
||||||
:path: "../node_modules/react-native-orientation-locker"
|
:path: "../node_modules/react-native-orientation-locker"
|
||||||
|
react-native-restart:
|
||||||
|
:path: "../node_modules/react-native-restart"
|
||||||
react-native-safe-area-context:
|
react-native-safe-area-context:
|
||||||
:path: "../node_modules/react-native-safe-area-context"
|
:path: "../node_modules/react-native-safe-area-context"
|
||||||
react-native-simple-crypto:
|
react-native-simple-crypto:
|
||||||
|
@ -930,6 +935,7 @@ SPEC CHECKSUMS:
|
||||||
react-native-mmkv-storage: 48729fe90e850ef2fdc9d3714b7030c7c51d82b0
|
react-native-mmkv-storage: 48729fe90e850ef2fdc9d3714b7030c7c51d82b0
|
||||||
react-native-notifications: ee8fd739853e72694f3af8b374c8ccb106b7b227
|
react-native-notifications: ee8fd739853e72694f3af8b374c8ccb106b7b227
|
||||||
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
||||||
|
react-native-restart: d19a0f8d053d065fe64cd2baebb6487111c77149
|
||||||
react-native-safe-area-context: 344b969c45af3d8464d36e8dea264942992ef033
|
react-native-safe-area-context: 344b969c45af3d8464d36e8dea264942992ef033
|
||||||
react-native-simple-crypto: 564740fd8124827d82e9e8ded4a0de8c695c8a4d
|
react-native-simple-crypto: 564740fd8124827d82e9e8ded4a0de8c695c8a4d
|
||||||
react-native-slider: 0221b417686c5957f6e77cd9ac22c1478a165355
|
react-native-slider: 0221b417686c5957f6e77cd9ac22c1478a165355
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../../node_modules/react-native-restart/ios/Restart.h
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../../node_modules/react-native-restart/ios/Restart.h
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"name": "react-native-restart",
|
||||||
|
"version": "0.0.17",
|
||||||
|
"summary": "Sometimes you want to reload your app bundle during app runtime. This package will allow you to do it.",
|
||||||
|
"homepage": "https://github.com/avishayil/react-native-restart#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": "Avishay Bar <avishay.il@gmail.com> (https://github.com/avishayil)",
|
||||||
|
"platforms": {
|
||||||
|
"ios": "9.0"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"git": "https://github.com/avishayil/react-native-restart.git",
|
||||||
|
"tag": "0.0.17"
|
||||||
|
},
|
||||||
|
"source_files": "ios/**/*.{h,m}",
|
||||||
|
"dependencies": {
|
||||||
|
"React": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -382,6 +382,8 @@ PODS:
|
||||||
- React
|
- React
|
||||||
- react-native-orientation-locker (1.1.8):
|
- react-native-orientation-locker (1.1.8):
|
||||||
- React
|
- React
|
||||||
|
- react-native-restart (0.0.17):
|
||||||
|
- React
|
||||||
- react-native-safe-area-context (3.1.1):
|
- react-native-safe-area-context (3.1.1):
|
||||||
- React
|
- React
|
||||||
- react-native-simple-crypto (0.4.0):
|
- react-native-simple-crypto (0.4.0):
|
||||||
|
@ -598,6 +600,7 @@ DEPENDENCIES:
|
||||||
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
||||||
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
||||||
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
|
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
|
||||||
|
- react-native-restart (from `../node_modules/react-native-restart`)
|
||||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||||
- react-native-simple-crypto (from `../node_modules/react-native-simple-crypto`)
|
- react-native-simple-crypto (from `../node_modules/react-native-simple-crypto`)
|
||||||
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
||||||
|
@ -759,6 +762,8 @@ EXTERNAL SOURCES:
|
||||||
:path: "../node_modules/react-native-notifications"
|
:path: "../node_modules/react-native-notifications"
|
||||||
react-native-orientation-locker:
|
react-native-orientation-locker:
|
||||||
:path: "../node_modules/react-native-orientation-locker"
|
:path: "../node_modules/react-native-orientation-locker"
|
||||||
|
react-native-restart:
|
||||||
|
:path: "../node_modules/react-native-restart"
|
||||||
react-native-safe-area-context:
|
react-native-safe-area-context:
|
||||||
:path: "../node_modules/react-native-safe-area-context"
|
:path: "../node_modules/react-native-safe-area-context"
|
||||||
react-native-simple-crypto:
|
react-native-simple-crypto:
|
||||||
|
@ -930,6 +935,7 @@ SPEC CHECKSUMS:
|
||||||
react-native-mmkv-storage: 48729fe90e850ef2fdc9d3714b7030c7c51d82b0
|
react-native-mmkv-storage: 48729fe90e850ef2fdc9d3714b7030c7c51d82b0
|
||||||
react-native-notifications: ee8fd739853e72694f3af8b374c8ccb106b7b227
|
react-native-notifications: ee8fd739853e72694f3af8b374c8ccb106b7b227
|
||||||
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
||||||
|
react-native-restart: d19a0f8d053d065fe64cd2baebb6487111c77149
|
||||||
react-native-safe-area-context: 344b969c45af3d8464d36e8dea264942992ef033
|
react-native-safe-area-context: 344b969c45af3d8464d36e8dea264942992ef033
|
||||||
react-native-simple-crypto: 564740fd8124827d82e9e8ded4a0de8c695c8a4d
|
react-native-simple-crypto: 564740fd8124827d82e9e8ded4a0de8c695c8a4d
|
||||||
react-native-slider: 0221b417686c5957f6e77cd9ac22c1478a165355
|
react-native-slider: 0221b417686c5957f6e77cd9ac22c1478a165355
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4527,6 +4527,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## react-native-restart
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
## react-native-safe-area-context
|
## react-native-safe-area-context
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
|
@ -4926,6 +4926,37 @@ SOFTWARE.
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>MIT License
|
<string>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>react-native-restart</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 Th3rd Wave
|
Copyright (c) 2019 Th3rd Wave
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -4527,6 +4527,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## react-native-restart
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
## react-native-safe-area-context
|
## react-native-safe-area-context
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
|
@ -4926,6 +4926,37 @@ SOFTWARE.
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>MIT License
|
<string>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>react-native-restart</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 Th3rd Wave
|
Copyright (c) 2019 Th3rd Wave
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -4527,6 +4527,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## react-native-restart
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
## react-native-safe-area-context
|
## react-native-safe-area-context
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
|
@ -4926,6 +4926,37 @@ SOFTWARE.
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>MIT License
|
<string>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Avishay Bar
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>react-native-restart</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 Th3rd Wave
|
Copyright (c) 2019 Th3rd Wave
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
5
ios/Pods/Target Support Files/react-native-restart/react-native-restart-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/react-native-restart/react-native-restart-dummy.m
generated
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_react_native_restart : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_react_native_restart
|
||||||
|
@end
|
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart-prefix.pch
generated
Normal file
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart-prefix.pch
generated
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart.debug.xcconfig
generated
Normal file
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart.debug.xcconfig
generated
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
APPLICATION_EXTENSION_API_ONLY = YES
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/react-native-restart
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/react-native-restart" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/FBLazyVector" "${PODS_ROOT}/Headers/Public/FBReactNativeSpec" "${PODS_ROOT}/Headers/Public/RCTRequired" "${PODS_ROOT}/Headers/Public/RCTTypeSafety" "${PODS_ROOT}/Headers/Public/React-Core" "${PODS_ROOT}/Headers/Public/React-RCTText" "${PODS_ROOT}/Headers/Public/React-callinvoker" "${PODS_ROOT}/Headers/Public/React-cxxreact" "${PODS_ROOT}/Headers/Public/React-jsi" "${PODS_ROOT}/Headers/Public/React-jsiexecutor" "${PODS_ROOT}/Headers/Public/React-jsinspector" "${PODS_ROOT}/Headers/Public/ReactCommon" "${PODS_ROOT}/Headers/Public/Yoga" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/react-native-restart"
|
||||||
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../node_modules/react-native-restart
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart.release.xcconfig
generated
Normal file
12
ios/Pods/Target Support Files/react-native-restart/react-native-restart.release.xcconfig
generated
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
APPLICATION_EXTENSION_API_ONLY = YES
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/react-native-restart
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/react-native-restart" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/FBLazyVector" "${PODS_ROOT}/Headers/Public/FBReactNativeSpec" "${PODS_ROOT}/Headers/Public/RCTRequired" "${PODS_ROOT}/Headers/Public/RCTTypeSafety" "${PODS_ROOT}/Headers/Public/React-Core" "${PODS_ROOT}/Headers/Public/React-RCTText" "${PODS_ROOT}/Headers/Public/React-callinvoker" "${PODS_ROOT}/Headers/Public/React-cxxreact" "${PODS_ROOT}/Headers/Public/React-jsi" "${PODS_ROOT}/Headers/Public/React-jsiexecutor" "${PODS_ROOT}/Headers/Public/React-jsinspector" "${PODS_ROOT}/Headers/Public/ReactCommon" "${PODS_ROOT}/Headers/Public/Yoga" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/react-native-restart"
|
||||||
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../node_modules/react-native-restart
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
|
@ -100,6 +100,7 @@
|
||||||
"react-native-progress": "4.1.2",
|
"react-native-progress": "4.1.2",
|
||||||
"react-native-prompt-android": "^1.1.0",
|
"react-native-prompt-android": "^1.1.0",
|
||||||
"react-native-reanimated": "1.9.0",
|
"react-native-reanimated": "1.9.0",
|
||||||
|
"react-native-restart": "^0.0.17",
|
||||||
"react-native-safe-area-context": "3.1.1",
|
"react-native-safe-area-context": "3.1.1",
|
||||||
"react-native-screens": "2.9.0",
|
"react-native-screens": "2.9.0",
|
||||||
"react-native-scroll-bottom-sheet": "0.6.2",
|
"react-native-scroll-bottom-sheet": "0.6.2",
|
||||||
|
|
|
@ -12878,6 +12878,11 @@ react-native-reanimated@1.9.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
fbjs "^1.0.0"
|
fbjs "^1.0.0"
|
||||||
|
|
||||||
|
react-native-restart@^0.0.17:
|
||||||
|
version "0.0.17"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-restart/-/react-native-restart-0.0.17.tgz#c1f38e019d1a2114248d496698e7951e9435ba91"
|
||||||
|
integrity sha512-UwFPDssMFoyDbF2aLARIHWt5g/o0TtxCXK9WIY+0iNpkgG9qWd+n80XBwXioNCdgy39ZQ5yfJBJRwtMLDgABag==
|
||||||
|
|
||||||
react-native-safe-area-context@3.1.1:
|
react-native-safe-area-context@3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-3.1.1.tgz#9b04d1154766e6c1132030aca8f4b0336f561ccd"
|
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-3.1.1.tgz#9b04d1154766e6c1132030aca8f4b0336f561ccd"
|
||||||
|
|
Loading…
Reference in New Issue