diff --git a/src/components/forms/FormProjectAdd.vue b/src/components/forms/FormProjectAdd.vue
index ad75f1e..acc3c2a 100644
--- a/src/components/forms/FormProjectAdd.vue
+++ b/src/components/forms/FormProjectAdd.vue
@@ -1,22 +1,21 @@
-
+ >
+
+
+
+
+ Add project
+
+
+
+
diff --git a/src/services/juggl.service.js b/src/services/juggl.service.js
index 7a74d04..3145c26 100644
--- a/src/services/juggl.service.js
+++ b/src/services/juggl.service.js
@@ -54,7 +54,7 @@ export const jugglService = {
});
},
- getRecords({ limit = undefined, finished = undefined}) {
+ getRecords({ limit = undefined, finished = undefined }) {
var payload = {};
if (limit !== undefined && limit > 0) {
diff --git a/src/store/modules/juggl.js b/src/store/modules/juggl.js
index 1994fdb..24ccbca 100644
--- a/src/store/modules/juggl.js
+++ b/src/store/modules/juggl.js
@@ -1,244 +1,240 @@
import { jugglService } from "@/services/juggl.service.js";
export const juggl = {
- state: {
- apiUrl: "https://juggl.giller.dev/api",
- projects: {},
- records: {},
- user: undefined,
- auth: undefined,
- usingFinishedRecords: false,
- usingRunningRecords: false,
- usingProjects: false,
- recordsLimit: 0,
+ state: {
+ apiUrl: "https://juggl.giller.dev/api",
+ projects: {},
+ records: {},
+ user: undefined,
+ auth: undefined,
+ usingFinishedRecords: false,
+ usingRunningRecords: false,
+ usingProjects: false,
+ recordsLimit: 0
+ },
+ mutations: {
+ setKey(state, key) {
+ state.key = key;
},
- mutations: {
- setKey(state, key) {
- state.key = key;
- },
- setProjects(state, projects) {
- state.projects = projects;
- },
- setRecords(state, records) {
- state.records = records;
- },
- usingFinishedRecords(state, using) {
- state.usingFinishedRecords = using;
- },
- usingRunningRecords(state, using) {
- state.usingRunningRecords = using;
- },
- usingProjects(state, using) {
- state.usingProjects = using;
- },
- 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);
- },
+ setProjects(state, projects) {
+ state.projects = projects;
},
- 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
- );
- },
+ setRecords(state, records) {
+ state.records = records;
},
- actions: {
- loadProjects({ commit }) {
- return jugglService.getProjects().then((r) => {
- commit("setProjects", r.data.projects);
- commit("usingProjects", true);
- });
- },
- loadUser({ commit }) {
- return jugglService
- .getUser()
- .catch(() => {
- return false;
- })
- .then((r) => {
- commit("setUser", r.data.users[0]);
- return true;
- });
- },
- loadRecords({ commit, state }, { limit, finished }) {
- commit("setRecordsLimit", limit);
- return jugglService.getRecords({ limit: state.recordsLimit, finished: finished }).then((r) => {
- commit("setRecords", r.data.records);
- commit("usingFinishedRecords", true);
- commit("usingRunningRecords", true);
- });
- },
- loadRunningRecords({ commit, getters }) {
- return jugglService.getRunningRecords().then((r) => {
- var allRecords = {
- ...getters.finishedRecords,
- ...r.data.records,
- };
- commit("setRecords", allRecords);
- commit("usingRunningRecords", true);
- });
- },
- login({ commit, getters }, { userId, apiKey }) {
- // Is already logged in?
- if (getters.isLoggedIn) {
- this.dispatch("logout");
- }
-
- commit("login", { apiKey: apiKey, userId: userId });
-
- 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);
- commit("logout");
- },
- endRecord(context, recordId) {
- return jugglService
- .endRecord(recordId)
- .catch(() => {
- return false;
- })
- .then(() => {
- this.dispatch("updateState");
- return true;
- });
- },
- addProject(context, { name }) {
- return jugglService
- .addProject(name)
- .catch(() => {
- return false;
- })
- .then(() => {
- this.dispatch("updateState");
- return true;
- });
- },
- startRecord(context, projectId) {
- return jugglService
- .startRecord(projectId)
- .catch(() => {
- return false;
- })
- .then(() => {
- this.dispatch("updateState");
- return true;
- });
- },
- removeRecord(context, recordId) {
- return jugglService
- .removeRecord(recordId)
- .catch(() => {
- return false;
- })
- .then(() => {
- this.dispatch("updateState");
- return true;
- });
- },
- updateState({ state }) {
- if (state.usingProjects) {
- this.dispatch("loadProjects");
- }
- if (state.usingRunningRecords && state.usingFinishedRecords) {
- this.dispatch("loadRecords");
- } else if (state.usingRunningRecords) {
- this.dispatch("loadRunningRecords");
- }
- if (state.user === undefined) {
- this.dispatch("loadUser");
- }
- },
- loadSavedLogin({ commit }) {
- var userId = localStorage.getItem("userId");
- var apiKey = localStorage.getItem("apiKey");
-
- if (userId === undefined || apiKey === undefined) {
- return;
- }
-
- commit("login", { apiKey: apiKey, userId: userId });
- },
+ usingFinishedRecords(state, using) {
+ state.usingFinishedRecords = using;
},
+ usingRunningRecords(state, using) {
+ state.usingRunningRecords = using;
+ },
+ usingProjects(state, using) {
+ state.usingProjects = using;
+ },
+ 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
+ );
+ }
+ },
+ actions: {
+ loadProjects({ commit }) {
+ return jugglService.getProjects().then(r => {
+ commit("setProjects", r.data.projects);
+ commit("usingProjects", true);
+ });
+ },
+ loadUser({ commit }) {
+ return jugglService
+ .getUser()
+ .catch(() => {
+ return false;
+ })
+ .then(r => {
+ commit("setUser", r.data.users[0]);
+ return true;
+ });
+ },
+ loadRecords({ commit, state }, { limit, finished }) {
+ commit("setRecordsLimit", limit);
+ return jugglService
+ .getRecords({ limit: state.recordsLimit, finished: finished })
+ .then(r => {
+ commit("setRecords", r.data.records);
+ commit("usingFinishedRecords", true);
+ commit("usingRunningRecords", true);
+ });
+ },
+ loadRunningRecords({ commit, getters }) {
+ return jugglService.getRunningRecords().then(r => {
+ var allRecords = {
+ ...getters.finishedRecords,
+ ...r.data.records
+ };
+ commit("setRecords", allRecords);
+ commit("usingRunningRecords", true);
+ });
+ },
+ login({ commit, getters }, { userId, apiKey }) {
+ // Is already logged in?
+ if (getters.isLoggedIn) {
+ this.dispatch("logout");
+ }
+
+ commit("login", { apiKey: apiKey, userId: userId });
+
+ 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);
+ commit("logout");
+ },
+ endRecord(context, recordId) {
+ return jugglService
+ .endRecord(recordId)
+ .catch(() => {
+ return false;
+ })
+ .then(() => {
+ this.dispatch("updateState");
+ return true;
+ });
+ },
+ addProject(context, { name }) {
+ return jugglService
+ .addProject(name)
+ .catch(() => {
+ return false;
+ })
+ .then(() => {
+ this.dispatch("updateState");
+ return true;
+ });
+ },
+ startRecord(context, projectId) {
+ return jugglService
+ .startRecord(projectId)
+ .catch(() => {
+ return false;
+ })
+ .then(() => {
+ this.dispatch("updateState");
+ return true;
+ });
+ },
+ removeRecord(context, recordId) {
+ return jugglService
+ .removeRecord(recordId)
+ .catch(() => {
+ return false;
+ })
+ .then(() => {
+ this.dispatch("updateState");
+ return true;
+ });
+ },
+ updateState({ state }) {
+ if (state.usingProjects) {
+ this.dispatch("loadProjects");
+ }
+ if (state.usingRunningRecords && state.usingFinishedRecords) {
+ this.dispatch("loadRecords");
+ } else if (state.usingRunningRecords) {
+ this.dispatch("loadRunningRecords");
+ }
+ if (state.user === undefined) {
+ this.dispatch("loadUser");
+ }
+ },
+ loadSavedLogin({ commit }) {
+ var userId = localStorage.getItem("userId");
+ var apiKey = localStorage.getItem("apiKey");
+
+ if (userId === undefined || apiKey === undefined) {
+ return;
+ }
+
+ commit("login", { apiKey: apiKey, userId: userId });
+ }
+ }
};
diff --git a/src/views/Home.vue b/src/views/Home.vue
index f68c219..a1d7eae 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -10,7 +10,7 @@
-
+
diff --git a/src/views/RecordDetails.vue b/src/views/RecordDetails.vue
index 4fe1203..539635c 100644
--- a/src/views/RecordDetails.vue
+++ b/src/views/RecordDetails.vue
@@ -1,8 +1,8 @@
- {{error}}
-
+ {{ error }}
+
@@ -39,5 +39,4 @@ export default {
};
-
+