From a5506c4c96ef1645ece0e7eef5a3d2e4b8504ecf Mon Sep 17 00:00:00 2001 From: priyanshuvish Date: Thu, 19 Sep 2024 17:29:17 +0530 Subject: [PATCH] stepper next function pending --- package-lock.json | 49 ++++ package.json | 2 + src/App.css | 10 +- .../Onboarding/OnboardingAboutCompany.jsx | 146 +++++++++++ .../OnboardingAddCompanyDetails.jsx | 166 +++++++++++++ .../Onboarding/OnboardingDirectorDetails.jsx | 228 ++++++++++++++++++ src/Pages/Onboarding/OnboardingFrame.jsx | 27 ++- .../Onboarding/OnboardingSelectPackage.jsx | 108 +++++++++ .../Onboarding/OnboardingYourDetails.jsx | 31 ++- src/assets/o-benefits.svg | 9 + src/assets/o-expense.svg | 9 + src/assets/o-gift.svg | 9 + 12 files changed, 777 insertions(+), 17 deletions(-) create mode 100644 src/Pages/Onboarding/OnboardingAboutCompany.jsx create mode 100644 src/Pages/Onboarding/OnboardingAddCompanyDetails.jsx create mode 100644 src/Pages/Onboarding/OnboardingDirectorDetails.jsx create mode 100644 src/Pages/Onboarding/OnboardingSelectPackage.jsx create mode 100644 src/assets/o-benefits.svg create mode 100644 src/assets/o-expense.svg create mode 100644 src/assets/o-gift.svg diff --git a/package-lock.json b/package-lock.json index f85cd87..329b836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "dotenv": "^16.4.5", "framer-motion": "^11.1.5", "js-cookie": "^3.0.5", + "libphonenumber-js": "^1.11.8", "react": "^18.2.0", "react-apexcharts": "^1.4.1", "react-beautiful-dnd": "^13.1.1", @@ -28,6 +29,7 @@ "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-icons": "^5.1.0", + "react-phone-input-2": "^2.15.1", "react-quill": "^0.0.2", "react-redux": "^9.1.1", "react-router-dom": "^6.22.3", @@ -2973,6 +2975,11 @@ "pnpm": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "node_modules/codepage": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", @@ -4671,6 +4678,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.8.tgz", + "integrity": "sha512-0fv/YKpJBAgXKy0kaS3fnqoUVN8901vUYAKIGD/MWZaDfhJt1nZjPL3ZzdZBt/G8G8Hw2J1xOIrXWdNHFHPAvg==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4700,6 +4712,16 @@ "rhino" ] }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4711,6 +4733,16 @@ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" + }, + "node_modules/lodash.startswith": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", + "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5305,6 +5337,23 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-phone-input-2": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/react-phone-input-2/-/react-phone-input-2-2.15.1.tgz", + "integrity": "sha512-W03abwhXcwUoq+vUFvC6ch2+LJYMN8qSOiO889UH6S7SyMCQvox/LF3QWt+cZagZrRdi5z2ON3omnjoCUmlaYw==", + "dependencies": { + "classnames": "^2.2.6", + "lodash.debounce": "^4.0.8", + "lodash.memoize": "^4.1.2", + "lodash.reduce": "^4.6.0", + "lodash.startswith": "^4.2.1", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^16.12.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0", + "react-dom": "^16.12.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0" + } + }, "node_modules/react-quill": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-0.0.2.tgz", diff --git a/package.json b/package.json index fc21f64..0033a38 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dotenv": "^16.4.5", "framer-motion": "^11.1.5", "js-cookie": "^3.0.5", + "libphonenumber-js": "^1.11.8", "react": "^18.2.0", "react-apexcharts": "^1.4.1", "react-beautiful-dnd": "^13.1.1", @@ -30,6 +31,7 @@ "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-icons": "^5.1.0", + "react-phone-input-2": "^2.15.1", "react-quill": "^0.0.2", "react-redux": "^9.1.1", "react-router-dom": "^6.22.3", diff --git a/src/App.css b/src/App.css index 2ea00d6..38caa2f 100644 --- a/src/App.css +++ b/src/App.css @@ -502,4 +502,12 @@ a.active{ 80% { opacity: 0; } -} \ No newline at end of file +} + +.react-tel-input .selected-flag:hover, .react-tel-input .selected-flag:focus { + background-color: transparent !important; +} +.react-tel-input .selected-flag { + background: transparent !important; + padding: 0 0 0 16px !important; +} diff --git a/src/Pages/Onboarding/OnboardingAboutCompany.jsx b/src/Pages/Onboarding/OnboardingAboutCompany.jsx new file mode 100644 index 0000000..c638699 --- /dev/null +++ b/src/Pages/Onboarding/OnboardingAboutCompany.jsx @@ -0,0 +1,146 @@ +import React, { useCallback, useState } from 'react'; +import { Box, Input, InputGroup, InputLeftElement, Select, Text, VStack, Image, HStack } from '@chakra-ui/react'; +import PhoneInput from "react-phone-input-2"; +import "react-phone-input-2/lib/style.css"; +import { IoBagOutline } from "react-icons/io5"; +import { SlCloudUpload } from 'react-icons/sl'; +import { useDropzone } from 'react-dropzone'; + +const OnboardingAboutCompany = () => { + + const [phone, setPhone] = useState(""); + + + return ( + + + About your company + + + Lorem ipsum dolor sit amet, adipiscing elit. + + + {/* Form Fields */} + + {/* Company Name Field */} + + + Company Name + + + + + + + + + + {/* Industry Select Field */} + + + Industry + + + + + + + {/* Phone Number Field */} + + + Phone Number + + + + + + + {/* Upload Company Logo Field */} + + + Upload Company Logo + + document.getElementById('company-logo-file-input').click()} + > + + + + Drag and drop files here or{' '} + + Choose file + + + + + + + + + Supported formats- jpg, png, svg + + + Maximum size - 20MB + + + + + + ); +}; + +export default OnboardingAboutCompany; + + + \ No newline at end of file diff --git a/src/Pages/Onboarding/OnboardingAddCompanyDetails.jsx b/src/Pages/Onboarding/OnboardingAddCompanyDetails.jsx new file mode 100644 index 0000000..78362dc --- /dev/null +++ b/src/Pages/Onboarding/OnboardingAddCompanyDetails.jsx @@ -0,0 +1,166 @@ +import React, { useCallback, useState } from 'react'; +import { Box, Input, InputGroup, InputLeftElement, Select, Text, VStack, Image, HStack } from '@chakra-ui/react'; +import { SlCloudUpload } from 'react-icons/sl'; + +const OnboardingAddCompanyDetails = () => { + + return ( + + + Add company details + + + Lorem ipsum dolor sit amet, adipiscing elit. + + + + {/* CIN Field */} + + + CIN + + + + + {/* Industry Select Field */} + + + Company PAN + + + + + + {/* Company PAN Field */} + + + Company PAN + + + + + {/* Upload GST Certificate */} + + + Upload Pan + + document.getElementById('GST-file-input').click()} + > + + + + Drag and drop files here or{' '} + + Choose file + + + + + + + + + Supported formats- jpg, png, svg + + + Maximum size - 20MB + + + + + {/* Upload PAN Card */} + + + Upload Pan + + document.getElementById('pan-file-input').click()} + > + + + + Drag and drop files here or{' '} + + Choose file + + + + + + + + + Supported formats- jpg, png, svg + + + Maximum size - 20MB + + + + + + ); +}; + +export default OnboardingAddCompanyDetails; diff --git a/src/Pages/Onboarding/OnboardingDirectorDetails.jsx b/src/Pages/Onboarding/OnboardingDirectorDetails.jsx new file mode 100644 index 0000000..04138b0 --- /dev/null +++ b/src/Pages/Onboarding/OnboardingDirectorDetails.jsx @@ -0,0 +1,228 @@ +import React, { useCallback, useState } from 'react'; +import { Box, Input, Text, VStack, Image, HStack } from '@chakra-ui/react'; +import { SlCloudUpload } from 'react-icons/sl'; +import { useDropzone } from 'react-dropzone'; +import PhoneInput from 'react-phone-input-2'; + +const OnboardingDirectorDetails = () => { + + const [phone, setPhone] = useState(""); + + // Initial state for director forms + const [directorForms, setDirectorForms] = useState([ + { id: 1, directorName: '', directorEmail: '', directorPhone: '', selectedPanImage: '', selectedAadharImage: '' } + ]); + + // Add new director form + const handleAddDirector = () => { + setDirectorForms([ + ...directorForms, + { id: directorForms.length + 1, directorName: '', directorEmail: '', directorPhone: '', selectedPanImage: '', selectedAadharImage: '' } + ]); + }; + + return ( + + + Add director details + + + Lorem ipsum dolor sit amet, adipiscing elit. + + + {directorForms?.map((directorForm, index) => ( + + + Director {index + 1} + + + {/* Director Name Field */} + + + Director Name + + directorForm.setDirectorName(e.target.value)} + /> + + + {/* Director Email Field */} + + + Email + + directorForm.setDirectorEmail(e.target.value)} + /> + + + {/* Director Phone Number */} + + + Phone Number + + directorForm.setDirectorPhone(value)} + inputStyle={{ + width: "100%", + borderRadius: "md", + paddingLeft: "6", + border: "1px solid #e2e8f0", + height: "40px" + }} + buttonStyle={{ + border: "none", + borderRadius: "8px 0 0 8px", + backgroundColor: "transparent", + }} + /> + + + {/* Upload Pan */} + + + Upload Pan + + document.getElementById('pan-file-input').click()} + > + + + + Drag and drop files here or{' '} + + Choose file + + + + + + + + + Supported formats- jpg, png, svg + + + Maximum size - 20MB + + + + + {/* Upload Aadhar Card */} + + + Upload Aadhar + + document.getElementById('aadhar-file-input').click()} + > + + + + Drag and drop files here or{' '} + + Choose file + + + + + + + + + Supported formats- jpg, png, svg + + + Maximum size - 20MB + + + + + + ))} + + + handleAddDirector()} + > + + Add director 2 + + + + ); +}; + +export default OnboardingDirectorDetails; diff --git a/src/Pages/Onboarding/OnboardingFrame.jsx b/src/Pages/Onboarding/OnboardingFrame.jsx index 6efce8e..e4c0385 100644 --- a/src/Pages/Onboarding/OnboardingFrame.jsx +++ b/src/Pages/Onboarding/OnboardingFrame.jsx @@ -12,6 +12,10 @@ import onboarding_bg from "../../assets/onboarding_bg.svg"; import { ArrowBackIcon, ArrowForwardIcon, CheckIcon } from '@chakra-ui/icons'; // Added CheckIcon for completed steps import { FaUser, FaBuilding, FaClipboard, FaUserTie, FaBoxOpen } from 'react-icons/fa'; import OnboardingYourDetails from './OnboardingYourDetails'; +import OnboardingAboutCompany from './OnboardingAboutCompany'; +import OnboardingAddCompanyDetails from './OnboardingAddCompanyDetails'; +import OnboardingDirectorDetails from './OnboardingDirectorDetails'; +import OnboardingSelectPackage from './OnboardingSelectPackage'; const OnboardingFrame = () => { @@ -65,7 +69,7 @@ const OnboardingFrame = () => { py={6} px={4} borderRadius={'md'} - minH={"80vh"} + minH={"82vh"} > @@ -131,7 +135,7 @@ const OnboardingFrame = () => { my={5} boxShadow={'md'} zIndex={2} - minH={"80vh"} + minH={"82vh"} > @@ -150,8 +154,19 @@ const OnboardingFrame = () => { - - + + + {/* component here */} + + {/* */} + {/* */} + {/* */} + {/* */} + + { variant="outline" size="sm" px={8} - _hover={{opacity:0.8}} + _hover={{ opacity: 0.8 }} color={"#d0b8ef"} border={"1px solid #d0b8ef"} onClick={() => setActiveStep(activeStep - 1)} @@ -172,7 +187,7 @@ const OnboardingFrame = () => { fontSize={"xs"} fontWeight={500} size="sm" - _hover={{opacity:0.8}} + _hover={{ opacity: 0.8 }} rightIcon={} w={"100%"} onClick={() => setActiveStep(activeStep + 1)} diff --git a/src/Pages/Onboarding/OnboardingSelectPackage.jsx b/src/Pages/Onboarding/OnboardingSelectPackage.jsx new file mode 100644 index 0000000..252aacd --- /dev/null +++ b/src/Pages/Onboarding/OnboardingSelectPackage.jsx @@ -0,0 +1,108 @@ +import React from 'react'; +import { Box, Text, HStack, Image, Checkbox, List, ListItem, ListIcon } from '@chakra-ui/react'; +import { MdCheckCircle } from 'react-icons/md'; +import oBenefits from "../../assets/o-benefits.svg"; +import oExpense from "../../assets/o-expense.svg"; +import oGift from "../../assets/o-gift.svg"; + +const packages = [ + { + id: 1, + img: oExpense, + title: "OptiFii Expense", + description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.", + benefits: [ + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet" + ] + }, + { + id: 2, + img: oBenefits, + title: "OptiFii Benefits", + description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.", + benefits: [ + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet" + ] + }, + { + id: 3, + img: oGift, + title: "OptiFii Gift & Vouchers", + description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.", + benefits: [ + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet", + "Lorem ipsum dolor sit amet" + ] + } +]; + +const OnboardingSelectPackage = () => { + + return ( + + + Select package + + + Lorem ipsum dolor sit amet, adipiscing elit. + + + + {packages.map((pkg) => ( + + + {`${pkg.title} + + + + {pkg.title} + + + {pkg.description} + + + This plan gets + + + + {pkg.benefits.map((benefit, index) => ( + + + {benefit} + + ))} + + + + ))} + + + ); +}; + +export default OnboardingSelectPackage; diff --git a/src/Pages/Onboarding/OnboardingYourDetails.jsx b/src/Pages/Onboarding/OnboardingYourDetails.jsx index dbb4d1e..de83661 100644 --- a/src/Pages/Onboarding/OnboardingYourDetails.jsx +++ b/src/Pages/Onboarding/OnboardingYourDetails.jsx @@ -1,13 +1,14 @@ import React, { useState } from 'react'; import { Box, Container, HStack, Image, Input, InputGroup, InputLeftElement, Text } from '@chakra-ui/react'; -import { useNavigate } from 'react-router-dom'; import { CiUser, CiMail } from "react-icons/ci"; import optifii_logo from '../../assets/optifii_logo.svg'; +import PhoneInput from "react-phone-input-2"; +import "react-phone-input-2/lib/style.css"; const OnboardingYourDetails = () => { - const navigate = useNavigate(); + const [phone, setPhone] = useState(""); return ( @@ -72,14 +73,24 @@ const OnboardingYourDetails = () => { > Phone Number - - - - - - + + diff --git a/src/assets/o-benefits.svg b/src/assets/o-benefits.svg new file mode 100644 index 0000000..b749c56 --- /dev/null +++ b/src/assets/o-benefits.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/o-expense.svg b/src/assets/o-expense.svg new file mode 100644 index 0000000..a80810b --- /dev/null +++ b/src/assets/o-expense.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/o-gift.svg b/src/assets/o-gift.svg new file mode 100644 index 0000000..8a6e419 --- /dev/null +++ b/src/assets/o-gift.svg @@ -0,0 +1,9 @@ + + + + + + + + +