59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import {
|
|
Action,
|
|
getModule,
|
|
Module,
|
|
Mutation,
|
|
MutationAction,
|
|
VuexModule
|
|
} from 'vuex-module-decorators';
|
|
import assign from 'lodash.assign';
|
|
import keyBy from 'lodash.keyby';
|
|
import omit from 'lodash.omit';
|
|
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<T extends MeasureConfig>(m: Measure<T>) {
|
|
const newMeasure = await api.createMeasure(m);
|
|
this.context.commit('SET_MEASURE', newMeasure);
|
|
return newMeasure;
|
|
}
|
|
|
|
@Action({ rawError: true })
|
|
public async deleteMeasure<T extends MeasureConfig>(m: Measure<T>) {
|
|
const delResponse = await api.deleteMeasure(m.slug);
|
|
this.context.commit('DELETE_MEASURE', m);
|
|
}
|
|
|
|
@Action({ rawError: true })
|
|
public async updateMeasure<T extends MeasureConfig>(m: Measure<T>) {
|
|
const updatedMeasure = await api.updateMeasure(m);
|
|
return updatedMeasure;
|
|
}
|
|
|
|
@Mutation private SET_MEASURE<T extends MeasureConfig>(measure: Measure<T>) {
|
|
this.measures = assign({}, this.measures, {[measure.slug]: measure});
|
|
}
|
|
|
|
@Mutation private DELETE_MEASURE<T extends MeasureConfig>(measure: Measure<T>) {
|
|
this.measures = assign({}, omit(this.measures, measure.slug));
|
|
}
|
|
}
|