diff --git a/src/index.js b/src/index.js index 2e6b776..3f70a8c 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import * as actions from './actions' import offlineMiddleware from './offlineMiddleware' -import { createOfflineActions, markActionsOffline, queueAction } from './offlineActions' +import { createOfflineActions, markActionsOffline, queueAction, removeAction } from './offlineActions' import reducer from './reducer' import suspendSaga from './suspendSaga' import consumeActionMiddleware from './consumeActionMiddleware' @@ -13,6 +13,7 @@ module.exports = { offlineMiddleware, markActionsOffline, queueAction, + removeAction, reducer, suspendSaga, consumeActionMiddleware, diff --git a/src/offlineActions.js b/src/offlineActions.js index 9b43291..2e1b284 100644 --- a/src/offlineActions.js +++ b/src/offlineActions.js @@ -4,7 +4,9 @@ import { forEach as _forEach, has as _has, } from 'lodash' -import { QUEUE_ACTION } from "./actions" +import uuid from 'uuid/v4' + +import { QUEUE_ACTION, REMOVE_ACTION } from "./actions" /** * Wraps reduxsauce's creator function to append offline metadata. @@ -14,9 +16,11 @@ import { QUEUE_ACTION } from "./actions" const appendOfflineMeta = (creator) => { return (...rest) => { const creatorResult = creator(...rest) + return { ...creatorResult, meta: { + uuid: uuid(), ...creatorResult.meta, queueIfOffline: true, }, @@ -81,6 +85,19 @@ export const queueAction = (action) => { type: QUEUE_ACTION, payload: { ...action, + meta: { + uuid: uuid(), + ...action.meta, + }, + } + } +} + +export const removeAction = (action) => { + return { + type: REMOVE_ACTION, + payload: { + uuid: action.uuid, } } } diff --git a/src/offlineMiddleware.js b/src/offlineMiddleware.js index 6bf0423..a421dbf 100644 --- a/src/offlineMiddleware.js +++ b/src/offlineMiddleware.js @@ -2,6 +2,7 @@ import { includes as _includes, get as _get, } from 'lodash' +import uuid from 'uuid/v4' import INITIAL_STATE from './initialState' import { QUEUE_ACTION, ONLINE, RESET_QUEUE } from './actions' @@ -94,6 +95,10 @@ export default function offlineMiddleware(userConfig = {}) { type: QUEUE_ACTION, payload: { ...action, + meta: { + uuid: uuid(), + ...action.meta, + } }, }