1.0.0 • Published 4 years ago
model-store-service v1.0.0
@track-advance/model-store-service
Installation
npm install @track-advance/model-store-service
Responsabilities
Provide a service to create Vuex module store for api models. Modules can be extended during creation to add specific actions and mutations id needed.
How to use model-store-service
First, Create new instance of modelStoreService.
const modelStoreService = new ModelStoreService();
Then, create a store for a specified API models,
const ItemsStore = modelStoreService.create<Items>('items', Items);
Full Example
This is a full example of how to use ModelStoreService.
import {Payload} from 'vuex';
import {apply, parallel} from 'async';
import {ModelStoreService} from '@track-advance/model-store-service';
import {Items} from '@track-advance/api-clients';
// Define generic error management for all store models
const onError(error: Error, payload: Payload){
console.error(`${payload.type} error: ${error.message}`);
};
// onError is not required
const modelStoreService = new ModelStoreService(onError);
// Create an object to extends default store if needed
const store = {
actions: {
async deleteAll({dispatch, getters}): Promise<void> {
const ItemIds = getters.collection.map(i => i.id);
const ItemDeletePromises = ItemIds.map(
(i) => apply(dispatch, 'delete', {id})
);
await parallel(ItemPromises);
},
},
}
// Create Hooks for extend default store action and mutations if needed
const hooks: {
actions: {
save: {
async after({dispatch}, {model}){
await dispatch('alert', {
type: 'success',
message: `${model.name} successfully saved`,
},
{ root: true });
}
},
}
}
// Define specific error management for Item models
const onErr(error: Error, context:payload: Payload){
console.error(`Item ${payload.type} error: ${error.message}`);
};
// Create a module for Items module
const ItemsStore = modelStoreService.create<Items>('items',
Items, store, hooks, onErr);
The Result will be an Store module object that contains:
console.log(ItemsStore);
/*{
items: {
namespaced: true,
state: {
collection: Collection<Items> | Array<T>
},
getters: {
collection: Collection<Items> | Array<T>
},
actions: {
async fetch(context, payload?):
Promise<Collection<Items> | Array<T>>
async fetchOne(context, payload?): Promise<T>,
async save(context, payload?): Promise<T>,
async delete(context, payload?): Promise<void>,
async deleteAll(context, payload?): Promise<void>,
},
mutations: {
addAll(state, payload): void,
create(state, payload): void,
update(state, payload): void,
delete(state, payload): void,
}
}
}*/
1.0.0
4 years ago