e65111a7f4
Permisos (superadmin, viewer, busqueda, tareas recurrentes), bootstrap atomico, revocacion de JWT por version de sesion (028), control optimista de edicion (029), logo sin SVG + CSP, ingesta endurecida, correos escapados, borradores, paginacion de proyectos, accesibilidad de dialogos/controles e i18n. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
18 lines
1.1 KiB
JavaScript
18 lines
1.1 KiB
JavaScript
import { api } from './api.js';
|
|
|
|
export const listProjects = (filters = {}) => {
|
|
const qs = new URLSearchParams(Object.entries(filters).filter(([, v]) => v)).toString();
|
|
return api.get(`/projects${qs ? `?${qs}` : ''}`);
|
|
};
|
|
export const listProjectOptions = () => api.get('/projects/options');
|
|
export const getProject = (id) => api.get(`/projects/${id}`);
|
|
export const createProject = (data) => api.post('/projects', data);
|
|
export const updateProject = (id, data) => api.put(`/projects/${id}`, data);
|
|
export const deleteProject = (id) => api.delete(`/projects/${id}`);
|
|
export const restoreProject = (id) => api.post(`/projects/${id}/restore`);
|
|
export const permanentlyDeleteProject = (id) => api.delete(`/projects/${id}/permanent`);
|
|
export const addProjectMember = (id, { userId, email }, roleInProject) => api.post(`/projects/${id}/members`, { userId, email, roleInProject });
|
|
export const setProjectMemberRole = (id, userId, role) => api.put(`/projects/${id}/members/${userId}/role`, { role });
|
|
export const removeProjectMember = (id, userId) => api.delete(`/projects/${id}/members/${userId}`);
|
|
export const getGantt = (id) => api.get(`/projects/${id}/gantt`);
|