storj/web/satellite/src/store/modules/projects.ts
2018-11-28 11:43:43 +02:00

75 lines
2.2 KiB
TypeScript

// Copyright (C) 2018 Storj Labs, Inc.
// See LICENSE for copying information.
import {
PROJECTS_MUTATIONS
} from "../mutationConstants";
import { createProject, fetchProjects } from "@/api/projects";
export const projectsModule = {
state: {
projects: [],
selectedProject: {
name: "Choose Project",
id: "",
description: "",
}
},
mutations: {
[PROJECTS_MUTATIONS.CREATE](state: any, createdProject: Project): void {
state.projects.push(createdProject);
},
[PROJECTS_MUTATIONS.FETCH](state: any, projects: Project[]): void {
state.projects = projects;
},
[PROJECTS_MUTATIONS.SELECT](state: any, projectID: string): void {
const selected = state.projects.find((project: any) => project.id === projectID);
if (!selected) {
return
}
state.selectedProject = selected;
},
},
actions: {
fetchProjects: async function({commit}: any) {
let response = await fetchProjects();
if (!response || !response.data) {
//TODO: popup error here
console.log("error during project fetching!");
return;
}
commit(PROJECTS_MUTATIONS.FETCH, response.data.myProjects);
},
createProject: async function({commit}: any, project: Project) {
let response = await createProject(project);
if(!response) {
//TODO: popup error here
console.log("error during project creation!");
return;
}
commit(PROJECTS_MUTATIONS.CREATE, response);
},
selectProject: function({commit}: any, projectID: string) {
commit(PROJECTS_MUTATIONS.SELECT, projectID);
}
},
getters: {
projects: (state: any) => {
return state.projects.map((project: any) => {
if (project.id === state.selectedProject.id) {
project.isSelected = true;
}
return project;
});
},
selectedProject: (state: any) => state.selectedProject,
}
};