Browse Source

git merge Sveta -dev

Svetlana 6 years ago
parent
commit
26f7588f0b
32 changed files with 624 additions and 101 deletions
  1. 68 68
      package-lock.json
  2. 2 1
      src/actions/auth/signIn/index.js
  3. 15 0
      src/actions/card/action-card.js
  4. 6 0
      src/actions/card/index.js
  5. 4 1
      src/actions/index.js
  6. 16 0
      src/actions/userFields/changeEmail.js
  7. 16 0
      src/actions/userFields/changePassword.js
  8. 34 0
      src/components/common/input-form.js
  9. 3 2
      src/components/public-components/header/index.js
  10. 52 0
      src/components/user-components/profilePage/LoginFild/index.js
  11. 34 0
      src/components/user-components/profilePage/LoginFild/loginChangeForm/index.js
  12. 25 0
      src/components/user-components/profilePage/PasswordFields/PasswordChangeForm/index.js
  13. 24 0
      src/components/user-components/profilePage/PasswordFields/PasswordChangeForm/validate/index.js
  14. 52 0
      src/components/user-components/profilePage/PasswordFields/index.js
  15. 44 22
      src/components/user-components/profilePage/index.js
  16. 9 0
      src/constants/index.js
  17. 46 0
      src/containers/AuthPage/index.js
  18. 1 0
      src/containers/auth/SignInPage/index.js
  19. 1 0
      src/containers/header/index.js
  20. 18 0
      src/containers/new-card/add-card.js
  21. 27 0
      src/reducers/card-category/reduser-card.js
  22. 10 1
      src/reducers/index.js
  23. 7 0
      src/reducers/initialState/index.js
  24. 25 0
      src/reducers/userFields/changeEmail/index.js
  25. 25 0
      src/reducers/userFields/changePassword/index.js
  26. 1 0
      src/router.js
  27. 3 3
      src/saga/auth/signIn/index.js
  28. 8 1
      src/saga/index.js
  29. 18 0
      src/saga/userFields/changeEmail/index.js
  30. 18 0
      src/saga/userFields/changePassword/index.js
  31. 11 0
      src/saga/userFields/index.js
  32. 1 2
      src/state/index.js

+ 68 - 68
package-lock.json

