0.2.1 • Published 5 years ago

mst-async-storage-upgraded v0.2.1

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

mst-async-storage

A mobx-state-tree extension granting your models React Native's AsyncStorage powers of persistance.

Requirements

  • mobx-state-tree 2.x or 3.x
  • react-native >= 0.56
  • @react-native-community/async-storage >= 1.x.x

Installing

yarn add mst-async-storage-upgraded

Usage

The following async actions are added:

import { types } from "mobx-state-tree"
import { withAsyncStorage } from "mst-async-storage"

export const NiceThingsModel = types
  .model("NiceThings")
  .props({
    unicorns: true,
    dragons: true,
    cake: true,
    spiders: false,
    nickleback: false,
  })
  .actions(self => ({
    setSpiders(value: boolean) {
      self.spiders = value
    },
  }))
  .extend(withAsyncStorage({ key: "nice.things" })) // <-- 🎉

Now you can load it:

async demo () {
  // create your model as usual
  const happy = NiceThingsModel.create()

  // now load the data from async storage
  await happy.load()

  // and when you change something
  happy.setSpiders(true)

  // it will automatically save back to async storage!
}

Options

withAsyncStorage() accepts an optional object as a parameter with these keys:

keytypewhat it does
keystringThe key to use when saving to AsyncStorage (default: the model type name)
autoSavebooleanShould we automatically save when any values change on the model? (default: true)
onlystring, string[]will only include the keys with these names
exceptstring, string[]will omit keys with these names

Contributing?

Yes plz!

Fork it, Clone it, Branch it, Yarn it
Build it, Test it, Push it, PR it

To run the tests, I like to open two shells yarn test:compile:watch and yarn test --watch. If you run ava manually, make sure to add -s to run the tests serially because I fail mocking (because the mocks are shared state and bleed into each other).