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" + ] +}