Skip to content

Instantly share code, notes, and snippets.

@chnirt
Last active November 5, 2020 09:53
Show Gist options
  • Save chnirt/07f957d656933ca6398b8657b454199a to your computer and use it in GitHub Desktop.
Save chnirt/07f957d656933ca6398b8657b454199a to your computer and use it in GitHub Desktop.
import React, {createContext, useEffect, useContext} from 'react';
import Realm from 'realm';
const HomeServiceSchema = {
name: 'HomeService',
properties: {
channel_url: 'string',
channel_image: 'string',
channel_type: 'string',
channel_name: 'string',
unread_messages_count: {type: 'int', default: 0},
last_message: 'string',
last_message_at: {type: 'float', default: 0},
},
};
let realm = new Realm({schema: [HomeServiceSchema], schemaVersion: 5});
const RealmContext = createContext();
export function RealmProvider({children}) {
function queryRealm(
schemaName = 'HomeService',
condition = {
filtered: null,
sorted: null,
},
) {
try {
const data = realm.objects(schemaName);
if (condition.filtered) {
return data.filter(condition.filtered);
}
if (condition.sorted) {
return data.sorted(condition.sorted);
}
return data;
} catch (error) {
console.log('Error on queries');
}
}
function writeRealm(
schemaName = 'HomeService',
object = {
channel_url: 'https://',
channel_image: '.png',
channel_type: 'ticket',
channel_name: 'hello world',
unread_messages_count: 69,
last_message: 'anyone',
last_message_at: +new Date(),
},
) {
try {
realm.write(() => {
realm.create(schemaName, object);
});
} catch (e) {
console.log('Error on creation');
}
}
function updateRealm(schemaName = 'HomeService', object) {
try {
realm.write(() => {
realm.create(schemaName, object, 'modified');
});
} catch (e) {
console.log('Error on updation');
}
}
function deleteRealm(
schemaName = 'HomeService',
filtered = 'channel_url = 0',
) {
try {
realm.write(() => {
let data = realm.objects(schemaName).filtered(filtered);
realm.delete(data);
});
} catch (e) {
console.log('Error on updation');
}
}
function deleteAllRealm(schemaName = 'HomeService') {
try {
realm.write(() => {
let all = realm.objects(schemaName);
realm.delete(all); // Deletes all books
});
} catch (e) {
console.log('Error on deletion');
}
}
return (
<RealmContext.Provider
value={{
queryRealm,
writeRealm,
updateRealm,
deleteRealm,
deleteAllRealm,
}}>
{children}
</RealmContext.Provider>
);
}
export const useRealm = () => useContext(RealmContext);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment