Actions

Data-fetching tier for Lore

destroy

This blueprint...

Usage

Example usage is below:

lore.actions.tweet.destroy(tweet)

Blueprint

import _ from 'lodash';
import { ActionTypes, PayloadStates, normalize } from 'lore-utils';

export default function destroy(model) {
  return function(dispatch) {
    const Model = lore.models.{{ modelName }};
    const proxyModel = new Model(model.data);

    proxyModel.destroy().then(function() {
      // look through the model and generate actions for any attributes with
      // nested data that should be normalized
      const actions = normalize(lore, '{{ modelName }}').model(proxyModel);

      dispatch({
        type: ActionTypes.update('{{ modelName }}'),
        payload: _.merge(model, {
          state: PayloadStates.DELETED
        })
      });

      // dispatch any actions created from normalizing nested data
      actions.forEach(dispatch);
    }).catch(function(response) {
      const error = response.data;

      if (response.status === 404) {
        dispatch({
          type: ActionTypes.update('{{ modelName }}'),
          payload: _.merge(model, {
            state: PayloadStates.NOT_FOUND,
            error: error
          })
        });
      } else {
        dispatch({
          type: ActionTypes.update('{{ modelName }}'),
          payload: _.merge(model, {
            state: PayloadStates.ERROR_DELETING,
            error: error
          })
        });
      }
    });

    return dispatch({
      type: ActionTypes.update('{{ modelName }}'),
      payload: _.merge(model, {
        state: PayloadStates.DELETING
      })
    });
  };
};