By default, the SDK will inject some helpers to all components.

# $JsonApi

For full documentation, please check jsonapi-client-js

Example:

<!-- Your component -->
<template>
  <div></div>
</template>

<script>
export default {

  created() {

    // Build a JSON:API document
    let exampleDocument = new this.$JsonApi;
    let exampleResource = exampleDocument.makeResource();
    exampleResource.setType('products');
    exampleResource.setAttribute('title', 'Example product...');

    // Set document data
    exampleDocument.setData(exampleResource);

    // Test
    alert(exampleDocument.toJson());
  }
}
</script>

# $http

This helper helps you to consume API easier.

<!-- Your component -->
<template>
  <div></div>
</template>

<script>
export default {

  async created() {

    // Get some products from api
    let productsDocument = await this.$http.collection('products');

    // Create a product
    // Build a product document
    let productDocument = new this.$JsonApi;
    let productResource = productDocument.makeResource();
    productResource.setType('products');
    productResource.setAttributes({
      title: 'Example product',
      price: 9.99  
    });
    productDocument.setData(productResource);

    // Send request
    let productResponseDocument = await this.$http.create(productDocument);
  }
}
</script>

# $linkTo

This helper helps you to navigate between pages easier.

<!-- Your component -->
<template>
  <div>

    <!-- Link to home page -->
    <router-link :to="$linkTo('home')">Home</router-link>

    <!-- Link to list products page -->
    <router-link :to="$linkTo('products')">All products</router-link>

    <!-- Link to a product -->
    <router-link :to="$linkTo('product', productResourceObject)">
      {{ productResourceObject.getAttribute('title') }}
    </router-link>

    <!-- Link to a post -->
    <router-link :to="$linkTo('post', postResourceObject)">
      {{ postResourceObject.getAttribute('title') }}
    </router-link>

  </div>
</template>

Below is a table of possible parameters:

Page First parameter Second parameter
Home 'home' void
List pages 'pages' void
Page detail 'page' pageResourceObject
List posts 'posts' void
Post detail 'post' postResourceObject
List products 'products' void
Product detail 'product' productResourceObject
List product collections 'collections' void
Product collection detail 'collection' void
Cart 'cart' void
Checkout 'checkout' cartResourceObject
Invoice 'invoice' invoiceResourceObject
Thank you (payment successful) 'thankyou' invoiceResourceObject
Payment failure 'payment-failure' invoiceResourceObject

# $cookie

Example:

<!-- Your component -->
<template>
  <div>{{ $cookie.get('cookie-name') }}</div>
</template>

<script>
export default {

  created() {

    // Create a cookie
    this.$cookie.set('name', value);

    // Create a cookie that expires 7 days from now
    this.$cookie.set('name', value, { expires: 7 });

    // Read cookie
    console.log(this.$cookie.get('name'));

    // Read all cookies
    console.log(this.$cookie.get()); // { key: value, key: value,... }
  }
}
</script>

# $currency

<!-- Your component -->
<template>
  <div>
    {{ $currency.priceFormat(19.99) }} <!-- Result: $19.99 -->
  </div>
</template>

# $image

<!-- Your component -->
<template>
  <div>

    <!-- Get image url -->
    {{ $image.url(imageResourceObject) }}

    <!-- Resize an image $image.resize(imageResourceObject, width, isCropped) -->
    {{ $image.resize(imageResourceObject, 300, true) }} -> Resize image to 300px width, cropped
    {{ $image.resize(imageResourceObject, 300) }} -> Resize image to 300px of width, not cropped

  </div>
</template>

# $handleException

This helper helps you to handle http exception easier.

<!-- Your component -->
<template>
  <div></div>
</template>

<script>
export default {

  async created() {

    try {

      // Get some products from api
      let productsDocument = await this.$http.collection('products');

    } catch (e) {
      let errors = this.$handleException(e); // ['error message 1', 'error message 2', ...]
    }  

  }
}
</script>