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.