Project id for user
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useEffect, useState, useMemo } from "react";
|
||||
import { Plus, Trash2, Pencil, RefreshCcw } from "lucide-react";
|
||||
import MaterialTable from "@material-table/core";
|
||||
import {
|
||||
@@ -10,8 +10,13 @@ import {
|
||||
deleteProject as apiDeleteProject,
|
||||
} from "../../api/projects";
|
||||
import { fetchMeterTypes, type MeterType } from "../../api/meterTypes";
|
||||
import { getCurrentUserRole, getCurrentUserProjectId } from "../../api/auth";
|
||||
|
||||
export default function ProjectsPage() {
|
||||
const userRole = useMemo(() => getCurrentUserRole(), []);
|
||||
const userProjectId = useMemo(() => getCurrentUserProjectId(), []);
|
||||
const isOperator = userRole?.toUpperCase() === 'OPERATOR';
|
||||
|
||||
const [projects, setProjects] = useState<Project[]>([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [activeProject, setActiveProject] = useState<Project | null>(null);
|
||||
@@ -46,6 +51,18 @@ export default function ProjectsPage() {
|
||||
}
|
||||
};
|
||||
|
||||
const visibleProjects = useMemo(() => {
|
||||
if (!isOperator) {
|
||||
return projects;
|
||||
}
|
||||
|
||||
if (userProjectId) {
|
||||
return projects.filter(p => p.id === userProjectId);
|
||||
}
|
||||
|
||||
return [];
|
||||
}, [projects, isOperator, userProjectId]);
|
||||
|
||||
const loadMeterTypesData = async () => {
|
||||
try {
|
||||
const types = await fetchMeterTypes();
|
||||
@@ -130,7 +147,7 @@ export default function ProjectsPage() {
|
||||
setShowModal(true);
|
||||
};
|
||||
|
||||
const filtered = projects.filter((p) =>
|
||||
const filtered = visibleProjects.filter((p) =>
|
||||
`${p.name} ${p.areaName} ${p.description ?? ""}`
|
||||
.toLowerCase()
|
||||
.includes(search.toLowerCase())
|
||||
@@ -152,28 +169,34 @@ export default function ProjectsPage() {
|
||||
</div>
|
||||
|
||||
<div className="flex gap-3">
|
||||
<button
|
||||
onClick={openCreateModal}
|
||||
className="flex items-center gap-2 px-4 py-2 bg-white text-[#4c5f9e] rounded-lg"
|
||||
>
|
||||
<Plus size={16} /> Agregar
|
||||
</button>
|
||||
{!isOperator && (
|
||||
<button
|
||||
onClick={openCreateModal}
|
||||
className="flex items-center gap-2 px-4 py-2 bg-white text-[#4c5f9e] rounded-lg"
|
||||
>
|
||||
<Plus size={16} /> Agregar
|
||||
</button>
|
||||
)}
|
||||
|
||||
<button
|
||||
onClick={openEditModal}
|
||||
disabled={!activeProject}
|
||||
className="flex items-center gap-2 px-4 py-2 border border-white/40 rounded-lg disabled:opacity-60"
|
||||
>
|
||||
<Pencil size={16} /> Editar
|
||||
</button>
|
||||
{!isOperator && (
|
||||
<button
|
||||
onClick={openEditModal}
|
||||
disabled={!activeProject}
|
||||
className="flex items-center gap-2 px-4 py-2 border border-white/40 rounded-lg disabled:opacity-60"
|
||||
>
|
||||
<Pencil size={16} /> Editar
|
||||
</button>
|
||||
)}
|
||||
|
||||
<button
|
||||
onClick={handleDelete}
|
||||
disabled={!activeProject}
|
||||
className="flex items-center gap-2 px-4 py-2 border border-white/40 rounded-lg disabled:opacity-60"
|
||||
>
|
||||
<Trash2 size={16} /> Eliminar
|
||||
</button>
|
||||
{!isOperator && (
|
||||
<button
|
||||
onClick={handleDelete}
|
||||
disabled={!activeProject}
|
||||
className="flex items-center gap-2 px-4 py-2 border border-white/40 rounded-lg disabled:opacity-60"
|
||||
>
|
||||
<Trash2 size={16} /> Eliminar
|
||||
</button>
|
||||
)}
|
||||
|
||||
<button
|
||||
onClick={loadProjects}
|
||||
|
||||
Reference in New Issue
Block a user