From 7328954de7c06b972a2b8b6a8892bd0b53256e31 Mon Sep 17 00:00:00 2001 From: Emerson Fully <63175980+emersonfully@users.noreply.github.com> Date: Wed, 18 Jan 2023 22:34:51 -0300 Subject: [PATCH] feature(MainContent): Adiciona o conteudo principal do site e o Form --- package-lock.json | 195 +++++++++++++++++- package.json | 4 +- src/components/main/Form/CustomForm.scss | 132 ++++++++++++ src/components/main/Form/CustomForm.tsx | 129 ++++++++++++ src/components/main/Main.module.scss | 57 +++++ src/components/main/Main.tsx | 26 ++- .../main/TitleAndBreadCrumb/BreadCrumb.tsx | 26 +++ .../main/TitleAndBreadCrumb/Title.tsx | 6 + .../TitleAndBreadGrumb.module.scss | 33 +++ src/schema/FormSchema.ts | 19 ++ 10 files changed, 624 insertions(+), 3 deletions(-) create mode 100644 src/components/main/Form/CustomForm.scss create mode 100644 src/components/main/Form/CustomForm.tsx create mode 100644 src/components/main/Main.module.scss create mode 100644 src/components/main/TitleAndBreadCrumb/BreadCrumb.tsx create mode 100644 src/components/main/TitleAndBreadCrumb/Title.tsx create mode 100644 src/components/main/TitleAndBreadCrumb/TitleAndBreadGrumb.module.scss create mode 100644 src/schema/FormSchema.ts diff --git a/package-lock.json b/package-lock.json index d445028..489b4a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,15 @@ "@types/node": "^16.18.11", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", + "formik": "^2.2.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-headless-accordion": "^1.0.2", "react-scripts": "5.0.1", "sass": "^1.57.1", "typescript": "^4.9.4", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "yup": "^0.32.11" } }, "node_modules/@adobe/css-tools": { @@ -3804,6 +3806,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -7983,6 +7990,42 @@ "node": ">= 6" } }, + "node_modules/formik": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/formik/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -8383,6 +8426,19 @@ "he": "bin/he" } }, + "node_modules/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==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -11466,6 +11522,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -11791,6 +11852,11 @@ "multicast-dns": "cli.js" } }, + "node_modules/nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -13693,6 +13759,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/property-expr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", + "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -14002,6 +14073,11 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "node_modules/react-headless-accordion": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-headless-accordion/-/react-headless-accordion-1.0.2.tgz", @@ -15553,6 +15629,11 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/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==" + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -15585,6 +15666,11 @@ "node": ">=0.6" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "node_modules/tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -16898,6 +16984,23 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yup": { + "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + }, + "engines": { + "node": ">=10" + } } }, "dependencies": { @@ -19485,6 +19588,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -22577,6 +22685,32 @@ "mime-types": "^2.1.12" } }, + "formik": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", + "requires": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -22848,6 +22982,21 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "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" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -25071,6 +25220,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -25316,6 +25470,11 @@ "thunky": "^1.0.2" } }, + "nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -26500,6 +26659,11 @@ } } }, + "property-expr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", + "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -26722,6 +26886,11 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "react-headless-accordion": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-headless-accordion/-/react-headless-accordion-1.0.2.tgz", @@ -27864,6 +28033,11 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "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==" + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -27887,6 +28061,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "tough-cookie": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", @@ -28890,6 +29069,20 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "yup": { + "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", + "requires": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + } } } } diff --git a/package.json b/package.json index fff2561..675403d 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,15 @@ "@types/node": "^16.18.11", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", + "formik": "^2.2.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-headless-accordion": "^1.0.2", "react-scripts": "5.0.1", "sass": "^1.57.1", "typescript": "^4.9.4", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "yup": "^0.32.11" }, "scripts": { "start": "react-scripts start", diff --git a/src/components/main/Form/CustomForm.scss b/src/components/main/Form/CustomForm.scss new file mode 100644 index 0000000..887e4c0 --- /dev/null +++ b/src/components/main/Form/CustomForm.scss @@ -0,0 +1,132 @@ +.form-wrapper { + width: 100%; + max-width: 720px; + min-height: 100vh; + margin: 0 auto; + padding: 0 12px; + + display: flex; + justify-content: center; + align-items: center; +} + +.form-wrapper form { + width: 100%; +} + +.form-wrapper h2 { + font-size: 36px; + text-align: center; + + color: #292929; + + margin: 0 0 32px 0; +} + +.form-col { + display: flex; + flex-direction: column; + padding-bottom: 18px; + margin-bottom: 12px; + position: relative; +} + +.form-col label { + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 16px; + + color: #100d0e; + margin: 0 0 12px 12px; +} + +.form-col input { + height: 36px; + border-radius: 25px; + border: 1px solid #ccc; + outline: 0; + + padding: 0 12px; + + font-size: 14px; + color: black; +} + +.form-col input.invalid { + border-color: #c70039; +} + +.form-col textarea { + min-height: 64px; + padding: 12px; + max-width: calc(100% - 24px); + min-width: calc(100% - 24px); + + border-radius: 4px; + border: 1px solid #ccc; + outline: 0; + + font-size: 14px; + color: black; +} + +.form-wrapper button { + width: 100%; + height: 48px; + + border: none; + background-color: #292929; + border-radius: 4px; + cursor: pointer; + + font-size: 12px; + text-transform: uppercase; + color: white; +} + +.form-wrapper button:hover { + filter: brightness(80%); +} + +.form-checkbox-wrapper { + display: flex; + justify-content: center; + margin: 12px 0; +} + +.form-checkbox-wrapper span { + color: red; +} + +.form-checkbox-declaration { + margin: 0 5px; + color: black !important; + text-decoration: underline; +} + +.form-button { + width: 100%; + padding: 15px; + margin-bottom: 70px; + background-color: black; + border: none; + border-radius: 25px; + + color: white; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.form-invalid-feedback { + position: absolute; + right: 16px; + top: 14px; + + font-size: 12px; + color: red; +} diff --git a/src/components/main/Form/CustomForm.tsx b/src/components/main/Form/CustomForm.tsx new file mode 100644 index 0000000..c3a9ea6 --- /dev/null +++ b/src/components/main/Form/CustomForm.tsx @@ -0,0 +1,129 @@ +import React from "react"; + +import { Formik, Form, Field, ErrorMessage, FormikHelpers } from "formik"; + +import "./CustomForm.scss"; +import FormSchema from "../../../schema/FormSchema"; + +interface IFormikValues { + name: string; + email: string; + phone: string; + message: string; + birthdate: string; + instagram: string; +} + +const initialValues = { + name: "", + email: "", + phone: "", + message: "", + birthdate: "", + instagram: "", +}; + +const CustomForm = () => { + const handleFormikSubmit = (values: IFormikValues) => {}; + return ( + + {({ errors, touched }) => ( +
+

Preencha o Formulário

+
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ * + + Declaro que li e aceito + + +
+ + +
+ )} +
+ ); +}; + +export { CustomForm }; diff --git a/src/components/main/Main.module.scss b/src/components/main/Main.module.scss new file mode 100644 index 0000000..d8979ef --- /dev/null +++ b/src/components/main/Main.module.scss @@ -0,0 +1,57 @@ +.menu__container { + width: 100%; + display: flex; + justify-content: center; + + @media screen and (min-width: 1025px) { + padding: 0 100px; + } + @media screen and (max-width: 1024px) { + flex-direction: column; + } +} + +.menu__wrapper { + @media screen and (max-width: 1024px) { + width: 100%; + padding: 16px; + } +} + +.menu__items { + display: flex; + flex-direction: column; + + li { + padding: 16px; + border-right: 1px solid black; + width: 302px; + cursor: pointer; + + @media screen and (max-width: 1024px) { + width: 100%; + border: none; + } + + &:hover { + background: black; + color: white; + } + } +} + +.menu__description { + width: 100%; + padding: 0 16px; + + h2 { + margin-bottom: 20px; + @media screen and (max-width: 1024px) { + text-align: center; + } + } + + @media screen and (max-width: 1024px) { + width: 100%; + } +} diff --git a/src/components/main/Main.tsx b/src/components/main/Main.tsx index f9a42a6..0eb6218 100644 --- a/src/components/main/Main.tsx +++ b/src/components/main/Main.tsx @@ -1,6 +1,30 @@ import React from "react"; +import { CustomForm } from "./Form/CustomForm"; +import style from "./Main.module.scss"; +import { BreadCrumb } from "./TitleAndBreadCrumb/BreadCrumb"; +import { Title } from "./TitleAndBreadCrumb/Title"; const Main = () => { - return

Institucional

; + return ( +
+ + + <div className={style.menu__container}> + <div className={style.menu__wrapper}> + <ul className={style.menu__items}> + <li>Sobre</li> + <li>Forma de Pagamento</li> + <li>Entrega</li> + <li>Troca e Devolução</li> + <li>Seguraça e Privacidade</li> + <li>Contato</li> + </ul> + </div> + <div className={style.menu__description}> + <CustomForm /> + </div> + </div> + </main> + ); }; export { Main }; diff --git a/src/components/main/TitleAndBreadCrumb/BreadCrumb.tsx b/src/components/main/TitleAndBreadCrumb/BreadCrumb.tsx new file mode 100644 index 0000000..a3028a5 --- /dev/null +++ b/src/components/main/TitleAndBreadCrumb/BreadCrumb.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import Home from "../../../assets/svgs/homebutton.svg"; +import ArromRight from "../../../assets/svgs/arrowright.svg"; +import style from "./TitleAndBreadGrumb.module.scss"; + +const BreadCrumb = () => { + return ( + <nav className={style.breadgrumb__wrapper}> + <ul className={style.breadgrumb__ul}> + <li> + <a href="/"> + <img src={Home} alt="" /> + </a> + </li> + <li> + <img src={ArromRight} alt="" /> + </li> + <li> + <a href="/">Institucional</a> + </li> + </ul> + </nav> + ); +}; + +export { BreadCrumb }; diff --git a/src/components/main/TitleAndBreadCrumb/Title.tsx b/src/components/main/TitleAndBreadCrumb/Title.tsx new file mode 100644 index 0000000..5472d0f --- /dev/null +++ b/src/components/main/TitleAndBreadCrumb/Title.tsx @@ -0,0 +1,6 @@ +import React from "react"; +import style from "./TitleAndBreadGrumb.module.scss"; +const Title = () => { + return <h1 className={style.main__title}>Institucional</h1>; +}; +export { Title }; diff --git a/src/components/main/TitleAndBreadCrumb/TitleAndBreadGrumb.module.scss b/src/components/main/TitleAndBreadCrumb/TitleAndBreadGrumb.module.scss new file mode 100644 index 0000000..c3ffd5d --- /dev/null +++ b/src/components/main/TitleAndBreadCrumb/TitleAndBreadGrumb.module.scss @@ -0,0 +1,33 @@ +.breadgrumb__wrapper { + margin: 29px 100px; + @media screen and (max-width: 1024px) { + margin: 29px 16px; + } +} +.breadgrumb__ul { + display: flex; + flex-direction: row; + + & a { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 14px; + text-transform: uppercase; + + color: #c4c4c4; + } +} + +.main__title { + text-align: center; + margin: 80px 0; + font-style: normal; + font-weight: 400; + font-size: 24px; + line-height: 28px; + letter-spacing: 0.1em; + text-transform: uppercase; + + color: #292929; +} diff --git a/src/schema/FormSchema.ts b/src/schema/FormSchema.ts new file mode 100644 index 0000000..9785117 --- /dev/null +++ b/src/schema/FormSchema.ts @@ -0,0 +1,19 @@ +import * as Yup from "yup"; + +export default Yup.object().shape({ + name: Yup.string().required("*Campo Obrigatório"), + email: Yup.string().required("*Campo Obrigatório").email("Email inválido"), + phone: Yup.string() + .required("*Campo Obrigatório") + .matches(/^\(?\d{2}\)?[\s-]?\d{4,5}[-]?\d{4}$/), + birthdate: Yup.date() + .required("*Campo Obrigatório") + .min(new Date("1900-01-01"), "Data Invalida") + .max(new Date(), "Não é possível incluir uma data futura"), + instagram: Yup.string() + .matches( + /^(?:@)?([A-Za-z0-9_](?:(?:[A-Za-z0-9_]|(?:\.(?!\.))){0,28}(?:[A-Za-z0-9_]))?)$/, + "Invalid Instagram handle" + ) + .required("*Campo Obrigatório"), +});