@@ -1363,7 +1363,7 @@
     },
     "ansi-escapes": {
       "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+      "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
       "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
     },
     "ansi-html": {
@@ -1710,7 +1710,7 @@
     },
     "array-equal": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
       "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
     },
     "array-filter": {
@@ -1817,7 +1817,7 @@
         },
         "util": {
           "version": "0.10.3",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
           "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
           "requires": {
             "inherits": "2.0.1"
@@ -1980,7 +1980,7 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "requires": {
             "ansi-styles": "^2.2.1",
@@ -2045,7 +2045,7 @@
       "dependencies": {
         "jsesc": {
           "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
           "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
         }
       }
@@ -2097,7 +2097,7 @@
     },
     "babel-plugin-istanbul": {
       "version": "4.1.6",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+      "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
       "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
       "requires": {
         "babel-plugin-syntax-object-rest-spread": "^6.13.0",
@@ -2127,7 +2127,7 @@
     },
     "babel-plugin-syntax-object-rest-spread": {
       "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
       "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
     },
     "babel-plugin-transform-object-rest-spread": {
@@ -2637,14 +2637,14 @@
       "dependencies": {
         "resolve": {
           "version": "1.1.7",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+          "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
           "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
         }
       }
     },
     "browserify-aes": {
       "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "requires": {
         "buffer-xor": "^1.0.3",
@@ -2678,7 +2678,7 @@
     },
     "browserify-rsa": {
       "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
       "requires": {
         "bn.js": "^4.1.0",
@@ -2727,7 +2727,7 @@
     },
     "buffer": {
       "version": "4.9.1",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
       "requires": {
         "base64-js": "^1.0.2",
@@ -2853,7 +2853,7 @@
     },
     "callsites": {
       "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
       "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
     },
     "camel-case": {
@@ -3151,7 +3151,7 @@
     },
     "clone-deep": {
       "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
+      "resolved": "http://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
       "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
       "requires": {
         "for-own": "^0.1.3",
@@ -3223,7 +3223,7 @@
     },
     "colors": {
       "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+      "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
       "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
     },
     "colour": {
@@ -3423,7 +3423,7 @@
     },
     "create-hash": {
       "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "requires": {
         "cipher-base": "^1.0.1",
@@ -3435,7 +3435,7 @@
     },
     "create-hmac": {
       "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "requires": {
         "cipher-base": "^1.0.3",
@@ -3478,7 +3478,7 @@
     },
     "css-color-names": {
       "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+      "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
       "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
     },
     "css-declaration-sorter": {
@@ -3582,12 +3582,12 @@
       "dependencies": {
         "jsesc": {
           "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
           "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
         },
         "regexpu-core": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+          "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
           "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
           "requires": {
             "regenerate": "^1.2.1",
@@ -3597,12 +3597,12 @@
         },
         "regjsgen": {
           "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
           "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
         },
         "regjsparser": {
           "version": "0.1.5",
-          "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+          "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
           "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
           "requires": {
             "jsesc": "~0.5.0"
@@ -4054,7 +4054,7 @@
       "dependencies": {
         "globby": {
           "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
           "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
           "requires": {
             "array-union": "^1.0.1",
@@ -4066,7 +4066,7 @@
           "dependencies": {
             "pify": {
               "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
               "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
             }
           }
@@ -4156,7 +4156,7 @@
     },
     "diffie-hellman": {
       "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "requires": {
         "bn.js": "^4.1.0",
@@ -4237,7 +4237,7 @@
       "dependencies": {
         "domelementtype": {
           "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
           "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
         }
       }
@@ -4302,7 +4302,7 @@
     },
     "duplexer": {
       "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
       "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
     },
     "duplexify": {
@@ -4679,7 +4679,7 @@
         },
         "doctrine": {
           "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+          "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
           "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
           "requires": {
             "esutils": "^2.0.2",
@@ -4688,7 +4688,7 @@
         },
         "load-json-file": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
           "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
           "requires": {
             "graceful-fs": "^4.1.2",
@@ -4843,7 +4843,7 @@
     },
     "events": {
       "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+      "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
       "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
     },
     "eventsource": {
@@ -4912,7 +4912,7 @@
     },
     "expand-range": {
       "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
       "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
       "requires": {
         "fill-range": "^2.1.0"
@@ -4978,7 +4978,7 @@
       "dependencies": {
         "array-flatten": {
           "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+          "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
           "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
         },
         "debug": {
@@ -5456,7 +5456,7 @@
     },
     "finalhandler": {
       "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+      "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
       "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
       "requires": {
         "debug": "2.6.9",
@@ -6461,7 +6461,7 @@
     },
     "get-stream": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
       "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
     },
     "get-value": {
@@ -6541,7 +6541,7 @@
     },
     "globby": {
       "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+      "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
       "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
       "requires": {
         "array-union": "^1.0.1",
@@ -7247,7 +7247,7 @@
     },
     "hoek": {
       "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+      "resolved": "http://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
       "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
     },
     "hoist-non-react-statics": {
@@ -7361,7 +7361,7 @@
     },
     "htmlparser2": {
       "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
+      "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
       "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
       "requires": {
         "domelementtype": "1",
@@ -7385,7 +7385,7 @@
         },
         "readable-stream": {
           "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
           "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
           "requires": {
             "core-util-is": "~1.0.0",
@@ -7396,7 +7396,7 @@
         },
         "string_decoder": {
           "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
           "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
         }
       }
@@ -7408,7 +7408,7 @@
     },
     "http-errors": {
       "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
       "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
       "requires": {
         "depd": "~1.1.2",
@@ -7434,7 +7434,7 @@
     },
     "http-proxy-middleware": {
       "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
+      "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
       "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==",
       "requires": {
         "http-proxy": "^1.16.2",
@@ -8090,7 +8090,7 @@
     },
     "is-obj": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
       "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
     },
     "is-path-cwd": {
@@ -8593,7 +8593,7 @@
     },
     "jest-get-type": {
       "version": "22.4.3",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+      "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
       "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w=="
     },
     "jest-haste-map": {
@@ -9404,7 +9404,7 @@
     },
     "media-typer": {
       "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
     },
     "mem": {
@@ -10215,7 +10215,7 @@
     },
     "p-is-promise": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+      "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
       "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4="
     },
     "p-limit": {
@@ -10269,7 +10269,7 @@
     },
     "parse-asn1": {
       "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+      "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "requires": {
         "asn1.js": "^4.0.0",
@@ -10321,7 +10321,7 @@
     },
     "path-browserify": {
       "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
       "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
     },
     "path-dirname": {
@@ -10447,7 +10447,7 @@
       "dependencies": {
         "async": {
           "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
           "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
         },
         "debug": {
@@ -13909,7 +13909,7 @@
     },
     "pretty-bytes": {
       "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+      "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
       "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk="
     },
     "pretty-error": {
@@ -15019,7 +15019,7 @@
       "dependencies": {
         "jsesc": {
           "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
           "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
         }
       }
@@ -15048,7 +15048,7 @@
       "dependencies": {
         "css-select": {
           "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
           "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
           "requires": {
             "boolbase": "~1.0.0",
@@ -15164,7 +15164,7 @@
     },
     "require-uncached": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
       "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
       "requires": {
         "caller-path": "^0.1.0",
@@ -15181,7 +15181,7 @@
         },
         "callsites": {
           "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
           "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
         },
         "resolve-from": {
@@ -15257,7 +15257,7 @@
     },
     "rgba-regex": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
       "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
     },
     "rimraf": {
@@ -15313,7 +15313,7 @@
     },
     "safe-regex": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "requires": {
         "ret": "~0.1.10"
@@ -15593,7 +15593,7 @@
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         },
         "ms": {
@@ -15943,7 +15943,7 @@
     },
     "sha.js": {
       "version": "2.4.11",
-      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "requires": {
         "inherits": "^2.0.1",
@@ -15963,7 +15963,7 @@
       "dependencies": {
         "kind-of": {
           "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+          "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
           "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
           "requires": {
             "is-buffer": "^1.0.2"
@@ -16305,7 +16305,7 @@
     },
     "sprintf-js": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
     },
     "sshpk": {
@@ -16381,7 +16381,7 @@
     },
     "stream-browserify": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+      "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
       "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
       "requires": {
         "inherits": "~2.0.1",
@@ -16507,7 +16507,7 @@
     },
     "strip-eof": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
       "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
     },
     "strip-indent": {
@@ -16649,7 +16649,7 @@
     },
     "table": {
       "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
+      "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz",
       "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
       "requires": {
         "ajv": "^6.0.1",
@@ -16808,7 +16808,7 @@
     },
     "through": {
       "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
     },
     "through2": {
@@ -16901,7 +16901,7 @@
     },
     "topo": {
       "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz",
+      "resolved": "http://registry.npmjs.org/topo/-/topo-2.0.2.tgz",
       "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=",
       "requires": {
         "hoek": "4.x.x"
@@ -16954,7 +16954,7 @@
     },
     "tty-browserify": {
       "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
     },
     "tunnel-agent": {
@@ -17030,7 +17030,7 @@
       "dependencies": {
         "cacache": {
           "version": "10.0.4",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+          "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
           "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
           "requires": {
             "bluebird": "^3.5.1",
@@ -17386,7 +17386,7 @@
     },
     "vm-browserify": {
       "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+      "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
       "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
       "requires": {
         "indexof": "0.0.1"
@@ -17437,7 +17437,7 @@
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         }
       }
@@ -18371,7 +18371,7 @@
     },
     "yargs": {
       "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+      "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
       "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
       "requires": {
         "cliui": "^4.0.0",

+ 2 - 1
src/actions/auth/signIn/index.js

@@ -15,4 +15,5 @@ export const signInRequestSucces = payload => ({
 export const signInRequestFailure = error => ({
     type: types.SIGN_IN_REQUEST_FAILURE,
     error
-})
+
+})

+ 15 - 0
src/actions/card/action-card.js

@@ -0,0 +1,15 @@
+import * as types from '../../constants';
+
+export const categoryRequest = () => ({
+    type: types.CATEGORY_URL_REQUEST
+})
+
+export const categoryRequestSucces = payload => ({
+    type: types.CATEGORY_URL_REQUEST_SUCCESS,
+    payload
+})
+
+export const categoryRequestFailure = error => ({
+    type: types.CATEGORY_URL_REQUEST_FAILURE,
+    error
+})

+ 6 - 0
src/actions/card/index.js

@@ -0,0 +1,6 @@
+import * as categoryActions from './action-card';
+
+
+export default {
+    ...categoryActions,
+}

+ 4 - 1
src/actions/index.js

@@ -1,5 +1,8 @@
+
 import authActions from './auth';
 
+
 export default {
-    ...authActions
+    ...authActions,
+    ...categoryActions
 }

+ 16 - 0
src/actions/userFields/changeEmail.js

@@ -0,0 +1,16 @@
+import * as types from '../../constants';
+
+export const userChangeRequest = payload => ({
+    type: types.USERS_CHANGE_REQUEST,
+    payload
+})
+
+export const userChangeRequestSucces = payload => ({
+    type: types.USERS_CHANGE_REQUEST_SUCCESS,
+    payload
+})
+
+export const userChangeRequestFailure = error => ({
+    type: types.USERS_CHANGE_REQUEST_FAILURE,
+    error
+})

+ 16 - 0
src/actions/userFields/changePassword.js

@@ -0,0 +1,16 @@
+import * as types from '../../constants';
+
+export const passwordChangeRequest = payload => ({
+    type: types.PASSWORD_CHANGE_REQUEST,
+    payload
+})
+
+export const passwordChangeRequestSucces = payload => ({
+    type: types.PASSWORD_CHANGE_REQUEST_SUCCESS,
+    payload
+})
+
+export const passwordChangeRequestFailure = error => ({
+    type: types.PASSWORD_CHANGE_REQUEST_FAILURE,
+    error
+})

+ 34 - 0
src/components/common/input-form.js

@@ -0,0 +1,34 @@
+import React, { Component } from "react";
+import { connect } from "react-redux";
+import { reduxForm, Field, FieldArray } from "redux-form";
+
+const renderField = ({ input, meta: { touched, error }, label, type }) => (
+	<div className="form__input-box">
+		<label className="form__input-lable" htmlFor="origin">
+			{label}
+			<input type={type} {...input} />
+		</label>
+		{touched && error && <span>{error}</span>}
+	</div>
+);
+
+class LoadForm extends Component {
+	
+	render() {
+		const { handleSubmit, title, pristine, submitting } = this.props;
+
+		return (
+			<form onSubmit={handleSubmit(this.submit)} className="form">
+				
+			</form>
+		);
+	}
+}
+
+const mapStateToProps = (state, props) => ({
+});
+
+const component = reduxForm({ })(LoadForm);
+
+export default connect(mapStateToProps)(component);
+

+ 3 - 2
src/components/public-components/header/index.js

@@ -32,9 +32,10 @@ export default class header extends Component {
                     <h1 className="header__logo">Test.<span className="header__logo--i-letter">i</span>o</h1>
                 </Link>
                 <hr className="header__logo--divider" />
-                <span className="header__toggle-trigger" onClick={this.handleToggle} >
+                {/* <span className="header__toggle-trigger" onClick={this.handleToggle} >
                     <span />
-                </span>
+                </span> */}
+                <button style={{ position: "absolute", top: '85px', left: 0 }} onClick={this.handleToggle}>HEADER TOGGLE</button>
                 <div className="header__flex-wrapper">
                     <nav className={`header__nav ${toggleStatus}`}>
                         <ul className="header__nav nav__list"  >

+ 52 - 0
src/components/user-components/profilePage/LoginFild/index.js

@@ -0,0 +1,52 @@
+import React from 'react';
+import { connect } from 'react-redux';
+import { Field } from 'redux-form';
+
+import ChangeLoginForm from './loginChangeForm';
+
+export default class ChangeLogin extends React.Component {
+
+    state = {
+        clicked: false,
+        newLogin: null
+    }
+
+    submit = ({ login }) => {
+        console.log('handleSubmit->submit', this.props)
+        const { actions: { userChangeRequest }, user: { data: { id } } } = this.props;
+
+        console.log('id', id);
+
+        userChangeRequest({
+            login,
+            id
+        })
+    }
+
+    handleClick = () => {
+        this.setState((prevState) => ({ clicked: !prevState.clicked }));
+    }
+
+    render() {
+        const { handleClick, submit } = this;
+        const { clicked } = this.state;
+        const { children } = this.props;
+
+        return (
+            !clicked
+                ?
+                (
+                    <React.Fragment>
+                        <div>{children}</div>
+                        <button onClick={handleClick}>Change Email</button>
+                    </React.Fragment>
+                )
+                : (
+                    <React.Fragment>
+                        <div>{children}</div>
+                        <ChangeLoginForm handlers={{ handleClick, submit }} />
+                    </React.Fragment>
+                )
+        )
+    }
+}

+ 34 - 0
src/components/user-components/profilePage/LoginFild/loginChangeForm/index.js

@@ -0,0 +1,34 @@
+import React from 'react';
+import { connect } from 'react-redux';
+import { Field, reduxForm } from 'redux-form';
+
+import formInput from '../../../../common/formInput';
+import validate from '../../../../public-components/auth/signUpForm/validate';
+
+class ChangeLoginForm extends React.Component {
+
+    render() {
+        const { children, handleSubmit, handlers: { handleClick, submit } } = this.props;
+        return (
+            <form onSubmit={handleSubmit(submit)} >
+                <Field name="login" type="email" placeholder="Enter new login" component={formInput} />
+                <button
+                    type="button"
+                    onClick={
+                        function() {
+                            handleClick();
+                            handleSubmit(submit)();
+                        }    
+                    }
+                >
+                    Change
+                </button>
+            </form >
+        )
+    }
+}
+
+export default reduxForm({
+    form: "changeLogin",
+    validate
+})(ChangeLoginForm);

+ 25 - 0
src/components/user-components/profilePage/PasswordFields/PasswordChangeForm/index.js

@@ -0,0 +1,25 @@
+import React from 'react';
+import { connect } from 'react-redux';
+import { Field, reduxForm } from 'redux-form';
+
+import formInput from '../../../../common/formInput';
+import validate from '../PasswordChangeForm/validate/index';
+
+class ChangePasswordForm extends React.Component {
+
+    render() {
+        const { children, handleSubmit, handlers: { handleClick, submit } } = this.props;
+        return (
+            <form onSubmit={handleSubmit(submit)} >
+                <Field name="passwordConfirmation" type="password" placeholder="Enter password" component={formInput} />
+                <Field name="password" type="password" placeholder="Enter new password" component={formInput} />
+                <button onClick={handleClick}>Change</button>
+            </form >
+        )
+    }
+}
+
+export default reduxForm({
+    form: "changePassword",
+    validate
+})(ChangePasswordForm);

+ 24 - 0
src/components/user-components/profilePage/PasswordFields/PasswordChangeForm/validate/index.js

@@ -0,0 +1,24 @@
+export default function validate(values) {
+    const {  password, passwordConfirmation } = values;
+    const errors = {};
+
+if (!password) {
+    errors.password = "Required"
+}
+else if (/[,]/.test(password)) {
+    errors.password = "Invalid symbol: \",\" is not allowed!";
+}
+else if (password.length < 8 || password.length > 20) {
+    errors.password = "Invalid password length: password should be from 8 to 20 symbols";
+}
+else if (!/^[a-z0-9_-]{8,20}$/i.test(password)) {
+    errors.password = "Invalid password, try another one";
+}
+
+if (!passwordConfirmation) {
+    errors.passwordConfirmation = "Required";
+}
+else if (password !== passwordConfirmation) {
+    errors.passwordConfirmation = "Passwords don't match each other!";
+}
+    }

+ 52 - 0
src/components/user-components/profilePage/PasswordFields/index.js

@@ -0,0 +1,52 @@
+import React from 'react';
+import { connect } from 'react-redux';
+import { Field } from 'redux-form';
+
+import ChangePasswordForm from './PasswordChangeForm'
+
+export default class ChangePassword extends React.Component {
+
+    state = {
+        clicked: false,
+    }
+    
+    submit = ({ password }) => {
+        console.log('handleSubmit->submit', this.props)
+        const { actions: { passwordChangeRequest }, user: { data: { id } } } = this.props;
+
+        console.log('id', id);
+
+         passwordChangeRequest({
+            password,
+            id
+        })
+    }
+
+    handleClick = () => {
+        this.setState((prevState) => ({ clicked: !prevState.clicked }));
+    }
+
+    render() {
+        const { handleClick, submit } = this;
+        const { clicked } = this.state;
+        const { children } = this.props;
+
+        return (
+            !clicked
+                ?
+                (
+                    <React.Fragment>
+                        <div>{children}</div>
+                        <button onClick={handleClick}>Change password</button>
+                    </React.Fragment>
+                    
+                )
+                : (
+                    <React.Fragment>
+                        <div>{children}</div>
+                        <ChangePasswordForm handlers={{ handleClick, submit }} />
+                    </React.Fragment>
+                )
+        )
+    }
+}

+ 44 - 22
src/components/user-components/profilePage/index.js

@@ -1,52 +1,73 @@
 import React from 'react';
 import { connect } from 'react-redux';
-// import { bindActionCreators } from 'redux'
+import { bindActionCreators } from 'redux'
 // import {} from './../../../actions'
 import axios from 'axios';
+import { userChangeRequest } from '../../../actions/userFields/changeEmail'
+import {passwordChangeRequest} from '../../../actions/userFields/changePassword'
+
+import ChangeLogin from './LoginFild';
+import ChangePassword from './PasswordFields'
 
 // redux-connected container
 
 class profilePage extends React.Component {
 
     state = {
-        user: {}
+        files: null,
+        photo: null
     }
+    change = e => {
+        const reader = new FileReader();
+
+        const file = e.target.files[0];
+        this.setState({ file });
+
+        reader.onloadend = () => {
+            this.setState({
+                photo: reader.result
+            });
+        };
+        reader.readAsDataURL(file);
+    };
 
-    getUser = () => {
-        const randomUserId = Math.ceil(Math.random() * 10);
+    post = () => {
+        const file = new FormData();
 
-        axios.post(`https://quiz.maxcrc.de/api/v1/user`,{
-            "login": 'ddd',
-            "password":"jhgfhgg"
+        file.append("profilePhoto", this.state.file);
+    };
 
+    lol = () => {
+        const { user: { data: { id } }, userChangeRequest } = this.props;
+
+        userChangeRequest({
+            id,
+            login: "lol wtf"
         })
-            .then(({ data }) => this.setState({
-                user: data
-            }))
-            .catch(({ message }) => console.warn(message))
     }
 
-    componentDidMount() {
-        this.getUser();
-    }
 
     render() {
-        const { user } = this.state;
+        const { user, userChangeRequest } = this.props;
 
-        console.log(user);
+        // console.log('User', user);
+        // console.log('Props', this.props);
+        // console.log('State', this.state);
 
         return (
             <div className="page page--bottom-only profile-page">
                 <section className="container section section--about">
+                    <button onClick={this.lol}>adlkasjdakl</button>
                     <h2 className="section__element section__element--header">{user.login}</h2>
                     <img className="section__element section__element--image" src={user.avatar} alt="avatar" />
                     <div className="sedtion__element section__element--login">
                         <h3>Login</h3>
-                        <p>{user.login}<button className="link link--btn right">Change login</button></p>
+                        {/* <p>{user.login}<button className="link link--btn right" >Change login</button></p> */}
+                        <ChangeLogin className="link link--btn right" user={user} actions={{ userChangeRequest }}>{user.login}</ChangeLogin>
                     </div>
                     <div className="section__element section__element--">
-                        <h3>E-mail</h3>
-                        <p>{user.email}<button className="link link--btn right">Change e-mail</button></p>
+                        <h3>Password</h3>
+                        <ChangePassword className="link link--btn right" user={user} actions={{ passwordChangeRequest }}>{user.password}</ChangePassword>
                     </div>
                     <div className="section__element section__element--">
                         <h3>Status</h3>
@@ -82,8 +103,9 @@ class profilePage extends React.Component {
 const
     mapStateToProps = state => ({
         user: state.user
-    })
-// mapDispatchToProps = dispatch => bindActionCreators({}, dispatch)
+    });
+
+const mapDispatchToProps = dispatch => bindActionCreators({ userChangeRequest, passwordChangeRequest }, dispatch);
 
-export default connect(mapStateToProps)(profilePage);
+export default connect(mapStateToProps, mapDispatchToProps)(profilePage);
 

+ 9 - 0
src/constants/index.js

@@ -18,3 +18,12 @@ export const USERS_GET_REQUEST_SUCCESS = 'USERS_GET_REQUEST_SUCCESS';
 export const USERS_GET_REQUEST_SUCCESS_FAILURE = 'USERS_GET_REQUEST_FAILURE';
 
 export const TOKEN_AUTH = 'TOKEN_AUTH';
+
+export const USERS_CHANGE_URL = 'https://quiz.maxcrc.de/api/v1/user/';
+export const USERS_CHANGE_REQUEST = 'USERS_CHANGE_REQUEST';
+export const USERS_CHANGE_REQUEST_SUCCESS = 'USERS_CHANGE_REQUEST_SUCCESS';
+export const USERS_CHANGE_REQUEST_FAILURE = 'USERS_CHANGE_REQUEST_FAILURE';
+
+export const PASSWORD_CHANGE_REQUEST = 'PASSWORD_CHANGE_REQUEST';
+export const PASSWORD_CHANGE_REQUEST_SUCCESS = 'PASSWORD_CHANGE_REQUEST_SUCCESS';
+export const PASSWORD_CHANGE_REQUEST_FAILURE = 'PASSWORD_CHANGE_REQUEST_FAILURE';

+ 46 - 0
src/containers/AuthPage/index.js

@@ -0,0 +1,46 @@
+import React, { Component } from 'react'
+import { connect } from 'react-redux';
+import { bindActionCreators } from 'redux';
+
+import { signInRequest,userIsNotSignedIn  } from './../../actions/auth/signIn';
+import { signUpRequest } from './../../actions/auth/signUp';
+import { categoryRequest} from '../../actions/card/action-card'
+
+class AuthPage extends Component {
+    constructor(props) {
+        super(props);
+    }
+    
+
+    render() {
+        const { isFetching, error, user } = this.props.auth;
+        const { signInRequest } = this.props; 
+        
+
+        console.log("<AuthPage> - props",this.props);
+
+        return (
+            <div className="auth-page">
+                <button onClick={signInRequest} disabled={user ? true : false}>Auth</button>
+                <h2>{isFetching ? 'wait a moment...' : error ? 'Looks like we\'ve in trouble...' : user && user.displayName}</h2>
+            </div>
+        )
+    }
+}
+
+const
+    mapStateToProps = state => ({
+        auth: {
+            ...state.signIn,
+            
+        },
+        ...state.card
+    }),
+    mapDispatchToProps = dispatch => bindActionCreators({ 
+        signInRequest,
+        signUpRequest,
+        categoryRequest,
+        userIsNotSignedIn 
+    }, dispatch);
+
+export default connect(mapStateToProps, mapDispatchToProps)(AuthPage)

+ 1 - 0
src/containers/auth/SignInPage/index.js

@@ -10,6 +10,7 @@ import { HOME } from './../../../constants/routes';
 import Spinner from './../../../components/common/spinner';
 import SignInForm from './../../../components/public-components/auth/signInForm';
 
+
 class SignInPage extends React.Component {
 
     render() {

+ 1 - 0
src/containers/header/index.js

@@ -3,6 +3,7 @@ import { bindActionCreators } from 'redux'
 
 import HeaderComponent from './../../components/public-components/header';
 
+
 import { signOut } from './../../actions/auth/signOut'
 
 const

+ 18 - 0
src/containers/new-card/add-card.js

@@ -0,0 +1,18 @@
+import React, { Component,Fragment } from "react";
+
+import { connect } from 'react-redux';
+import { bindActionCreators } from 'redux';
+import LoadForm from "../../components/common/input-form";
+
+
+class AddCard extends Component {
+   
+    render() {
+      
+        return (
+<div></div>
+        )
+    }
+}
+
+export default AddCard

+ 27 - 0
src/reducers/card-category/reduser-card.js

@@ -0,0 +1,27 @@
+import * as types from "../../constants";
+import initialState from '../initialState';
+
+export default function cardS(state = initialState.category, {type, payload: category, error}) {
+    switch (type) {
+        case types.CATEGORY_URL_REQUEST: {
+            return {
+                ...state
+            }
+        }
+        case types.CATEGORY_URL_REQUEST_SUCCESS: {
+            return {
+                ...state,
+                category
+            }
+        }
+        case types.CATEGORY_URL_REQUEST_FAILURE: {
+            return {
+                ...state,
+                error
+            }
+        }
+        default: {
+            return state
+        }
+    }
+}

+ 10 - 1
src/reducers/index.js

@@ -2,12 +2,21 @@
 // для создания store 
 import { combineReducers } from 'redux';
 
+
 import user from './user';
+
+import changeEmail from './userFields/changeEmail/index';
+import changePassword from './userFields/changePassword/index'
+
 import { reducer as form } from 'redux-form';
 
+
+
 const combinedReducers = combineReducers({
     form,
-    user
+    user,
+    changeEmail,
+    changePassword
 })
 
 export default combinedReducers;

+ 7 - 0
src/reducers/initialState/index.js

@@ -4,5 +4,12 @@ export default {
         error: null,
         isFetching: null,
         isAdmin: null
+    },
+    changeEmail: {
+        login: null
+    },
+    
+    changePassword: {
+        password: null
     }
 }

+ 25 - 0
src/reducers/userFields/changeEmail/index.js

@@ -0,0 +1,25 @@
+import * as types from "../../../constants";
+import initialState from '../../initialState';
+
+export default function changeEmail(state = initialState.changeEmail, {type, payload: login, error }) {
+    switch (type) {
+        case types.USERS_CHANGE_REQUEST: {
+            return state
+        }
+        case types.USERS_CHANGE_REQUEST_SUCCESS: {
+            return {
+                ...state,
+                login
+            }
+        }
+        case types.USERS_CHANGE_REQUEST_FAILURE: {
+            return {
+                ...state,
+                error
+            }
+        }
+        default: {
+            return state
+        }
+    }
+}

+ 25 - 0
src/reducers/userFields/changePassword/index.js

@@ -0,0 +1,25 @@
+import * as types from "../../../constants";
+import initialState from '../../initialState';
+
+export default function changePassword(state = initialState.changePassword, {type, payload: password, error }) {
+    switch (type) {
+        case types.PASSWORD_CHANGE_REQUEST: {
+            return state
+        }
+        case types.PASSWORD_CHANGE_REQUEST_SUCCESS: {
+            return {
+                ...state,
+                password
+            }
+        }
+        case types.PASSWORD_CHANGE_REQUEST_FAILURE: {
+            return {
+                ...state,
+                error
+            }
+        }
+        default: {
+            return state
+        }
+    }
+}

+ 1 - 0
src/router.js

@@ -1,3 +1,4 @@
+
 import React, { Suspense, lazy } from "react";
 import { Switch, Route, withRouter } from "react-router-dom";
 import { connect } from 'react-redux';

+ 3 - 3
src/saga/auth/signIn/index.js

@@ -1,9 +1,8 @@
 import { put, call } from "redux-saga/effects";
 import * as actions from './../../../actions/auth/signIn'
 import axios from 'axios';
-import token from './../../../utils/token';
-
-import { SIGN_IN_URL } from './../../../constants/index'
+import { SIGN_IN_URL } from '../../../constants/index'
+import token from '../../../utils/token'
 
 // worker-saga for signing in
 
@@ -22,5 +21,6 @@ export default function* ({ payload: { login, password } }) {
     catch ({ message }) {
         yield put(actions.signInRequestFailure(message))
         yield call(() => localStorage.removeItem(token));
+
     }
 }

+ 8 - 1
src/saga/index.js

@@ -1,6 +1,13 @@
 import { fork } from "redux-saga/effects";
 import auth from './auth'
+import userFields from './userFields/index';
+import changePassworde from './userFields/index'
+
 
 export default function*() {
-    yield fork(auth)
+    yield [
+        fork(auth),
+        fork(userFields),
+        fork(changePassworde)
+    ];
 }

+ 18 - 0
src/saga/userFields/changeEmail/index.js

@@ -0,0 +1,18 @@
+import { put, call } from "redux-saga/effects";
+import * as actions from './../../../actions/userFields/changeEmail'
+import axios from 'axios';
+import { USERS_CHANGE_URL } from '../../../constants/index'
+
+export default function* ({payload}) {
+    try {
+        console.log("payload inside the saga", payload);
+        const payloads = yield call(() =>
+            axios.put(`${USERS_CHANGE_URL}${payload.id}`, payload.login)
+                .then(({ data }) => data)
+        );
+        yield put(actions.userChangeRequestSucces(payload));
+    }
+    catch ({ message }) {
+        yield put(actions.userChangeRequestFailure(message))
+    }
+}

+ 18 - 0
src/saga/userFields/changePassword/index.js

@@ -0,0 +1,18 @@
+import { put, call } from "redux-saga/effects";
+import * as actions from './../../../actions/userFields/changePassword'
+import axios from 'axios';
+import { USERS_CHANGE_URL } from '../../../constants/index'
+
+export default function* ({payload}) {
+    try {
+        console.log("payload inside the saga", payload);
+        const payloads = yield call(() =>
+            axios.put(`${USERS_CHANGE_URL}${payload.id}`, payload.password)
+                .then(({ data }) => data)
+        );
+        yield put(actions.passwordChangeRequestSucces(payloads));
+    }
+    catch ({ message }) {
+        yield put(actions.passwordChangeRequestFailure(message))
+    }
+}

+ 11 - 0
src/saga/userFields/index.js

@@ -0,0 +1,11 @@
+import { takeEvery } from "redux-saga/effects";
+import * as types from "./../../constants"
+
+import changeEmail from './changeEmail/index';
+import changePassword from "./changePassword";
+
+
+export default function*() {
+    yield takeEvery(types.USERS_CHANGE_REQUEST, changeEmail);
+    yield takeEvery(types.PASSWORD_CHANGE_REQUEST, changePassword)
+}

+ 1 - 2
src/state/index.js

@@ -14,9 +14,8 @@ const logger = createLogger({
 const store = createStore(
     combinedReducers,
     initialState,
-    applyMiddleware(sagaMiddleware, logger)
+    applyMiddleware(sagaMiddleware)
 );
-
 export default store;
 
 sagaMiddleware.run(saga);