Osa Details page icon

This commit is contained in:
CPM
2025-11-19 10:24:28 +05:30
parent d65979518f
commit 4ad584785d
13 changed files with 219 additions and 27 deletions
@@ -263,7 +263,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = JGDHGNH9XY;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = PerformicsStoreDNA/Info.plist;
@@ -272,7 +272,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.7;
MARKETING_VERSION = 1.8;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -292,7 +292,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = JGDHGNH9XY;
INFOPLIST_FILE = PerformicsStoreDNA/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
@@ -300,7 +300,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.7;
MARKETING_VERSION = 1.8;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
+1 -2
View File
@@ -2,11 +2,10 @@ export const BASE_URL = 'https://dax.parinaam.in/execute/dabur';
export const ApiURL = {
// login: `${BASE_URL}/api/v1/auth/login`,
pssscoreApi: `${BASE_URL}/mtd/pssscore`,
getotpApi: `https://api1.parinaam.in/api/dabur/SendOTP`,
verifyotpApi: `https://api1.parinaam.in/api/dabur/AuthenticateOTP`,
storeDNAfilter:`https://api1.parinaam.in/api/dabur/StoreDNAfilter`,
storeSearch :`https://api1.parinaam.in/api/dabur/StoreDNAstoreSearch`,
storeInfo :`https://api1.parinaam.in/api/dabur/StoreDNAstoreInfo`,
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

+2
View File
@@ -25,6 +25,8 @@ const IMAGES = {
AuthTopBG: require('../assets/Images/logintopBG.png'),
AuthTopBGNew: require('../assets/Images/appLogoNew.png'),
AuthBottomBG: require('../assets/Images/loginbottomBG.png'),
projectIdImg: require('../assets/Images/projectId.png'),
PerformicsLogo: require('../assets/Images/PerformicsLogo.png'),
dotsIcon: require('../assets/Icons/dots.png'),
pending: require('../assets/Icons/wall-clock.png'),
alert: require('../assets/Icons/question-mark.png'),
+3 -1
View File
@@ -2,7 +2,7 @@ import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import Splash from '../screens/AuthScreen/Splash';
import Login from '../screens/AuthScreen/Login';
import Login from '../screens/AuthScreen/Login/Login';
import VerifyOTP from '../screens/AuthScreen/VerifyOTP';
import { ToastComponent } from '../constants/Toast';
import StoreInfo from '../screens/MainScreen/StoreInfo';
@@ -13,6 +13,7 @@ import FeedbackCategories from '../screens/MainScreen/Feedback/FeedbackCategorie
import { Platform, StatusBar, View } from 'react-native';
import Welcome from '../screens/MainScreen/WelcomePage';
import Details from '../screens/MainScreen/Dashboard/Details';
import Project from '../screens/AuthScreen/Project/Project';
const Stack = createNativeStackNavigator();
@@ -40,6 +41,7 @@ const Routes = () => {
<Stack.Screen name="Feedback" component={Feedback} />
<Stack.Screen name="FeedbackCategories" component={FeedbackCategories} />
<Stack.Screen name="Details" component={Details} />
<Stack.Screen name="Project" component={Project} />
</Stack.Navigator>
<ToastComponent />
+103
View File
@@ -0,0 +1,103 @@
import React, { useEffect, useState } from 'react';
import { View, Text, Image, Platform, ImageBackground, TextInput } from 'react-native';
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import IMAGES from '../../../constants/Images';
import { styles } from './style';
import { useDispatch } from 'react-redux';
import CustomButton from '../../../components/CustomButton';
import Loader from '../../../constants/Loader';
import { ApiURL } from '../../../api/ApiConstant';
import { toastError, toastSuccess } from '../../../constants/Toast';
import axios from 'axios';
import { SafeAreaView } from 'react-native-safe-area-context';
import { GlobalTheme } from '../../../theme';
import Geolocation from '@react-native-community/geolocation';
const Project = ({ navigation }) => {
const [loading, setLoading] = useState(false);
const dispatch = useDispatch();
const [username, setUsername] = useState('');
// geo loc
useEffect(() => {
Geolocation.getCurrentPosition(info => console.log("Location infoooo====>", JSON.stringify(info)));
}, [])
// end geo loc
const onSubmit = () => {
// setLoading(true);
// getOTP();
navigation.navigate("Login")
};
const getOTP = async () => {
try {
const params = {
"UserId": username
};
const config = {
method: 'post',
url: ApiURL.getotpApi,
headers: {
'api_key': '9a1f056fecb84eaf8eb4152dda22ab0501955c4f9bbe7daa8780740459fdde7a',
'Content-Type': 'application/json'
},
data: params
};
const response = await axios.request(config);
const res = response.data || [];
console.log('OTP is ===> ', res?.SendOTP);
if (res?.SendOTP[0].OTP === '0' || res?.SendOTP[0].OTP === 0) {
setLoading(false);
toastError("Alert", "Invalid User");
} else {
toastSuccess("Alert", res?.SendOTP[0]?.Messages);
navigation.navigate('VerifyOTP', { username: username });
setLoading(false);
}
// console.log('getotpApi res==>', JSON.stringify(res?.SendOTP[0]));
} catch (error) {
console.log("❌ OTP API error:", error);
setLoading(false);
}
};
return (
<SafeAreaView style={styles.container}>
<KeyboardAwareScrollView keyboardShouldPersistTaps="handled" enableOnAndroid={true} contentContainerStyle={{ justifyContent: 'center', flexGrow: 1, marginTop: 0 }} style={styles.container}>
{/* <View style={{ backgroundColor: GlobalTheme.colors.primary, height: 40 }} /> */}
<Image style={styles.performicsLogo} source={IMAGES.PerformicsLogo} resizeMode='contain' />
<Image style={styles.appLogo} source={IMAGES.projectIdImg} resizeMode='contain' />
<View style={styles.card}>
<View style={{marginTop:25}}>
<Text style={[styles.loginTitle, { fontSize: 15, color: '#555555', marginBottom: 10 }]}>Hey There</Text>
<Text style={styles.loginTitle}>Enter Your Project Id</Text>
</View>
<View style={{ marginTop: 20, height: 50, backgroundColor: '#eee', borderRadius: 10 }}>
<TextInput
style={{ height: 50, paddingHorizontal: 15 }}
placeholder='Enter Project Id'
placeholderTextColor={'gray'}
keyboardType='numeric'
/>
</View>
<CustomButton onPress={() => onSubmit()} title={'Next'} style={styles.btnbg} textstyle={styles.btntext} />
<ImageBackground source={IMAGES.AuthBottomBG} style={styles.AuthBottomBG} >
<Text style={{ position: 'absolute', textAlign: 'center', alignContent: 'center', alignSelf: 'center', bottom: 20, color: GlobalTheme.colors.gray }}> Copyright CPM India - 2025</Text>
</ImageBackground>
</View>
</KeyboardAwareScrollView>
<Loader visible={loading} loadingtext={'Loading ...'} />
</SafeAreaView>
);
};
export default Project;
+87
View File
@@ -0,0 +1,87 @@
import { StyleSheet, Dimensions } from 'react-native';
import { GlobalTheme } from '../../../theme';
import { normalize } from '../../../utilis/responsive';
const { width, height } = Dimensions.get('window');
export const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
},
logoContainer: {
width: '100%',
},
appLogo: {
height: normalize(180),
width: '100%',
resizeMode: 'contain',
marginTop: 30,
},
performicsLogo: {
height: normalize(50),
width: '55%',
resizeMode: 'contain',
alignSelf: 'center',
marginTop:10,
},
titleContainer: {
alignSelf: 'center',
marginBottom: normalize(10),
},
titleText: {
fontSize: normalize(20),
fontWeight: 'bold',
color: GlobalTheme.colors.black,
},
card: {
padding: normalize(25),
width: width,
alignSelf: 'center',
// marginTop: normalize(30),
shadowColor: '#000',
shadowOpacity: 0.05,
shadowOffset: { width: 0, height: 4 },
shadowRadius: 8,
// elevation: 4,
flex: 1,
},
btnbg: {
backgroundColor: GlobalTheme.colors.secondary,
borderRadius: GlobalTheme.borderRadius.md,
marginTop: normalize(30),
paddingVertical: normalize(12),
alignItems: 'center',
},
btntext: {
color: GlobalTheme.colors.white,
fontSize: normalize(GlobalTheme.typography.fontSize.small),
fontWeight: GlobalTheme.typography.fontWeight.regular,
},
footer: {
marginTop: normalize(60),
alignItems: 'center',
},
footerImage: {
width: '100%',
height: normalize(80),
resizeMode: 'contain',
marginTop: normalize(160),
},
AuthBottomBG: {
width: '100%',
resizeMode: 'contain',
height: normalize(210),
justifyContent: 'center',
},
loginTitle: {
color: GlobalTheme.colors.black,
fontSize: normalize(GlobalTheme.typography.fontSize.small),
fontWeight: GlobalTheme.typography.fontWeight.medium,
textAlign: 'center',
marginBottom: normalize(20),
},
mainContainer: {
flex: 1,
backgroundColor: '#EAF0FF',
},
});
+1 -1
View File
@@ -29,7 +29,7 @@ const SplashScreen = ({ navigation }) => {
setTimeout(() => {
navigation.reset({
index: 0,
routes: [{ name: 'Login' }],
routes: [{ name: 'Project' }],
});
}, 1000);
}
@@ -84,6 +84,8 @@ const Details = () => {
}
const isOSATab = selectedDetails.some(item => item.GraphTitle === "OSA - Category");
console.log('isOSATab----',isOSATab);
return (
<SafeAreaView style={{ flex: 1, backgroundColor: '#113F8C' }}>
@@ -300,6 +302,7 @@ const Details = () => {
}
}}
style={{ width: '20%', }}>
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
<Text style={{ color: '#113F8C', textAlign: 'center', fontWeight: '500' }}>
{presentKey ? (
typeof row[presentKey] === 'string' && ['Yes', 'No'].includes(row[presentKey]) ? row[presentKey] :
@@ -307,6 +310,8 @@ const Details = () => {
typeof row[presentKey] === 'number' ? row[presentKey].toFixed(2) : row[presentKey] || '-'
) : '-'}
</Text>
{ isOSATab && row[presentKey] != 100 || isOSATab && row[presentKey] != '100'? <Image source={IMAGES.rightArrowIcon} style={{marginLeft:6, height: 12, width: 12, resizeMode: 'contain' }} /> :null}
</View>
</TouchableOpacity>
</View>
);
+2 -8
View File
@@ -7,6 +7,7 @@ import IMAGES from '../../../constants/Images';
import axios from 'axios';
import Loader from '../../../constants/Loader';
import { SafeAreaView } from 'react-native-safe-area-context';
import { ApiURL } from '../../../api/ApiConstant';
const storeinfodata = [
{
@@ -155,13 +156,6 @@ const SectionListView = ({ listData }) => {
</>
)}
<View style={styles.section}>
{/* ✅ Only show title if not hidden */}
{/* <Text style={styles.sectionTitle}>{item.section}</Text>
<View style={[horizonalLine, { marginVertical: 10 }]} /> */}
{/* Shared horizontal scroll view for header + rows */}
<ScrollView
horizontal
ref={scrollRef}
@@ -201,7 +195,7 @@ const StoreInfo = ({ navigation, route }) => {
const params = { StoreId: storeData?.StoreId || "723" };
const config = {
method: 'post',
url: 'https://api1.parinaam.in/api/dabur/StoreDNAstoreInfo',
url: ApiURL.storeInfo,
headers: {
'api_key': '9a1f056fecb84eaf8eb4152dda22ab0501955c4f9bbe7daa8780740459fdde7a',
'Content-Type': 'application/json'
+2 -2
View File
@@ -60,8 +60,8 @@ export const styles = StyleSheet.create({
elevation: 2,
width: Screen.screenWidth * 0.92,
marginVertical: 5,
borderWidth: 1,
borderColor: '#113F8C',
borderWidth: 0.5,
borderColor: 'gray',
marginBottom:15,
marginTop:10,
// ...shadow,