npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tuxedo-api-interface

v0.0.34

Published

A Vue API extension for axios and vuex that begins with some standard interfaces

Downloads

12

Readme

Index

Usage

Download & Installation

$ npm i tuxedo-api-interface

In your Vue main.js file, or wherever you're calling the Vuex store

import { tuxedo } from 'tuxedo-api-interface/src/module/tuxedo'

export default new Vuex.Store({
    modules: {
        tuxedo
    }
})

In the script part of any component you wish to use these tools in

import { mapState } from 'vuex'
import { resourceControl } from 'tuxedo-api-interface/src/mixins/resourceControl'

export default {
    name: 'Users',
    mixins: [resourceControl],
    computed: {
        ...mapState({
            resources: state => state.users,
            resourceState: state => state.usersState,
            resourceStore: state => state.usersStore
        })
    }
}

Your Vuex state requires a couple of object variables for each component, the naming of these variables is based on what you have named your component.

export const state = {
    // This contains the active collection of the resource
    users: {},
    // Optional, this contains the entire collection of resources
    usersStore: [],
    // This contains a configuration of how these resources should be called 
    usersState: { 
        tableRows: 10,
        page: 1,
        sort: {
            col: 'id',
            dir: 'desc'
        }
    }
}

Add your endpoint base uri to the projects .env

VUE_APP_URL = 'https://my-domain.com'

Intercept the api calls to add any authorisation headers needed for your endpoint

queue.interceptors.request.use((config) => {
  const token = myAPIToken
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

submit.interceptors.request.use((config) => {
  const token = myAPIToken
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

Vuex State

Importing the tuxedo module into your store will expose the following state values.

submitting

A boolean value that signifies a request is either processing or not. Used for POST, PUT & DELETE requests, but not for GET requests.

Vuex Actions

Importing the tuxedo module into your store will expose the following actions

attach

Submits an attach request to the API endpoint, on a successful request it then removes the resource from the Vuex store

destroy

Submits a delete request to the API endpoint, on a successful request it then removes the resource from the Vuex store

Vuex Actions

Importing the tuxedo module into your store will expose the following mutations

attachResponse

This attaches the data value of a response to an existing state value using a merge.

For instance, we might have a user array, but we need to separately request a set of comments and attach them to their respective users.

users: [
    {
        id: 1,
        name: 'Hamish',
        comments: []
    }
]

We use our index action to call the comments from the API. We pass the response through to our attachResponse mutation along with an array value 'target' that tells the mutation what to target, in this case it targets the 'users' state and attaches comments based on the 'user_id' in the data set.

this.$store.dispatch('index', { collection: 'comments' })
    .then((res) => {
        this.$store.commit('attachResponse', { 
            rootState: state, 
            data: res.data,
            target: ['users', 'comments']
        })
    })

If more granular control is required we can pass in an array of object instead, and include some extra commands. Using the same example as above our target could also be the following.

target: [{ collection: 'users' }, { collection: 'comments'}]

By using the more verbose syntax it exposes some additional options.

####Attach an object instead of a collection Imagine each user in our users array has the following structure.

users: [
    {
        id: 1,
        name: 'Hamish',
        comments: [],
        address: {
            line1: '',
            line2: ''
        }
    }
]

The address is an object, whereas the comments is an array. So if we want to call in a bunch of addresses and associate them with the correct users we can attach each one as an object instead of a collection.

target: [{ collection: 'users' }, { object: 'address'}]

License

This project is licensed under the MIT License