41 lines
1.1 KiB
TypeScript

import {
Action,
getModule,
Module,
Mutation,
MutationAction,
VuexModule
} from 'vuex-module-decorators';
import { keyBy } from 'lodash';
import { User, Measure, MeasureConfig } from '@/models';
import api from '@/services/pm-api-client';
@Module({ namespaced: true, name: 'measure' })
export class MeasureStoreModule extends VuexModule {
public measures: { [key: string]: Measure<MeasureConfig> } = {};
@MutationAction({ mutate: ['measures'], rawError: true })
public async fetchAllMeasures() {
const measures = await api.getAllMeasures();
return { measures: keyBy(measures, 'slug') };
}
@Action({ rawError: true })
public async fetchMeasure(slug: string) {
const measure = api.getMeasure(slug);
this.context.commit('SET_MEASURE', measure);
return measure;
}
@Action({ rawError: true })
public async createMeasure(m: Measure<MeasureConfig>) {
const newMeasure = await api.createMeasure(m);
this.context.commit('SET_MEASURE', newMeasure);
return newMeasure;
}
@Mutation private SET_MEASURE<T extends MeasureConfig>(measure: Measure<T>) {
this.measures[measure.slug] = measure;
}
}