commit 1f37c0583063ac892e0024dc222b7d5253b5ad79
parent 22b4b85f1daf22286ab74079ee77c8eadc4be23a
Author: Matthew Horan <matt@matthoran.com>
Date: Sun, 27 Sep 2020 13:56:54 -0400
Tweak tsconfig.json and address some errors
Diffstat:
15 files changed, 196 insertions(+), 140 deletions(-)
diff --git a/jest.config.js b/jest.config.js
@@ -15,7 +15,10 @@ module.exports = {
],
globals: {
'ts-jest': {
- babelConfig: true
+ babelConfig: true,
+ tsConfig: {
+ strict: false
+ }
}
}
}
diff --git a/package.json b/package.json
@@ -9,7 +9,6 @@
"lint": "eslint . --ext .ts --ext .tsx"
},
"dependencies": {
- "@types/lodash": "^4.14.106",
"date-fns": "^1.29.0",
"expo": "^39.0.0",
"expo-notifications": "~0.7.2",
@@ -18,7 +17,7 @@
"react": "16.13.1",
"react-native": "https://github.com/expo/react-native/archive/sdk-39.0.0.tar.gz",
"react-native-drawer-layout-polyfill": "^2.0.0",
- "react-native-parsed-text": "^0.0.21",
+ "react-native-parsed-text": "^0.0.22",
"react-redux": "^7.2.0",
"redux": "^4.0.5",
"redux-persist": "^5.9.1",
@@ -27,8 +26,10 @@
"devDependencies": {
"@babel/core": "^7.2.2",
"@types/jest": "^25.2.1",
+ "@types/lodash": "^4.14.106",
"@types/react": "~16.9.35",
"@types/react-native": "~0.63.2",
+ "@types/react-redux": "^7.1.9",
"@typescript-eslint/eslint-plugin": "^4.2.0",
"@typescript-eslint/parser": "^4.2.0",
"babel-jest": "^25.3.0",
diff --git a/src/lib/helpers/parse-text-args.ts b/src/lib/helpers/parse-text-args.ts
@@ -1,4 +1,11 @@
-export const getParseArgs = (style, onPress, onLongPress) => {
+import { TextStyle } from 'react-native';
+import { ParseShape } from 'react-native-parsed-text';
+
+export const getParseArgs = (
+ style: TextStyle,
+ onPress: (type: string, text: string) => void,
+ onLongPress: (type: string, text: string) => void
+): ParseShape[] => {
const baseObj = {
style
};
@@ -6,27 +13,27 @@ export const getParseArgs = (style, onPress, onLongPress) => {
return [
{
...baseObj,
- onPress: arg => onPress("url", arg),
- onLongPress: arg => onLongPress("url", arg),
- type: "url"
+ onPress: (arg) => onPress('url', arg),
+ onLongPress: (arg) => onLongPress('url', arg),
+ type: 'url'
},
{
...baseObj,
- onPress: arg => onPress("channel", arg),
- onLongPress: arg => onLongPress("channel", arg),
+ onPress: (arg) => onPress('channel', arg),
+ onLongPress: (arg) => onLongPress('channel', arg),
pattern: /#(\w+)/
},
{
...baseObj,
- onPress: arg => onPress("phone", arg),
- onLongPress: arg => onLongPress("phone", arg),
- type: "phone"
+ onPress: (arg) => onPress('phone', arg),
+ onLongPress: (arg) => onLongPress('phone', arg),
+ type: 'phone'
},
{
...baseObj,
- onPress: arg => onPress("email", arg),
- onLongPress: arg => onLongPress("email", arg),
- type: "email"
+ onPress: (arg) => onPress('email', arg),
+ onLongPress: (arg) => onLongPress('email', arg),
+ type: 'email'
}
];
};
diff --git a/src/lib/weechat/color-formatter.tsx b/src/lib/weechat/color-formatter.tsx
@@ -1,7 +1,7 @@
-import { TextStyle, TextProperties } from "react-native";
+import { TextStyle, TextProperties } from 'react-native';
-import { WeeChatProtocol } from "./parser";
-import { ceb, cwb, cob, cef, cwf, cof } from "./colors";
+import { WeeChatProtocol } from './parser';
+import { ceb, cwb, cob, cef, cwf, cof } from './colors';
type AttributedStringNode = {
attrs: {
@@ -15,25 +15,29 @@ type AttributedStringNode = {
type WeechatColorAttribute = {
name: string;
- type: "option" | "weechat" | "ext";
+ type: 'option' | 'weechat' | 'ext';
};
-const getBgColor = (colorAttr: WeechatColorAttribute): TextStyle => {
- if (colorAttr.type === "ext") {
+const getBgColor = (
+ colorAttr: WeechatColorAttribute
+): TextStyle | undefined => {
+ if (colorAttr.type === 'ext') {
return { backgroundColor: ceb[colorAttr.name] };
- } else if (colorAttr.type === "weechat") {
+ } else if (colorAttr.type === 'weechat') {
return { backgroundColor: cwb[colorAttr.name] };
- } else if (colorAttr.type === "option") {
+ } else if (colorAttr.type === 'option') {
return cob[colorAttr.name];
}
};
-const getFgColor = (colorAttr: WeechatColorAttribute): TextStyle => {
- if (colorAttr.type === "ext") {
+const getFgColor = (
+ colorAttr: WeechatColorAttribute
+): TextStyle | undefined => {
+ if (colorAttr.type === 'ext') {
return { color: cef[colorAttr.name] };
- } else if (colorAttr.type === "weechat") {
+ } else if (colorAttr.type === 'weechat') {
return { color: cwf[colorAttr.name] };
- } else if (colorAttr.type === "option") {
+ } else if (colorAttr.type === 'option') {
return cof[colorAttr.name];
}
};
@@ -43,7 +47,7 @@ export const renderWeechatFormat = (input: string): TextProperties[] => {
input
) as AttributedStringNode[];
- return formattedNode.map(node => ({
+ return formattedNode.map((node) => ({
children: node.text,
style: [getBgColor(node.bgColor), getFgColor(node.fgColor)]
}));
diff --git a/src/lib/weechat/colors.ts b/src/lib/weechat/colors.ts
@@ -3,7 +3,7 @@
/****************************/
/* style options, foreground */
-export const cof = {
+export const cof: Record<string, Record<string, string>> = {
separator: { color: "#68b5d4" },
chat: { color: "#d9d9d9" },
chat_time: { color: "#f7f7f7" },
@@ -46,7 +46,7 @@ export const cof = {
};
/* style options, background */
-export const cob = {
+export const cob: Record<string, Record<string, string>> = {
separator: {},
chat: {},
chat_time: { color: "#999" },
@@ -85,7 +85,7 @@ export const cob = {
};
/* WeeChat colors, foreground */
-export const cwf = {
+export const cwf: Record<string, string> = {
default: "#d9d9d9",
black: "#000000",
darkgray: "#5d5d5d",
@@ -106,7 +106,7 @@ export const cwf = {
};
/* WeeChat colors, background */
-export const cwb = {
+export const cwb: Record<string, string> = {
default: "transparent",
black: "#000000",
darkgray: "#5d5d5d",
@@ -127,7 +127,7 @@ export const cwb = {
};
/* extended colors, foreground */
-export const cef = {
+export const cef: Record<string, string> = {
"0": "#000000" /* 000 Black */,
"1": "#c0656e" /* 001 DarkRed */,
"2": "#00cd00" /* 002 DarkGreen */,
@@ -386,7 +386,7 @@ export const cef = {
"255": "#eeeeee" /* 255 Grey93 */
};
/* extended colors, background */
-export const ceb = {
+export const ceb: Record<string, string> = {
"0": "#000000" /* 000 Black */,
"1": "#c0656e" /* 001 DarkRed */,
"2": "#00cd00" /* 002 DarkGreen */,
diff --git a/src/usecase/App.tsx b/src/usecase/App.tsx
@@ -1,4 +1,4 @@
-import * as React from "react";
+import * as React from 'react';
import {
SafeAreaView,
View,
@@ -9,28 +9,43 @@ import {
Keyboard,
Dimensions,
Platform
-} from "react-native";
-import { connect } from "react-redux";
-import * as _ from "lodash";
+} from 'react-native';
+import { connect, ConnectedProps } from 'react-redux';
+import * as _ from 'lodash';
import DrawerLayout from 'react-native-drawer-layout-polyfill';
-import BufferContainer from "./buffers/ui/BufferContainer";
-import BufferList from "./buffers/ui/BufferList";
-import { StoreState } from "../store";
-import { registerForPushNotificationsAsync } from "../lib/helpers/push-notifications"
+import BufferContainer from './buffers/ui/BufferContainer';
+import BufferList from './buffers/ui/BufferList';
+import { StoreState } from '../store';
+import { registerForPushNotificationsAsync } from '../lib/helpers/push-notifications';
-interface Props {
- buffers: { [key: string]: WeechatBuffer };
- currentBufferId: string | null;
- currentBuffer: WeechatBuffer | null;
- hasHighlights: boolean;
+const connector = connect((state: StoreState) => {
+ const currentBufferId = state.app.currentBufferId;
+ const currentBuffer =
+ (currentBufferId && state.buffers[currentBufferId]) || null;
+
+ const numHighlights = _.values(state.hotlists).reduce(
+ (sum, hlist) => sum + hlist.highlight,
+ 0
+ );
+
+ return {
+ buffers: state.buffers,
+ currentBufferId: currentBuffer && currentBufferId,
+ currentBuffer,
+ hasHighlights: numHighlights > 0
+ };
+});
+
+type PropsFromRedux = ConnectedProps<typeof connector>;
+
+type Props = PropsFromRedux & {
disconnect: () => void;
fetchBufferInfo: (bufferId: string) => void;
sendMessageToBuffer: (fullBufferName: string, message: string) => void;
clearHotlistForBuffer: (fullBufferName: string) => void;
- dispatch: (any) => void;
-}
+};
interface State {
showTopic: boolean;
@@ -50,11 +65,11 @@ class App extends React.Component<Props, State> {
const smallerAxisSize = Math.min(height, width);
const isLandscape = width > height;
const isTablet = smallerAxisSize >= 600;
- const appBarHeight = Platform.OS === 'ios' ? isLandscape ? 32 : 44 : 56;
+ const appBarHeight = Platform.OS === 'ios' ? (isLandscape ? 32 : 44) : 56;
const maxWidth = isTablet ? 320 : 280;
return Math.min(smallerAxisSize - appBarHeight, maxWidth);
- }
+ };
state: State = {
showTopic: false,
@@ -67,7 +82,7 @@ class App extends React.Component<Props, State> {
this.drawer.closeDrawer();
if (currentBufferId !== buffer.id) {
this.props.dispatch({
- type: "CHANGE_CURRENT_BUFFER",
+ type: 'CHANGE_CURRENT_BUFFER',
bufferId: buffer.id
});
this.props.clearHotlistForBuffer(buffer.full_name);
@@ -76,7 +91,7 @@ class App extends React.Component<Props, State> {
};
toggleShowTopic = () => {
- this.setState(state => ({
+ this.setState((state) => ({
showTopic: !state.showTopic
}));
};
@@ -96,7 +111,7 @@ class App extends React.Component<Props, State> {
if (this.state.drawerWidth !== this.drawerWidth()) {
this.setState({ drawerWidth: this.drawerWidth() });
}
- }
+ };
componentDidMount() {
Dimensions.addEventListener('change', this.updateWidth);
@@ -134,7 +149,7 @@ class App extends React.Component<Props, State> {
const sidebar = () => (
<BufferList
- buffers={_.orderBy(_.values(buffers), ["number"])}
+ buffers={_.orderBy(_.values(buffers), ['number'])}
currentBufferId={currentBufferId}
onSelectBuffer={this.changeCurrentBuffer}
/>
@@ -143,11 +158,12 @@ class App extends React.Component<Props, State> {
return (
<View style={styles.container}>
<DrawerLayout
- ref={ d => (this.drawer = d) }
+ ref={(d: DrawerLayout) => (this.drawer = d)}
renderNavigationView={sidebar}
keyboardDismissMode={'on-drag'}
drawerWidth={drawerWidth}
- useNativeAnimations={true}>
+ useNativeAnimations={true}
+ >
<SafeAreaView style={styles.container}>
<View style={styles.topbar}>
<View style={styles.channels}>
@@ -159,7 +175,7 @@ class App extends React.Component<Props, State> {
style={[
styles.channelsButtonText,
hasHighlights && {
- color: "#ffcf7f"
+ color: '#ffcf7f'
}
]}
>
@@ -177,7 +193,7 @@ class App extends React.Component<Props, State> {
style={styles.channelsButton}
onPress={this.props.disconnect}
>
- <Image source={require("./icons/eject.png")} />
+ <Image source={require('./icons/eject.png')} />
</TouchableOpacity>
</View>
</View>
@@ -194,29 +210,14 @@ class App extends React.Component<Props, State> {
}
}
-export default connect((state: StoreState) => {
- const currentBufferId = state.app.currentBufferId;
- const currentBuffer = currentBufferId && state.buffers[currentBufferId];
-
- const numHighlights = _.values(state.hotlists).reduce(
- (sum, hlist) => sum + hlist.highlight,
- 0
- );
-
- return {
- buffers: state.buffers,
- currentBufferId: currentBuffer && currentBufferId,
- currentBuffer,
- hasHighlights: numHighlights > 0
- };
-})(App);
+export default connector(App);
const styles = StyleSheet.create({
topbar: {
- flexDirection: "row",
- backgroundColor: "#333",
- justifyContent: "space-between",
- alignItems: "center",
+ flexDirection: 'row',
+ backgroundColor: '#333',
+ justifyContent: 'space-between',
+ alignItems: 'center',
paddingBottom: 10
},
channels: {
@@ -228,20 +229,20 @@ const styles = StyleSheet.create({
width: 40
},
channelsButtonText: {
- textAlign: "center",
+ textAlign: 'center',
fontSize: 20,
- fontFamily: "Gill Sans",
- color: "#eee",
- fontWeight: "bold"
+ fontFamily: 'Gill Sans',
+ color: '#eee',
+ fontWeight: 'bold'
},
topbarText: {
- color: "#eee",
- fontFamily: "Thonburi",
- fontWeight: "bold",
+ color: '#eee',
+ fontFamily: 'Thonburi',
+ fontWeight: 'bold',
fontSize: 15
},
container: {
flex: 1,
- backgroundColor: "#333"
+ backgroundColor: '#333'
}
});
diff --git a/src/usecase/ConnectionGate.tsx b/src/usecase/ConnectionGate.tsx
@@ -1,12 +1,13 @@
-import * as React from "react";
-import { connect } from "react-redux";
-import LoginForm from "./login/LoginForm";
-import { StoreState } from "../store";
+import * as React from 'react';
+import { connect } from 'react-redux';
+import LoginForm from './login/LoginForm';
+import { StoreState } from '../store';
interface Props {
connecting: boolean;
connected: boolean;
onConnect: (hostname: string, password: string, ssl: boolean) => void;
+ children: React.ReactNode;
}
class ConnectionGate extends React.Component<Props> {
diff --git a/src/usecase/buffers/ui/Buffer.tsx b/src/usecase/buffers/ui/Buffer.tsx
@@ -1,17 +1,18 @@
import * as React from 'react';
import { FlatList, ListRenderItem } from 'react-native';
-import * as _ from 'lodash';
import BufferLine from './BufferLine';
+import { ParseShape } from 'react-native-parsed-text';
interface Props {
lines: WeechatLine[];
onLongPress: () => void;
- parseArgs: any;
+ parseArgs: ParseShape[];
bufferId: string;
}
-const keyExtractor = (line: WeechatLine) => _.last(line.pointers);
+const keyExtractor = (line: WeechatLine) =>
+ line.pointers[line.pointers.length - 1];
export default class Buffer extends React.PureComponent<Props> {
renderBuffer: ListRenderItem<WeechatLine> = ({ item }) => {
diff --git a/src/usecase/buffers/ui/BufferContainer.tsx b/src/usecase/buffers/ui/BufferContainer.tsx
@@ -11,7 +11,7 @@ import {
LayoutAnimation
} from 'react-native';
-import { connect } from 'react-redux';
+import { connect, ConnectedProps } from 'react-redux';
import ParsedText from 'react-native-parsed-text';
import Buffer from './Buffer';
@@ -21,14 +21,21 @@ import { renderWeechatFormat } from '../../../lib/weechat/color-formatter';
import { StoreState } from '../../../store';
import UndoTextInput from './UndoTextInput';
-interface Props {
+const connector = connect(
+ (state: StoreState, { bufferId }: { bufferId: string | null }) => ({
+ lines: (bufferId && state.lines[bufferId]) || [],
+ nicklist: (bufferId && state.nicklists[bufferId]) || []
+ })
+);
+
+type PropsFromRedux = ConnectedProps<typeof connector>;
+
+type Props = PropsFromRedux & {
buffer: WeechatBuffer | null;
- lines: WeechatLine[];
- nicklist: WeechatNicklist[];
- bufferId: string;
+ bufferId: string | null;
showTopic: boolean;
sendMessage: (message: string) => void;
-}
+};
interface State {
showTabButton: boolean;
@@ -47,7 +54,7 @@ class BufferContainer extends React.Component<Props, State> {
};
tabCompleteInProgress = false;
- tabCompleteMatches: WeechatNicklist[];
+ tabCompleteMatches: WeechatNicklist[] = [];
tabCompleteIndex = 0;
tabCompleteWordStart = 0;
tabCompleteWordEnd = 0;
@@ -72,7 +79,7 @@ class BufferContainer extends React.Component<Props, State> {
});
}
- handleOnLongPress(type, text) {
+ handleOnLongPress(type: string, text: string) {
ActionSheetIOS.showShareActionSheetWithOptions(
{
url: formatUrl(type, text),
@@ -83,7 +90,7 @@ class BufferContainer extends React.Component<Props, State> {
);
}
- handleOnPress(type, text) {
+ handleOnPress(type: string, text: string) {
console.log(type, text);
if (type === 'channel') {
// this.props.dispatch(changeCurrentBuffer(text));
@@ -149,7 +156,11 @@ class BufferContainer extends React.Component<Props, State> {
this.tabCompleteInProgress = true;
};
- handleSelectionChange = ({ nativeEvent: { selection } }) => {
+ handleSelectionChange = ({
+ nativeEvent: { selection }
+ }: {
+ nativeEvent: { selection: { start: number; end: number } };
+ }) => {
this.setState({ selection });
};
@@ -209,10 +220,7 @@ class BufferContainer extends React.Component<Props, State> {
}
}
-export default connect((state: StoreState, { bufferId }: Props) => ({
- lines: state.lines[bufferId] || [],
- nicklist: state.nicklists[bufferId] || []
-}))(BufferContainer);
+export default connector(BufferContainer);
const styles = StyleSheet.create({
topbar: {
diff --git a/src/usecase/buffers/ui/BufferLine.tsx b/src/usecase/buffers/ui/BufferLine.tsx
@@ -1,11 +1,12 @@
import * as React from 'react';
+import { ParseShape } from 'react-native-parsed-text';
import Default from './themes/Default';
interface Props {
line: WeechatLine;
onLongPress: (line: WeechatLine) => void;
- parseArgs: any;
+ parseArgs: ParseShape[];
}
export default class BufferLine extends React.PureComponent<Props> {
diff --git a/src/usecase/buffers/ui/BufferListItem.tsx b/src/usecase/buffers/ui/BufferListItem.tsx
@@ -10,12 +10,12 @@ import {
interface Props {
buffer: WeechatBuffer;
hotlist: Hotlist;
- currentBufferId: string;
+ currentBufferId: string | null;
onSelectBuffer: (b: WeechatBuffer) => void;
}
export default class BufferListItem extends React.Component<Props> {
- getBufferViewStyleFromProps = (): TextStyle => {
+ getBufferViewStyleFromProps = (): TextStyle | null => {
const { currentBufferId, buffer, hotlist } = this.props;
if (currentBufferId === buffer.id) {
@@ -29,7 +29,7 @@ export default class BufferListItem extends React.Component<Props> {
}
};
- getBufferTextStyleFromProps = (): TextStyle => {
+ getBufferTextStyleFromProps = (): TextStyle | null => {
const { currentBufferId, buffer, hotlist } = this.props;
if (currentBufferId === buffer.id) {
diff --git a/src/usecase/buffers/ui/themes/Default.tsx b/src/usecase/buffers/ui/themes/Default.tsx
@@ -1,14 +1,14 @@
import * as React from 'react';
import { StyleSheet, Text, TouchableHighlight, View } from 'react-native';
-import ParsedText from 'react-native-parsed-text';
+import ParsedText, { ParseShape } from 'react-native-parsed-text';
import { renderWeechatFormat } from '../../../../lib/weechat/color-formatter';
import { formatDate } from '../../../../lib/helpers/date-formatter';
interface Props {
line: WeechatLine;
- onLongPress: (WeechatLine) => void;
- parseArgs: any;
+ onLongPress: (line: WeechatLine) => void;
+ parseArgs: ParseShape[];
}
export default class BufferLine extends React.Component<Props> {
diff --git a/src/usecase/login/LoginForm.tsx b/src/usecase/login/LoginForm.tsx
@@ -10,18 +10,23 @@ import {
StatusBar,
TouchableOpacity
} from 'react-native';
-import { connect } from 'react-redux';
+import { connect, ConnectedProps } from 'react-redux';
import { StoreState } from '../../store';
-interface Props {
+const connector = connect((state: StoreState) => ({
+ hostname: state.connection.hostname || '',
+ password: state.connection.password || '',
+ ssl: state.connection.ssl,
+ filterBuffers: state.connection.filterBuffers
+}));
+
+type PropsFromRedux = ConnectedProps<typeof connector>;
+
+type Props = PropsFromRedux & {
onConnect: (hostname: string, password: string, ssl: boolean) => void;
connecting: boolean;
- hostname: string;
- password: string;
- ssl: boolean;
- filterBuffers: boolean;
- dispatch: (any) => void;
-}
+};
+
interface State {
hostname: string;
password: string;
@@ -133,12 +138,7 @@ class LoginForm extends React.Component<Props, State> {
}
}
-export default connect((state: StoreState) => ({
- hostname: state.connection.hostname,
- password: state.connection.password,
- ssl: state.connection.ssl,
- filterBuffers: state.connection.filterBuffers
-}))(LoginForm);
+export default connector(LoginForm);
const styles = StyleSheet.create({
container: {
diff --git a/tsconfig.json b/tsconfig.json
@@ -1,10 +1,21 @@
{
"compilerOptions": {
- "target": "es2015",
+ "allowJs": true,
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "isolatedModules": true,
"jsx": "react",
- "noEmit": true,
+ "lib": ["es6"],
"moduleResolution": "node",
- "importHelpers": true
+ "noEmit": true,
+ "strict": true,
+ "target": "esnext",
+ "skipLibCheck": true
},
- "exclude": ["node_modules"]
+ "exclude": [
+ "node_modules",
+ "babel.config.js",
+ "metro.config.js",
+ "jest.config.js"
+ ]
}
diff --git a/yarn.lock b/yarn.lock
@@ -2215,6 +2215,14 @@
dependencies:
"@types/node" "*"
+"@types/hoist-non-react-statics@^3.3.0":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
+ integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
+ dependencies:
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
@@ -2280,6 +2288,16 @@
dependencies:
"@types/react" "*"
+"@types/react-redux@^7.1.9":
+ version "7.1.9"
+ resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.9.tgz#280c13565c9f13ceb727ec21e767abe0e9b4aec3"
+ integrity sha512-mpC0jqxhP4mhmOl3P4ipRsgTgbNofMRXJb08Ms6gekViLj61v1hOZEKWDCyWsdONr6EjEA6ZHXC446wdywDe0w==
+ dependencies:
+ "@types/hoist-non-react-statics" "^3.3.0"
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+ redux "^4.0.0"
+
"@types/react@*":
version "16.9.34"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349"
@@ -7689,7 +7707,7 @@ prompts@^2.0.1, prompts@^2.2.1:
kleur "^3.0.3"
sisteransi "^1.0.4"
-prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.7.x:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -7765,12 +7783,12 @@ react-native-drawer-layout@2.0.0, "react-native-drawer-layout@https://github.com
version "2.0.0"
resolved "https://github.com/mhoran/react-native-drawer-layout#91a2476383751c56019d6ac3f61fb1d16606ae65"
-react-native-parsed-text@^0.0.21:
- version "0.0.21"
- resolved "https://registry.yarnpkg.com/react-native-parsed-text/-/react-native-parsed-text-0.0.21.tgz#86cf233aedc7a848b801b674c81d6b5ee37162df"
- integrity sha512-0oqnn7/2TxkQW+6z7MN8SrPdEldDlDYScCK4QfHRsCmzllZFeBfdGNdYaIkSX35JWN++SSq7VBfHR74pUDmb2A==
+react-native-parsed-text@^0.0.22:
+ version "0.0.22"
+ resolved "https://registry.yarnpkg.com/react-native-parsed-text/-/react-native-parsed-text-0.0.22.tgz#a23c756eaa5d6724296814755085127f9072e5f5"
+ integrity sha512-hfD83RDXZf9Fvth3DowR7j65fMnlqM9PpxZBGWkzVcUTFtqe6/yPcIoIAgrJbKn6YmtzkivmhWE2MCE4JKBXrQ==
dependencies:
- prop-types "^15.5.10"
+ prop-types "^15.7.x"
react-native-safe-area-context@3.1.4:
version "3.1.4"
@@ -7901,7 +7919,7 @@ redux-thunk@^2.2.0:
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
-redux@^4.0.5:
+redux@^4.0.0, redux@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==