Socket
Socket
Sign inDemoInstall

vue-call-store

Package Overview
Dependencies
11
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    vue-call-store

A Vuex module and Vue mixin to track the status of all API calls


Version published
Maintainers
1
Install size
73.0 kB
Created

Readme

Source

Vue Call Store

Build Maintainability

A Vue & Vuex plugin to simplify tracking API call statuses.

Vue Call Store provides a Vuex module and component methods to make it easy to update API call statuses and keep track of them.

Check out the demo

Install

yarn add -D vue-call-store
yarn add -D vuex
# or
npm i -D vue-call-store
npm i -D vuex
import Vuex from 'vuex';
import VueCallStore from 'vue-call-store';

/**
 * If Vuex isn't installed,
 * it will be installed.
 */
Vue.use(Vuex);

const store = new Vuex.Store({});

/**
 * If a store isn't passed,
 * one will be created.
 */
Vue.use(VueCallStore, { store });

Examples

Update the status of a call
/**
 * @arg {string} identifier
 * @arg {*} [message]
 */
vm.$calls.start('fetchUsers');
vm.$calls.end('fetchUsers');
vm.$calls.fail('fetchUsers', error);

// Example usage in a Vuex action
new Vuex.Store({
  actions: {
    fetchUsers({ commit }) {
      const identifier = 'fetchUsers';

      commit('calls/START', { identifier });

      axios
        .get('/api/users')
        .then(({data} => {
          commit('users/set', data);
          commit('calls/END', { identifier });
        })
        .catch(({response}) => {
          commit('calls/FAIL', { identifier, message: response.data.errors });
        });
    },
  },
});

Check the status of a call in a component
/**
 * @arg {string | array} identifier
 * @returns {boolean}
 */

const isPending = vm.$calls.isPending('fetchUsers');
const isDone = vm.$calls.isDone('fetchUsers');
const hasFailed = vm.$calls.hasFailed(['fetchUsers', 'second']);
Conditionally render with directives

Directives accept string or array of identifiers.

<template>
  <loading-indicator v-call:pending="'fetchUsers'" />

  <div v-call:done="'fetchUsers'" class="content">
    <ul>
      <li v-for="user in users" :key="user.id">{{ user.name }}</li>
    </ul>
  </div>

  <div v-call:failed="['fetchUsers', 'second']" class="content">
    Oops! Unable to fetch users.
  </div>
Conditionally render with components

Components' identifier props accept string or array of identifiers.

Components' once props accept a boolean. When true, the slot contents will only be hidden once.

  <v-call-pending identifier="fetchUsers" :once="true">
    <loading-indicator />
  </v-call-pending>

  <v-call-failed identifier="fetchUsers">
    <div class="content">
      <ul>
        <li v-for="user in users" :key="user.id">{{ user.name }}</li>
      </ul>
    </div>
  </v-call-failed>

  <v-call-failed :identifier="['fetchUsers', 'second']">
    <div class="content">
      Oops! Unable to fetch users.
    </div>
  </v-call-failed>
</template>
Multiple identifer logic
StateMethodto be true
pending`$callIsPending$calls.isPending`
done`$callIsDone$calls.isDone`
failed`$callHasFailed$calls.hasFailed`

See Source

Get the raw call object
/**
 * @arg {string} identifier
 * @arg {*} [defaultValue = null]
 * @returns {object|null}
 */
const notFoundValue = { status: 'done' };
const call = vm.$calls.get('fetchUsers', notFoundValue);

// Format
{
  _duration: 200, // milliseconds
  _started: moment('2019-04-02T15:19:05.000'), // or null
  _stopped: moment('2019-04-02T15:19:05.200'), // or null
  message: 'message',
  status: 'done',
}
Available mutations

these mutations are useful in Vuex actions

vm.$store.commit('calls/START', { identifier, message });
vm.$store.commit('calls/END', { identifier, message });
vm.$store.commit('calls/FAIL', { identifier, message });
vm.$store.commit('calls/RESET'); // Removes all call objects

Api

vm.$calls.end(identifier[, message])
vm.$endCall(identifier[, message])

Ends a call.

  • Arguments
    • {string} identifier
    • {*} message optional
  • Returns {void}
vm.$calls.fail(identifier[, message])
vm.$failCall(identifier[, message])

Fails a call.

  • Arguments
    • {string} identifier
    • {*} message optional
  • Returns {void}
vm.$calls.start(identifier[, message])
vm.$startCall(identifier[, message])

Starts a call.

  • Arguments
    • {string} identifier
    • {*} message optional
  • Returns {void}
vm.$calls.call(identifier[, defaultValue])
vm.$getCall(identifier[, defaultValue])
vm.$calls.get(identifier[, defaultValue])

Gets raw call.

  • Arguments
    • {string} identifier
    • {*} defaultValue (default: null) optional
  • Returns {object}
vm.$calls.hasFailed(identifier)
vm.$callHasFailed(identifier)

Gets if one or at least one of many calls has failed.

  • Arguments
    • {string | array} identifier
  • Returns {boolean}
vm.$calls.isDone(identifier)
vm.$callIsDone(identifier)

Gets if one or all calls are done.

  • Arguments
    • {string} identifier
  • Returns {boolean}
vm.$calls.isPending(identifier)
vm.$callIsPending(identifier)

Gets if one or at least one of many calls is pending.

  • Arguments
    • {string} identifier
  • Returns {boolean}

Development

Lint
yarn lint
Test
yarn test
Build
yarn build

How to contribute

Pull calls
  1. Fork the repository
  2. Create a new branch for each feature or improvement
  3. Send a pull call from each feature branch to the develop branch

License

MIT

FAQs

Last updated on 12 Mar 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc