From df3956bdeef6006fa483e9fdd28697e0bd18740f Mon Sep 17 00:00:00 2001 From: NicolasRichel Date: Thu, 11 Jun 2026 12:25:30 +0200 Subject: [PATCH 1/3] PATCH: fix(projects): properly update state on project update/delete --- src/state/projects.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/state/projects.js b/src/state/projects.js index c4cda543e..91030f7ab 100644 --- a/src/state/projects.js +++ b/src/state/projects.js @@ -80,9 +80,13 @@ const updateProject = async (project) => { state.currentProject = newProject; } - let i = state.userProjects.findIndex(p => p.id === newProject.id); - state.userProjects.splice(i, 1, newProject); - state.spaceProjects.splice(i, 1, newProject); + let i = state.userProjects.findIndex((p) => p.id === newProject.id); + if (i >= 0) + state.userProjects.splice(i, 1, newProject); + + i = state.spaceProjects.findIndex((p) => p.id === newProject.id); + if (i >= 0) + state.spaceProjects.splice(i, 1, newProject); return newProject; }; @@ -90,9 +94,14 @@ const updateProject = async (project) => { const deleteProject = async (project) => { await ProjectService.deleteProject(project); - let i = state.userProjects.findIndex(p => p.id === project.id); - state.userProjects.splice(i, 1); - state.spaceProjects.splice(i, 1); + let i = state.userProjects.findIndex((p) => p.id === project.id); + if (i >= 0) + state.userProjects.splice(i, 1); + + i = state.spaceProjects.findIndex((p) => p.id === project.id); + if (i >= 0) + state.spaceProjects.splice(i, 1); + state.projectsCount[project.cloud.id] -= 1; return project; @@ -101,9 +110,14 @@ const deleteProject = async (project) => { const leaveProject = async (project) => { await ProjectService.leaveProject(project); - let i = state.userProjects.findIndex(p => p.id === project.id); - state.userProjects.splice(i, 1); - state.spaceProjects.splice(i, 1); + let i = state.userProjects.findIndex((p) => p.id === project.id); + if (i >= 0) + state.userProjects.splice(i, 1); + + i = state.spaceProjects.findIndex((p) => p.id === project.id); + if (i >= 0) + state.spaceProjects.splice(i, 1); + state.projectsCount[project.cloud.id] -= 1; return project; From 493d3a927eb4118482f0af3ab10c99c4bd58189c Mon Sep 17 00:00:00 2001 From: NicolasRichel Date: Thu, 11 Jun 2026 12:32:32 +0200 Subject: [PATCH 2/3] fix: add missing curly brackets --- src/state/projects.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/state/projects.js b/src/state/projects.js index 91030f7ab..90b2e7ff8 100644 --- a/src/state/projects.js +++ b/src/state/projects.js @@ -81,12 +81,14 @@ const updateProject = async (project) => { } let i = state.userProjects.findIndex((p) => p.id === newProject.id); - if (i >= 0) + if (i >= 0) { state.userProjects.splice(i, 1, newProject); + } i = state.spaceProjects.findIndex((p) => p.id === newProject.id); - if (i >= 0) + if (i >= 0) { state.spaceProjects.splice(i, 1, newProject); + } return newProject; }; @@ -95,12 +97,14 @@ const deleteProject = async (project) => { await ProjectService.deleteProject(project); let i = state.userProjects.findIndex((p) => p.id === project.id); - if (i >= 0) + if (i >= 0) { state.userProjects.splice(i, 1); + } i = state.spaceProjects.findIndex((p) => p.id === project.id); - if (i >= 0) + if (i >= 0) { state.spaceProjects.splice(i, 1); + } state.projectsCount[project.cloud.id] -= 1; @@ -111,12 +115,14 @@ const leaveProject = async (project) => { await ProjectService.leaveProject(project); let i = state.userProjects.findIndex((p) => p.id === project.id); - if (i >= 0) + if (i >= 0) { state.userProjects.splice(i, 1); + } i = state.spaceProjects.findIndex((p) => p.id === project.id); - if (i >= 0) + if (i >= 0) { state.spaceProjects.splice(i, 1); + } state.projectsCount[project.cloud.id] -= 1; From 9a6438ea3e6abf925d1dbb7d01a8f5ee49fa6be3 Mon Sep 17 00:00:00 2001 From: NicolasRichel Date: Thu, 11 Jun 2026 12:59:55 +0200 Subject: [PATCH 3/3] fix: little code factorization --- src/state/projects.js | 37 +++++++------------------------------ src/utils/projects.js | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/state/projects.js b/src/state/projects.js index 90b2e7ff8..754dfdaf9 100644 --- a/src/state/projects.js +++ b/src/state/projects.js @@ -1,7 +1,7 @@ import { reactive, readonly, toRefs } from "vue"; import { PROJECT_ROLE } from "../config/projects.js"; import ProjectService from "../services/ProjectService.js"; -import { sortProjects } from "../utils/projects.js"; +import { removeProjectInList, sortProjects, updateProjectInList } from "../utils/projects.js"; import { fullName, sortUsers } from "../utils/users.js"; import { useUser } from "./user.js"; @@ -80,15 +80,8 @@ const updateProject = async (project) => { state.currentProject = newProject; } - let i = state.userProjects.findIndex((p) => p.id === newProject.id); - if (i >= 0) { - state.userProjects.splice(i, 1, newProject); - } - - i = state.spaceProjects.findIndex((p) => p.id === newProject.id); - if (i >= 0) { - state.spaceProjects.splice(i, 1, newProject); - } + updateProjectInList(state.userProjects, newProject); + updateProjectInList(state.spaceProjects, newProject); return newProject; }; @@ -96,16 +89,8 @@ const updateProject = async (project) => { const deleteProject = async (project) => { await ProjectService.deleteProject(project); - let i = state.userProjects.findIndex((p) => p.id === project.id); - if (i >= 0) { - state.userProjects.splice(i, 1); - } - - i = state.spaceProjects.findIndex((p) => p.id === project.id); - if (i >= 0) { - state.spaceProjects.splice(i, 1); - } - + removeProjectInList(state.userProjects, project); + removeProjectInList(state.spaceProjects, project); state.projectsCount[project.cloud.id] -= 1; return project; @@ -114,16 +99,8 @@ const deleteProject = async (project) => { const leaveProject = async (project) => { await ProjectService.leaveProject(project); - let i = state.userProjects.findIndex((p) => p.id === project.id); - if (i >= 0) { - state.userProjects.splice(i, 1); - } - - i = state.spaceProjects.findIndex((p) => p.id === project.id); - if (i >= 0) { - state.spaceProjects.splice(i, 1); - } - + removeProjectInList(state.userProjects, project); + removeProjectInList(state.spaceProjects, project); state.projectsCount[project.cloud.id] -= 1; return project; diff --git a/src/utils/projects.js b/src/utils/projects.js index 9b3503e25..651592703 100644 --- a/src/utils/projects.js +++ b/src/utils/projects.js @@ -35,4 +35,20 @@ function sortProjects(projects) { return projects.sort((a, b) => (a.created_at < b.created_at ? 1 : -1)); } -export { projectStatus, sortProjects }; +function updateProjectInList(projects, project) { + let i = projects.findIndex((p) => p.id === project.id); + if (i >= 0) { + projects.splice(i, 1, project); + } + return projects; +} + +function removeProjectInList(projects, project) { + let i = projects.findIndex((p) => p.id === project.id); + if (i >= 0) { + projects.splice(i, 1); + } + return projects; +} + +export { projectStatus, sortProjects, updateProjectInList, removeProjectInList };