diff --git a/README.md b/README.md
index 54ef094..189a06e 100644
--- a/README.md
+++ b/README.md
@@ -1,68 +1,27 @@
-This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
+### FUTURE EATS
+
+### Integrantes do Grupo
+- Fábio Jordão
+- José Rafael
+- Joyce Roberta
+- Rafael Fontes
+
+### O que funciona
+- Tela inicial
+- Login
+- Signup
+- Cadastro
+- Editar Perfil / Endereço
+- Lista de Restaurantes com busca/filtros
+- Lista de produtos por restaurante com opção de adicionar a quantidade desejada ao carrinho
+- Carrinho com produtos, endereço de entrega e valor total do pedido
+- Perfil do usuário com histórico de pedidos
+- Aviso de pedido em andamento
+
+### O que não funciona
+- Remover produto do carrinho
+- Responsividade
+
+### Link Surge
+http://dumont-labe-food3.surge.sh/
-## Available Scripts
-
-In the project directory, you can run:
-
-### `npm start`
-
-Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
-
-The page will reload if you make edits.
-You will also see any lint errors in the console.
-
-### `npm test`
-
-Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
-
-### `npm run build`
-
-Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance.
-
-The build is minified and the filenames include the hashes.
-Your app is ready to be deployed!
-
-See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
-
-### `npm run eject`
-
-**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
-
-If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
-
-Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
-
-You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
-
-## Learn More
-
-You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
-
-To learn React, check out the [React documentation](https://reactjs.org/).
-
-### Code Splitting
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
-
-### Analyzing the Bundle Size
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
-
-### Making a Progressive Web App
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
-
-### Advanced Configuration
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
-
-### Deployment
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
-
-### `npm run build` fails to minify
-
-This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
diff --git a/debug.log b/debug.log
new file mode 100644
index 0000000..6c38ec0
--- /dev/null
+++ b/debug.log
@@ -0,0 +1,7 @@
+[1207/150005.674:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1208/142513.186:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1210/144009.023:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1210/152221.410:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1211/103945.530:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1211/131601.054:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
+[1212/011132.012:ERROR:directory_reader_win.cc(43)] FindFirstFile: O sistema no pode encontrar o caminho especificado. (0x3)
diff --git a/package-lock.json b/package-lock.json
index e8c18b2..dfcee96 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1117,6 +1117,34 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
},
+ "@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "requires": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
+ },
+ "@emotion/stylis": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
+ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
+ },
+ "@emotion/unitless": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+ },
"@hapi/address": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@@ -1342,6 +1370,82 @@
"@types/yargs": "^13.0.0"
}
},
+ "@material-ui/core": {
+ "version": "4.11.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.2.tgz",
+ "integrity": "sha512-/D1+AQQeYX/WhT/FUk78UCRj8ch/RCglsQLYujYTIqPSJlwZHKcvHidNeVhODXeApojeXjkl0tWdk5C9ofwOkQ==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/styles": "^4.11.2",
+ "@material-ui/system": "^4.11.2",
+ "@material-ui/types": "^5.1.0",
+ "@material-ui/utils": "^4.11.2",
+ "@types/react-transition-group": "^4.2.0",
+ "clsx": "^1.0.4",
+ "hoist-non-react-statics": "^3.3.2",
+ "popper.js": "1.16.1-lts",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0 || ^17.0.0",
+ "react-transition-group": "^4.4.0"
+ }
+ },
+ "@material-ui/icons": {
+ "version": "4.11.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz",
+ "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==",
+ "requires": {
+ "@babel/runtime": "^7.4.4"
+ }
+ },
+ "@material-ui/styles": {
+ "version": "4.11.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.2.tgz",
+ "integrity": "sha512-xbItf8zkfD3FuGoD9f2vlcyPf9jTEtj9YTJoNNV+NMWaSAHXgrW6geqRoo/IwBuMjqpwqsZhct13e2nUyU9Ljw==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@emotion/hash": "^0.8.0",
+ "@material-ui/types": "^5.1.0",
+ "@material-ui/utils": "^4.11.2",
+ "clsx": "^1.0.4",
+ "csstype": "^2.5.2",
+ "hoist-non-react-statics": "^3.3.2",
+ "jss": "^10.0.3",
+ "jss-plugin-camel-case": "^10.0.3",
+ "jss-plugin-default-unit": "^10.0.3",
+ "jss-plugin-global": "^10.0.3",
+ "jss-plugin-nested": "^10.0.3",
+ "jss-plugin-props-sort": "^10.0.3",
+ "jss-plugin-rule-value-function": "^10.0.3",
+ "jss-plugin-vendor-prefixer": "^10.0.3",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "@material-ui/system": {
+ "version": "4.11.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.11.2.tgz",
+ "integrity": "sha512-BELFJEel5E+5DMiZb6XXT3peWRn6UixRvBtKwSxqntmD0+zwbbfCij6jtGwwdJhN1qX/aXrKu10zX31GBaeR7A==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/utils": "^4.11.2",
+ "csstype": "^2.5.2",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "@material-ui/types": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
+ "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A=="
+ },
+ "@material-ui/utils": {
+ "version": "4.11.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz",
+ "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0 || ^17.0.0"
+ }
+ },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -1725,6 +1829,14 @@
"@types/react": "*"
}
},
+ "@types/react-transition-group": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz",
+ "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
"@types/stack-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -2437,6 +2549,14 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
},
+ "axios": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",
+ "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",
+ "requires": {
+ "follow-redirects": "^1.10.0"
+ }
+ },
"axobject-query": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
@@ -2674,6 +2794,22 @@
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz",
"integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA=="
},
+ "babel-plugin-styled-components": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz",
+ "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-module-imports": "^7.0.0",
+ "babel-plugin-syntax-jsx": "^6.18.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+ },
"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",
@@ -3343,6 +3479,11 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
+ "camelize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
+ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
+ },
"caniuse-api": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
@@ -3577,6 +3718,11 @@
"shallow-clone": "^0.1.2"
}
},
+ "clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -3970,6 +4116,11 @@
"postcss": "^7.0.5"
}
},
+ "css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
+ },
"css-color-names": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
@@ -4060,6 +4211,16 @@
"resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
"integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
},
+ "css-to-react-native": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
+ "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
+ "requires": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
"css-tree": {
"version": "1.0.0-alpha.37",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
@@ -4076,6 +4237,15 @@
}
}
},
+ "css-vendor": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
+ "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
+ "requires": {
+ "@babel/runtime": "^7.8.3",
+ "is-in-browser": "^1.0.2"
+ }
+ },
"css-what": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz",
@@ -4535,6 +4705,22 @@
"utila": "~0.4"
}
},
+ "dom-helpers": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz",
+ "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ },
+ "dependencies": {
+ "csstype": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
+ "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ=="
+ }
+ }
+ },
"dom-serializer": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
@@ -6241,6 +6427,19 @@
"resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
"integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
},
+ "history": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "loose-envify": "^1.2.0",
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
+ }
+ },
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -6251,6 +6450,14 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
@@ -6454,6 +6661,11 @@
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
},
+ "hyphenate-style-name": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
+ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -6537,6 +6749,14 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
+ "indefinite-observable": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-2.0.1.tgz",
+ "integrity": "sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ==",
+ "requires": {
+ "symbol-observable": "1.2.0"
+ }
+ },
"indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
@@ -6822,6 +7042,11 @@
"is-extglob": "^2.1.1"
}
},
+ "is-in-browser": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
+ "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
+ },
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -7679,6 +7904,92 @@
"verror": "1.10.0"
}
},
+ "jss": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss/-/jss-10.5.0.tgz",
+ "integrity": "sha512-B6151NvG+thUg3murLNHRPLxTLwQ13ep4SH5brj4d8qKtogOx/jupnpfkPGSHPqvcwKJaCLctpj2lEk+5yGwMw==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "csstype": "^3.0.2",
+ "indefinite-observable": "^2.0.1",
+ "is-in-browser": "^1.1.3",
+ "tiny-warning": "^1.0.2"
+ },
+ "dependencies": {
+ "csstype": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
+ "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ=="
+ }
+ }
+ },
+ "jss-plugin-camel-case": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.5.0.tgz",
+ "integrity": "sha512-GSjPL0adGAkuoqeYiXTgO7PlIrmjv5v8lA6TTBdfxbNYpxADOdGKJgIEkffhlyuIZHlPuuiFYTwUreLUmSn7rg==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "hyphenate-style-name": "^1.0.3",
+ "jss": "10.5.0"
+ }
+ },
+ "jss-plugin-default-unit": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.5.0.tgz",
+ "integrity": "sha512-rsbTtZGCMrbcb9beiDd+TwL991NGmsAgVYH0hATrYJtue9e+LH/Gn4yFD1ENwE+3JzF3A+rPnM2JuD9L/SIIWw==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.5.0"
+ }
+ },
+ "jss-plugin-global": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.5.0.tgz",
+ "integrity": "sha512-FZd9+JE/3D7HMefEG54fEC0XiQ9rhGtDHAT/ols24y8sKQ1D5KIw6OyXEmIdKFmACgxZV2ARQ5pAUypxkk2IFQ==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.5.0"
+ }
+ },
+ "jss-plugin-nested": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.5.0.tgz",
+ "integrity": "sha512-ejPlCLNlEGgx8jmMiDk/zarsCZk+DV0YqXfddpgzbO9Toamo0HweCFuwJ3ZO40UFOfqKwfpKMVH/3HUXgxkTMg==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.5.0",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "jss-plugin-props-sort": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.5.0.tgz",
+ "integrity": "sha512-kTLRvrOetFKz5vM88FAhLNeJIxfjhCepnvq65G7xsAQ/Wgy7HwO1BS/2wE5mx8iLaAWC6Rj5h16mhMk9sKdZxg==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.5.0"
+ }
+ },
+ "jss-plugin-rule-value-function": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.5.0.tgz",
+ "integrity": "sha512-jXINGr8BSsB13JVuK274oEtk0LoooYSJqTBCGeBu2cG/VJ3+4FPs1gwLgsq24xTgKshtZ+WEQMVL34OprLidRA==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.5.0",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "jss-plugin-vendor-prefixer": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.5.0.tgz",
+ "integrity": "sha512-rux3gmfwDdOKCLDx0IQjTwTm03IfBa+Rm/hs747cOw5Q7O3RaTUIMPKjtVfc31Xr/XI9Abz2XEupk1/oMQ7zRA==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "css-vendor": "^2.0.8",
+ "jss": "10.5.0"
+ }
+ },
"jsx-ast-utils": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
@@ -8153,6 +8464,25 @@
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
"integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
},
+ "mini-create-react-context": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz",
+ "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==",
+ "requires": {
+ "@babel/runtime": "^7.12.1",
+ "tiny-warning": "^1.0.3"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
+ "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ }
+ }
+ },
"mini-css-extract-plugin": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
@@ -9158,6 +9488,11 @@
"ts-pnp": "^1.1.6"
}
},
+ "popper.js": {
+ "version": "1.16.1-lts",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
+ "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
+ },
"portfinder": {
"version": "1.0.26",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
@@ -10648,6 +10983,52 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
+ "react-router": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
+ "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "hoist-non-react-statics": "^3.1.0",
+ "loose-envify": "^1.3.1",
+ "mini-create-react-context": "^0.4.0",
+ "path-to-regexp": "^1.7.0",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.6.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
+ "react-router-dom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz",
+ "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "loose-envify": "^1.3.1",
+ "prop-types": "^15.6.2",
+ "react-router": "5.2.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ }
+ },
"react-scripts": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz",
@@ -10708,6 +11089,17 @@
"workbox-webpack-plugin": "4.3.1"
}
},
+ "react-transition-group": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
+ "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ }
+ },
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -11051,6 +11443,11 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
},
+ "resolve-pathname": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
+ },
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@@ -11524,6 +11921,11 @@
}
}
},
+ "shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -12212,6 +12614,23 @@
}
}
},
+ "styled-components": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.2.1.tgz",
+ "integrity": "sha512-sBdgLWrCFTKtmZm/9x7jkIabjFNVzCUeKfoQsM6R3saImkUnjx0QYdLwJHBjY9ifEcmjDamJDVfknWm1yxZPxQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/traverse": "^7.4.5",
+ "@emotion/is-prop-valid": "^0.8.8",
+ "@emotion/stylis": "^0.8.4",
+ "@emotion/unitless": "^0.7.4",
+ "babel-plugin-styled-components": ">= 1",
+ "css-to-react-native": "^3.0.0",
+ "hoist-non-react-statics": "^3.0.0",
+ "shallowequal": "^1.1.0",
+ "supports-color": "^5.5.0"
+ }
+ },
"stylehacks": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
@@ -12267,6 +12686,11 @@
"util.promisify": "~1.0.0"
}
},
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+ },
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -12518,6 +12942,16 @@
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
},
+ "tiny-invariant": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
+ "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -12889,6 +13323,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "value-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/package.json b/package.json
index 2d4ff44..ac3a50e 100644
--- a/package.json
+++ b/package.json
@@ -3,12 +3,17 @@
"version": "0.1.0",
"private": true,
"dependencies": {
+ "@material-ui/core": "^4.11.2",
+ "@material-ui/icons": "^4.11.2",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
+ "axios": "^0.21.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",
- "react-scripts": "3.4.1"
+ "react-router-dom": "^5.2.0",
+ "react-scripts": "3.4.1",
+ "styled-components": "^5.2.1"
},
"scripts": {
"start": "react-scripts start",
diff --git a/src/App.js b/src/App.js
index ce9cbd2..48a8e64 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,25 +1,12 @@
import React from 'react';
-import logo from './logo.svg';
-import './App.css';
+import Router from "./router/router"
+import GlobalState from "./global/globalState"
function App() {
return (
-
+
+
+
);
}
diff --git a/src/assets/img/Thumbs.db b/src/assets/img/Thumbs.db
new file mode 100644
index 0000000..1d150c6
Binary files /dev/null and b/src/assets/img/Thumbs.db differ
diff --git a/src/assets/img/edit-profile.svg b/src/assets/img/edit-profile.svg
new file mode 100644
index 0000000..ab36434
--- /dev/null
+++ b/src/assets/img/edit-profile.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/assets/img/logo-future-eats-invert.png b/src/assets/img/logo-future-eats-invert.png
new file mode 100644
index 0000000..975540a
Binary files /dev/null and b/src/assets/img/logo-future-eats-invert.png differ
diff --git a/src/assets/img/logo-future-eats-invert@2x.png b/src/assets/img/logo-future-eats-invert@2x.png
new file mode 100644
index 0000000..5bc60e0
Binary files /dev/null and b/src/assets/img/logo-future-eats-invert@2x.png differ
diff --git a/src/assets/img/logo-future-eats-invert@3x.png b/src/assets/img/logo-future-eats-invert@3x.png
new file mode 100644
index 0000000..318c9c2
Binary files /dev/null and b/src/assets/img/logo-future-eats-invert@3x.png differ
diff --git a/src/assets/img/logo-future-eats.png b/src/assets/img/logo-future-eats.png
new file mode 100644
index 0000000..f551f29
Binary files /dev/null and b/src/assets/img/logo-future-eats.png differ
diff --git a/src/assets/img/logo-future-eats@2x.png b/src/assets/img/logo-future-eats@2x.png
new file mode 100644
index 0000000..bec55e6
Binary files /dev/null and b/src/assets/img/logo-future-eats@2x.png differ
diff --git a/src/assets/img/logo-future-eats@3x.png b/src/assets/img/logo-future-eats@3x.png
new file mode 100644
index 0000000..7847d64
Binary files /dev/null and b/src/assets/img/logo-future-eats@3x.png differ
diff --git a/src/components/CardFeed/CardFeed.js b/src/components/CardFeed/CardFeed.js
new file mode 100644
index 0000000..9eaf6eb
--- /dev/null
+++ b/src/components/CardFeed/CardFeed.js
@@ -0,0 +1,23 @@
+import React from 'react'
+import { useHistory } from 'react-router-dom'
+import { goToRestaurantPage } from '../../router/coordinator'
+import { InfoContainer, ImageRestaurant, CardStyled, InfoText, InfoName, ImageContainer } from './styles'
+
+const CardFeed = (props) => {
+ const history = useHistory()
+
+ return (
+ goToRestaurantPage(history,props.id)}>
+
+
+
+ {props.name}
+
+ {props.deliveryTime} min
+ Frete R${props.shipping}
+
+
+ )
+}
+
+export default CardFeed
\ No newline at end of file
diff --git a/src/components/CardFeed/styles.js b/src/components/CardFeed/styles.js
new file mode 100644
index 0000000..4d784a7
--- /dev/null
+++ b/src/components/CardFeed/styles.js
@@ -0,0 +1,36 @@
+import styled from 'styled-components'
+
+export const InfoContainer = styled.div `
+ display: flex;
+ justify-content: space-between;
+`
+export const ImageContainer = styled.div `
+ text-align: center;
+`
+export const ImageRestaurant = styled.img `
+ max-height:120px;
+`
+export const CardStyled = styled.div `
+ height: 188px;
+ width: 328px;
+ border: 1px lightgrey solid;
+ border-radius: 5px;
+ margin: 8px;
+ &:hover {
+ cursor: pointer;
+ }
+`
+export const InfoText = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 1px;
+ margin: 4px;
+ color: #b8b8b8;
+`
+export const InfoName = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 1px;
+ margin: 4px;
+ color: #5cb646;
+`
\ No newline at end of file
diff --git a/src/components/CardOrder/cardOrder.js b/src/components/CardOrder/cardOrder.js
new file mode 100644
index 0000000..07501ec
--- /dev/null
+++ b/src/components/CardOrder/cardOrder.js
@@ -0,0 +1,22 @@
+import React, { useState, useEffect } from "react";
+import { HistoryOrderDate, HistoryOrderDiv, HistoryOrderRestaurant, HistoryOrderTotal } from "./styles";
+
+
+const CardOrder = (props) => {
+ const date = new Date(props.date);
+ let options = { day: "numeric", month: "long", year: "numeric" };
+ const newDate = date.toLocaleDateString("pt-PT", options);
+ const formatDate = newDate.split("de ");
+
+
+ return (
+
+
+ {props.restaurantName}
+ {formatDate}
+ SUBTOTAL R${props.totalPrice}
+
+ );
+};
+
+export default CardOrder;
diff --git a/src/components/CardOrder/styles.js b/src/components/CardOrder/styles.js
new file mode 100644
index 0000000..c9b52ae
--- /dev/null
+++ b/src/components/CardOrder/styles.js
@@ -0,0 +1,94 @@
+import styled from 'styled-components'
+
+export const HistoryOrderTitle = styled.h2`
+ width: 328px;
+ height: 18px;
+ margin: 16px 16px 8px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const HistoryOrderDiv = styled.div`
+width: 328px;
+ height: 102px;
+ margin: 7px 0 0;
+ padding: 16px;
+ border-radius: 8px;
+ border: solid 1px var #b8b8b8;
+`
+
+export const HistoryOrderRestaurant = styled.p`
+width: 296px;
+ height: 18px;
+ margin: 0 0 9px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: var #5cb646;
+`
+
+export const HistoryOrderDate = styled.p`
+width: 296px;
+ height: 18px;
+ margin: 9px 0 7px;
+ font-family: Roboto;
+ font-size: 12px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.29px;
+ color: #000000;
+`
+
+export const HistoryOrderTotal = styled.h4`
+width: 296px;
+ height: 18px;
+ margin: 7px 0 0;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: bold;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const HistoryOrderLine = styled.hr`
+ width: 328px;
+ margin: 0 0 7px;
+ border: solid 1px #000000;
+`
+
+export const HistoryOrderZero = styled.div`
+ width: 360px;
+ height: 42px;
+ margin: 16px 0 248px;
+ padding: 12px 32px;
+`
+
+export const HistoryOrderZeroInside = styled.p`
+width: 296px;
+ height: 18px;
+ opacity: 0.89;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+`
\ No newline at end of file
diff --git a/src/components/CardProduct/CardProduct.js b/src/components/CardProduct/CardProduct.js
new file mode 100644
index 0000000..e71e226
--- /dev/null
+++ b/src/components/CardProduct/CardProduct.js
@@ -0,0 +1,53 @@
+import React, { useContext } from 'react'
+import { useHistory } from 'react-router-dom'
+import { InfoContainer, ImageRestaurant, CardStyled, InfoText, InfoName, ImageContainer, TextContainer, PriceText, DescriptionContainer, AddButton, QuantityContainer, NameContainer, RemoveButton } from './styles'
+import GlobalStateContext from "../../global/globalStateContext"
+
+
+const CardProduct = (props) => {
+ const history = useHistory()
+ const {states,setters} =useContext(GlobalStateContext)
+
+ const saveOrder =(props) =>{
+ let newCart = [...states.cart]
+ newCart.push(props)
+ setters.setCart(newCart)
+ props.showModal()
+ setters.setRestaurante(props.restaurant)
+ setters.setIdProduct(props.id)
+ }
+
+ return (
+
+
+
+
+
+
+
+ {props.name}
+ 2
+
+ {props.description}
+
+
+ {props.price.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' })}
+ {/* {states.cart.map(product =>{
+ if (props.id === product.id) {
+ return (
+ remover
+ )
+ } else {
+ return (
+ saveOrder(props)}>adicionar
+ )
+ }
+ })} */}
+ saveOrder(props)}>adicionar
+
+
+
+ )
+}
+
+export default CardProduct
\ No newline at end of file
diff --git a/src/components/CardProduct/styles.js b/src/components/CardProduct/styles.js
new file mode 100644
index 0000000..bfba583
--- /dev/null
+++ b/src/components/CardProduct/styles.js
@@ -0,0 +1,97 @@
+import styled from 'styled-components'
+
+export const InfoContainer = styled.div `
+ display: flex;
+ justify-content: space-between;
+ margin-left: 8px;
+ margin-right: 0px;
+ padding: 0;
+`
+export const ImageContainer = styled.div `
+ display: flex;
+ align-items: center;
+ width: 96px;
+`
+export const ImageRestaurant = styled.img `
+ max-width: 96px;
+`
+export const CardStyled = styled.div `
+ display: flex;
+ flex-direction: row;
+ height: 112px;
+ width: 328px;
+ border: 1px lightgrey solid;
+ border-radius: 5px;
+ margin: 8px;
+ padding: 0;
+`
+export const InfoText = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 12px;
+ padding: 1px;
+ margin: 4px;
+ color: #b8b8b8;
+`
+export const PriceText = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 1px;
+ margin: 4px;
+ color: black;
+`
+export const InfoName = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding-top: 8px;
+ margin: 4px;
+ color: #5cb646;
+`
+export const TextContainer = styled.div `
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ width: 232px;
+ height: 112px;
+ margin: 0;
+ padding: 0;
+`
+export const DescriptionContainer = styled.div `
+ text-align: left;
+ margin-left: 8px;
+`
+export const AddButton = styled.button `
+ border: 1px #5cb646 solid;
+ background-color: transparent;
+ color: #5cb646;
+ border-radius: 5px 0px 5px 0px;
+ height: 31px;
+ width: 90px;
+ &:hover {
+ cursor: pointer;
+ }
+`
+export const RemoveButton = styled.button `
+ border: 1px red solid;
+ background-color: transparent;
+ color: red;
+ border-radius: 5px 0px 5px 0px;
+ height: 31px;
+ width: 90px;
+ &:hover {
+ cursor: pointer;
+ }
+`
+export const QuantityContainer = styled.div `
+ border: 1px #5cb646 solid;
+ color: #5cb646;
+ border-radius: 0px 5px 0px 5px;
+ height: 33px;
+ width: 33px;
+ text-align: center;
+ padding-top: 8px;
+`
+export const NameContainer = styled.div `
+ display: flex;
+ justify-content: space-between;
+ width: 224px;
+`
\ No newline at end of file
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
new file mode 100644
index 0000000..055a11d
--- /dev/null
+++ b/src/components/Footer/Footer.js
@@ -0,0 +1,50 @@
+import React, { useContext } from 'react'
+import { ButtonStyled, FooterContainer } from './styles'
+import HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';
+import ShoppingCartOutlinedIcon from '@material-ui/icons/ShoppingCartOutlined';
+import PersonOutlineOutlinedIcon from '@material-ui/icons/PersonOutlineOutlined';
+import { useHistory } from 'react-router-dom'
+import { goToCart, goToFeedPage, goToProfilePage } from '../../router/coordinator';
+import GlobalStateContex from "../../global/globalStateContext"
+
+const Footer = (props) => {
+ const history = useHistory()
+ const {states,setters} =useContext(GlobalStateContex)
+
+ return (
+
+ {history.location.pathname==='/feed'
+ ?
+ goToFeedPage(history)}>
+
+
+ :
+ goToFeedPage(history)}>
+
+
+ }
+ {history.location.pathname.includes('/carrinho')
+ ?
+ goToCart(history,states.restaurante)}>
+
+
+ :
+ goToCart(history,states.restaurante)}>
+
+
+ }
+ {history.location.pathname==='/perfil'
+ ?
+ goToProfilePage(history)}>
+
+
+ :
+ goToProfilePage(history)}>
+
+
+ }
+
+ )
+}
+
+export default Footer
\ No newline at end of file
diff --git a/src/components/Footer/styles.js b/src/components/Footer/styles.js
new file mode 100644
index 0000000..30337c6
--- /dev/null
+++ b/src/components/Footer/styles.js
@@ -0,0 +1,16 @@
+import { Button } from '@material-ui/core'
+import styled from 'styled-components'
+
+export const FooterContainer = styled.div `
+ display: flex;
+ position:fixed;
+ justify-content: space-around;
+ height: 49px;
+ width: 360px;
+ top: 595px;
+ border-top: 1px solid #b8b8b8;
+`
+export const ButtonStyled = styled(Button) `
+ padding: 0;
+ margin: 0;
+`
\ No newline at end of file
diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js
new file mode 100644
index 0000000..5a38710
--- /dev/null
+++ b/src/components/Header/Header.js
@@ -0,0 +1,80 @@
+import React from 'react'
+import { ButtonStyled, HeaderContainer, PageTitle, TitleContainer } from './styles'
+import ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos'
+import { useHistory } from 'react-router-dom'
+import {goToProfilePage} from '../../router/coordinator'
+
+const Header = (props) => {
+ const history = useHistory()
+
+ return (
+
+ {history.location.pathname === '/feed'
+ ?
+
+
+ FutureEats
+
+
+ :
+ ""
+ }
+ {history.location.pathname.includes('/restaurantes')
+ ?
+
+
+
+ Restaurante
+
+
+ :
+ ""
+ }
+ {history.location.pathname === '/perfil'
+ ?
+
+
+ Meu Perfil
+
+
+ :
+ ""
+ }
+
+ {history.location.pathname==='/carrinho'
+ ?
+
+
+ Meu Carrinho
+
+
+ :
+ ""
+ }
+ {history.location.pathname==='/editprofile'
+ ?
+
+ goToProfilePage(history)}>
+
+ Editar
+
+
+ :
+ ""
+ }
+ {history.location.pathname==='/editaddress'
+ ?
+
+ goToProfilePage(history)}>
+
+ Meu Endereço
+
+
+ :
+ ""
+ }
+
+ )
+}
+
+export default Header
\ No newline at end of file
diff --git a/src/components/Header/styles.js b/src/components/Header/styles.js
new file mode 100644
index 0000000..9553adf
--- /dev/null
+++ b/src/components/Header/styles.js
@@ -0,0 +1,22 @@
+import { Button } from '@material-ui/core'
+import styled from 'styled-components'
+
+export const HeaderContainer = styled.div `
+ display: flex;
+ position:fixed;
+ height: 44px;
+ width: 360px;
+ top: 0;
+ border-bottom: 1px solid #b8b8b8;
+`
+export const PageTitle = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+`
+export const TitleContainer = styled.div `
+ margin: auto;
+`
+export const ButtonStyled = styled(Button) `
+ padding: 0;
+ margin: 0;
+`
\ No newline at end of file
diff --git a/src/components/Loading/Loading.js b/src/components/Loading/Loading.js
new file mode 100644
index 0000000..709f1d3
--- /dev/null
+++ b/src/components/Loading/Loading.js
@@ -0,0 +1,14 @@
+import React from 'react'
+import InitialLogo from '../../assets/img/logo-future-eats.png'
+import { AppLogo, LogoContainer } from './styels'
+
+const Loading = () => {
+
+ return (
+
+
+
+ )
+}
+
+export default Loading
\ No newline at end of file
diff --git a/src/components/Loading/styels.js b/src/components/Loading/styels.js
new file mode 100644
index 0000000..981a31b
--- /dev/null
+++ b/src/components/Loading/styels.js
@@ -0,0 +1,44 @@
+import styled, { keyframes } from 'styled-components'
+
+export const LogoContainer = styled.div `
+ background-color: transparent;
+`
+export const AppLogoMove = keyframes `
+ 0% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 10% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 20% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 30% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 40% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 50% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 60% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 70% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 80% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 90% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 100% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+`
+export const AppLogo = styled.img `
+ pointer-events: none;
+ animation: ${AppLogoMove} infinite 15s linear;
+`
\ No newline at end of file
diff --git a/src/components/LoadingInvert/LoadingInvert.js b/src/components/LoadingInvert/LoadingInvert.js
new file mode 100644
index 0000000..786c009
--- /dev/null
+++ b/src/components/LoadingInvert/LoadingInvert.js
@@ -0,0 +1,14 @@
+import React from 'react'
+import InitialLogo from '../../assets/img/logo-future-eats-invert.png'
+import { AppLogo, LogoContainer } from './styels'
+
+const Loading = () => {
+
+ return (
+
+
+
+ )
+}
+
+export default Loading
\ No newline at end of file
diff --git a/src/components/LoadingInvert/styels.js b/src/components/LoadingInvert/styels.js
new file mode 100644
index 0000000..981a31b
--- /dev/null
+++ b/src/components/LoadingInvert/styels.js
@@ -0,0 +1,44 @@
+import styled, { keyframes } from 'styled-components'
+
+export const LogoContainer = styled.div `
+ background-color: transparent;
+`
+export const AppLogoMove = keyframes `
+ 0% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 10% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 20% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 30% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 40% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 50% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 60% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+ 70% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 80% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 90% {
+ transform: scaleX(1.20) scaleY(1.20) ;
+ }
+ 100% {
+ transform: scaleX(0.80) scaleY(0.80) ;
+ }
+`
+export const AppLogo = styled.img `
+ pointer-events: none;
+ animation: ${AppLogoMove} infinite 15s linear;
+`
\ No newline at end of file
diff --git a/src/constants/constants.js b/src/constants/constants.js
new file mode 100644
index 0000000..6236fdc
--- /dev/null
+++ b/src/constants/constants.js
@@ -0,0 +1,2 @@
+export const baseUrl =
+ "https://us-central1-missao-newton.cloudfunctions.net/futureEatsA";
\ No newline at end of file
diff --git a/src/constants/user.js b/src/constants/user.js
new file mode 100644
index 0000000..e8ee555
--- /dev/null
+++ b/src/constants/user.js
@@ -0,0 +1,104 @@
+import axios from "axios"
+import {baseUrl} from "./constants"
+import { goToFeedPage, goToAdressPage, goToSignUpPage, goToProfilePage } from "../router/coordinator"
+
+
+const axiosConfig = {
+ headers: {
+ auth: localStorage.getItem('token')
+ }
+}
+
+export const login = (body, history) =>{
+axios.post(`${baseUrl}/login`, body)
+.then ((response)=>{
+ localStorage.setItem('user', response.data.user)
+
+
+ if(response.data.user.hasAddress){
+ localStorage.setItem("token", response.data.token);
+ goToFeedPage(history)
+
+ }else{
+ localStorage.setItem("token", response.data.token);
+ goToAdressPage(history);
+ }
+
+
+
+ }).catch(error=>{
+ alert ("Deu ruim rapá!")
+ console.log(error.message)
+ })
+ }
+
+export const signUp = (body, history) => {
+ axios
+ .post(`${baseUrl}/signup`, body)
+ .then((response) => {
+ localStorage.setItem("token", response.data.token);
+ goToAdressPage(history);
+ })
+ .catch((error) => {
+ alert("Deu ruim rapá!");
+ console.log(error.message);
+ });
+};
+
+export const Address = (body, history) => {
+
+ axios
+ .put(`${baseUrl}/address`, body, axiosConfig)
+
+ .then ((response)=>{
+ localStorage.setItem('token', response.data.token)
+ alert("Endereço cadastrado com sucesso!")
+ goToFeedPage(history)
+
+ })
+
+ .catch((error)=>{
+ alert("Deu ruim rapá!")
+ console.log(error)
+ })
+
+
+}
+
+export const EditAddress = (body, history) => {
+
+ axios
+ .put(`${baseUrl}/address`, body, axiosConfig)
+
+ .then ((response)=>{
+ localStorage.setItem('token', response.data.token)
+ alert("Endereço atualizado com sucesso!")
+ goToProfilePage(history)
+
+ })
+
+ .catch((error)=>{
+ alert("Deu ruim rapá!")
+ console.log(error)
+ })
+
+
+}
+
+
+export const UpdateProfile = (body, history) => {
+
+ axios
+ .put(`${baseUrl}/profile`, body, axiosConfig)
+
+ .then (()=>{
+ alert('Perfil alterado com sucesso!')
+ goToProfilePage(history)
+
+ })
+ .catch((error)=>{
+ alert('Deu ruim rapá!')
+ console.log(error.message)
+ })
+}
+
diff --git a/src/global/globalState.js b/src/global/globalState.js
new file mode 100644
index 0000000..4dd1ade
--- /dev/null
+++ b/src/global/globalState.js
@@ -0,0 +1,23 @@
+import React, { useState } from "react"
+import GlobalStateContex from "./globalStateContext"
+
+const GlobalState = (props) =>{
+ const [restaurante,setRestaurante] = useState({})
+ const [cart,setCart] = useState([])
+ const [profile, setProfile] = useState([])
+ const [idProduct, setIdProduct] = useState("")
+ const [orderBody,setOrderBody] = useState([])
+
+ const states = {restaurante,cart,profile,idProduct,orderBody}
+ const setters = {setRestaurante,setCart,setProfile,setIdProduct,setOrderBody}
+
+
+ const data = {states,setters}
+
+ return(
+
+ {props.children}
+
+ )
+}
+export default GlobalState
\ No newline at end of file
diff --git a/src/global/globalStateContext.js b/src/global/globalStateContext.js
new file mode 100644
index 0000000..5ea1652
--- /dev/null
+++ b/src/global/globalStateContext.js
@@ -0,0 +1,5 @@
+import React from "react"
+
+const GlobalStateContext = React.createContext()
+
+export default GlobalStateContext
\ No newline at end of file
diff --git a/src/hooks/useForm.js b/src/hooks/useForm.js
new file mode 100644
index 0000000..a910fbf
--- /dev/null
+++ b/src/hooks/useForm.js
@@ -0,0 +1,16 @@
+import { StarRateSharp } from "@material-ui/icons";
+import { useState } from "react";
+
+export const useForm = (initialValues) => {
+ const [form, setForm] = useState(initialValues);
+
+ const onChange = (value, name) => {
+ setForm({ ...form, [name]: value});
+ };
+
+ const resetForm = () => {
+ setForm(initialValues);
+ };
+
+ return { form, onChange, resetForm };
+};
diff --git a/src/hooks/useFormModal.js b/src/hooks/useFormModal.js
new file mode 100644
index 0000000..148e111
--- /dev/null
+++ b/src/hooks/useFormModal.js
@@ -0,0 +1,19 @@
+import { StarRateSharp } from "@material-ui/icons";
+import { useState } from "react";
+import GlobalStateContext from "../global/globalStateContext"
+import React, { useContext } from 'react'
+
+export const useFormModal = (initialValues) => {
+ const [form, setForm] = useState(initialValues);
+ const {states,setters} =useContext(GlobalStateContext)
+
+ const onChange = (value, name) => {
+ setForm({ ...form, [name]: value, id: states.idProduct});
+ };
+
+ const resetForm = () => {
+ setForm(initialValues);
+ };
+
+ return { form, onChange, resetForm };
+};
diff --git a/src/hooks/useProtectedPage.js b/src/hooks/useProtectedPage.js
new file mode 100644
index 0000000..b71c550
--- /dev/null
+++ b/src/hooks/useProtectedPage.js
@@ -0,0 +1,15 @@
+import {useEffect} from "react"
+import {useHistory} from "react-router-dom"
+
+function useProtectedPage(){
+ const history = useHistory()
+
+ useEffect(()=>{
+ const token = localStorage.getItem("token")
+ if(!token){
+ history.push("/login")
+ }
+ })
+
+}
+export default useProtectedPage
\ No newline at end of file
diff --git a/src/hooks/useRequestData.js b/src/hooks/useRequestData.js
new file mode 100644
index 0000000..3791825
--- /dev/null
+++ b/src/hooks/useRequestData.js
@@ -0,0 +1,16 @@
+import { useEffect, useState } from "react"
+import axios from "axios"
+
+function useRequestData(url,initialState){
+const [data,setData] = useState(initialState)
+
+useEffect(()=>{
+ axios.get(url,{headers:{auth:localStorage.getItem("token")}}).then(response =>{
+ setData(response.data)
+ }).catch(error =>{
+ console.log(error)
+ })
+},[url])
+return data
+}
+export default useRequestData
\ No newline at end of file
diff --git a/src/hooks/useUnprotectedPage.js b/src/hooks/useUnprotectedPage.js
new file mode 100644
index 0000000..e8f7728
--- /dev/null
+++ b/src/hooks/useUnprotectedPage.js
@@ -0,0 +1,19 @@
+import {useEffect} from "react"
+import {useHistory} from "react-router-dom"
+
+
+function useUnProtectedPage(){
+
+ const history = useHistory()
+
+ useEffect(()=>{
+ const token = localStorage.getItem("token")
+ if(token){
+ history.push("/feed")
+ }
+ })
+
+}
+
+export default useUnProtectedPage
+
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
new file mode 100644
index 0000000..db58051
--- /dev/null
+++ b/src/router/coordinator.js
@@ -0,0 +1,35 @@
+export const goToFeedPage = (history) => {
+ history.push('/feed')
+}
+
+export const goToLoginPage = (history) => {
+ history.push('/login')
+}
+
+export const goToSignUpPage = (history) => {
+ history.push('/signup')
+}
+
+export const goToAdressPage = (history) => {
+ history.push ('/endereco')
+}
+
+export const goToRestaurantPage = (history, id) => {
+ history.push (`/restaurantes/${id}`)
+}
+
+export const goToProfilePage = (history) =>{
+ history.push('/perfil')
+}
+
+export const goToEditProfile = (history) =>{
+ history.push('/editprofile')
+}
+
+export const goToCart = (history, id) =>{
+ history.push(`/carrinho/${id}`)
+}
+
+export const goToEditAddress = (history) =>{
+ history.push('/editaddress')
+}
\ No newline at end of file
diff --git a/src/router/router.js b/src/router/router.js
new file mode 100644
index 0000000..304808e
--- /dev/null
+++ b/src/router/router.js
@@ -0,0 +1,59 @@
+import React from "react"
+import {BrowserRouter, Route, Switch} from "react-router-dom"
+import AddressPage from "../screens/addressPage/addressPage"
+import FeedPage from "../screens/FeedPage/FeedPage"
+import InitialPage from "../screens/InitialPage/InitialPage"
+import LoginPage from "../screens/loginPage/loginPage"
+import EditProfilePage from "../screens/profilePage/editProfilePage"
+import RestaurantPage from "../screens/RestaurantPage/RestaurantPage"
+import ProfilePage from "../screens/profilePage/profilePage"
+import SignupPage from "../screens/signupPage/signupPage"
+import ErrorPage from "../screens/ErrorPage/ErrorPage"
+import CartPage from "../screens/cartPage/cartPage"
+import EditAddressPage from '../screens/profilePage/editAddressPage'
+
+function Router(){
+return(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)
+}
+export default Router
\ No newline at end of file
diff --git a/src/screens/ErrorPage/ErrorPage.js b/src/screens/ErrorPage/ErrorPage.js
new file mode 100644
index 0000000..998fbaf
--- /dev/null
+++ b/src/screens/ErrorPage/ErrorPage.js
@@ -0,0 +1,25 @@
+
+import React, { useEffect, useState } from 'react'
+import { useHistory } from 'react-router-dom'
+import Footer from '../../components/Footer/Footer'
+import { goToFeedPage } from '../../router/coordinator'
+import { ButtonStyled, ErrorPageContainer } from './styles'
+
+
+const ErrorPage = () => {
+ const history = useHistory()
+
+ return (
+
+
+
+ Desculpe. Página inexistente.
+ goToFeedPage(history)}>Voltar para Início
+
+
+
+
+ )
+}
+
+export default ErrorPage
\ No newline at end of file
diff --git a/src/screens/ErrorPage/styles.js b/src/screens/ErrorPage/styles.js
new file mode 100644
index 0000000..0930265
--- /dev/null
+++ b/src/screens/ErrorPage/styles.js
@@ -0,0 +1,26 @@
+import styled from 'styled-components'
+import { Button } from '@material-ui/core'
+
+export const ErrorPageContainer = styled.div `
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: auto;
+ padding: 0;
+ width: 360px;
+ height: 640px;
+ border: 1px black solid;
+`
+export const ButtonStyled = styled.button `
+ border: 3px #5cb646 solid;
+ background-color: transparent;
+ color: #5cb646;
+ margin: 20px;
+ padding: 10px;
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ &:hover {
+ cursor: pointer;
+ }
+`
\ No newline at end of file
diff --git a/src/screens/FeedPage/FeedPage.js b/src/screens/FeedPage/FeedPage.js
new file mode 100644
index 0000000..b99dc71
--- /dev/null
+++ b/src/screens/FeedPage/FeedPage.js
@@ -0,0 +1,231 @@
+import axios from "axios";
+import React, { useEffect, useState } from "react";
+import Header from "../../components/Header/Header";
+import {
+ CardsContainer,
+ FeedPageContainer,
+ Filter,
+ FilterContainer,
+ InputContainer,
+ InputStyled,
+ LoadingContainer,
+ ProgressContainer,
+ OrderProgress,
+ RestaurantName,
+ TotalPrice,
+ } from "./styles";
+import { baseUrl } from "../../constants/constants";
+import CardFeed from "../../components/CardFeed/CardFeed";
+import LoadingInvert from "../../components/LoadingInvert/LoadingInvert";
+import { useHistory } from "react-router-dom";
+import Footer from "../../components/Footer/Footer";
+
+
+const FeedPage = () => {
+ const history = useHistory();
+ const [restaurants, setRestaurants] = useState([]);
+ const [filteredRestaurants, setFilteredRestaurants] = useState([]);
+ const [categoryRestaurants, setCategoryRestaurants] = useState([]);
+ const [searchContent, setSearchContent] = useState("");
+ const [filter, setFilter] = useState("");
+ const [order, setOrder] = useState(null);
+
+ useEffect(() => {
+ getActiveOrder();
+
+ axios
+ .get(`${baseUrl}/restaurants`, {
+ headers: {
+ auth: localStorage.getItem("token"),
+ },
+ })
+ .then((res) => {
+ setRestaurants(res.data.restaurants);
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+ }, []);
+
+ const SearchFilter = (e) => {
+ if (filter === "") {
+ const searchArray = restaurants.filter((restaurant) => {
+ const name = restaurant.name.toLowerCase();
+ return name.includes(e.target.value.toLowerCase());
+ });
+ setFilteredRestaurants(searchArray);
+ setSearchContent(e.target.value);
+ } else {
+ const searchArray = categoryRestaurants.filter((restaurant) => {
+ const name = restaurant.name.toLowerCase();
+ return name.includes(e.target.value.toLowerCase());
+ });
+ setFilteredRestaurants(searchArray);
+ setSearchContent("");
+ }
+ };
+
+ const FilterCategory = (category) => {
+ const filteredArray = restaurants.filter((restaurant) => {
+ return restaurant.category === category;
+ });
+ setFilteredRestaurants(filteredArray);
+ setCategoryRestaurants(filteredArray);
+ setFilter(category);
+ };
+
+ function goBack() {
+ window.history.back();
+ }
+
+ const getActiveOrder = () => {
+ axios
+ .get(`${baseUrl}/active-order`, {
+ headers: {
+ auth: localStorage.getItem("token"),
+ },
+ })
+ .then((response) => {
+ setOrder(response.data.order)
+
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+ };
+
+ return (
+
+
+
+
+
+
+
+ FilterCategory("")}>
+ {filter === "" ? (
+ Todos
+ ) : (
+ Todos
+ )}
+
+ FilterCategory("Árabe")}>
+ {filter === "Árabe" ? (
+ Árabe
+ ) : (
+ Árabe
+ )}
+
+ FilterCategory("Asiática")}>
+ {filter === "Asiática" ? (
+ Asiática
+ ) : (
+ Asiática
+ )}
+
+ FilterCategory("Baiana")}>
+ {filter === "Baiana" ? (
+ Baiana
+ ) : (
+ Baiana
+ )}
+
+ FilterCategory("Carnes")}>
+ {filter === "Carnes" ? (
+ Carnes
+ ) : (
+ Carnes
+ )}
+
+ FilterCategory("Hamburguer")}>
+ {filter === "Hamburguer" ? (
+ Hamburguer
+ ) : (
+ Hamburguer
+ )}
+
+ FilterCategory("Italiana")}>
+ {filter === "Italiana" ? (
+ Italiana
+ ) : (
+ Italiana
+ )}
+
+ FilterCategory("Mexicana")}>
+ {filter === "Mexicana" ? (
+ Mexicana
+ ) : (
+ Mexicana
+ )}
+
+ FilterCategory("Sorvetes")}>
+ {filter === "Sorvetes" ? (
+ Sorvetes
+ ) : (
+ Sorvetes
+ )}
+
+ FilterCategory("Petiscos")}>
+ {filter === "Petiscos" ? (
+ Petiscos
+ ) : (
+ Petiscos
+ )}
+
+
+
+ {restaurants.length === 0 ? (
+
+
+
+ ) : searchContent === "" && filter === "" ? (
+ restaurants.map((restaurant) => {
+ return (
+
+ );
+ })
+ ) : (
+
+ {filteredRestaurants.length === 0 ? (
+
Não encontramos :(
+ ) : (
+ ""
+ )}
+ {filteredRestaurants.map((restaurant) => {
+ return (
+
+ );
+ })}
+
+ )}
+
+
+
+
+
+ {order && (
+
+ Pedido em Andamento
+ {order.restaurantName}
+ SUBTOTAL: R$ {order.totalPrice}
+
+ )}
+
+ );
+};
+
+export default FeedPage;
diff --git a/src/screens/FeedPage/styles.js b/src/screens/FeedPage/styles.js
new file mode 100644
index 0000000..9c6bddf
--- /dev/null
+++ b/src/screens/FeedPage/styles.js
@@ -0,0 +1,111 @@
+import styled from 'styled-components'
+
+export const FeedPageContainer = styled.div `
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: auto;
+ padding: 0;
+ width: 360px;
+ height: 640px;
+ border: 1px black solid;
+`
+export const CardsContainer = styled.div `
+ height: 435px;
+ text-align: center;
+ overflow: auto;
+`
+export const InputContainer = styled.div `
+ text-align: center;
+ margin-top: 10px;
+`
+export const FilterContainer = styled.div `
+ display: flex;
+ align-items: center;
+ width: 330px;
+ height: 42px;
+ margin-left: 8px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+`
+export const Filter = styled.p `
+ margin-right: 10px;
+ &:hover{
+ cursor: pointer;
+ }
+`
+export const InputStyled = styled.input `
+ height: 56px;
+ width: 328px;
+`
+export const LoadingContainer = styled.div `
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-top: 180px;
+`
+
+export const ProgressContainer = styled.div`
+ width: 315px;
+ height: 130px;
+ margin-top: 350px;
+
+ padding: 24px;
+ background-color: #5cb646;
+ position: fixed;
+ display: flex;
+ flex-direction: column;
+ /* margin: 99px 0 49px; */
+`;
+
+export const OrderProgress = styled.p`
+ width: 256px;
+ height: 18px;
+ /* margin: 0 0 2px 24px; */
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #ffffff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+export const RestaurantName = styled.p`
+ width: 256px;
+ height: 18px;
+ /* margin: 8px 0 8px 24px; */
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+export const TotalPrice = styled.h3`
+ width: 256px;
+ height: 18px;
+ /* margin: 8px 0 0 24px; */
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: bold;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
\ No newline at end of file
diff --git a/src/screens/InitialPage/InitialPage.js b/src/screens/InitialPage/InitialPage.js
new file mode 100644
index 0000000..3035371
--- /dev/null
+++ b/src/screens/InitialPage/InitialPage.js
@@ -0,0 +1,25 @@
+import React, { useEffect } from 'react'
+import { useHistory } from 'react-router-dom'
+import { goToLoginPage } from '../../router/coordinator'
+import { InitialPageContainer } from './styles'
+import Loading from '../../components/Loading/Loading'
+
+const InitialPage = () => {
+
+ useEffect(()=>{
+ setTimeout(RedirectToLogin, 4500);
+ },[])
+
+ const history = useHistory()
+ function RedirectToLogin() {
+ goToLoginPage(history)
+ }
+
+ return (
+
+
+
+ )
+}
+
+export default InitialPage
\ No newline at end of file
diff --git a/src/screens/InitialPage/styles.js b/src/screens/InitialPage/styles.js
new file mode 100644
index 0000000..5b6d793
--- /dev/null
+++ b/src/screens/InitialPage/styles.js
@@ -0,0 +1,19 @@
+import styled from 'styled-components'
+
+export const InitialPageContainer = styled.div `
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 360px;
+ height: 640px;
+ background-color: #000000;
+ margin: auto;
+`
+export const Title = styled.h1 `
+ color: white;
+`
+export const Logo_FutureEats = styled.img `
+ width: 126px;
+ height: 65px;
+ object-fit: contain;
+`
diff --git a/src/screens/RestaurantPage/RestaurantPage.js b/src/screens/RestaurantPage/RestaurantPage.js
new file mode 100644
index 0000000..1081142
--- /dev/null
+++ b/src/screens/RestaurantPage/RestaurantPage.js
@@ -0,0 +1,127 @@
+import axios from 'axios'
+import React, { useEffect, useState, useContext } from 'react'
+import { useHistory, useParams } from 'react-router-dom'
+import CardProduct from '../../components/CardProduct/CardProduct'
+import Header from '../../components/Header/Header'
+import { baseUrl } from '../../constants/constants'
+import { RestaurantPageContainer, ImageRestaurant, RestaurantContainer, InfoContainer, InfoName, InfoText, ImageContainer, LoadingContainer, CardsContainer, ModalContainer, ModalButton, ModalButtonContainer, SelectStyled, ModalBackground, FormStyled } from './styles'
+import LoadingInvert from '../../components/LoadingInvert/LoadingInvert'
+import { useForm } from '../../hooks/useForm'
+import GlobalStateContext from "../../global/globalStateContext"
+
+const RestaurantPage = () => {
+ const history = useHistory()
+ const params = useParams()
+ const {form, onChange, resetState} = useForm({ quantity: "" , id: "" })
+ const [restaurantDetails, setRestaurantDetails] = useState([])
+ const {states,setters} = useContext(GlobalStateContext)
+
+ const handleInputChange = (event) => {
+ const { value, name } = event.target
+ onChange(value, name)
+ }
+
+ useEffect(()=> {
+ axios.get(`${baseUrl}/restaurants/${params.id}`,
+ {
+ headers:{
+ auth: localStorage.getItem("token")
+ }
+ })
+ .then((res)=>{
+ setRestaurantDetails(res.data.restaurant)
+ })
+ .catch((err)=>{
+ console.log(err)
+ })
+ },[])
+
+ function goBack() {
+ window.history.back()
+ }
+
+ let modalBack = document.getElementById("modalBack")
+ let modalContent = document.getElementById("modalContent")
+
+ function showModal() {
+ modalBack.style.display = "block";
+ modalContent.style.display = "flex";
+ }
+
+ function hideModal(event) {
+ event.preventDefault()
+ modalBack.style.display = "none";
+ modalContent.style.display = "none";
+ setters.setOrderBody(orderBody=>[...orderBody,{quantity:Number(form.quantity),
+ id:states.idProduct}])
+ }
+
+ const goToCartPage =() =>{
+ history.push(`/carrinho/${params.id}`)
+ }
+
+
+
+ return (
+
+
+ )
+}
+
+export default RestaurantPage
\ No newline at end of file
diff --git a/src/screens/RestaurantPage/styles.js b/src/screens/RestaurantPage/styles.js
new file mode 100644
index 0000000..4d6c283
--- /dev/null
+++ b/src/screens/RestaurantPage/styles.js
@@ -0,0 +1,97 @@
+import styled from 'styled-components'
+
+export const RestaurantPageContainer = styled.div `
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: auto;
+ width: 360px;
+ height: 640px;
+ border: 1px black solid;
+`
+export const ImageRestaurant = styled.img `
+ max-height: 120px;
+`
+export const RestaurantContainer = styled.div `
+ border: 1px transparent solid;
+ border-radius: 5px;
+ margin: 8px;
+ text-align: left;
+`
+export const InfoContainer = styled.div `
+ display: flex;
+ justify-content: space-between;
+`
+export const ImageContainer = styled.div `
+ text-align: center;
+`
+export const InfoText = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 1px;
+ margin: 4px;
+ color: #b8b8b8;
+`
+export const InfoName = styled.p `
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 1px;
+ margin: 4px;
+ color: #5cb646;
+`
+export const LoadingContainer = styled.div `
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`
+export const CardsContainer = styled.div `
+ height: 595px;
+ text-align: center;
+ margin-top: 40px;
+ overflow: auto;
+`
+export const ModalBackground = styled.div `
+ display: none;
+ background-color: #b8b8b8;
+ opacity: 0.7;
+ height: 640px;
+ width: 360px;
+ position: fixed;
+`
+export const ModalContainer = styled.div `
+ display: none;
+ flex-direction: column;
+ position: fixed;
+ justify-content: space-around;
+ border: 1px #b8b8b8 solid;
+ border-radius: 5px;
+ align-items: center;
+ background-color: white;
+ width: 328px;
+ height: 216px;
+`
+export const ModalButton = styled.button `
+ color: #5cb646;
+ background-color: transparent;
+ border: none;
+ align-self: right;
+ margin-top: 20px;
+ margin-left: auto;
+ margin-bottom: 20px;
+ &:hover {
+ cursor: pointer;
+ }
+`
+export const ModalButtonContainer = styled.div `
+ margin-left: auto;
+ margin-right: 10px;
+`
+export const SelectStyled = styled.select `
+ height: 56px;
+ width: 296px;
+ padding: 16px;
+`
+export const FormStyled = styled.form `
+ display: flex;
+ flex-direction: column;
+`
\ No newline at end of file
diff --git a/src/screens/addressPage/addressPage.js b/src/screens/addressPage/addressPage.js
new file mode 100644
index 0000000..7330247
--- /dev/null
+++ b/src/screens/addressPage/addressPage.js
@@ -0,0 +1,114 @@
+import React from 'react'
+import { Address } from '../../constants/user'
+import { useForm } from '../../hooks/useForm'
+import { useHistory } from 'react-router-dom'
+import useProtectedPage from '../../hooks/useProtectedPage'
+import { StyledAddress, Bar, TitleAddress, InputAddressDiv, InputAddress } from './styles'
+import { InputButton, Title } from '../signupPage/styles'
+
+
+
+const AddressPage = () => {
+
+ useProtectedPage()
+
+ const history = useHistory()
+ const { form, onChange } = useForm({ street: "", number: "", neighbourhood: "", city: "", state: "", complement: "" })
+
+ const handleInput = (event) => {
+ const { value, name } = event.target
+ onChange(value, name)
+ }
+
+ const handleSubmit = (event) => {
+ event.preventDefault()
+ Address(form, history)
+ }
+
+ return (
+
+
+
+
+
+
+
+ Meu endereço
+
+
+
+
+
+ )
+}
+
+export default AddressPage
\ No newline at end of file
diff --git a/src/screens/addressPage/styles.js b/src/screens/addressPage/styles.js
new file mode 100644
index 0000000..ddf4b0a
--- /dev/null
+++ b/src/screens/addressPage/styles.js
@@ -0,0 +1,67 @@
+import styled from 'styled-components'
+
+export const Bar = styled.div`
+ width: 420px;
+ height: 64px;
+ margin: 0 0 24px;
+ padding: 0 0 10px;
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ box-shadow: 0 0.5px 0 0 rgba(0, 0, 0, 0.25);
+ background-color: #ffffff;
+`
+
+export const StyledAddress = styled.div`
+width: 360px;
+ height: 640px;
+ padding: 0 0 36px;
+`
+
+export const TitleAddress = styled.div`
+width: 360px;
+ height: 42px;
+ margin: 16px 0 0;
+ padding: 12px 32px;
+`
+
+export const InputAddressDiv = styled.div`
+width: 360px;
+ height: 72px;
+ margin: 58px 0 0;
+ padding: 0 16px 8px;
+`
+
+export const InputAddress = styled.input`
+width: 328px;
+ height: 56px;
+ margin: 8px 0 0;
+ padding: 19px 48px 19px 16px;
+ border-radius: 2px;
+ border: solid 1px #b8b8b8;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+export const InputButton = styled.button`
+width: 328px;
+ height: 42px;
+ padding: 12px 16px;
+ border-radius: 2px;
+ background-color:#5cb646;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+ margin-top: 50px;
+ margin-left: 45px;
+`
\ No newline at end of file
diff --git a/src/screens/cartPage/cartPage.js b/src/screens/cartPage/cartPage.js
new file mode 100644
index 0000000..e21fd64
--- /dev/null
+++ b/src/screens/cartPage/cartPage.js
@@ -0,0 +1,92 @@
+import React, { useContext, useEffect, useState } from "react"
+import GlobalStateContext from "../../global/globalStateContext"
+import axios from "axios"
+import useProtectedPage from "../../hooks/useProtectedPage"
+import styled from "styled-components"
+import { useParams } from "react-router-dom"
+import CardProduct from "../../components/CardProduct/CardProduct"
+
+
+ const CartContainer = styled.div `
+ display: flex;
+ align-items: center;
+ margin: auto;
+ width: 360px;
+ height: 640px;
+ border: 1px black solid;
+ flex-direction:column;
+ overflow:auto;
+`
+const Button = styled.button`
+cursor: pointer;
+margin-top:5px;
+`
+const P = styled.p`
+margin:0px;
+`
+
+
+const CartPage = () =>{
+ useProtectedPage()
+ const {states,setters} = useContext(GlobalStateContext)
+ const [adress,setAdress] = useState({})
+ const [payment,setPayment] = useState()
+ const params = useParams()
+
+ useEffect(()=>{
+ axios.get(`https://us-central1-missao-newton.cloudfunctions.net/futureEatsA/profile/address`,
+ {headers:{
+ auth:localStorage.getItem("token")
+ }}).then(response =>{
+ setAdress(response.data.address)
+
+ })
+ },[])
+
+ const placeOrder = () =>{
+ axios.post(`https://us-central1-missao-newton.cloudfunctions.net/futureEatsA/restaurants/${params.id}/order`,{
+ products:states.orderBody,
+ paymentMethod:payment
+ },
+ {headers:{
+ auth:localStorage.getItem("token")}})
+ }
+
+ const handleOption = (event) =>{
+ setPayment(event.target.value)
+ }
+console.log(payment)
+console.log(states.orderBody)
+
+
+
+ return(
+
+ {states.cart.length === 0 ?
+ carrinho vazio
:
+ states.cart.map(item =>{
+ return(
+
+ )}
+ )}
+ Bairro:{adress.neighbourhood} / Numero:{adress.number}
+ Cidade:{adress.city} / Estado:{adress.state}
+ Rua:{adress.street}
+ Preço:R${(states.cart.reduce((a,v) => a = a + v.price , 0 ))}
+
+
+
+ )
+}
+export default CartPage
\ No newline at end of file
diff --git a/src/screens/loginPage/loginPage.js b/src/screens/loginPage/loginPage.js
new file mode 100644
index 0000000..bbab020
--- /dev/null
+++ b/src/screens/loginPage/loginPage.js
@@ -0,0 +1,80 @@
+import React from "react";
+import { useHistory } from "react-router-dom";
+import { login } from "../../constants/user";
+import { useForm } from "../../hooks/useForm";
+import useUnProtectedPage from "../../hooks/useUnprotectedPage";
+import { goToSignUpPage } from "../../router/coordinator";
+import logo from "../../assets/img/logo-future-eats-invert.png";
+import {
+ LoginContainer,
+ Logo,
+ TextLogin,
+ Title,
+ RectanglePassword,
+ RectangleEmail,
+ Input,
+ Button,
+ TextRegister,
+ DivRegister,
+
+} from "../loginPage/styled";
+
+function LoginPage() {
+ useUnProtectedPage();
+ const history = useHistory();
+ const { form, onChange } = useForm({ email: "", password: "" });
+
+ const handleInputChange = (event) => {
+ const { value, name } = event.target;
+ onChange(value, name);
+ };
+
+ const handleSubmit = (event) => {
+ event.preventDefault();
+ login(form, history);
+ };
+
+ return (
+
+
+
+ Entrar
+
+
+
+
+
+ goToSignUpPage(history)}>
+ Não possui cadastro? Clique aqui!
+
+
+
+ );
+}
+
+export default LoginPage;
diff --git a/src/screens/loginPage/styled.js b/src/screens/loginPage/styled.js
new file mode 100644
index 0000000..ab964a6
--- /dev/null
+++ b/src/screens/loginPage/styled.js
@@ -0,0 +1,106 @@
+import styled from "styled-components";
+
+export const LoginContainer = styled.div`
+ width: 360px;
+ height: 640px;
+ padding: 0 0 184px;
+ margin: auto;
+ border: 1px black solid;
+`;
+
+export const Logo = styled.img`
+width: 104px;
+ height: 58px;
+ margin: 68px 128px 16px;
+ object-fit: contain;
+
+`
+
+export const Title = styled.div`
+ width: 360px;
+ height: 42px;
+ margin: 16px 0 0;
+ padding: 12px 32px;
+`;
+
+export const TextLogin = styled.p`
+ width: 296px;
+ height: 18px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+`;
+
+export const RectangleEmail = styled.div`
+ width: 328px;
+ height: 56px;
+ margin: 8px 0 0;
+ padding: 19px 48px 19px 16px;
+ border-radius: 2px;
+ border: solid 1px var(--greyish);
+`;
+
+ export const RectanglePassword = styled.div`
+ width: 328px;
+ height: 56px;
+ margin: 8px 0 0;
+ padding: 16px;
+ border-radius: 2px;
+ border: solid 1px var(--greyish);
+ `;
+
+export const Input = styled.input`
+ width: 264px;
+ height: 18px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #d0d0d0;
+`;
+
+export const Button = styled.button`
+ width: 328px;
+ height: 42px;
+ padding: 12px 16px;
+ border-radius: 2px;
+ background-color: #5cb646;
+
+`;
+
+
+
+export const TextRegister = styled.p`
+ width: 296px;
+ height: 18px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+ cursor: pointer;
+`;
+
+
+
+export const DivRegister = styled.div`
+ width: 360px;
+ height: 42px;
+ margin: 16px 0 0;
+ padding: 12px 32px;
+`;
+
+
diff --git a/src/screens/profilePage/editAddressPage.js b/src/screens/profilePage/editAddressPage.js
new file mode 100644
index 0000000..f689cbe
--- /dev/null
+++ b/src/screens/profilePage/editAddressPage.js
@@ -0,0 +1,113 @@
+import React from 'react'
+import { EditAddress } from '../../constants/user'
+import { useForm } from '../../hooks/useForm'
+import { useHistory } from 'react-router-dom'
+import useProtectedPage from '../../hooks/useProtectedPage'
+import { StyledAddress, InputAddressDiv, InputAddress } from '../addressPage/styles'
+import { InputButton } from '../signupPage/styles'
+import Header from '../../components/Header/Header'
+import {goToProfilePage} from '../../router/coordinator'
+import {ButtonStyled} from '../../components/Header/styles'
+import ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos'
+import Footer from '../../components/Footer/Footer'
+
+
+
+const EditAddressPage = () => {
+
+ useProtectedPage()
+
+ const history = useHistory()
+ const { form, onChange } = useForm({ street: "", number: "", neighbourhood: "", city: "", state: "", complement: "" })
+
+ const handleInput = (event) => {
+ const { value, name } = event.target
+ onChange(value, name)
+ }
+
+ const handleSubmit = (event) => {
+ event.preventDefault()
+ EditAddress(form, history)
+ }
+
+ return (
+
+
+
+ {/* goToProfilePage(history)}> */}
+
+
+
+ )
+}
+
+export default EditAddressPage
\ No newline at end of file
diff --git a/src/screens/profilePage/editProfilePage.js b/src/screens/profilePage/editProfilePage.js
new file mode 100644
index 0000000..08fe04e
--- /dev/null
+++ b/src/screens/profilePage/editProfilePage.js
@@ -0,0 +1,72 @@
+import React from 'react'
+import { useHistory } from 'react-router-dom'
+import Header from '../../components/Header/Header'
+import { UpdateProfile } from '../../constants/user'
+import { useForm } from '../../hooks/useForm'
+import { EditProfileButton, EditProfileDiv, EditProfileInput, EditProfileInputDiv } from './styles'
+import {ButtonStyled} from '../../components/Header/styles'
+import ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos'
+import {goToProfilePage} from '../../router/coordinator'
+import Footer from '../../components/Footer/Footer'
+
+
+const EditProfilePage = () => {
+
+ const history = useHistory()
+ const { form, onChange } = useForm({ name: '', email: '', cpf: '' })
+
+ const handleInput = (event) => {
+ const { value, name } = event.target
+ onChange(value, name)
+ }
+
+ const handleSubmit = (event) => {
+ event.preventDefault()
+ UpdateProfile(form, history)
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ )
+}
+
+export default EditProfilePage
\ No newline at end of file
diff --git a/src/screens/profilePage/profilePage.js b/src/screens/profilePage/profilePage.js
new file mode 100644
index 0000000..768c28d
--- /dev/null
+++ b/src/screens/profilePage/profilePage.js
@@ -0,0 +1,80 @@
+import React from "react";
+import { useHistory } from "react-router-dom";
+import { baseUrl } from "../../constants/constants";
+import useProtectedPage from "../../hooks/useProtectedPage";
+import useRequestData from "../../hooks/useRequestData";
+import {
+ goToEditAddress,
+ goToEditProfile,
+ goToFeedPage,
+} from "../../router/coordinator";
+import Header from '../../components/Header/Header'
+import {ButtonStyled} from '../../components/Header/styles'
+import Edit from '../../assets/img/edit-profile.svg'
+import CardOrder from "../../components/CardOrder/cardOrder"
+import { EditProfile, Profile, ProfileAddress, ProfileAddressTitle, ProfileCPF, ProfileEmail, ProfileEmailDiv, ProfileName } from './styles'
+import {HistoryOrderLine, HistoryOrderTitle, HistoryOrderZero, HistoryOrderZeroInside} from '../../components/CardOrder/styles'
+import Footer from '../../components/Footer/Footer'
+
+const ProfilePage = () => {
+ useProtectedPage();
+
+ const history = useHistory();
+
+ const profileInfo = useRequestData(`${baseUrl}/profile`, undefined);
+ const ordersHistory = useRequestData(`${baseUrl}/orders/history`);
+
+
+
+ return profileInfo ? (
+
+
+ goToFeedPage(history)}>Voltar
+
+
Nome: {profileInfo.user.name}
+
Email: {profileInfo.user.email}
+
CPF: {profileInfo.user.cpf}
+
goToEditProfile(history)} />
+
+
+
+ Endereço cadastrado:
+ {profileInfo.user.address}
+ goToEditAddress(history)} />
+
+
+
+
+
+ Histórico de Pedidos
+
+ {ordersHistory && ordersHistory.orders.length > 0 ? (
+ ordersHistory.orders.map((order) => {
+ return (
+
+ );
+ })
+ ) : (
+
+ Você não realizou nenhum pedido
+
+ )}
+
+
+
+
+
+ ) : (
+
+ );
+
+};
+
+export default ProfilePage;
diff --git a/src/screens/profilePage/styles.js b/src/screens/profilePage/styles.js
new file mode 100644
index 0000000..863dce5
--- /dev/null
+++ b/src/screens/profilePage/styles.js
@@ -0,0 +1,139 @@
+import styled from 'styled-components'
+
+export const Profile = styled.div`
+width: 360px;
+ height: 640px;
+`
+
+export const ProfileName = styled.p`
+width: 328px;
+ height: 18px;
+ margin: 16px 16px 8px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const ProfileEmail = styled.p`
+width: 328px;
+ height: 18px;
+ margin: 2px 16px 8px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const ProfileCPF = styled.p`
+width: 328px;
+ height: 18px;
+ margin: 8px 16px 16px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const ProfileEmailDiv = styled.div`
+width: 360px;
+ height: 76px;
+ margin: 16px 0;
+ padding: 16px;
+ background-color: #eeeeee;
+`
+
+export const EditProfile = styled.img`
+width: 24px;
+ height: 24px;
+ margin: 10px 0 10px 314px;
+ object-fit: contain;
+`
+
+export const ProfileAddressTitle = styled.p`
+width: 328px;
+ height: 18px;
+ margin: 0 0 8px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: var(--greyish);
+`
+
+export const ProfileAddress = styled.p`
+width: 328px;
+ height: 18px;
+ margin: 8px 0 0;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const EditProfileDiv = styled.div`
+width: 360px;
+ height: 640px;
+`
+
+export const EditProfileInputDiv = styled.div`
+width: 360px;
+ height: 72px;
+ margin: 58px 0 0;
+ padding: 0 16px 8px;
+`
+
+export const EditProfileInput = styled.input`
+width: 328px;
+ height: 56px;
+ margin: 8px 0 0;
+ padding: 19px 48px 19px 16px;
+ border-radius: 2px;
+ border: solid 1px #b8b8b8;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+
+export const EditProfileButton = styled.button`
+width: 328px;
+ height: 42px;
+ padding: 12px 16px;
+ border-radius: 2px;
+ background-color:#5cb646;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+ margin-top: 50px;
+ margin-left: 45px;
+`
\ No newline at end of file
diff --git a/src/screens/signupPage/signupPage.js b/src/screens/signupPage/signupPage.js
new file mode 100644
index 0000000..2de5b38
--- /dev/null
+++ b/src/screens/signupPage/signupPage.js
@@ -0,0 +1,131 @@
+import React from 'react'
+import { useHistory } from 'react-router-dom'
+import { useForm } from '../../hooks/useForm'
+import { signUp } from '../../constants/user'
+import { goToAdressPage } from '../../router/coordinator'
+import useUnProtectedPage from '../../hooks/useUnprotectedPage'
+import { Bar, InputButton, InputSignUp, InputSignUpDiv, Logo_SignUp, SignUp, Title, TitleSignUp } from './styles'
+import SignUpLogo from '../../assets/img/logo-future-eats-invert.png'
+
+const SignupPage = () => {
+
+ useUnProtectedPage()
+
+ const history = useHistory()
+
+
+ const { form, onChange } = useForm({ name: "", email: "", cpf: "", password: "", confirmPassword: "" })
+
+ const handleInput = (event) => {
+ const { value, name } = event.target
+
+ onChange(value, name)
+ }
+
+ const handleSubmit = (event) => {
+ signUp(form, history)
+ }
+
+ const validate = (event) => {
+
+ const passwordOne = form.password
+ const passwordTwo = form.confirmPassword
+ event.preventDefault()
+
+ if (passwordOne === passwordTwo) {
+ handleSubmit()
+
+ } else {
+ alert("As senhas digitadas não são iguais!")
+ }
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ Cadastrar
+
+
+
+
+
+
+
+
+
+
+
+ )
+
+}
+
+export default SignupPage
\ No newline at end of file
diff --git a/src/screens/signupPage/styles.js b/src/screens/signupPage/styles.js
new file mode 100644
index 0000000..fc0e0d3
--- /dev/null
+++ b/src/screens/signupPage/styles.js
@@ -0,0 +1,88 @@
+import styled from 'styled-components'
+
+export const Bar = styled.div`
+ width: 420px;
+ height: 64px;
+ margin: 0 0 24px;
+ padding: 0 0 10px;
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ box-shadow: 0 0.5px 0 0 rgba(0, 0, 0, 0.25);
+ background-color: #ffffff;
+`
+
+export const SignUp = styled.div`
+width: 360px;
+ height: 640px;
+ padding: 0 0 26px;
+`
+
+export const Logo_SignUp = styled.img`
+width: 104px;
+ height: 58px;
+ margin: 24px 128px 16px;
+ object-fit: contain;
+`
+
+export const TitleSignUp = styled.div`
+width: 360px;
+ height: 42px;
+ margin: 16px 0 0;
+ padding: 12px 32px;
+`
+
+export const Title = styled.h1`
+width: 296px;
+ height: 18px;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+`
+
+export const InputSignUpDiv = styled.div`
+width: 360px;
+ height: 72px;
+ margin: 58px 0 0;
+ padding: 0 16px 8px;
+`
+
+export const InputSignUp = styled.input`
+width: 328px;
+ height: 56px;
+ margin: 8px 0 0;
+ padding: 19px 48px 19px 16px;
+ border-radius: 2px;
+ border: solid 1px #b8b8b8;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ color: #000000;
+`
+export const InputButton = styled.button`
+width: 328px;
+ height: 42px;
+ padding: 12px 16px;
+ border-radius: 2px;
+ background-color:#5cb646;
+ font-family: Roboto;
+ font-size: 16px;
+ font-weight: normal;
+ font-stretch: normal;
+ font-style: normal;
+ line-height: normal;
+ letter-spacing: -0.39px;
+ text-align: center;
+ color: #000000;
+ margin-top: 50px;
+ margin-left: 45px;
+`
\ No newline at end of file