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 ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+ + + ); } 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 + +