vuex-cognito-sync
A Vuex wrapper for Amazon Cognito Sync Manager.
Installation
Install via Yarn or npm:
$ yarn add vuex-cognito-sync# or... $ npm install --save vuex-cognito-syncUsage
vuex-cognito-syncis a namespaced module. Your app can have multiple Cognito Sync datasets, and synchronize them with Cognito independently.
Create a config file:
// cognito.config.json "IdentityPoolId": "us-east-1:********-****-****-****-************"Add module to your Vuex store:
Vue VuexCall init method when bootstrapping your app:
// optional Cognito login tokenslet logins = 'graph.facebook.com': '** token **' CognitoSync Initialize a datastore and perform initial sync:
this$store Actions
init
Initialize this module's dataset. Must be dispatched before any other actions.
this$store put
this$store remove
this$store sync
Tell the dataset to synchronize with the Cognito Sync server, and then update the state in Vuex.
this$store What's with the put & remove actions?
It would seem cleaner to use a plugin to update the local Cognito dataset when the Vuex store changes.
But unfortunately, Amazon Cognito Sync Manager performs all operations asynchronously... Even when making localStorage changes. This means a plugin would go against Vuex's rule that mutations must be synchronous, potentially causing race conditions if you make state changes and then dispatch the sync action right away.
If if you have a better idea of how to deal with this, please open an issue and let me know!
TODO
- Configurable conflict resolution logic (currently always resolves with remote record)
- Add dataset deleted handling
- Add datasets merged handling