diff --git a/components/Home.js b/components/Home.js index 97ea60b..9857954 100644 --- a/components/Home.js +++ b/components/Home.js @@ -3,9 +3,6 @@ import { ScrollView, StyleSheet, View } from 'react-native' import PropTypes from 'prop-types' import moment from 'moment' -import { connect } from 'react-redux' -import { navigate } from '../slices/navigation' - import AppText from './common/app-text' import Button from './common/button' @@ -136,15 +133,9 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - Home.propTypes = { navigate: PropTypes.func, setDate: PropTypes.func, } -export default connect(null, mapDispatchToProps)(Home) +export default Home diff --git a/components/app-wrapper.js b/components/app-wrapper.js index 47cbd2b..3afcca3 100644 --- a/components/app-wrapper.js +++ b/components/app-wrapper.js @@ -1,5 +1,4 @@ import React, { useState, useEffect } from 'react' -import { Provider } from 'react-redux' import nodejs from 'nodejs-mobile-react-native' import { getLicenseFlag, saveEncryptionFlag } from '../local-storage' @@ -11,8 +10,6 @@ import AppStatusBar from './common/app-status-bar' import License from './License' import PasswordPrompt from './password-prompt' -import store from '../store' - export default function AppWrapper() { const [isLoading, setIsLoading] = useState(true) const [isLicenseAccepted, setIsLicenseAccepted] = useState(false) @@ -45,13 +42,13 @@ export default function AppWrapper() { } return ( - + <> {isDbEncrypted ? ( setIsDbEncrypted(false)} /> ) : ( checkIsDbEncrypted()} /> )} - + ) } diff --git a/components/app.js b/components/app.js index 9613f19..98484ab 100644 --- a/components/app.js +++ b/components/app.js @@ -2,15 +2,12 @@ import React, { Component } from 'react' import { BackHandler, StyleSheet, View } from 'react-native' import PropTypes from 'prop-types' -import { connect } from 'react-redux' import { LocalDate } from '@js-joda/core' -import { getNavigation, navigate, goBack } from '../slices/navigation' - import Header from './header' import Menu from './menu' import { viewsList } from './views' -import { isSettingsView } from './pages' +import { isSettingsView, pages } from './pages' import { headerTitles } from '../i18n/en/labels' import setupNotifications from '../lib/notifications' @@ -36,9 +33,14 @@ class App extends Component { this.state = { date: LocalDate.now().toString(), + currentPage: 'Home', } - setupNotifications(this.props.navigate, this.props.setDate) + setupNotifications(this.navigate, this.setDate) + } + + navigate = (page) => { + this.setState({ currentPage: page }) } setDate = (date) => { @@ -46,13 +48,14 @@ class App extends Component { } goBack = () => { - const { currentPage } = this.props.navigation + const { currentPage } = this.state if (currentPage === 'Home') { closeDb() BackHandler.exitApp() } else { - this.props.goBack() + const { parent } = pages.find((p) => p.component === currentPage) + this.navigate(parent) } return true @@ -63,9 +66,9 @@ class App extends Component { } render() { - const { navigation, goBack, restartApp } = this.props - const { date } = this.state - const { currentPage } = navigation + const { goBack, restartApp } = this.props + const { date, currentPage } = this.state + const { navigate } = this if (!currentPage) { return false @@ -80,19 +83,21 @@ class App extends Component { const headerProps = { title, handleBack: isSettingsSubView ? goBack : null, + navigate, } const pageProps = { date, setDate: this.setDate, isTemperatureEditView, + navigate, } return (
- + ) } @@ -104,17 +109,4 @@ const styles = StyleSheet.create({ }, }) -const mapStateToProps = (state) => { - return { - navigation: getNavigation(state), - } -} - -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - goBack: () => dispatch(goBack()), - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(App) +export default App diff --git a/components/calendar.js b/components/calendar.js index 9cebb66..cb01791 100644 --- a/components/calendar.js +++ b/components/calendar.js @@ -3,9 +3,6 @@ import PropTypes from 'prop-types' import { StyleSheet, View } from 'react-native' import { CalendarList } from 'react-native-calendars' -import { connect } from 'react-redux' -import { navigate } from '../slices/navigation' - import { getBleedingDaysSortedByDate } from '../db' import cycleModule from '../lib/cycle' import nothingChanged from '../db/db-unchanged' @@ -88,10 +85,4 @@ const styles = StyleSheet.create({ container: { flex: 1 }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(CalendarView) +export default CalendarView diff --git a/components/chart/chart.js b/components/chart/chart.js index 3155d08..9d16920 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -19,9 +19,6 @@ import NoData from './no-data' import Tutorial from './tutorial' import YAxis from './y-axis' -import { connect } from 'react-redux' -import { navigate } from '../../slices/navigation' - import { getCycleDaysSortedByDate } from '../../db' import nothingChanged from '../../db/db-unchanged' import { @@ -167,7 +164,7 @@ class CycleChart extends Component { onLayout={this.onLayout} scrollViewStyle={styles.page} > - {!hasDataToDisplay && } + {!hasDataToDisplay && } {hasDataToDisplay && !chartHeight && !chartLoaded && } {shouldShowHint && chartLoaded && ( @@ -261,10 +258,4 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(CycleChart) +export default CycleChart diff --git a/components/chart/day-column.js b/components/chart/day-column.js index f260e27..942fe31 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -1,9 +1,6 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' import { TouchableOpacity } from 'react-native' -import { connect } from 'react-redux' - -import { navigate } from '../../slices/navigation' import { getCycleDay } from '../../db' @@ -128,10 +125,4 @@ class DayColumn extends Component { } } -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(DayColumn) +export default DayColumn diff --git a/components/chart/no-data.js b/components/chart/no-data.js index 79abed5..0bca637 100644 --- a/components/chart/no-data.js +++ b/components/chart/no-data.js @@ -5,9 +5,6 @@ import PropTypes from 'prop-types' import AppText from '../common/app-text' import Button from '../common/button' -import { connect } from 'react-redux' -import { navigate } from '../../slices/navigation' - import { Containers } from '../../styles' import { shared } from '../../i18n/en/labels' @@ -37,10 +34,4 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(NoData) +export default NoData diff --git a/components/header/hamburger-menu.js b/components/header/hamburger-menu.js index d3a92f2..4e9705b 100644 --- a/components/header/hamburger-menu.js +++ b/components/header/hamburger-menu.js @@ -6,6 +6,7 @@ import { TouchableOpacity, View, } from 'react-native' +import PropTypes from 'prop-types' import AppIcon from '../common/app-icon' import CloseIcon from '../common/close-icon' @@ -39,7 +40,7 @@ export default class HamburgerMenu extends Component { const { shouldShowMenu } = this.state return ( - + <> {!shouldShowMenu && ( @@ -65,16 +66,21 @@ export default class HamburgerMenu extends Component { item={item} key={item.name} closeMenu={this.toggleMenu} + navigate={this.props.navigate} /> ))} )} - + ) } } +HamburgerMenu.propTypes = { + navigate: PropTypes.func, +} + const styles = StyleSheet.create({ blackBackground: { backgroundColor: 'black', diff --git a/components/header/index.js b/components/header/index.js index a19f9cc..14f7beb 100644 --- a/components/header/index.js +++ b/components/header/index.js @@ -1,5 +1,5 @@ import React from 'react' -import { StyleSheet, View } from 'react-native' +import { StyleSheet, TouchableOpacity, View } from 'react-native' import PropTypes from 'prop-types' import Logo from './logo' @@ -7,21 +7,30 @@ import HamburgerMenu from './hamburger-menu' import { Colors, Containers, Sizes } from '../../styles' -const Header = ({ isSideMenuEnabled }) => { +const Header = ({ isStatic, navigate }) => { return ( - - {isSideMenuEnabled && } + {isStatic ? ( + + ) : ( + <> + navigate('Home')}> + + + + + )} ) } Header.propTypes = { - isSideMenuEnabled: PropTypes.bool, + isStatic: PropTypes.bool, + navigate: PropTypes.func, } Header.defaultProps = { - isSideMenuEnabled: true, + isStatic: false, } const styles = StyleSheet.create({ diff --git a/components/header/logo.js b/components/header/logo.js index 9748b68..3c113c7 100644 --- a/components/header/logo.js +++ b/components/header/logo.js @@ -1,24 +1,12 @@ import React from 'react' -import { StyleSheet, TouchableOpacity } from 'react-native' -import PropTypes from 'prop-types' +import { StyleSheet } from 'react-native' import AppText from '../common/app-text' -import { connect } from 'react-redux' -import { navigate } from '../../slices/navigation' - import { Colors, Fonts, Sizes } from '../../styles' -const Logo = ({ navigate }) => { - return ( - navigate('Home')}> - drip. - - ) -} - -Logo.propTypes = { - navigate: PropTypes.func.isRequired, +const Logo = () => { + return drip. } const styles = StyleSheet.create({ @@ -29,10 +17,4 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(Logo) +export default Logo diff --git a/components/header/menu-item.js b/components/header/menu-item.js index eaadea9..fa5de23 100644 --- a/components/header/menu-item.js +++ b/components/header/menu-item.js @@ -4,9 +4,6 @@ import PropTypes from 'prop-types' import AppText from '../common/app-text' -import { connect } from 'react-redux' -import { navigate } from '../../slices/navigation' - import { Typography } from '../../styles' const MenuItem = ({ item, navigate, closeMenu }) => { @@ -35,10 +32,4 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(MenuItem) +export default MenuItem diff --git a/components/menu/index.js b/components/menu/index.js index 00b607e..ae885ec 100644 --- a/components/menu/index.js +++ b/components/menu/index.js @@ -1,12 +1,13 @@ import React from 'react' import { StyleSheet, View } from 'react-native' +import PropTypes from 'prop-types' import MenuItem from './menu-item' import { Containers } from '../../styles' import { pages } from '../pages' -const Menu = () => { +const Menu = ({ currentPage, navigate }) => { const menuItems = pages.filter((page) => page.isInMenu) return ( @@ -14,7 +15,8 @@ const Menu = () => { {menuItems.map(({ icon, label, component }) => { return ( navigate(component)} icon={icon} key={label} label={label} @@ -25,6 +27,11 @@ const Menu = () => { ) } +Menu.propTypes = { + currentPage: PropTypes.string, + navigate: PropTypes.func, +} + const styles = StyleSheet.create({ container: { backgroundColor: 'white', diff --git a/components/menu/menu-item.js b/components/menu/menu-item.js index a2f99dc..a637bb9 100644 --- a/components/menu/menu-item.js +++ b/components/menu/menu-item.js @@ -4,18 +4,14 @@ import { StyleSheet, Text, TouchableOpacity } from 'react-native' import Icon from '../common/menu-icon' -import { connect } from 'react-redux' -import { getNavigation, navigate } from '../../slices/navigation' - import { Colors, Containers, Fonts, Sizes, Spacing } from '../../styles' -const MenuItem = ({ component, icon, label, navigate, navigation }) => { - const isActive = component === navigation.currentPage +const MenuItem = ({ isActive, icon, label, onPress }) => { const textStyle = isActive ? styles.menuTextActive : styles.menuText const testID = isActive ? 'activeMenuItem' : `menuItem${label}` return ( - navigate(component)}> + {label} @@ -25,11 +21,10 @@ const MenuItem = ({ component, icon, label, navigate, navigation }) => { } MenuItem.propTypes = { - component: PropTypes.string.isRequired, + isActive: PropTypes.bool.isRequired, icon: PropTypes.string.isRequired, label: PropTypes.string.isRequired, - navigation: PropTypes.object, - navigate: PropTypes.func, + onPress: PropTypes.func.isRequired, } const text = { @@ -53,16 +48,4 @@ const styles = StyleSheet.create({ }, }) -const mapStateToProps = (state) => { - return { - navigation: getNavigation(state), - } -} - -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(mapStateToProps, mapDispatchToProps)(MenuItem) +export default MenuItem diff --git a/components/password-prompt.js b/components/password-prompt.js index d7cb092..bcf6480 100644 --- a/components/password-prompt.js +++ b/components/password-prompt.js @@ -82,7 +82,7 @@ export default class PasswordPrompt extends Component { return ( -
+
{ @@ -45,10 +42,4 @@ const styles = StyleSheet.create({ }, }) -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(MenuItem) +export default MenuItem diff --git a/components/settings/password/index.js b/components/settings/password/index.js index 90a081c..62e9b15 100644 --- a/components/settings/password/index.js +++ b/components/settings/password/index.js @@ -1,9 +1,6 @@ import React, { Component } from 'react' -import { connect } from 'react-redux' import PropTypes from 'prop-types' -import { navigate } from '../../../slices/navigation' - import { changeDbEncryption } from '../../../db' import AppPage from '../../common/app-page' @@ -94,10 +91,4 @@ class PasswordSetting extends Component { } } -const mapDispatchToProps = (dispatch) => { - return { - navigate: (page) => dispatch(navigate(page)), - } -} - -export default connect(null, mapDispatchToProps)(PasswordSetting) +export default PasswordSetting diff --git a/components/settings/settings-menu.js b/components/settings/settings-menu.js index 7ff4155..cfe1919 100644 --- a/components/settings/settings-menu.js +++ b/components/settings/settings-menu.js @@ -1,4 +1,5 @@ import React from 'react' +import PropTypes from 'prop-types' import AppPage from '../common/app-page' import MenuItem from './menu-item' @@ -13,16 +14,22 @@ const menu = [ { ...menuItems.password, component: 'Password' }, ] -const SettingsMenu = () => { +const SettingsMenu = ({ navigate }) => { return ( {menu.map((menuItem, i) => { const last = menu.length === i + 1 - return + return ( + + ) })} ) } +SettingsMenu.propTypes = { + navigate: PropTypes.func.isRequired, +} + export default SettingsMenu diff --git a/lib/notifications.js b/lib/notifications.js index 53328e8..31778ad 100644 --- a/lib/notifications.js +++ b/lib/notifications.js @@ -10,7 +10,6 @@ import labels from '../i18n/en/settings' import { getBleedingDaysSortedByDate } from '../db' import cycleModule from './cycle' import nothingChanged from '../db/db-unchanged' -import store from '../store' export default function setupNotifications(navigate, setDate) { Notification.configure({ @@ -18,7 +17,7 @@ export default function setupNotifications(navigate, setDate) { // https://github.com/zo0r/react-native-push-notification/issues/966#issuecomment-479069106 if (notification.data?.id === '1' || notification.id === '1') { const todayDate = LocalDate.now().toString() - store.dispatch(setDate(todayDate)) + setDate(todayDate) navigate('TemperatureEditView') } else { navigate('Home') diff --git a/package.json b/package.json index 26705fb..e641f02 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "log": "react-native log-android", "test": "jest test && npm run lint", "test-watch": "jest --watch test", - "lint": "eslint components lib test styles slices db", + "lint": "eslint components lib test styles db", "devtool": "adb shell input keyevent 82", "build-android-release": "cd android && ./gradlew clean && ./gradlew assembleRelease && cd ..", "update-version": "node ./tools/bin/update-version.js", @@ -55,10 +55,7 @@ "react-native-simple-toast": "^1.1.3", "react-native-size-matters": "^0.4.0", "react-native-vector-icons": "^9.2.0", - "react-redux": "^6.0.0", "realm": "^10.16.0", - "redux": "^4.0.1", - "redux-starter-kit": "^0.6.3", "sympto": "3.0.1" }, "devDependencies": { diff --git a/slices/navigation.js b/slices/navigation.js deleted file mode 100644 index babdb03..0000000 --- a/slices/navigation.js +++ /dev/null @@ -1,31 +0,0 @@ -import { createSlice } from 'redux-starter-kit' -import { pages } from '../components/pages' - -const navigationSlice = createSlice({ - slice: 'navigation', - initialState: { - currentPage: 'Home', - }, - reducers: { - navigate: (_state, action) => { - return { - currentPage: action.payload, - } - }, - goBack: ({ currentPage }) => { - const page = pages.find((p) => p.component === currentPage) - return { - currentPage: page.parent, - } - }, - }, -}) - -// Extract the action creators object and the reducer -const { actions, reducer, selectors } = navigationSlice -// Extract and export each action creator by name -export const { navigate, goBack } = actions - -export const { getNavigation } = selectors - -export default reducer diff --git a/store.js b/store.js deleted file mode 100644 index 8471dd9..0000000 --- a/store.js +++ /dev/null @@ -1,11 +0,0 @@ -import { combineReducers, createStore } from 'redux' - -import navigation from './slices/navigation' - -const reducer = combineReducers({ - navigation, -}) - -const store = createStore(reducer) - -export default store diff --git a/yarn.lock b/yarn.lock index d5314e3..9762444 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1078,7 +1078,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.14.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.14.5", "@babel/runtime@^7.8.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== @@ -2960,11 +2960,6 @@ csvtojson@^2.0.8: lodash "^4.17.3" strip-bom "^2.0.0" -curriable@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/curriable/-/curriable-1.3.0.tgz#cb054bc7bbc1f440cbc613527b8a05b57e19e1ab" - integrity sha512-7kfjDPRSF+pguU0TlfSFBMCd8XlmF29ZAiXcq/zaN4LhZvWdvV0Y72AvaWFqInXZG9Yg1kA1UMkpE9lFBKMpQA== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3626,11 +3621,6 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-equals@^1.2.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-1.6.3.tgz#84839a1ce20627c463e1892f2ae316380c81b459" - integrity sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ== - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4125,7 +4115,7 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: +hoist-non-react-statics@^3.3.1: 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== @@ -4215,13 +4205,6 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -identitate@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/identitate/-/identitate-1.0.1.tgz#4b8bed39454f1d7a476e60ff0e4f82a094841dfc" - integrity sha512-xnDJ0JYhiZjBDuJRKbHoVzj5yP9FhATxLyUYswQyPdnJrwzGVBqS6DOmvKJi1lk7P+4dkL+hhUhuOZIcOUtG5A== - dependencies: - pathington "^1.0.1" - ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -4242,11 +4225,6 @@ image-size@^0.6.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== -immer@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/immer/-/immer-2.1.5.tgz#0389947455c5a2c7a47f1e6f415c9d1a62a1ebed" - integrity sha512-xyjQyTBYIeiz6jd02Hg12jV+9QISwF1crLcwTlzHpWH4e0ryNWj1kacpTwimK3bJV5NKKXw458G2vpqoB/inFA== - immutable@^4.0.0-rc.12: version "4.1.0" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" @@ -4313,7 +4291,7 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -invariant@^2.1.0, invariant@^2.2.4: +invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -5283,7 +5261,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -6553,11 +6531,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -pathington@^1.0.1, pathington@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/pathington/-/pathington-1.1.7.tgz#caf2d2db899a31fea4e81e3657af6acde5171903" - integrity sha512-JxzhUzagDfNIOm4qqwQqP3rWeo7rNNOfIahy4n+3GTEdwXLqw5cJHUR0soSopQtNEv763lzxb6eA2xBllpR8zw== - pbxproj-dom@^1.0.11: version "1.2.0" resolved "https://registry.yarnpkg.com/pbxproj-dom/-/pbxproj-dom-1.2.0.tgz#1cf4101163bd666eba9eb92a5b8f616ce824ea85" @@ -6801,7 +6774,7 @@ react-i18next@^11.18.3: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.2: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -6961,18 +6934,6 @@ react-native@0.65.2: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-redux@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.1.tgz#0d423e2c1cb10ada87293d47e7de7c329623ba4d" - integrity sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ== - dependencies: - "@babel/runtime" "^7.3.1" - hoist-non-react-statics "^3.3.0" - invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.8.2" - react-refresh@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" @@ -7067,43 +7028,6 @@ recyclerlistview@^3.0.5: prop-types "15.5.8" ts-object-utils "0.0.5" -redux-devtools-extension@^2.13.8: - version "2.13.9" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" - integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== - -redux-immutable-state-invariant@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz#308fd3cc7415a0e7f11f51ec997b6379c7055ce1" - integrity sha512-3czbDKs35FwiBRsx/3KabUk5zSOoTXC+cgVofGkpBNv3jQcqIe5JrHcF5AmVt7B/4hyJ8MijBIpCJ8cife6yJg== - dependencies: - invariant "^2.1.0" - json-stringify-safe "^5.0.1" - -redux-starter-kit@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/redux-starter-kit/-/redux-starter-kit-0.6.3.tgz#bafde49b8ff35dff0f4f43700d7ed9973754c96e" - integrity sha512-A+7UjgmFrWdKksHl8xTGxDw6Bv8QJ+wrTubBscFNs5gIezGHOdwjqTTSVX4xMgQkgPtVfSPj/Bo+5o6f71/eTA== - dependencies: - immer "^2.1.5" - redux "^4.0.0" - redux-devtools-extension "^2.13.8" - redux-immutable-state-invariant "^2.1.0" - redux-thunk "^2.2.0" - selectorator "^4.0.3" - -redux-thunk@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== - -redux@^4.0.0, redux@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47" - integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw== - dependencies: - "@babel/runtime" "^7.9.2" - regenerate-unicode-properties@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" @@ -7284,11 +7208,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -7431,16 +7350,6 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -selectorator@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/selectorator/-/selectorator-4.0.3.tgz#d33b11027da7e6838de277cd6eb1134125aa788b" - integrity sha512-A8+paRhzTab4Qm/38RAVnCgEZFbpn5xIWLyTCDqvyU3Obhmo94RS6UK1H00bVH7+U609sOhqbFJha09POsWURA== - dependencies: - fast-equals "^1.2.1" - identitate "^1.0.0" - reselect "^4.0.0" - unchanged "^2.0.1" - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -8302,14 +8211,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unchanged@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/unchanged/-/unchanged-2.2.1.tgz#426f8b3c3b98a95a4acc801b0ba67babaabe1bec" - integrity sha512-pMlMNfqtfjOVpDAKVBH+LjnhnTwWYUrJq9fU3nGRYrw6JnprJEH1/cehJikRTf+o6dmkpX5XRRspb5mUAhxeZQ== - dependencies: - curriable "^1.3.0" - pathington "^1.1.7" - unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"