Meter tyoe logic for projects in concentrators page
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
type ConcentratorType,
|
||||
} from "../../api/concentrators";
|
||||
import { fetchProjects, type Project } from "../../api/projects";
|
||||
import { fetchMeterTypes, type MeterType } from "../../api/meterTypes";
|
||||
import type { ProjectCard, SampleView } from "./ConcentratorsPage";
|
||||
|
||||
type User = {
|
||||
@@ -17,10 +18,14 @@ export function useConcentrators(currentUser: User) {
|
||||
|
||||
const [loadingProjects, setLoadingProjects] = useState(true);
|
||||
const [loadingConcentrators, setLoadingConcentrators] = useState(true);
|
||||
const [loadingMeterTypes, setLoadingMeterTypes] = useState(true);
|
||||
|
||||
const [projects, setProjects] = useState<Project[]>([]);
|
||||
const [allProjects, setAllProjects] = useState<string[]>([]);
|
||||
const [selectedProject, setSelectedProject] = useState("");
|
||||
|
||||
const [meterTypes, setMeterTypes] = useState<MeterType[]>([]);
|
||||
const [selectedMeterTypeId, setSelectedMeterTypeId] = useState<string>("");
|
||||
|
||||
const [concentrators, setConcentrators] = useState<Concentrator[]>([]);
|
||||
const [filteredConcentrators, setFilteredConcentrators] = useState<
|
||||
@@ -54,6 +59,19 @@ export function useConcentrators(currentUser: User) {
|
||||
[allProjects, currentUser.role, currentUser.project]
|
||||
);
|
||||
|
||||
const loadMeterTypes = async () => {
|
||||
setLoadingMeterTypes(true);
|
||||
try {
|
||||
const meterTypesData = await fetchMeterTypes();
|
||||
setMeterTypes(meterTypesData);
|
||||
} catch (err) {
|
||||
console.error("Error loading meter types:", err);
|
||||
setMeterTypes([]);
|
||||
} finally {
|
||||
setLoadingMeterTypes(false);
|
||||
}
|
||||
};
|
||||
|
||||
const loadProjects = async () => {
|
||||
setLoadingProjects(true);
|
||||
try {
|
||||
@@ -92,8 +110,8 @@ export function useConcentrators(currentUser: User) {
|
||||
}
|
||||
};
|
||||
|
||||
// init - load projects and concentrators
|
||||
useEffect(() => {
|
||||
loadMeterTypes();
|
||||
loadProjects();
|
||||
loadConcentrators();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
@@ -163,7 +181,21 @@ export function useConcentrators(currentUser: User) {
|
||||
const baseContact = "Operaciones";
|
||||
const baseLastSync = "Hace 1 h";
|
||||
|
||||
return visibleProjects.map((projectId) => ({
|
||||
let filteredProjects = visibleProjects;
|
||||
|
||||
filteredProjects = filteredProjects.filter((projectId) => {
|
||||
const count = counts[projectId] ?? 0;
|
||||
return count > 0;
|
||||
});
|
||||
|
||||
if (selectedMeterTypeId) {
|
||||
filteredProjects = filteredProjects.filter((projectId) => {
|
||||
const project = projects.find((p) => p.id === projectId);
|
||||
return project?.meterTypeId === selectedMeterTypeId;
|
||||
});
|
||||
}
|
||||
|
||||
return filteredProjects.map((projectId) => ({
|
||||
id: projectId,
|
||||
name: projectNameMap[projectId] ?? projectId,
|
||||
region: baseRegion,
|
||||
@@ -174,12 +206,27 @@ export function useConcentrators(currentUser: User) {
|
||||
contact: baseContact,
|
||||
status: "ACTIVO" as const,
|
||||
}));
|
||||
}, [concentrators, visibleProjects, projects, isGeneral, sampleView]);
|
||||
}, [concentrators, visibleProjects, projects, isGeneral, sampleView, selectedMeterTypeId]);
|
||||
|
||||
const projectsData: ProjectCard[] = useMemo(() => {
|
||||
return projectsDataGeneral;
|
||||
}, [projectsDataGeneral]);
|
||||
|
||||
useEffect(() => {
|
||||
if (projectsData.length > 0) {
|
||||
const firstProject = projectsData[0];
|
||||
const currentProjectExists = projectsData.find((p) => p.id === selectedProject);
|
||||
|
||||
if (!selectedProject || !currentProjectExists) {
|
||||
setSelectedProject(firstProject.id);
|
||||
}
|
||||
} else {
|
||||
if (selectedProject) {
|
||||
setSelectedProject("");
|
||||
}
|
||||
}
|
||||
}, [projectsData]);
|
||||
|
||||
return {
|
||||
// view
|
||||
sampleView,
|
||||
@@ -190,6 +237,7 @@ export function useConcentrators(currentUser: User) {
|
||||
// loading
|
||||
loadingProjects,
|
||||
loadingConcentrators,
|
||||
loadingMeterTypes,
|
||||
|
||||
// projects
|
||||
allProjects,
|
||||
@@ -198,6 +246,10 @@ export function useConcentrators(currentUser: User) {
|
||||
selectedProject,
|
||||
setSelectedProject,
|
||||
|
||||
meterTypes,
|
||||
selectedMeterTypeId,
|
||||
setSelectedMeterTypeId,
|
||||
|
||||
// data
|
||||
concentrators,
|
||||
setConcentrators,
|
||||
|
||||
Reference in New Issue
Block a user