import { ProjectAPI } from '@/api'; import { ActionTree, GetterTree, Module, MutationTree, } from 'vuex'; import { WorkspaceState, RootState, ChangeGroupPayload, ChangeProjectPayload, } from '../typings'; const DEFAULT: WorkspaceState = { currentProjectId: -1, currentGroupId: -1, groupList: [], projectList: [], }; const actions: ActionTree = { async refreshProjectList({ commit }, userId) { const projectList = await ProjectAPI.getProjectListByUserId(userId); commit('updateProjectList', projectList); }, changeGroup({ commit }, payload: ChangeGroupPayload) { commit('changeGroup', payload); }, changeProject({ commit }, payload: ChangeProjectPayload) { commit('changeProject', payload); }, }; const mutations: MutationTree = { updateProjectList(state, payload: Array) { state.projectList = payload; }, changeGroup(state, { groupId }: ChangeGroupPayload) { state.currentGroupId = groupId; }, changeProject(state, { projectId }: ChangeProjectPayload) { state.currentProjectId = projectId; }, }; const getters: GetterTree = { projectListOfCurrentGroup(state) { return state.projectList.filter((project) => project.groupId === state.currentGroupId); }, currentProjectInfo(state) { return Array.prototype.find.call(state.projectList, (project) => project.id === state.currentProjectId) || { id: -1, name: '未选择项目', }; }, }; export const workspace: Module = { state: () => DEFAULT, actions, mutations, getters, };