diff --git a/package.json b/package.json index ce78fac0eaf..b32fa2c53ca 100644 --- a/package.json +++ b/package.json @@ -202,7 +202,6 @@ "react-style-proptype": "^3.2.2", "readable-stream": "^1.0.33", "reanimated-bottom-sheet": "^1.0.0-alpha.18", - "recompact": "^3.4.0", "recyclerlistview": "3.0.0", "redux": "^4.0.5", "redux-devtools-extension": "^2.13.8", diff --git a/src/App.js b/src/App.js index d09649a76bc..3af64114b98 100644 --- a/src/App.js +++ b/src/App.js @@ -29,7 +29,6 @@ import { SafeAreaProvider } from 'react-native-safe-area-context'; import { enableScreens } from 'react-native-screens'; import VersionNumber from 'react-native-version-number'; import { connect, Provider } from 'react-redux'; -import { compose, withProps } from 'recompact'; import PortalConsumer from './components/PortalConsumer'; import { FlexItem } from './components/layout'; import { OfflineToast } from './components/toasts'; @@ -309,16 +308,16 @@ class App extends Component { ); } -const AppWithRedux = compose( - withProps({ store }), - connect(({ appState: { walletReady } }) => ({ walletReady }), { +const AppWithRedux = connect( + ({ appState: { walletReady } }) => ({ walletReady }), + { requestsForTopic, - }) + } )(App); const AppWithCodePush = CodePush({ checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME, installMode: CodePush.InstallMode.ON_NEXT_RESUME, -})(AppWithRedux); +})(() => ); AppRegistry.registerComponent('Rainbow', () => AppWithCodePush); diff --git a/src/components/activity-list/ActivityList.js b/src/components/activity-list/ActivityList.js index 0b7cb1f6637..2db92311ba2 100644 --- a/src/components/activity-list/ActivityList.js +++ b/src/components/activity-list/ActivityList.js @@ -1,6 +1,5 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { SectionList } from 'react-native'; -import { mapProps } from 'recompact'; import styled from 'styled-components'; import { useTheme } from '../../context/ThemeContext'; import networkTypes from '../../helpers/networkTypes'; @@ -73,8 +72,8 @@ const ActivityList = ({ hasPendingTransaction, header, nativeCurrency, - pendingTransactionsCount, sections, + requests, transactionsCount, addCashAvailable, isEmpty, @@ -85,6 +84,15 @@ const ActivityList = ({ nextPage, remainingItemsLabel, }) => { + const pendingTransactionsCount = useMemo(() => { + let currentPendingTransactionsCount = 0; + const pendingTxSection = sections[requests?.length ? 1 : 0]; + + if (pendingTxSection && pendingTxSection.title === 'Pending') { + currentPendingTransactionsCount = pendingTxSection.data.length; + } + return currentPendingTransactionsCount; + }, [sections, requests]); return network === networkTypes.mainnet || sections.length ? ( recyclerListView ? ( { - let pendingTransactionsCount = 0; - const pendingTxSection = sections[requests?.length ? 1 : 0]; - - if (pendingTxSection && pendingTxSection.title === 'Pending') { - pendingTransactionsCount = pendingTxSection.data.length; - } - - return { - ...props, - nativeCurrency, - pendingTransactionsCount, - sections, - }; -})(ActivityList); +export default ActivityList; diff --git a/src/components/add-cash/AddCashStatus.js b/src/components/add-cash/AddCashStatus.js index 4a05b040711..a460d21bcd6 100644 --- a/src/components/add-cash/AddCashStatus.js +++ b/src/components/add-cash/AddCashStatus.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import React, { Fragment, useEffect, useMemo, useRef } from 'react'; import { StyleSheet } from 'react-native'; import { Transition, Transitioning } from 'react-native-reanimated'; -import { withProps } from 'recompact'; +import styled from 'styled-components'; import jumpingDaiAnimation from '../../assets/lottie/jumping-dai.json'; import jumpingEthAnimation from '../../assets/lottie/jumping-eth.json'; import TransactionStatusTypes from '../../helpers/transactionStatusTypes'; @@ -24,12 +24,12 @@ import SupportButton from './SupportButton'; import Routes from '@rainbow-me/routes'; import { position } from '@rainbow-me/styles'; -const StatusMessageText = withProps({ +const StatusMessageText = styled(Text).attrs({ align: 'center', lineHeight: 30, size: 23, weight: 'bold', -})(Text); +})``; const sx = StyleSheet.create({ container: { diff --git a/src/components/asset-list/AssetListItemSkeleton.js b/src/components/asset-list/AssetListItemSkeleton.js index 946a75ca713..bdec434880f 100644 --- a/src/components/asset-list/AssetListItemSkeleton.js +++ b/src/components/asset-list/AssetListItemSkeleton.js @@ -9,7 +9,6 @@ import Animated, { timing, Value, } from 'react-native-reanimated'; -import { withProps } from 'recompact'; import styled from 'styled-components'; import { withThemeContext } from '../../context/ThemeContext'; import { deviceUtils } from '../../utils'; @@ -35,7 +34,7 @@ const FakeAvatar = styled.View` border-radius: 20; `; -const FakeRow = withProps({ +const FakeRow = styled(Row).attrs({ align: 'flex-end', flex: 0, height: 10, diff --git a/src/components/coin-row/CollectiblesSendRow.js b/src/components/coin-row/CollectiblesSendRow.js index 535b194b557..d30fdcc45c7 100644 --- a/src/components/coin-row/CollectiblesSendRow.js +++ b/src/components/coin-row/CollectiblesSendRow.js @@ -1,10 +1,9 @@ import PropTypes from 'prop-types'; -import React, { Fragment } from 'react'; -import { compose, onlyUpdateForKeys, shouldUpdate, withProps } from 'recompact'; +import React, { Fragment, useMemo } from 'react'; import { css } from 'styled-components'; -import { useTheme, withThemeContext } from '../../context/ThemeContext'; +import { useTheme } from '../../context/ThemeContext'; import { buildAssetUniqueIdentifier } from '../../helpers/assets'; -import { deviceUtils } from '../../utils'; +import { deviceUtils, magicMemo } from '../../utils'; import Divider from '../Divider'; import { ButtonPressAnimation } from '../animations'; import { RequestVendorLogoIcon } from '../coin-icon'; @@ -44,23 +43,19 @@ const TopRow = ({ id, name, selected }) => ( ); -const enhanceUniqueTokenCoinIcon = onlyUpdateForKeys([ - 'background', - 'image_thumbnail_url', -]); - -const UniqueTokenCoinIcon = enhanceUniqueTokenCoinIcon( - withThemeContext( - ({ - asset_contract: { name }, - background, - image_thumbnail_url, - shouldPrioritizeImageLoading, - ...props - }) => ( +const UniqueTokenCoinIcon = magicMemo( + ({ + asset_contract: { name }, + background, + image_thumbnail_url, + shouldPrioritizeImageLoading, + ...props + }) => { + const { colors } = useTheme(); + return ( - ) - ) + ); + }, + ['background', 'image_thumbnail_url'] ); UniqueTokenCoinIcon.propTypes = { @@ -80,29 +76,28 @@ UniqueTokenCoinIcon.propTypes = { shouldPrioritizeImageLoading: PropTypes.bool, }; -const buildSubtitleForUniqueToken = ({ item }) => ({ - subtitle: item.name - ? `${item.asset_contract.name} #${item.id}` - : item.asset_contract.name, -}); +const arePropsEqual = (props, nextProps) => + buildAssetUniqueIdentifier(props.item) !== + buildAssetUniqueIdentifier(nextProps.item); -const enhance = compose( - withProps(buildSubtitleForUniqueToken), - shouldUpdate((props, nextProps) => { - const itemIdentifier = buildAssetUniqueIdentifier(props.item); - const nextItemIdentifier = buildAssetUniqueIdentifier(nextProps.item); +// eslint-disable-next-line react/display-name +const CollectiblesSendRow = React.memo( + ({ item, isFirstRow, onPress, selected, testID, ...props }) => { + const { colors } = useTheme(); + const subtitle = useMemo( + () => + item.name + ? `${item.asset_contract.name} #${item.id}` + : item.asset_contract.name, - return itemIdentifier !== nextItemIdentifier; - }) -); + [item.asset_contract.name, item.id, item.name] + ); -const CollectiblesSendRow = enhance( - withThemeContext( - ({ item, isFirstRow, onPress, selected, subtitle, testID, ...props }) => ( + return ( {isFirstRow && ( - + )} @@ -119,8 +114,9 @@ const CollectiblesSendRow = enhance( /> - ) - ) + ); + }, + arePropsEqual ); CollectiblesSendRow.propTypes = { diff --git a/src/components/copy-tooltip/CopyTooltip.ios.js b/src/components/copy-tooltip/CopyTooltip.ios.js index 6a3fe38d56d..9c83ca84b73 100644 --- a/src/components/copy-tooltip/CopyTooltip.ios.js +++ b/src/components/copy-tooltip/CopyTooltip.ios.js @@ -1,53 +1,24 @@ import Clipboard from '@react-native-community/clipboard'; -import PropTypes from 'prop-types'; -import React, { PureComponent } from 'react'; +import React, { useCallback, useEffect, useRef } from 'react'; import ToolTip from 'react-native-tooltip'; -import { compose, onlyUpdateForKeys } from 'recompact'; -import { withThemeContext } from '../../context/ThemeContext'; -import { withNavigation } from '../../navigation/Navigation'; -class CopyTooltip extends PureComponent { - static propTypes = { - activeOpacity: PropTypes.number, - navigation: PropTypes.object, - setSafeTimeout: PropTypes.func, - textToCopy: PropTypes.string, - tooltipText: PropTypes.string, - }; - - static defaultProps = { - activeOpacity: 0.666, - tooltipText: 'Copy', - }; - - componentWillUnmount = () => this.handleHideTooltip(); - - tooltip = null; - - handleCopy = () => Clipboard.setString(this.props.textToCopy); - - handleHideTooltip = () => this.tooltip.hideMenu(); - - handlePress = () => this.tooltip.showMenu(); - - handleRef = ref => { - this.tooltip = ref; - }; - - render = () => ( +function CopyTooltip({ textToCopy, activeOpacity, tooltipText, ...props }) { + const handleCopy = useCallback(() => Clipboard.setString(textToCopy), [ + textToCopy, + ]); + const { colors } = useTheme(); + const ref = useRef(); + useEffect(() => ref.current.hideMenu, []); + return ( ref.current.showMenu()} + ref={ref} + underlayColor={colors.transparent} /> ); } -export default compose( - withNavigation, - withThemeContext, - onlyUpdateForKeys(['textToCopy', 'tooltipText']) -)(CopyTooltip); +export default CopyTooltip; diff --git a/src/components/exchange/SlippageWarning.js b/src/components/exchange/SlippageWarning.js index 837223f0750..248583a5dd2 100644 --- a/src/components/exchange/SlippageWarning.js +++ b/src/components/exchange/SlippageWarning.js @@ -1,9 +1,6 @@ import AnimateNumber from '@bankify/react-native-animate-number'; -import PropTypes from 'prop-types'; import React from 'react'; -import { compose, onlyUpdateForKeys, withProps } from 'recompact'; import styled from 'styled-components'; -import { withThemeContext } from '../../context/ThemeContext'; import { convertBipsToPercentage } from '../../helpers/utilities'; import { Icon } from '../icons'; import { Row, RowWithMargins } from '../layout'; @@ -31,50 +28,31 @@ const renderSlippageText = displayValue => ( ); -const enhance = compose( - withThemeContext, - onlyUpdateForKeys(['slippage']), - withProps(({ slippage, colors }) => { - const isSevere = slippage >= SevereSlippageThresholdInBips; - - return { - isSevere, - severityColor: isSevere ? colors.red : colors.orangeLight, - showWarning: slippage >= SlippageWarningThresholdInBips, - }; - }) -); - const AnimatedNumberComponent = ios ? AnimateNumber : AnimatedNumberAndroid; -const SlippageWarning = enhance( - ({ isSevere, severityColor, showWarning, slippage }) => - showWarning ? ( - - - - - - - {isSevere ? 'Please swap less' : 'Consider swapping less'} - - - ) : null -); - -SlippageWarning.propTypes = { - isSevere: PropTypes.bool, - onPress: PropTypes.func, - severityColor: PropTypes.string, - showWarning: PropTypes.bool, - slippage: PropTypes.string, +const SlippageWarning = ({ slippage }) => { + const { colors } = useTheme(); + const isSevere = slippage >= SevereSlippageThresholdInBips; + const severityColor = isSevere ? colors.red : colors.orangeLight; + const showWarning = slippage >= SlippageWarningThresholdInBips; + return showWarning ? ( + + + + + + + {isSevere ? 'Please swap less' : 'Consider swapping less'} + + + ) : null; }; export default SlippageWarning; diff --git a/src/components/list/ListItem.js b/src/components/list/ListItem.js index 4a298b7ab0e..1f767d96077 100644 --- a/src/components/list/ListItem.js +++ b/src/components/list/ListItem.js @@ -1,8 +1,5 @@ import { isString } from 'lodash'; -import PropTypes from 'prop-types'; -import React from 'react'; -import { compose, onlyUpdateForKeys, withHandlers } from 'recompact'; -import { withThemeContext } from '../../context/ThemeContext'; +import React, { useCallback } from 'react'; import { ButtonPressAnimation } from '../animations'; import { Icon } from '../icons'; import { Centered, Row, RowWithMargins } from '../layout'; @@ -18,43 +15,26 @@ const renderIcon = icon => icon ); -const propTypes = { - activeOpacity: PropTypes.number, - children: PropTypes.node, - icon: PropTypes.node, - iconMargin: PropTypes.number, - justify: PropTypes.bool, - label: PropTypes.string.isRequired, - onPress: PropTypes.func, -}; - -const enhance = compose( - withThemeContext, - onlyUpdateForKeys(Object.keys(propTypes)), - withHandlers({ - onPress: ({ onPress, value }) => () => { - if (onPress) { - onPress(value); - } - }, - }) -); - -const ListItem = enhance( - ({ - activeOpacity, - colors, - children, - justify, - icon, - iconMargin, - label, - onPress, - scaleTo = 0.975, - testID, - disabled, - ...props - }) => ( +const ListItem = ({ + activeOpacity, + children, + justify, + icon, + iconMargin, + label, + scaleTo = 0.975, + testID, + disabled, + ...props +}) => { + const onPress = useCallback(() => { + if (props.onPress) { + props.onPress(props.value); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [props.onPress, props.value]); + const { colors } = useTheme(); + return ( {children}} - ) -); - -ListItem.propTypes = propTypes; + ); +}; ListItem.height = ListItemHeight; diff --git a/src/components/list/ListItemArrowGroup.js b/src/components/list/ListItemArrowGroup.js index ebc9152d5e5..172d4f1d974 100644 --- a/src/components/list/ListItemArrowGroup.js +++ b/src/components/list/ListItemArrowGroup.js @@ -1,39 +1,40 @@ import PropTypes from 'prop-types'; import React from 'react'; import { Image } from 'react-native'; -import { pure } from 'recompact'; import Caret from '../../assets/family-dropdown-arrow.png'; -import { withThemeContext } from '../../context/ThemeContext'; import { RowWithMargins } from '../layout'; import { Text } from '../text'; -const ListItemArrowGroup = ({ children, colors }) => ( - - {typeof children === 'string' ? ( - - {children} - - ) : ( - children - )} - - -); +const ListItemArrowGroup = ({ children }) => { + const { colors } = useTheme(); + return ( + + {typeof children === 'string' ? ( + + {children} + + ) : ( + children + )} + + + ); +}; ListItemArrowGroup.propTypes = { children: PropTypes.node, }; -export default pure(withThemeContext(ListItemArrowGroup)); +export default React.memo(ListItemArrowGroup); diff --git a/src/components/radio-list/RadioListItem.js b/src/components/radio-list/RadioListItem.js index 403ae359fc5..88212fee6d0 100644 --- a/src/components/radio-list/RadioListItem.js +++ b/src/components/radio-list/RadioListItem.js @@ -1,6 +1,4 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import { withHandlers } from 'recompact'; +import React, { useCallback } from 'react'; import styled from 'styled-components'; import Icon from '../icons/Icon'; import { ListItem } from '../list'; @@ -17,24 +15,18 @@ const CheckmarkIcon = styled(Icon).attrs(({ theme: { colors } }) => ({ right: 0; `; -const RadioListItem = ({ disabled, onPress, selected, ...props }) => ( - - {selected && } - -); - -RadioListItem.propTypes = { - ...ListItem.propTypes, - disabled: PropTypes.bool, - onPress: PropTypes.func.isRequired, - selected: PropTypes.bool, - value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, +const RadioListItem = ({ disabled, selected, ...props }) => { + const onPress = useCallback(() => { + if (props.onPress && !props.disabled) { + props.onPress(props.value); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [props.value, props.onPress, disabled]); + return ( + + {selected && } + + ); }; -export default withHandlers({ - onPress: ({ disabled, onPress, value }) => () => { - if (onPress && !disabled) { - onPress(value); - } - }, -})(RadioListItem); +export default RadioListItem; diff --git a/src/components/walletconnect-list/WalletConnectLearnMoreButton.js b/src/components/walletconnect-list/WalletConnectLearnMoreButton.js index 949dfad5526..bf7b44b1d2d 100644 --- a/src/components/walletconnect-list/WalletConnectLearnMoreButton.js +++ b/src/components/walletconnect-list/WalletConnectLearnMoreButton.js @@ -1,16 +1,19 @@ import { debounce } from 'lodash'; -import PropTypes from 'prop-types'; import React from 'react'; import { Linking } from 'react-native'; -import { compose, pure, withHandlers } from 'recompact'; -import { withThemeContext } from '../../context/ThemeContext'; import Divider from '../Divider'; import { ButtonPressAnimation } from '../animations'; import { Centered, Row } from '../layout'; import { Text } from '../text'; import { padding } from '@rainbow-me/styles'; -const WalletConnectLearnMoreButton = ({ onPressLearnMore, colors }) => { +const openWalletConnectWebsite = () => + Linking.openURL('https://walletconnect.org/'); + +const onPressLearnMore = () => debounce(openWalletConnectWebsite, 200); + +const WalletConnectLearnMoreButton = () => { + const { colors } = useTheme(); return ( { ); }; -WalletConnectLearnMoreButton.propTypes = { - onPressLearnMore: PropTypes.func, -}; - -const openWalletConnectWebsite = () => - Linking.openURL('https://walletconnect.org/'); - -export default compose( - pure, - withThemeContext, - withHandlers({ - onPressLearnMore: () => debounce(openWalletConnectWebsite, 200), - }) -)(WalletConnectLearnMoreButton); +export default WalletConnectLearnMoreButton; diff --git a/src/helpers/buildWalletSections.js b/src/helpers/buildWalletSections.js index 0c7f90faef2..7160fc4d7ab 100644 --- a/src/helpers/buildWalletSections.js +++ b/src/helpers/buildWalletSections.js @@ -10,13 +10,13 @@ import { } from 'lodash'; import React from 'react'; import { LayoutAnimation } from 'react-native'; -import { compose, withHandlers } from 'recompact'; import { createSelector } from 'reselect'; import { AssetListItemSkeleton } from '../components/asset-list'; import { BalanceCoinRow } from '../components/coin-row'; import { UniswapInvestmentRow } from '../components/investment-cards'; import { CollectibleTokenFamily } from '../components/token-family'; import { withNavigation } from '../navigation/Navigation'; +import { compose, withHandlers } from '../utils/recompactAdapters'; import { buildCoinsList, buildUniqueTokenList } from './assets'; import networkTypes from './networkTypes'; import { add, convertAmountToNativeDisplay, multiply } from './utilities'; diff --git a/src/utils/recompactAdapters.js b/src/utils/recompactAdapters.js new file mode 100644 index 00000000000..74e6931b269 --- /dev/null +++ b/src/utils/recompactAdapters.js @@ -0,0 +1,23 @@ +import React, { useCallback } from 'react'; + +export const withHandlers = handlers => Component => + function WithHandlers(props) { + const traversedHandlers = Object.keys(handlers).reduce((acc, key) => { + // eslint-disable-next-line react-hooks/rules-of-hooks,react-hooks/exhaustive-deps + acc[key] = useCallback(handlers[key](props), [Object.values(props)]); + return acc; + }, {}); + return ; + }; + +export function compose(...funcs) { + if (funcs.length === 0) { + return x => x; + } + + if (funcs.length === 1) { + return funcs[0]; + } + + return funcs.reduce((a, b) => (...args) => a(b(...args))); +} diff --git a/yarn.lock b/yarn.lock index 9c45b63c5bd..c8efdbb9063 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6210,7 +6210,7 @@ fbjs-scripts@^1.1.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.17, fbjs@^0.8.9: +fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -6980,7 +6980,7 @@ hoist-non-react-statics@^2.3.1: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7474,7 +7474,7 @@ is-extendable@^0.1.0, is-extendable@^0.1.1: resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= -is-extendable@^1.0.0, is-extendable@^1.0.1: +is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== @@ -10003,13 +10003,6 @@ object.getownpropertydescriptors@^2.1.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -object.omit@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-3.0.0.tgz#0e3edc2fce2ba54df5577ff529f6d97bd8a522af" - integrity sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ== - dependencies: - is-extendable "^1.0.0" - object.pick@^1.1.1, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -11662,18 +11655,6 @@ reanimated-bottom-sheet@^1.0.0-alpha.18: resolved "https://registry.yarnpkg.com/reanimated-bottom-sheet/-/reanimated-bottom-sheet-1.0.0-alpha.22.tgz#01a200946f1a461f01f1e773e5b4961c2df2e53b" integrity sha512-NxecCn+2iA4YzkFuRK5/b86GHHS2OhZ9VRgiM4q18AC20YE/psRilqxzXCKBEvkOjP5AaAvY0yfE7EkEFBjTvw== -recompact@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/recompact/-/recompact-3.4.0.tgz#6f3d540cef833cbfc6073b86e7f1137ef6dae8f1" - integrity sha512-ZPnF7uTotU6xIaxDl4GlOyOZX1FgMSQOKZX/wAd9Fgv6LdBxH6kiuGa4RQXcqoA7wZ7psjWPYBwzlwMOFhWIKQ== - dependencies: - fbjs "^0.8.17" - hoist-non-react-statics "^3.0.1" - object.omit "^3.0.0" - object.pick "^1.3.0" - symbol-observable "^1.1.0" - warning "^4.0.2" - recursive-fs@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/recursive-fs/-/recursive-fs-2.1.0.tgz#1e20cf7836b292ed81208c4817550a58ad0e15ff" @@ -13240,7 +13221,7 @@ symbol-observable@1.0.1: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= -symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -13998,13 +13979,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -warning@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"