From 964604a0711952f47d7e11de016d125b53a21bde Mon Sep 17 00:00:00 2001 From: Abin Toppo Date: Mon, 12 Jan 2026 16:54:15 +0530 Subject: [PATCH] before merge --- src/Constant/NavigationString.tsx | 1 + src/Navigation/MainStack.jsx | 1 + src/Screens/Ragistration/PartnerShip.tsx | 278 ++++++++++++++++++++++ src/Screens/Ragistration/Ragistration.tsx | 1 + src/Screens/Splash/Splash.tsx | 6 +- src/Screens/index.ts | 4 +- src/Services/BBPS/Hooks.ts | 7 +- src/Services/BBPS/apis.ts | 14 +- 8 files changed, 305 insertions(+), 7 deletions(-) create mode 100644 src/Screens/Ragistration/PartnerShip.tsx diff --git a/src/Constant/NavigationString.tsx b/src/Constant/NavigationString.tsx index c5abd14..bd702db 100644 --- a/src/Constant/NavigationString.tsx +++ b/src/Constant/NavigationString.tsx @@ -19,5 +19,6 @@ const NavigationString = { ProceedToBidDetail:'ProceedToBidDetail', Signup:'Signup', Registration:'Registration', + Partnership:'Partnership', } export default NavigationString \ No newline at end of file diff --git a/src/Navigation/MainStack.jsx b/src/Navigation/MainStack.jsx index c7edb92..60e353c 100644 --- a/src/Navigation/MainStack.jsx +++ b/src/Navigation/MainStack.jsx @@ -44,6 +44,7 @@ export default function MainStack() { + ); } diff --git a/src/Screens/Ragistration/PartnerShip.tsx b/src/Screens/Ragistration/PartnerShip.tsx new file mode 100644 index 0000000..5affd87 --- /dev/null +++ b/src/Screens/Ragistration/PartnerShip.tsx @@ -0,0 +1,278 @@ +import { + KeyboardAvoidingView, + SafeAreaView, + ScrollView, + StyleSheet, + Text, + TouchableOpacity, + View, + Platform, +} from 'react-native'; +import React, { use, useState } from 'react'; +import { useNavigation, useRoute, NavigationProp, RouteProp } from '@react-navigation/native'; +import colors from '../../Constant/Color'; +import PrimaryButton from '../../Component/PrimaryButton/PrimaryButton'; +import MyInput from '../../Component/MyInput'; +import { showToast } from '../../Constant/ShowDailog'; +import { PARTNER_API_ENDPOINT } from '../../Services/BBPS/ApiUrls'; +import { usePartnerShipSubmit } from '../../Services/BBPS/Hooks'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { Navigation } from 'lucide-react-native'; +import { NavigationString } from '../../Constant/AllImports'; + + +type Partner = { + partnerName: string; + percentage: string; + partnerPan: string; + aadharNumber: string; + mobileNumber: string; +}; +type Navigation = { + replace: (route: string) => void; +}; +type PartnershipParams = { + otherId: string | number +}; +const Partnership = () => { + const route = useRoute>(); + + const navigation = useNavigation() as Navigation; + const [partners, setPartners] = useState([ + { + partnerName: '', + percentage: '', + partnerPan: '', + aadharNumber: '', + mobileNumber: '', + }, + ]); + + const [focusedField, setFocusedField] = useState(''); + const [loading, setLoading] = useState(false) + const { mutateAsync:partnerShipSubmit } = usePartnerShipSubmit(); + const insets = useSafeAreaInsets(); + const handleChange = (index: number, name: keyof Partner, value: string) => { + const updated = [...partners]; + updated[index][name] = value; + setPartners(updated); + }; + + const handleAddMore = () => { + setPartners(prev => [ + ...prev, + { + partnerName: '', + percentage: '', + partnerPan: '', + aadharNumber: '', + mobileNumber: '', + }, + ]); + }; + + const handleRemove = (index: number) => { + const updated = [...partners]; + updated.splice(index, 1); + setPartners( + updated.length > 0 + ? updated + : [ + { + partnerName: '', + percentage: '', + partnerPan: '', + aadharNumber: '', + mobileNumber: '', + }, + ] + ); + }; + + const handleSubmit = async () => { + setLoading(true) + try { + // Convert percentage strings to numbers and validate + const payload = partners.map((p, i) => { + const percentage = Number(p.percentage); + + if (isNaN(percentage) || percentage < 0 || percentage > 100) { + throw new Error(`Invalid percentage value for partner ${p.partnerName}`); + } + + return { + contOtherId: route?.params?.otherId, + ptnrAadharNo: p.aadharNumber, + ptnrMobNo: p.mobileNumber, + ptnrName: p.partnerName, + ptnrPop: percentage, // Ensure this is a number + ptnrPANNo: p.partnerPan, + ptnrNo: i, + }; + }); + + // Validate total percentage equals 100% + const totalPercentage = payload.reduce((sum, p) => sum + p.ptnrPop, 0); + if (totalPercentage !== 100) { + showToast(`Total percentage must equal 100% (currently ${totalPercentage}%)`); + return; + } + + console.log("Partner ship payload:", payload); + const response = await partnerShipSubmit(payload); + + console.log("first ====== ", response) + if (response?.statusCode === 200) { + console.log('✅ Partners submitted successfully:', response); + showToast(response.message || 'Submitted successfully!'); + navigation.replace(NavigationString.Home); + + } + } catch (error: any) { + console.error('❌ Submission failed:', error.message); + showToast(error.message || 'Submission failed. Please check partner details.'); + }finally{ + setLoading(false) + } + }; + + return ( + + Partnership Details + + + + {partners.map((partner, index) => ( + + Partner {index + 1} + + handleChange(index, 'partnerName', text)} + onFocus={() => setFocusedField(`partnerName-${index}`)} + onBlur={() => setFocusedField('')} + focused={focusedField === `partnerName-${index}`} + /> + + handleChange(index, 'percentage', text)} + onFocus={() => setFocusedField(`percentage-${index}`)} + onBlur={() => setFocusedField('')} + focused={focusedField === `percentage-${index}`} + keyboardType="numeric" + maxlength={3} + /> + + handleChange(index, 'partnerPan', text)} + onFocus={() => setFocusedField(`partnerPan-${index}`)} + onBlur={() => setFocusedField('')} + focused={focusedField === `partnerPan-${index}`} + autoCapitalize="characters" + maxlength={10} + + /> + + handleChange(index, 'aadharNumber', text)} + onFocus={() => setFocusedField(`aadharNumber-${index}`)} + onBlur={() => setFocusedField('')} + focused={focusedField === `aadharNumber-${index}`} + keyboardType="numeric" + maxlength={12} + /> + + handleChange(index, 'mobileNumber', text)} + onFocus={() => setFocusedField(`mobileNumber-${index}`)} + onBlur={() => setFocusedField('')} + focused={focusedField === `mobileNumber-${index}`} + keyboardType="phone-pad" + maxlength={10} + /> + + {partners.length > 1 && ( + handleRemove(index)}> + Delete Partner + + )} + + ))} + + + + Add Partner + + + + + + + + ); +}; + +export default Partnership; + +const styles = StyleSheet.create({ + heading: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 10, + marginTop: 10, + textAlign: 'center', + + }, + partnerTitle: { + fontWeight: '600', + fontSize: 16, + marginBottom: 10, + }, + scrollContainer: { + // backgroundColor: color.background, + flexGrow: 1, + }, + addButton: { + backgroundColor: colors.primary, + padding: 10, + marginTop: 10, + borderRadius: 10, + alignItems: 'center', + width: 140, + alignSelf: 'flex-end', + }, + addText: { + color: 'white', + fontWeight: '600', + }, + deleteButton: { + backgroundColor: '#FF5C5C', + padding: 10, + marginTop: 10, + borderRadius: 10, + alignItems: 'center', + width: 140, + alignSelf: 'flex-end', + }, + deleteText: { + color: 'white', + fontWeight: '600', + }, +}); diff --git a/src/Screens/Ragistration/Ragistration.tsx b/src/Screens/Ragistration/Ragistration.tsx index 973d798..6751c5e 100644 --- a/src/Screens/Ragistration/Ragistration.tsx +++ b/src/Screens/Ragistration/Ragistration.tsx @@ -327,6 +327,7 @@ useEffect(() => { orgPAN: formData.orgPanNumber, comAadharNo: formData.aadhaarNumber, gistnNo: formData.gstnNo, + stateName: MasterData?.data?.states?.find((state:any)=>state.stateId==formData.state)?.stateName || '', }; console.log('Form Data for registration',formData); diff --git a/src/Screens/Splash/Splash.tsx b/src/Screens/Splash/Splash.tsx index 70e922c..2dcfd07 100644 --- a/src/Screens/Splash/Splash.tsx +++ b/src/Screens/Splash/Splash.tsx @@ -62,14 +62,14 @@ const Splash: React.FC = () => { const routeByOrgType = (params: { otherId: any; orgType: any }) => { const orgType = String(params.orgType); - + console.log("hitting here ") if (orgType === '4' || orgType === '5' || orgType === '6') { navigation.replace('StageThree', params); return; } if (orgType === '7') { - navigation.replace('PartnerShip', params); + navigation.replace(NavigationString.Partnership, params); return; } @@ -79,7 +79,7 @@ const Splash: React.FC = () => { const handleGetData = async () => { try { const res = await registrationStateMutate(); - console.log('Registration status response:', res?.statusCode); + console.log('Registration status response:', res); if (res?.statusCode === 404 || res?.statusCode === 401) { navigation.replace('Registration'); diff --git a/src/Screens/index.ts b/src/Screens/index.ts index f49382b..95d8d7c 100644 --- a/src/Screens/index.ts +++ b/src/Screens/index.ts @@ -7,6 +7,7 @@ import StartReverseBidding from "./Bidding/StartReverseBidding"; import Home from "./Home/Home"; import Login from "./Login/Login"; import Onboarding from "./Onboarding/Onboarding"; +import Partnership from "./Ragistration/PartnerShip"; import Registration from "./Ragistration/Ragistration"; import Signup from "./SignUp/SignUp"; import Splash from "./Splash/Splash"; @@ -34,7 +35,8 @@ const Screens = { ProceedToBidDetail, StartReverseBidding, Signup, - Registration + Registration, + Partnership } diff --git a/src/Services/BBPS/Hooks.ts b/src/Services/BBPS/Hooks.ts index 405edfb..5891cb6 100644 --- a/src/Services/BBPS/Hooks.ts +++ b/src/Services/BBPS/Hooks.ts @@ -1,5 +1,5 @@ import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query'; -import { contractorStageThreeSubmit, contractorStageTwoSubmit, fetchAuctionItem, fetchCityDropdown, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchMasterData, fetchPurchaseAuction, fetchPurchaseTender, fetchTenderById, getDesignation, getRagistrationState, offlineAuctionPurchase, offlineTenderPurchase, proceedToBid, registerContractor, sendAadhaarOtp, userAuctionLogin, userLogin, verifyAadhaarOtp, verifyGstNumber, verifyPanHandler } from './apis'; +import { contractorStageThreeSubmit, contractorStageTwoSubmit, fetchAuctionItem, fetchCityDropdown, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchMasterData, fetchPurchaseAuction, fetchPurchaseTender, fetchTenderById, getDesignation, getRagistrationState, offlineAuctionPurchase, offlineTenderPurchase, partnerShipSubmit, proceedToBid, registerContractor, sendAadhaarOtp, userAuctionLogin, userLogin, verifyAadhaarOtp, verifyGstNumber, verifyPanHandler } from './apis'; import { apiCall } from '../../Axios/Axios'; // User @@ -207,4 +207,9 @@ export const useVerifyPan = () => export const useContractorStageThreeSubmit = () => useMutation({ mutationFn: contractorStageThreeSubmit, + }); + + export const usePartnerShipSubmit = () => + useMutation({ + mutationFn: partnerShipSubmit, }); \ No newline at end of file diff --git a/src/Services/BBPS/apis.ts b/src/Services/BBPS/apis.ts index 1db2581..394911c 100644 --- a/src/Services/BBPS/apis.ts +++ b/src/Services/BBPS/apis.ts @@ -1,5 +1,5 @@ import axios from "axios"; -import { ALL_DESIGNATION, DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_MASTER_DATA, GET_MY_AUCTION, GET_MY_TENDER, GET_REGISTRATION_STATE, GET_TENDER_DETAILS, GETCONTRACTORBYSTATE, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_OFFLINE_AUCTION, PURCHASE_TENDER_OFFLINE, REJ_STAGE_TWO, REVERSE_AUCTION_ITEM, SAVE_CONTRACTOR_STAGE1, SEND_ADHAROTP, STAGETHREE, TENDER_LOGIN, VERIFY_ADHAR, VERIFY_GST,VERIFY_ORGPAN } from "./ApiUrls"; +import { ALL_DESIGNATION, DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_MASTER_DATA, GET_MY_AUCTION, GET_MY_TENDER, GET_REGISTRATION_STATE, GET_TENDER_DETAILS, GETCONTRACTORBYSTATE, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PARTNER_API_ENDPOINT, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_OFFLINE_AUCTION, PURCHASE_TENDER_OFFLINE, REJ_STAGE_TWO, REVERSE_AUCTION_ITEM, SAVE_CONTRACTOR_STAGE1, SEND_ADHAROTP, STAGETHREE, TENDER_LOGIN, VERIFY_ADHAR, VERIFY_GST,VERIFY_ORGPAN } from "./ApiUrls"; import { apiCall } from "../../Axios/Axios"; // User @@ -260,4 +260,14 @@ export const contractorStageThreeSubmit = ( STAGETHREE, payload, ); -}; \ No newline at end of file +}; + +export const partnerShipSubmit = ( + payload: any +): Promise => { + return apiCall( + 'post', + PARTNER_API_ENDPOINT, + payload, + ); +};