Skip to content

BsStore

A built-in data store class for working with collection of entity objects and remote API.

Overview

Vue MDBootstrap provides built-in data store class for working with collection of entity objects and remote API. BsStore is used to store collection of entity objects locally and your application is reponsible to manage them. Components like BsCombobox and BsListbox are examples of components that use BsStore for their data binding.

Usage Example

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  }
});

CSRF Token

If the RESTful backend needs CSRF token within the POST,PATCH, PUT or DELETE request, we can accomplish it with:

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  },
  csrfConfig: {
    // do not change text: '{name}'
    url: './api/token/{name}',
    // 'token_name' is a keyword to identify the token. 
    // This keyword is used by the RESTful backend to create the CSRF token.
    tokenName: 'token_name', 
    dataField: 'value',
    // If 'suffix' is 'true' then the keyword will become: 'token_name-create', 'token_name-update', 'token_name-delete'
    // when perfoming HTTP request to save, update or delete record.
    suffix: false,
  }
});

Filtering Data

Filter dataset at creation time

BsStore provides functionality to define filters at creation time. The filters we define here will be treated as default filters. See example below:

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  filters: [{ property: 'fullName', value: 'john', operator: 'contains' }],
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  }
});

// load the data
dsStore.load()
  .then(() => {
    console.info('datas: ', dsStore.dataItems);
  })
  .catch((error) => {
    console.warn(error);
  });

Filter dataset on demands

BsStore also provides functionality to filter dataset on demands. See example below:

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  }
});

// apply filter to the dataset
dsStore.filters = [{ property: 'fullName', value: 'john', operator: 'contains' }];

// load the dataset
dsStore.load()
  .then(() => {
    console.info('datas: ', dsStore.dataItems);
  })
  .catch((error) => {
    console.warn(error);
  });

Sorting Data

Sort dataset at creation time

BsStore provides functionality to define sort criterias at creation time. See example below:

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  sorts: [{ property: 'fullName', direction: 'asc' }],
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  }
});

// load the dataset
dsStore.load()
  .then(() => {
    console.info('datas: ', dsStore.dataItems);
  })
  .catch((error) => {
    console.warn(error);
  });

Sort dataset on demands

BsStore also provides functionality to sort dataset on demands. See example below:

ts
import { BsStore } from "vue-mdbootstrap";

const dsStore = new BsStore({
  idProperty: 'id',
  dataProperty: 'data',
  totalProperty: 'total', 
  pageSize: 15, 
  restProxy: { 
    browse: './api/users', 
    delete: { url: './api/users/{id}', method: 'delete' }, 
    save: { url: './api/users', method: 'post' }, 
    update: { url: './api/users', method: 'patch' } 
  }
});

// define sorters criteria then load the dataset
dsStore.setSorters([{ property: 'fullName', direction: 'asc' }])
  .load()
  .then(() => {
    console.info('datas: ', dsStore.dataItems);
  })
  .catch((error) => {
    console.warn(error);
  });

API Reference

Released under the BSD-3-Clause License.