Commit 5933a054 authored by Simen Kristoffersen's avatar Simen Kristoffersen
Browse files

#6 - Implementert api-caller

parent e82f78e8
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { StatusBar } from "expo-status-bar";
import React from "react";
import { SafeAreaProvider } from "react-native-safe-area-context";
import { Provider } from "react-redux";
import { persistStore } from "redux-persist";
import { PersistGate } from "redux-persist/integration/react";
import useCachedResources from './hooks/useCachedResources';
import useColorScheme from './hooks/useColorScheme';
import Navigation from './navigation';
import useCachedResources from "./hooks/useCachedResources";
import useColorScheme from "./hooks/useColorScheme";
import Navigation from "./navigation";
import configureStore from "./store";
// Setup Redux store
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const initialState = (window as any).initialReduxState;
const store = configureStore(initialState);
const persistor = persistStore(store);
export default function App() {
const isLoadingComplete = useCachedResources();
......@@ -15,8 +25,12 @@ export default function App() {
} else {
return (
<SafeAreaProvider>
<Navigation colorScheme={colorScheme} />
<StatusBar />
<Provider store={store}>
<PersistGate persistor={persistor}>
<Navigation colorScheme={colorScheme} />
<StatusBar />
</PersistGate>
</Provider>
</SafeAreaProvider>
);
}
......
export enum Genre {
ACTION = "Action",
COMEDY = "Comedy",
DRAMA = "Drama",
FANTASY = "Fantasy",
HORROR = "Horror",
MYSTERY = "Mystery",
ROMANCE = "Romance",
THRILLER = "Thriller",
WESTERN = "Western",
SCI_FI = "Science Fiction",
ADVENTURE = "Adventure",
}
export interface Pagination {
current: number;
pageSize: number;
total: number;
}
export interface Sort {
sortColumn: string;
sortOrder: SortOrder;
}
export enum SortOrder {
ASC = "asc",
DESC = "desc",
}
export interface Rating {
userId: string;
rating: number;
comment: string;
date: string;
username: string;
}
export interface MovieDetail {
id: string;
title: string;
year: number;
runtime: number;
plot: string;
poster: string;
avgRating: number;
genres: string[];
actors: string[];
ratings: Rating[];
}
import * as React from 'react';
import { StyleSheet } from 'react-native';
import * as React from "react";
import { StyleSheet } from "react-native";
import EditScreenInfo from '../components/EditScreenInfo';
import { Text, View } from '../components/Themed';
import { RootTabScreenProps } from '../types';
import EditScreenInfo from "../components/EditScreenInfo";
import { Text, View } from "../components/Themed";
import { RootTabScreenProps } from "../types";
export default function TabOneScreen({ navigation }: RootTabScreenProps<'TabOne'>) {
export default function TabOneScreen({
navigation,
}: RootTabScreenProps<"TabOne">) {
return (
<View style={styles.container}>
<Text style={styles.title}>Tab One</Text>
<View style={styles.separator} lightColor="#eee" darkColor="rgba(255,255,255,0.1)" />
<View
style={styles.separator}
lightColor="#eee"
darkColor="rgba(255,255,255,0.1)"
/>
<EditScreenInfo path="/screens/TabOneScreen.tsx" />
</View>
);
......@@ -18,16 +24,16 @@ export default function TabOneScreen({ navigation }: RootTabScreenProps<'TabOne'
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
alignItems: "center",
justifyContent: "center",
},
title: {
fontSize: 20,
fontWeight: 'bold',
fontWeight: "bold",
},
separator: {
marginVertical: 30,
height: 1,
width: '80%',
width: "80%",
},
});
import { all, call, fork, put, takeEvery } from 'redux-saga/effects';
import Swal from 'sweetalert2';
import { apiCaller } from '../../../utils';
import { ApolloClientAction } from '../../interface';
import { saveToken } from './helpers';
import { AuthActionTypes } from './types';
import { all, call, fork, put, takeEvery } from "redux-saga/effects";
import { apiCaller } from "../../../utils";
import { ApolloClientAction } from "../../interface";
import { saveToken } from "./helpers";
import { AuthActionTypes } from "./types";
function* handleSignIn(params: ApolloClientAction): Generator {
try {
const { login }: any = yield call(apiCaller, params.meta.query, params.payload);
const { login }: any = yield call(
apiCaller,
params.meta.query,
params.payload
);
yield saveToken(login.token);
yield put({ type: AuthActionTypes.SIGN_IN.SUCCESS, payload: login });
} catch (err) {
......@@ -20,7 +22,7 @@ function* handleSignIn(params: ApolloClientAction): Generator {
} else {
yield put({
type: AuthActionTypes.SIGN_IN.ERROR,
payload: 'An unknown error occured.',
payload: "An unknown error occured.",
});
}
}
......@@ -28,7 +30,11 @@ function* handleSignIn(params: ApolloClientAction): Generator {
function* handleSignUp(params: ApolloClientAction): Generator {
try {
const { signup }: any = yield call(apiCaller, params.meta.query, params.payload);
const { signup }: any = yield call(
apiCaller,
params.meta.query,
params.payload
);
yield saveToken(signup.token);
yield put({ type: AuthActionTypes.SIGN_UP.SUCCESS, payload: signup });
} catch (err) {
......@@ -40,7 +46,7 @@ function* handleSignUp(params: ApolloClientAction): Generator {
} else {
yield put({
type: AuthActionTypes.SIGN_UP.ERROR,
payload: 'An unknown error occured.',
payload: "An unknown error occured.",
});
}
}
......@@ -48,8 +54,15 @@ function* handleSignUp(params: ApolloClientAction): Generator {
function* handleGetRatings(params: ApolloClientAction): Generator {
try {
const { getUserRatings }: any = yield call(apiCaller, params.meta.query, params.payload);
yield put({ type: AuthActionTypes.GET_RATINGS.SUCCESS, payload: getUserRatings });
const { getUserRatings }: any = yield call(
apiCaller,
params.meta.query,
params.payload
);
yield put({
type: AuthActionTypes.GET_RATINGS.SUCCESS,
payload: getUserRatings,
});
} catch (err) {
if (err instanceof Error) {
yield put({
......@@ -59,7 +72,7 @@ function* handleGetRatings(params: ApolloClientAction): Generator {
} else {
yield put({
type: AuthActionTypes.GET_RATINGS.ERROR,
payload: 'An unknown error occured.',
payload: "An unknown error occured.",
});
}
}
......@@ -67,14 +80,15 @@ function* handleGetRatings(params: ApolloClientAction): Generator {
function* handleRateMovie(params: ApolloClientAction): Generator {
try {
const { giveRating }: any = yield call(apiCaller, params.meta.query, params.payload);
yield put({ type: AuthActionTypes.RATE_MOVIE.SUCCESS, payload: giveRating });
yield Swal.fire({
title: 'Thank you!',
text: 'Your rating is registered',
icon: 'success',
confirmButtonText: 'Ok',
}).then(() => window.location.reload());
const { giveRating }: any = yield call(
apiCaller,
params.meta.query,
params.payload
);
yield put({
type: AuthActionTypes.RATE_MOVIE.SUCCESS,
payload: giveRating,
});
} catch (err) {
if (err instanceof Error) {
yield put({
......@@ -84,15 +98,9 @@ function* handleRateMovie(params: ApolloClientAction): Generator {
} else {
yield put({
type: AuthActionTypes.RATE_MOVIE.ERROR,
payload: 'An unknown error occured.',
payload: "An unknown error occured.",
});
}
yield Swal.fire({
title: 'Something went wrong!',
text: 'Could not register your rating',
icon: 'error',
confirmButtonText: 'Ok',
});
}
}
......
import { Genre } from '../../../models/movieData.model';
import { generateAsyncAction } from '../../../utils';
import { BaseState, Entity } from '../../interface';
import { UserEntity } from '../auth/types';
import { Genre } from "../../../models/movieData.model";
import { generateAsyncAction } from "../../../utils";
import { BaseState, Entity } from "../../interface";
import { UserEntity } from "../auth/types";
export interface MovieInformation {
year: number;
......@@ -38,7 +38,7 @@ export type MovieRating = {
rating: number;
comment: string;
date: string;
user: Omit<UserEntity, 'email'>;
user: Omit<UserEntity, "email">;
};
export interface FullMovieEntity {
movie: ExtendedMovieEntity;
......@@ -51,9 +51,9 @@ export interface MovieState extends BaseState<MovieEntity> {
}
export const MovieActionTypes = {
FETCH: generateAsyncAction('@@movies.FETCH'),
FETCH_BY_ID: generateAsyncAction('@@movies.FETCH_BY_ID'),
CLEAR_MOVIE: '@@movies.CLEAR_MOVIE',
FETCH: generateAsyncAction("@@movies.FETCH"),
FETCH_BY_ID: generateAsyncAction("@@movies.FETCH_BY_ID"),
CLEAR_MOVIE: "@@movies.CLEAR_MOVIE",
};
export type FilterInterval<T> = {
......
import { ApolloClient, DocumentNode, InMemoryCache } from "@apollo/client";
const client = new ApolloClient({
uri: "http://it2810-05.idi.ntnu.no:5000/graphql",
cache: new InMemoryCache(),
});
export const apiCaller = (
query: DocumentNode,
variables: Record<string, unknown>
) => {
return client.mutate({ mutation: query, variables }).then((res) => res.data);
};
import { AsyncActionType } from "../store/interface";
/**
* Generates async states for redux actions
* @param name the name of the action
* @returns {AsyncActionType} aync action states
*/
export const generateAsyncAction = (name: string): AsyncActionType => ({
START: `${name}.START`,
SUCCESS: `${name}.SUCCESS`,
ERROR: `${name}.ERROR`,
});
export * from "./apiCaller";
export * from "./generateAsyncAction";
......@@ -25,6 +25,24 @@
tslint "^6.1.3"
utility-types "^3.10.0"
"@apollo/client@^3.4.17":
version "3.4.17"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.4.17.tgz#4972e19a49809e16d17c5adc67f45623a6dac135"
integrity sha512-MDt2rwMX1GqodiVEKJqmDmAz8xr0qJmq5PdWeIt0yDaT4GOkKYWZiWkyfhfv3raTk8PyJvbsNG9q2CqmUrlGfg==
dependencies:
"@graphql-typed-document-node/core" "^3.0.0"
"@wry/context" "^0.6.0"
"@wry/equality" "^0.5.0"
"@wry/trie" "^0.3.0"
graphql-tag "^2.12.3"
hoist-non-react-statics "^3.3.2"
optimism "^0.16.1"
prop-types "^15.7.2"
symbol-observable "^4.0.0"
ts-invariant "^0.9.0"
tslib "^2.3.0"
zen-observable-ts "~1.1.0"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0":
version "7.16.0"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
......@@ -1030,7 +1048,7 @@
pirates "^4.0.0"
source-map-support "^0.5.16"
"@babel/runtime@^7.14.0", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
......@@ -1274,6 +1292,11 @@
lodash.pick "^4.4.0"
lodash.template "^4.5.0"
"@graphql-typed-document-node/core@^3.0.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950"
integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg==
"@hapi/hoek@^9.0.0":
version "9.2.1"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17"
......@@ -1847,6 +1870,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.3"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
......@@ -1866,6 +1897,11 @@
dependencies:
"@types/istanbul-lib-report" "*"
"@types/js-cookie@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.0.tgz#6dcc3ab167251ace6964310789d8ea80f732a82c"
integrity sha512-GDVwSzwBm4OdQajFCit2UMxskZVcOhs/hYeOvzVW1R+iW6ZOVIBgD+RSrYCtPT0pNBnwNgRaoPPKfoXcwDo+hg==
"@types/node@*":
version "16.11.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42"
......@@ -1893,6 +1929,16 @@
dependencies:
"@types/react" "*"
"@types/react-redux@^7.1.20":
version "7.1.20"
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df"
integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==
dependencies:
"@types/hoist-non-react-statics" "^3.3.0"
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
redux "^4.0.0"
"@types/react@*", "@types/react@~17.0.21":
version "17.0.34"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.34.tgz#797b66d359b692e3f19991b6b07e4b0c706c0102"
......@@ -1902,6 +1948,13 @@
"@types/scheduler" "*"
csstype "^3.0.2"
"@types/redux-logger@^3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@types/redux-logger/-/redux-logger-3.0.9.tgz#9193b3d51bb6ab98d25514ba7764e4f98a64d3ec"
integrity sha512-cwYhVbYNgH01aepeMwhd0ABX6fhVB2rcQ9m80u8Fl50ZODhsZ8RhQArnLTkE7/Zrfq4Sz/taNoF7DQy9pCZSKg==
dependencies:
redux "^4.0.0"
"@types/scheduler@*":
version "0.16.2"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
......@@ -1936,11 +1989,18 @@
dependencies:
"@types/yargs-parser" "*"
"@types/zen-observable@^0.8.0":
"@types/zen-observable@0.8.3", "@types/zen-observable@^0.8.0":
version "0.8.3"
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
"@wry/context@^0.6.0":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.1.tgz#c3c29c0ad622adb00f6a53303c4f965ee06ebeb2"
integrity sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==
dependencies:
tslib "^2.3.0"
"@wry/equality@^0.1.2":
version "0.1.11"
resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790"
......@@ -1948,6 +2008,20 @@
dependencies:
tslib "^1.9.3"
"@wry/equality@^0.5.0":
version "0.5.2"
resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73"
integrity sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA==
dependencies:
tslib "^2.3.0"
"@wry/trie@^0.3.0":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.1.tgz#2279b790f15032f8bcea7fc944d27988e5b3b139"
integrity sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw==
dependencies:
tslib "^2.3.0"
"@xmldom/xmldom@~0.7.0":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d"
......@@ -3791,6 +3865,13 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6,
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
graphql-tag@^2.12.3:
version "2.12.6"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1"
integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==
dependencies:
tslib "^2.1.0"
graphql@^16.0.1:
version "16.0.1"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.0.1.tgz#93a13cd4e0e38ca8d0832e79614c8578bfd34f10"
......@@ -3866,6 +3947,13 @@ 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.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==
dependencies:
react-is "^16.7.0"
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
......@@ -4742,6 +4830,11 @@ joi@^17.2.1:
"@sideway/formula" "^3.0.0"
"@sideway/pinpoint" "^2.0.0"
js-cookie@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
......@@ -4885,6 +4978,11 @@ jsonify@~0.0.0:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
jwt-decode@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59"
integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
......@@ -5825,6 +5923,14 @@ open@^6.2.0:
dependencies:
is-wsl "^1.1.0"
optimism@^0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d"
integrity sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg==
dependencies:
"@wry/context" "^0.6.0"
"@wry/trie" "^0.3.0"
optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
......@@ -6197,7 +6303,7 @@ react-dom@17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-is@^16.13.0, react-is@^16.8.1:
react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
......@@ -6287,6 +6393,18 @@ react-native@0.64.3:
whatwg-fetch "^3.0.0"
ws "^6.1.4"
react-redux@^7.2.6:
version "7.2.6"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa"
integrity sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==
dependencies:
"@babel/runtime" "^7.15.4"
"@types/react-redux" "^7.1.20"
hoist-non-react-statics "^3.3.2"
loose-envify "^1.4.0"
prop-types "^15.7.2"
react-is "^17.0.2"
react-refresh@^0.4.0:
version "0.4.3"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53"
......@@ -6374,6 +6492,11 @@ redux-logger@^3.0.6:
dependencies:
deep-diff "^0.3.5"
redux-persist@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8"
integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==
redux-saga@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112"
......@@ -6381,7 +6504,12 @@ redux-saga@^1.1.3:
dependencies:
"@redux-saga/core" "^1.1.3"
redux@^4.0.4, redux@^4.1.2:
redux-thunk@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.0.tgz#ac89e1d6b9bdb9ee49ce69a69071be41bbd82d67"
integrity sha512-/y6ZKQNU/0u8Bm7ROLq9Pt/7lU93cT0IucYMrubo89ENjxPa7i8pqLKu6V4X7/TvYovQ6x01unTeyeZ9lgXiTA==
redux@^4.0.0, redux@^4.0.4, redux@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104"
integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==
......@@ -7095,6 +7223,11 @@ symbol-observable@^1.0.2:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
symbol-observable@^4.0.0: