Added page for profile complete #65

Merged
ameye merged 1 commits from profile-complete into master 2025-08-12 21:07:38 +00:00
6 changed files with 134 additions and 6 deletions
+2
View File
@@ -22,6 +22,7 @@ import HelpPage from './views/HelpPage';
import SubscriptionPage from './views/SubscriptionPage';
import OnboardPage from "./views/OnboardPage";
import AccPWDResetPage from './views/AccPWDResetPage';
import ProfileCompletePage from './views/ProfileCompletePage';
function AppRouters() {
@@ -44,6 +45,7 @@ function AppRouters() {
<Route element={<SocketIOContextProvider />}>
<Route element={<UserExist />}>
<Route path={siteLinks.dash} element={<HomePage />} />
<Route path={siteLinks.profile_complete} element={<ProfileCompletePage />} />
<Route path={siteLinks.product} element={<ProductPage />} />
<Route path={siteLinks.reports} element={<ReportsPage />} />
<Route path={siteLinks.comments} element={<CommentsPage />} />
@@ -3,6 +3,7 @@ import { useMutation } from "@tanstack/react-query";
import { pageSettings } from "../../../services/services";
import SiteTemplateSelector from './SiteTemplateSelector';
import NoYesBooleanDropdown from './NoYesBooleanDropdown';
import { IoMdArrowDropdown } from 'react-icons/io';
const GeneralTab = memo(({name='Full Name', data, isCustom, productData, backendValues, setFieldsChanged}) =>{
@@ -83,11 +84,14 @@ const GeneralTab = memo(({name='Full Name', data, isCustom, productData, backend
<textarea name={fieldName} rows={5} style={{resize: 'none'}} type="text" className="form-control" id={key} value={fieldValue} onChange={handleChange} />
: value.controls == 'SELECT_NO_YES' ?
// <NoYesBooleanDropdown name={fieldName} value={fieldValue} onChange={handleChange} />
<select onChange={handleChange} name={fieldName} value={fieldValue} className="form-control">
<option value=''>Select</option>
<option value='0'>No</option>
<option value='1'>Yes</option>
</select>
<div className='position-relative'>
<select onChange={handleChange} name={fieldName} value={fieldValue} className="form-control">
<option value=''>Select</option>
<option value='0'>No</option>
<option value='1'>Yes</option>
</select>
<IoMdArrowDropdown className='position-absolute w-auto' style={{top: '50%', right: '2px', transform: 'translateY(-50%)'}} />
</div>
:
null
}
@@ -0,0 +1,99 @@
import React, { useEffect } from "react";
import BreadcrumbComBS from "../breadcrumb/BreadcrumbComBS";
import { useLocation } from "react-router-dom";
import { Form, Formik } from "formik";
import * as Yup from "yup";
import { useMutation } from "@tanstack/react-query";
const validationSchema = Yup.object().shape({
username: Yup.string().min(3, "Minimum 3 characters").max(50, "Maximum 50 characters").required("Email is required"),
})
const initialValues = {
username: '',
};
export default function HomeSections(){
const {state:{profile_completed}} = useLocation()
const mutation = useMutation({
mutationFn: (fields) => {
return ()=>{}
},
onSuccess: (res) => {
console.log('res', res)
}
})
const handleCompleteProfile = (values, helpers) => {
// helpers.resetForm()
console.log('values', values, helpers)
// mutation.mutate(values)
}
return <>
<BreadcrumbComBS title='Update Profile' paths={['Dashboard', 'Profile']} />
<div className="row">
<div className="col-xxl-6 m-b-30">
<div className="card card-statistics h-100 mb-0" style={{minHeight: '100px'}}>
{/* <div className="card-header d-flex align-items-center justify-content-between">
<div className="card-heading">
<h4 className="card-title">My Product URLs</h4>
</div>
</div> */}
</div>
</div>
<div className="col-xxl-6 m-b-30">
<div className="card card-statistics h-100 mb-0">
{/* <div className="card-header d-flex align-items-center justify-content-between">
<div className="card-heading">
<h4 className="card-title">My Product URLs</h4>
</div>
</div> */}
{/* <div style={{minHeight: '400px'}}></div> */}
<div className="card-body">
<Formik
initialValues={initialValues}
validationSchema={validationSchema}
onSubmit={handleCompleteProfile}
>
{(props) => {
return (
<Form className=''>
<div className="row">
<>
<div className="col-12">
<div className="form-group">
<label className={`text-black fw-bold control-label ${(props.errors.username && props.touched.username) && 'text-danger'}`}>Username*</label>
<input type="username" name='username' className="form-control" placeholder="Username" value={props.values.username} onChange={props.handleChange} />
</div>
</div>
{/* {cSignup.error &&
<>
<div className="col-12">
<p className='text-danger'>{cSignup.error.message}</p>
</div>
</>
} */}
<div className="col-12 mt-3 text-end">
<button type='submit' className="btn btn-primary text-uppercase">{false ? 'loading...' : 'Continue'}</button>
</div>
</>
</div>
</Form>
);
}}
</Formik>
</div>
</div>
</div>
</div>
</>;
}
+1
View File
@@ -3,6 +3,7 @@ const siteLinks = {
help: '/help',
home: '/',
dash: '/dash',
profile_complete: '/profile_complete',
product: '/product/*',
contacts: '/contacts',
comments: '/comments',
+17 -1
View File
@@ -1,6 +1,22 @@
import React from 'react'
import React, { useEffect } from 'react'
import ProductFactory from '../component/product/ProductFactory'
import { useSelector } from 'react-redux';
import siteLinks from '../links/siteLinks';
import { useNavigate } from 'react-router-dom';
export default function ProductPage() {
const navigate = useNavigate()
const { userDetails: { profile_completed }} = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active
useEffect(()=>{
if(!profile_completed){
navigate(siteLinks.profile_complete, {replace: true, state:{profile_completed: false}})
}
},[])
return (
<ProductFactory />
)
+6
View File
@@ -0,0 +1,6 @@
import ProfileCompleteCom from '../component/profile_complete/ProfileCompleteCom';
export default function ProfileCompletePage(){
return <ProfileCompleteCom />
}