2020-12-20 17:27:26 +01:00
|
|
|
import { jugglService } from "@/services/juggl.service.js";
|
|
|
|
|
2021-01-03 12:29:41 +01:00
|
|
|
export const juggl = {
|
2021-01-03 12:31:24 +01:00
|
|
|
state: {
|
|
|
|
apiUrl: "https://juggl.giller.dev/api",
|
|
|
|
projects: {},
|
|
|
|
records: {},
|
|
|
|
user: undefined,
|
|
|
|
auth: undefined,
|
|
|
|
recordsLimit: 0
|
|
|
|
},
|
|
|
|
mutations: {
|
|
|
|
setProjects(state, projects) {
|
|
|
|
state.projects = projects;
|
|
|
|
},
|
|
|
|
setRecords(state, records) {
|
|
|
|
state.records = records;
|
|
|
|
},
|
|
|
|
setRecordsLimit(state, limit) {
|
|
|
|
state.recordsLimit = limit;
|
|
|
|
},
|
|
|
|
setUser(state, user) {
|
|
|
|
state.user = user;
|
|
|
|
},
|
|
|
|
logout(state) {
|
|
|
|
state.auth = undefined;
|
|
|
|
localStorage.removeItem("apiKey");
|
|
|
|
localStorage.removeItem("userId");
|
|
|
|
},
|
|
|
|
login(state, { apiKey, userId }) {
|
|
|
|
state.auth = { apiKey: apiKey, userId: userId };
|
|
|
|
localStorage.setItem("apiKey", apiKey);
|
|
|
|
localStorage.setItem("userId", userId);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getters: {
|
|
|
|
runningRecords: state => {
|
|
|
|
return Object.values(state.records).filter(record => record.running);
|
|
|
|
},
|
|
|
|
finishedRecords: state => {
|
|
|
|
return Object.values(state.records).filter(record => !record.running);
|
|
|
|
},
|
|
|
|
auth: state => state.auth,
|
|
|
|
apiUrl: state => state.apiUrl,
|
|
|
|
user: state => state.user,
|
|
|
|
isLoggedIn: state => !!state.auth,
|
|
|
|
records: state => state.records,
|
|
|
|
projects: state => state.projects,
|
|
|
|
projectIds: state => {
|
|
|
|
var projectIds = [];
|
|
|
|
Object.values(state.projects).forEach(project => {
|
|
|
|
projectIds.push(project.project_id);
|
|
|
|
});
|
|
|
|
return projectIds;
|
|
|
|
},
|
|
|
|
runningProjectIds: (state, getters) => {
|
|
|
|
var runningProjectIds = [];
|
|
|
|
Object.values(getters.runningRecords).forEach(record => {
|
|
|
|
var projectId = record.project_id;
|
|
|
|
if (runningProjectIds.includes(runningProjectIds) === false) {
|
|
|
|
runningProjectIds.push(projectId);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return runningProjectIds;
|
|
|
|
},
|
|
|
|
finishedProjectIds: (state, getters) => {
|
|
|
|
var runningProjectIds = getters.runningProjectIds;
|
|
|
|
return getters.projectIds.filter(id => !runningProjectIds.includes(id));
|
|
|
|
},
|
|
|
|
finishedProjects: (state, getters) => {
|
|
|
|
var ids = getters.finishedProjectIds;
|
|
|
|
return Object.values(state.projects).filter(project =>
|
|
|
|
ids.includes(project.project_id)
|
|
|
|
);
|
|
|
|
},
|
|
|
|
runningProjects: (state, getters) => {
|
|
|
|
var ids = getters.runningProjectIds;
|
|
|
|
return Object.values(state.projects).filter(project =>
|
|
|
|
ids.includes(project.project_id)
|
|
|
|
);
|
|
|
|
},
|
|
|
|
getProjectById: (state, getters) => id => {
|
|
|
|
return Object.values(getters.projects).find(
|
|
|
|
project => project.project_id === id
|
|
|
|
);
|
|
|
|
},
|
|
|
|
getRecordById: (state, getters) => id => {
|
|
|
|
return Object.values(getters.records).find(
|
|
|
|
record => record.record_id === id
|
|
|
|
);
|
2021-01-03 20:37:15 +01:00
|
|
|
},
|
|
|
|
getRecordsExceptId: (state, getters) => id => {
|
|
|
|
return Object.values(getters.records).filter(
|
|
|
|
record => record.record_id !== id
|
|
|
|
);
|
2021-01-03 12:31:24 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
actions: {
|
|
|
|
loadProjects({ commit }) {
|
|
|
|
return jugglService.getProjects().then(r => {
|
|
|
|
commit("setProjects", r.data.projects);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
loadUser({ commit }) {
|
|
|
|
return jugglService
|
|
|
|
.getUser()
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(r => {
|
|
|
|
commit("setUser", r.data.users[0]);
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
},
|
2021-01-03 21:42:29 +01:00
|
|
|
loadRecords({ commit, state, getters }, { limit, finished }) {
|
2021-01-03 20:37:15 +01:00
|
|
|
if (limit !== undefined) {
|
|
|
|
commit("setRecordsLimit", limit);
|
|
|
|
}
|
|
|
|
|
|
|
|
var payload = { limit: state.recordsLimit, finished: finished };
|
|
|
|
|
|
|
|
return jugglService.getRecords(payload).then(r => {
|
2021-01-03 21:42:29 +01:00
|
|
|
var allRecords = Object.values(r.data.records);
|
|
|
|
|
|
|
|
if (finished === true) {
|
|
|
|
allRecords = [...allRecords, ...getters.runningRecords];
|
|
|
|
} else if (finished === false) {
|
|
|
|
allRecords = [...allRecords, ...getters.finishedRecords];
|
|
|
|
}
|
|
|
|
|
|
|
|
commit("setRecords", allRecords);
|
2021-01-03 20:37:15 +01:00
|
|
|
});
|
2021-01-03 12:31:24 +01:00
|
|
|
},
|
|
|
|
loadRunningRecords({ commit, getters }) {
|
|
|
|
return jugglService.getRunningRecords().then(r => {
|
|
|
|
var allRecords = {
|
|
|
|
...getters.finishedRecords,
|
|
|
|
...r.data.records
|
|
|
|
};
|
|
|
|
commit("setRecords", allRecords);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
login({ commit, getters }, { userId, apiKey }) {
|
|
|
|
// Is already logged in?
|
|
|
|
if (getters.isLoggedIn) {
|
|
|
|
this.dispatch("logout");
|
|
|
|
}
|
2021-01-01 16:35:35 +01:00
|
|
|
|
2021-01-03 12:31:24 +01:00
|
|
|
commit("login", { apiKey: apiKey, userId: userId });
|
2021-01-01 16:35:35 +01:00
|
|
|
|
2021-01-03 12:31:24 +01:00
|
|
|
return this.dispatch("loadUser")
|
|
|
|
.catch(() => {
|
|
|
|
this.dispatch("logout");
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(r => {
|
|
|
|
if (r === false) {
|
|
|
|
this.dispatch("logout");
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
logout({ commit }) {
|
|
|
|
commit("setUser", undefined);
|
2021-01-03 20:58:51 +01:00
|
|
|
commit("setProjects", []);
|
|
|
|
commit("setRecords", []);
|
2021-01-03 12:31:24 +01:00
|
|
|
commit("logout");
|
|
|
|
},
|
2021-01-03 20:37:15 +01:00
|
|
|
endRecord({ getters }, recordId) {
|
|
|
|
if (recordId === undefined) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2021-01-03 12:31:24 +01:00
|
|
|
return jugglService
|
|
|
|
.endRecord(recordId)
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(() => {
|
2021-01-03 20:37:15 +01:00
|
|
|
// TODO: Return ended record from API
|
|
|
|
var record = getters.getRecordById(recordId);
|
|
|
|
record.running = false;
|
2021-01-03 12:31:24 +01:00
|
|
|
return true;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
addProject(context, { name }) {
|
|
|
|
return jugglService
|
|
|
|
.addProject(name)
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(() => {
|
2021-01-03 20:37:15 +01:00
|
|
|
this.dispatch("loadProjects");
|
2021-01-03 12:31:24 +01:00
|
|
|
return true;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
startRecord(context, projectId) {
|
2021-01-03 20:37:15 +01:00
|
|
|
if (projectId === undefined) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2021-01-03 12:31:24 +01:00
|
|
|
return jugglService
|
|
|
|
.startRecord(projectId)
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(() => {
|
2021-01-03 20:37:15 +01:00
|
|
|
this.dispatch("loadRunningRecords");
|
2021-01-03 12:31:24 +01:00
|
|
|
return true;
|
|
|
|
});
|
|
|
|
},
|
2021-01-03 20:37:15 +01:00
|
|
|
removeRecord({ commit, getters }, recordId) {
|
|
|
|
if (recordId === undefined) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2021-01-03 12:31:24 +01:00
|
|
|
return jugglService
|
|
|
|
.removeRecord(recordId)
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(() => {
|
2021-01-03 20:37:15 +01:00
|
|
|
commit("setRecords", getters.getRecordsExceptId(recordId));
|
2021-01-03 12:31:24 +01:00
|
|
|
return true;
|
|
|
|
});
|
|
|
|
},
|
2021-01-03 20:44:39 +01:00
|
|
|
loadSavedLogin() {
|
2021-01-03 12:31:24 +01:00
|
|
|
var userId = localStorage.getItem("userId");
|
|
|
|
var apiKey = localStorage.getItem("apiKey");
|
2021-01-03 12:29:41 +01:00
|
|
|
|
2021-01-03 20:52:37 +01:00
|
|
|
if (userId == undefined || apiKey == undefined) {
|
2021-01-03 12:31:24 +01:00
|
|
|
return;
|
|
|
|
}
|
2021-01-03 12:29:41 +01:00
|
|
|
|
2021-01-03 20:44:39 +01:00
|
|
|
this.dispatch("login", { apiKey: apiKey, userId: userId });
|
2021-01-03 20:37:15 +01:00
|
|
|
},
|
|
|
|
removeLocalRecords({ commit }) {
|
|
|
|
commit("setRecords", []);
|
|
|
|
},
|
|
|
|
updateRecord({ commit, getters }, record) {
|
|
|
|
if (record.record_id === undefined) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
return jugglService
|
|
|
|
.updateRecord(record)
|
|
|
|
.catch(() => {
|
|
|
|
return false;
|
|
|
|
})
|
|
|
|
.then(() => {
|
|
|
|
// TODO: Return updated record from API
|
|
|
|
var records = getters.getRecordsExceptId(record.record_id);
|
|
|
|
records.push(record);
|
|
|
|
commit("setRecords", records);
|
|
|
|
return true;
|
|
|
|
});
|
2021-01-03 12:31:24 +01:00
|
|
|
}
|
|
|
|
}
|
2021-01-03 12:29:41 +01:00
|
|
|
};
|