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 = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 7; CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = JGDHGNH9XY; DEVELOPMENT_TEAM = JGDHGNH9XY;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = PerformicsStoreDNA/Info.plist; INFOPLIST_FILE = PerformicsStoreDNA/Info.plist;
@@ -272,7 +272,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.7; MARKETING_VERSION = 1.8;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
@@ -292,7 +292,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 7; CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = JGDHGNH9XY; DEVELOPMENT_TEAM = JGDHGNH9XY;
INFOPLIST_FILE = PerformicsStoreDNA/Info.plist; INFOPLIST_FILE = PerformicsStoreDNA/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1; IPHONEOS_DEPLOYMENT_TARGET = 15.1;
@@ -300,7 +300,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.7; MARKETING_VERSION = 1.8;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
+1 -2
View File
@@ -2,11 +2,10 @@ export const BASE_URL = 'https://dax.parinaam.in/execute/dabur';
export const ApiURL = { export const ApiURL = {
// login: `${BASE_URL}/api/v1/auth/login`,
pssscoreApi: `${BASE_URL}/mtd/pssscore`, pssscoreApi: `${BASE_URL}/mtd/pssscore`,
getotpApi: `https://api1.parinaam.in/api/dabur/SendOTP`, getotpApi: `https://api1.parinaam.in/api/dabur/SendOTP`,
verifyotpApi: `https://api1.parinaam.in/api/dabur/AuthenticateOTP`, verifyotpApi: `https://api1.parinaam.in/api/dabur/AuthenticateOTP`,
storeDNAfilter:`https://api1.parinaam.in/api/dabur/StoreDNAfilter`, storeDNAfilter:`https://api1.parinaam.in/api/dabur/StoreDNAfilter`,
storeSearch :`https://api1.parinaam.in/api/dabur/StoreDNAstoreSearch`, 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'), AuthTopBG: require('../assets/Images/logintopBG.png'),
AuthTopBGNew: require('../assets/Images/appLogoNew.png'), AuthTopBGNew: require('../assets/Images/appLogoNew.png'),
AuthBottomBG: require('../assets/Images/loginbottomBG.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'), dotsIcon: require('../assets/Icons/dots.png'),
pending: require('../assets/Icons/wall-clock.png'), pending: require('../assets/Icons/wall-clock.png'),
alert: require('../assets/Icons/question-mark.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 { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { createNativeStackNavigator } from '@react-navigation/native-stack';
import Splash from '../screens/AuthScreen/Splash'; 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 VerifyOTP from '../screens/AuthScreen/VerifyOTP';
import { ToastComponent } from '../constants/Toast'; import { ToastComponent } from '../constants/Toast';
import StoreInfo from '../screens/MainScreen/StoreInfo'; 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 { Platform, StatusBar, View } from 'react-native';
import Welcome from '../screens/MainScreen/WelcomePage'; import Welcome from '../screens/MainScreen/WelcomePage';
import Details from '../screens/MainScreen/Dashboard/Details'; import Details from '../screens/MainScreen/Dashboard/Details';
import Project from '../screens/AuthScreen/Project/Project';
const Stack = createNativeStackNavigator(); const Stack = createNativeStackNavigator();
@@ -40,6 +41,7 @@ const Routes = () => {
<Stack.Screen name="Feedback" component={Feedback} /> <Stack.Screen name="Feedback" component={Feedback} />
<Stack.Screen name="FeedbackCategories" component={FeedbackCategories} /> <Stack.Screen name="FeedbackCategories" component={FeedbackCategories} />
<Stack.Screen name="Details" component={Details} /> <Stack.Screen name="Details" component={Details} />
<Stack.Screen name="Project" component={Project} />
</Stack.Navigator> </Stack.Navigator>
<ToastComponent /> <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(() => { setTimeout(() => {
navigation.reset({ navigation.reset({
index: 0, index: 0,
routes: [{ name: 'Login' }], routes: [{ name: 'Project' }],
}); });
}, 1000); }, 1000);
} }
+13 -8
View File
@@ -84,6 +84,8 @@ const Details = () => {
} }
const isOSATab = selectedDetails.some(item => item.GraphTitle === "OSA - Category"); const isOSATab = selectedDetails.some(item => item.GraphTitle === "OSA - Category");
console.log('isOSATab----',isOSATab);
return ( return (
<SafeAreaView style={{ flex: 1, backgroundColor: '#113F8C' }}> <SafeAreaView style={{ flex: 1, backgroundColor: '#113F8C' }}>
@@ -300,13 +302,16 @@ const Details = () => {
} }
}} }}
style={{ width: '20%', }}> style={{ width: '20%', }}>
<Text style={{ color: '#113F8C', textAlign: 'center', fontWeight: '500' }}> <View style={{ flexDirection: 'row', alignItems: 'center' }}>
{presentKey ? ( <Text style={{ color: '#113F8C', textAlign: 'center', fontWeight: '500' }}>
typeof row[presentKey] === 'string' && ['Yes', 'No'].includes(row[presentKey]) ? row[presentKey] : {presentKey ? (
typeof row[presentKey] === 'boolean' ? (row[presentKey] ? 'Yes' : 'No') : typeof row[presentKey] === 'string' && ['Yes', 'No'].includes(row[presentKey]) ? row[presentKey] :
typeof row[presentKey] === 'number' ? row[presentKey].toFixed(2) : row[presentKey] || '-' typeof row[presentKey] === 'boolean' ? (row[presentKey] ? 'Yes' : 'No') :
) : '-'} typeof row[presentKey] === 'number' ? row[presentKey].toFixed(2) : row[presentKey] || '-'
</Text> ) : '-'}
</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> </TouchableOpacity>
</View> </View>
); );
@@ -321,7 +326,7 @@ const Details = () => {
</View> </View>
); );
} }
}) : }) :
<Loader visible={true} /> <Loader visible={true} />
} }
</ScrollView> </ScrollView>
+3 -9
View File
@@ -7,6 +7,7 @@ import IMAGES from '../../../constants/Images';
import axios from 'axios'; import axios from 'axios';
import Loader from '../../../constants/Loader'; import Loader from '../../../constants/Loader';
import { SafeAreaView } from 'react-native-safe-area-context'; import { SafeAreaView } from 'react-native-safe-area-context';
import { ApiURL } from '../../../api/ApiConstant';
const storeinfodata = [ const storeinfodata = [
{ {
@@ -154,14 +155,7 @@ const SectionListView = ({ listData }) => {
{/* <View style={[horizonalLine, { marginVertical: 10 }]} /> */} {/* <View style={[horizonalLine, { marginVertical: 10 }]} /> */}
</> </>
)} )}
<View style={styles.section}> <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 <ScrollView
horizontal horizontal
ref={scrollRef} ref={scrollRef}
@@ -201,7 +195,7 @@ const StoreInfo = ({ navigation, route }) => {
const params = { StoreId: storeData?.StoreId || "723" }; const params = { StoreId: storeData?.StoreId || "723" };
const config = { const config = {
method: 'post', method: 'post',
url: 'https://api1.parinaam.in/api/dabur/StoreDNAstoreInfo', url: ApiURL.storeInfo,
headers: { headers: {
'api_key': '9a1f056fecb84eaf8eb4152dda22ab0501955c4f9bbe7daa8780740459fdde7a', 'api_key': '9a1f056fecb84eaf8eb4152dda22ab0501955c4f9bbe7daa8780740459fdde7a',
'Content-Type': 'application/json' 'Content-Type': 'application/json'
+2 -2
View File
@@ -60,8 +60,8 @@ export const styles = StyleSheet.create({
elevation: 2, elevation: 2,
width: Screen.screenWidth * 0.92, width: Screen.screenWidth * 0.92,
marginVertical: 5, marginVertical: 5,
borderWidth: 1, borderWidth: 0.5,
borderColor: '#113F8C', borderColor: 'gray',
marginBottom:15, marginBottom:15,
marginTop:10, marginTop:10,
// ...shadow, // ...shadow,