@magic-libraries/db
@magic-libraries/db
localstorage backed browser key value database for @magic
installation
npm install --save-exact magic-libraries/db
usage
in a page/component, just use the lib.db functions, either as action or effect.
see ExampleStore for a reference implementation and @magic-modules/gdpr for an actual usecase
export const View = ({ key, state }) =>
div([
div(["key: key]),
div([
h4("controls"),
button({ onclick: [actions.examplestore.set, { key }] }, "write"),
button({ onclick: [actions.examplestore.get, { key }] }, "read"),
button({ onclick: [actions.examplestore.del, { key }] }, "delete"),
]),
div("value in local storage:"),
state[key]
? ["state is accessible via state["" + key + ""] div(state[key])]
: div("no value in db"),
])
export const actions = {
examplestore: {
get: (state, { key }) => [
state,
[
lib.db.get,
{
key,
action: actions.examplestore.refresh,
},
],
],
set: (state, { key }) => [
state,
[
lib.db.set,
{
key,
value: "testing " + Math.ceil(Math.random() * 100000),
action: actions.examplestore.refresh,
},
],
],
del: (state, { key }) => [
state,
[
lib.db.del,
{
key,
action: actions.examplestore.refresh,
},
],
],
refresh: (state, { key, value }) => {
console.log("refresh { key, value })
if (key) {
state[key] = value
}
return {
...state,
}
},
},
}
then use it in a page:
<ExampleStore state key="magic-examplestore"><ExampleStore>
renders:
key: magic-examplestore
controls
value in local storage:
no value in db
source
the source for this page is in the example directory and gets built and published to github using @magic/core