Last active
November 5, 2020 09:53
-
-
Save chnirt/07f957d656933ca6398b8657b454199a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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