I have a realm database in my React Native Project. I want to update the value of the language in another page. I was able to write the value initially but am I Am stuck updating it. Below is my code.
Profile Schema (Realm Database Schema)
'use strict';
import Realm from 'realm';
class Profile extends Realm.Object {}
Profile.schema = {
name: 'Profile',
properties: {
Onetime: 'string',
Name: 'string',
Email: 'string',
Phone: 'string',
Language:'string',
Url:'string',
},
};
export default new Realm({schema: [Profile]});
Loading Initial Data
let objects = realm.objects('Profile');
var name,url,phone,onetime;
if (firebase.auth().currentUser.displayName == null ) {
onetime= 'true';
name= 'Name';
url = 'https://media2.giphy.com/media/sbLpwwHlgls8E/giphy.gif';
phone = '0000000000';
}
else {
onetime= 'true';
name=firebase.auth().currentUser.displayName;
url=firebase.auth().currentUser.photoURL;
phone = '0000000000';
}
if (objects.length == 0) {
realm.write(() => {
realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
});
}
else {
realm.write(() => {
realm.delete(objects);
realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
});
}
Activity where I have to update the value
import React from 'react';
import {
ScrollView,
View,
StyleSheet
} from 'react-native';
import {
RkText,
RkTextInput,
RkAvoidKeyboard,
RkTheme,
RkStyleSheet
} from 'react-native-ui-kitten';
import {SocialSetting} from '../../components';
import {FontAwesome} from '../../assets/icons';
import {GradientButton} from '../../components';
import Avatar from 'react-native-interactive-avatar';
import ImagePicker from 'react-native-image-crop-picker';
import realm from '../../realm';
import firebase from 'firebase';
import {RkSwitch} from '../../components/switch/index';
import RadioForm, {RadioButton, RadioButtonInput, RadioButtonLabel} from 'react-native-simple-radio-button';
var radio_props = [
{label: 'English ', value: 'e' },
{label: 'Malayalam', value: 'm'}
];
var lange = '';
var objects = realm.objects('Profile');
export class ProfileSettings extends React.Component {
static navigationOptions = {
title: 'Profile Settings'.toUpperCase()
};
constructor(props) {
super(props);
this.state = {
name: objects[0].Name,
email: objects[0].Email,
phone: objects[0].Phone,
language:objects[0].Language,
url:objects[0].Url,
lang:''
}
}
pickimage(){
ImagePicker.openPicker({
width: 300,
height: 400,
cropping: true
}).then(image => {
console.log("imagelink- "+image);
});
}
handleLogOut() {
firebase.auth().signOut();
}
handleSave() {
alert("Language is: "+lange);
}
updateuser(){
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: this.state.name,
email: this.state.email
}).then(function() {
alert("Update SuccessFull");
}).catch(function(error) {
// An error happened.
alert("Update Failed");
});
}
render() {
if (this.state.language == 'e') {
var val = 0;
}
else {
var val = 1;
}
return (
<ScrollView style={styles.root}>
<RkAvoidKeyboard>
<View style={styles.header}>
<Avatar
uri={this.state.url}
size={'default'}
/>
</View>
<View style={styles.section}>
<View style={[styles.row, styles.heading]}>
<RkText rkType='header6 primary'>INFO</RkText>
</View>
<View style={styles.row}>
<RkTextInput label='Name'
value={this.state.name}
rkType='right clear'
onChangeText={(text) => this.setState({name: text})}/>
</View>
<View style={styles.row}>
<RkTextInput label='Email'
value={this.state.email}
onChangeText={(text) => this.setState({email: text})}
rkType='right clear'/>
</View>
</View>
<View style={styles.section}>
<View style={[styles.row, styles.heading]}>
<RkText rkType='primary header6'>CHOOSE YOUR LANGUAGE</RkText>
</View>
<View>
<View style={styles.radio}>
<RadioForm
radio_props={radio_props}
initial={val}
onPress={(value) => {
{
this.setState({lang:value})
this.setState({language: this.state.lang})
lange = value;
}}}
/>
</View>
</View>
</View>
<GradientButton rkType='large' style={styles.button} text='SAVE' onPress={this.handleSave} />
<GradientButton rkType='large' style={styles.button} text='LOGOUT' onPress={this.handleLogOut}/>
</RkAvoidKeyboard>
</ScrollView>
)
}
}
let styles = RkStyleSheet.create(theme => ({
root: {
backgroundColor: theme.colors.screen.base
},
header: {
backgroundColor: theme.colors.screen.neutral,
paddingVertical: 25,
justifyContent: 'center',
alignItems: 'center'
},
section: {
marginVertical: 25
},
radio: {
flexDirection:'row',
margin:20
},
heading: {
paddingBottom: 12.5
},
row: {
flexDirection: 'row',
paddingHorizontal: 17.5,
marginTop:15,
borderBottomWidth: StyleSheet.hairlineWidth,
borderColor: theme.colors.border.base,
alignItems: 'center',
justifyContent: 'space-between',
flex:1
},
button: {
marginHorizontal: 16,
marginBottom: 32
}
}));
I want to update the value of language in the handleSave()
Any help would be highly appreciated.
Thanks in Advance.
To delete all objects from the realm, call Realm. deleteAll() inside of a write transaction.
Solved the problem. Here is the solution
handleSave() {
//alert("Language is: "+lange);
let updt = realm.objects('Profile');
realm.write(() => {
updt[0].Language = lange;
});
alert("Language is: "+updt[0].Language);
}
Just create an object of the schema and update the value of the particular field.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With