diff --git a/package-lock.json b/package-lock.json
index 750da3f..8ef1a2c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2162,6 +2162,18 @@
"@types/react": "*"
}
},
+ "@types/react-redux": {
+ "version": "7.1.12",
+ "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.12.tgz",
+ "integrity": "sha512-xZj4/8oRZP5RlJPlC5XPnawPtMn+T2bV4Hxi38AcuoZzXlN/Il/ZPfgXuIq3WG37wVL6FP7suVfmE4BopuqtTg==",
+ "dev": true,
+ "requires": {
+ "@types/hoist-non-react-statics": "^3.3.0",
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0",
+ "redux": "^4.0.0"
+ }
+ },
"@types/react-router": {
"version": "5.1.8",
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.8.tgz",
@@ -3432,6 +3444,15 @@
"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
"optional": true
},
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -6298,6 +6319,12 @@
}
}
},
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
"filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
@@ -7339,9 +7366,9 @@
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
},
"immer": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.9.tgz",
- "integrity": "sha512-Vs/gxoM4DqNAYR7pugIxi0Xc8XAun/uy7AQu4fLLqaTBHxjOP9pJ266Q9MWA/ly4z6rAFZbvViOtihxUZ7O28A=="
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.0.tgz",
+ "integrity": "sha512-jm87NNBAIG4fHwouilCHIecFXp5rMGkiFrAuhVO685UnMAlOneEAnOyzPt8OnP47TC11q/E7vpzZe0WvwepFTg=="
},
"import-cwd": {
"version": "2.1.0",
@@ -9354,6 +9381,12 @@
"resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
"integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
},
+ "nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "optional": true
+ },
"nanoid": {
"version": "3.1.18",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.18.tgz",
@@ -11559,6 +11592,11 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
},
+ "immer": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.9.tgz",
+ "integrity": "sha512-Vs/gxoM4DqNAYR7pugIxi0Xc8XAun/uy7AQu4fLLqaTBHxjOP9pJ266Q9MWA/ly4z6rAFZbvViOtihxUZ7O28A=="
+ },
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -11872,6 +11910,17 @@
"symbol-observable": "^1.2.0"
}
},
+ "redux-devtools-extension": {
+ "version": "2.13.8",
+ "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz",
+ "integrity": "sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg==",
+ "dev": true
+ },
+ "redux-thunk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+ "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+ },
"regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -14548,7 +14597,11 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "optional": true
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
},
"glob-parent": {
"version": "3.1.0",
@@ -15129,7 +15182,11 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "optional": true
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
},
"glob-parent": {
"version": "3.1.0",
diff --git a/package.json b/package.json
index 3d66da8..a7fa733 100644
--- a/package.json
+++ b/package.json
@@ -12,12 +12,14 @@
"@types/react-router-dom": "^5.1.6",
"@types/styled-components": "^5.1.4",
"bootstrap": "^4.5.3",
+ "immer": "^8.0.0",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-redux": "^7.2.2",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.1",
"redux": "^4.0.5",
+ "redux-thunk": "^2.3.0",
"styled-components": "^5.2.1",
"typescript": "^4.0.3",
"web-vitals": "^0.2.4"
@@ -47,6 +49,8 @@
]
},
"devDependencies": {
- "@types/react": "^16.14.1"
+ "@types/react": "^16.14.1",
+ "@types/react-redux": "^7.1.12",
+ "redux-devtools-extension": "^2.13.8"
}
}
diff --git a/src/components/CreateTask.tsx b/src/components/CreateTask.tsx
index 0ed1152..7afeea9 100644
--- a/src/components/CreateTask.tsx
+++ b/src/components/CreateTask.tsx
@@ -38,7 +38,7 @@ const CreateTask = () => {
diff --git a/src/index.tsx b/src/index.tsx
index a927631..b914d6c 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -4,13 +4,29 @@ import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
+import { Provider } from "react-redux";
+import { createStore, applyMiddleware, compose } from "redux";
+import reducer from "./store/reducers/reducer";
+import { composeWithDevTools } from "redux-devtools-extension";
+import thunk from "redux-thunk";
+
+const store = createStore(
+ reducer,
+ compose(
+ applyMiddleware(thunk),
+ (window as any).__REDUX_DEVTOOLS_EXTENSION__ &&
+ (window as any).__REDUX_DEVTOOLS_EXTENSION__()
+ )
+);
ReactDOM.render(
-
-
-
-
- ,
+
+
+
+
+
+
+ ,
document.getElementById("root")
);
diff --git a/src/store/actions/actionTypes.ts b/src/store/actions/actionTypes.ts
new file mode 100644
index 0000000..d4b7d2a
--- /dev/null
+++ b/src/store/actions/actionTypes.ts
@@ -0,0 +1,3 @@
+export const ADD_TODO = 'ADD_TODO';
+export const DELETE_TODO = 'DELETE_TODO';
+export const LOAD_TODOS = 'LOAD_TODOS';
\ No newline at end of file
diff --git a/src/store/actions/actions.ts b/src/store/actions/actions.ts
new file mode 100644
index 0000000..7677926
--- /dev/null
+++ b/src/store/actions/actions.ts
@@ -0,0 +1,5 @@
+export const loadToDos = ()=>{
+ return dispatch =>{
+
+ }
+}
\ No newline at end of file
diff --git a/src/store/actions/index.ts b/src/store/actions/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/store/reducers/reducer.ts b/src/store/reducers/reducer.ts
new file mode 100644
index 0000000..950dd46
--- /dev/null
+++ b/src/store/reducers/reducer.ts
@@ -0,0 +1,24 @@
+import * as actionType from "../actions/actionTypes";
+import produce from "immer"
+
+const initialState = {
+ isLoading: true,
+ todos: [],
+ isAuth: false,
+};
+
+interface ActionType{
+ type:string
+}
+
+const reducer = (state = initialState, action:ActionType) => {
+ switch (action.type) {
+ case actionType.LOAD_TODOS: {
+ return state;
+ }
+ default:
+ return state;
+ }
+};
+
+export default reducer;
diff --git a/tsconfig.json b/tsconfig.json
index 5e598e8..a273b0c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,26 +1,26 @@
-{
- "compilerOptions": {
- "target": "es5",
- "lib": [
- "dom",
- "dom.iterable",
- "esnext"
- ],
- "allowJs": true,
- "skipLibCheck": true,
- "esModuleInterop": true,
- "allowSyntheticDefaultImports": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noFallthroughCasesInSwitch": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react"
- },
- "include": [
- "src"
- ]
-}
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noFallthroughCasesInSwitch": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx"
+ },
+ "include": [
+ "src"
+ ]
+}