flaschengeist-frontend/src/plugins/schedule/store/schedule.ts

246 lines
5.9 KiB
TypeScript
Raw Normal View History

2021-01-23 13:40:35 +00:00
import { Module, MutationTree, ActionTree, GetterTree } from 'vuex';
import { StateInterface } from 'src/store';
import { axios } from 'src/boot/axios';
import { AxiosResponse } from 'axios';
export interface JobType {
id: number;
name: string;
}
2021-01-23 15:06:44 +00:00
export interface EventType {
id: number;
name: string;
}
2021-01-23 13:40:35 +00:00
export interface ScheduleInterface {
jobTypes: JobType[];
2021-01-23 15:06:44 +00:00
eventTypes: EventType[];
2021-01-26 19:38:46 +00:00
events: FG.Event[];
2021-01-23 13:40:35 +00:00
}
const state: ScheduleInterface = {
2021-01-23 15:06:44 +00:00
jobTypes: [],
2021-01-26 19:38:46 +00:00
eventTypes: [],
events: [],
2021-01-23 13:40:35 +00:00
};
2021-01-26 19:38:46 +00:00
interface Event {
start: Date;
end?: Date;
description: string;
type: EventType;
jobs: Job[];
}
interface Job {
id: number;
start: Date | null;
end?: Date | null;
comment: string;
type: FG.JobType | null;
services: Array<FG.Service>;
required_services: number;
}
2021-01-23 13:40:35 +00:00
const mutations: MutationTree<ScheduleInterface> = {
setJobTypes(state, jobTypes: JobType[]) {
state.jobTypes = jobTypes;
},
addJobType(state, jobType: JobType) {
state.jobTypes.unshift(jobType);
},
removeJobType(state, id: number) {
const index = state.jobTypes.findIndex((item) => item.id == id);
2021-01-23 13:40:35 +00:00
state.jobTypes.splice(index, 1);
},
setJobType(state, jobType: JobType) {
const _jobtype = state.jobTypes.find((item) => item.id == jobType.id);
2021-01-23 13:40:35 +00:00
if (_jobtype) {
_jobtype.name = jobType.name;
}
2021-01-23 15:06:44 +00:00
},
setEventTypes(state, eventTypes: EventType[]) {
state.eventTypes = eventTypes;
},
addEventType(state, eventType: EventType) {
state.eventTypes.unshift(eventType);
},
2021-02-07 19:35:08 +00:00
removeEventType(state, id: number) {
const index = state.eventTypes.findIndex((item) => item.id == id);
2021-01-23 15:06:44 +00:00
state.eventTypes.splice(index, 1);
},
setEventType(state, eventType: EventType) {
const _eventtype = state.eventTypes.find((item) => item.id == eventType.id);
2021-01-23 15:06:44 +00:00
if (_eventtype) {
_eventtype.name = eventType.name;
}
2021-01-26 19:38:46 +00:00
},
addEvent(state, event: FG.Event) {
state.events.unshift(event);
},
setEvents(state, events: FG.Event[]) {
state.events = events;
},
updateEvent(state, event: FG.Event) {
2021-02-07 19:35:08 +00:00
/*let eventToChange = state.events.find(ev => ev.id == event.id);
eventToChange = event; */
const index = state.events.findIndex((ev) => ev.id == event.id);
2021-02-07 19:35:08 +00:00
if (index > -1) {
state.events[index] = event;
}
},
2021-01-23 13:40:35 +00:00
};
const actions: ActionTree<ScheduleInterface, StateInterface> = {
getJobTypes({ commit }) {
axios
.get('/schedule/job-types')
.then((response: AxiosResponse<JobType[]>) => {
console.log('action:', response.data);
commit('setJobTypes', response.data);
})
.catch((err) => {
2021-01-23 13:40:35 +00:00
console.warn(err);
});
},
addJobType({ commit }, data) {
axios
.post('/schedule/job-types', data)
.then((response: AxiosResponse<JobType>) => {
commit('addJobType', response.data);
})
.catch((err) => {
2021-01-23 13:40:35 +00:00
console.warn(err);
});
},
2021-01-23 15:06:44 +00:00
2021-01-23 13:40:35 +00:00
removeJobType({ commit }, data: number) {
axios
.delete(`/schedule/job-types/${data}`)
.then(() => {
commit('removeJobType', data);
})
.catch((err) => {
2021-01-23 13:40:35 +00:00
console.warn(err);
});
},
changeJobTypeName({ commit }, jobtype: JobType) {
axios
.put(`/schedule/job-types/${jobtype.id}`, jobtype)
.then(() => {
commit('setJobType', jobtype);
})
.catch((err) => {
2021-01-23 13:40:35 +00:00
console.warn(err);
});
2021-01-23 15:06:44 +00:00
},
getEventTypes({ commit }) {
axios
.get('/schedule/event-types')
.then((response: AxiosResponse<EventType[]>) => {
console.log('action:', response.data);
commit('setEventTypes', response.data);
})
.catch((err) => {
2021-01-23 15:06:44 +00:00
console.warn(err);
});
},
addEventType({ commit }, data) {
console.log(data);
axios
.post('/schedule/event-types', data)
.then((response: AxiosResponse<EventType>) => {
commit('addEventType', response.data);
})
.catch((err) => {
2021-01-23 15:06:44 +00:00
console.warn(err);
});
},
2021-02-07 19:35:08 +00:00
removeEventType({ commit }, data: number) {
2021-01-23 15:06:44 +00:00
axios
.delete(`/schedule/event-types/${data}`)
.then(() => {
commit('removeEventType', data);
})
.catch((err) => {
2021-01-23 15:06:44 +00:00
console.warn(err);
});
},
changeEventTypeName({ commit }, eventtype: { id: number; name: string; oldname: string }) {
axios
.put(`/schedule/event-types/${eventtype.id}`, eventtype)
2021-01-23 15:06:44 +00:00
.then(() => {
commit('setEventType', eventtype);
})
.catch((err) => {
2021-01-23 15:06:44 +00:00
console.warn(err);
});
2021-01-26 19:38:46 +00:00
},
addEvent({ commit }, event: Event) {
axios
.post('/schedule/events', event)
.then((response: AxiosResponse<Event>) => {
2021-01-26 19:38:46 +00:00
commit('addEvent', response.data);
})
.catch((err) => {
2021-01-26 19:38:46 +00:00
console.warn(err);
});
console.log('Events: ', state.events);
},
updateEvent(
{ commit },
updateInformation: { eventId: number; JobId: number; service: FG.Service }
) {
axios
.put(
`/schedule/events/${updateInformation.eventId}/jobs/${updateInformation.JobId}`,
updateInformation.service
)
.then((response: AxiosResponse<FG.Event>) => {
2021-02-07 19:35:08 +00:00
response.data.start = new Date(response.data.start);
commit('updateEvent', response.data);
})
.catch((err) => {
console.warn(err);
});
},
getEvents({ commit }) {
axios
.get('/schedule/events')
.then((response: AxiosResponse<Event[]>) => {
console.log('action:', response.data);
response.data.forEach((event) => {
event.start = new Date(event.start);
});
commit('setEvents', response.data);
})
.catch((err) => {
console.warn(err);
});
},
2021-01-23 13:40:35 +00:00
};
const getters: GetterTree<ScheduleInterface, StateInterface> = {
jobTypes(state) {
return state.jobTypes;
},
events(state) {
return state.events;
},
2021-01-23 13:40:35 +00:00
};
const schedule: Module<ScheduleInterface, StateInterface> = {
namespaced: true,
state,
mutations,
actions,
getters,
2021-01-23 13:40:35 +00:00
};
export default schedule;