1
0

added: docs to all components and jsx files

This commit is contained in:
Jose
2025-02-26 21:29:36 +01:00
parent 40b8f49b89
commit f20caa89d2
14 changed files with 286 additions and 0 deletions

View File

@@ -5,6 +5,24 @@ import 'bootstrap/dist/js/bootstrap.bundle.min.js'
import Home from '../pages/Home.jsx' import Home from '../pages/Home.jsx'
/**
* App.jsx
*
* Este archivo define el componente App, que es el componente principal de la aplicación.
*
* Importaciones:
* - '../css/App.css': Archivo CSS que contiene los estilos globales de la aplicación.
* - 'leaflet/dist/leaflet.css': Archivo CSS que contiene los estilos para los mapas de Leaflet.
* - 'bootstrap/dist/css/bootstrap.min.css': Archivo CSS que contiene los estilos de Bootstrap.
* - 'bootstrap/dist/js/bootstrap.bundle.min.js': Archivo JS que contiene los scripts de Bootstrap.
* - Home: Componente que representa la página principal de la aplicación.
*
* Funcionalidad:
* - App: Componente principal que renderiza la página Home.
* - Planea añadir un React Router en el futuro.
*
*/
const App = () => { const App = () => {
return ( return (
<> <>

View File

@@ -3,6 +3,31 @@ import { useState, useEffect, useRef } from "react";
import "../css/Card.css"; import "../css/Card.css";
import { useTheme } from "../contexts/ThemeContext"; import { useTheme } from "../contexts/ThemeContext";
/**
* Card.jsx
*
* Este archivo define el componente Card, que representa una tarjeta individual con un título, estado y contenido.
*
* Importaciones:
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
* - useState, useEffect, useRef: Hooks de React para manejar estados, efectos secundarios y referencias.
* - "../css/Card.css": Archivo CSS que contiene los estilos para las tarjetas.
* - useTheme: Hook personalizado para acceder al contexto del tema.
*
* Funcionalidad:
* - Card: Componente que renderiza una tarjeta con un título, estado y contenido.
* - Utiliza el hook `useTheme` para aplicar la clase correspondiente al tema actual.
* - Ajusta el título de la tarjeta según el tamaño de la tarjeta.
*
* PropTypes:
* - Card espera una propiedad `title` que es un string requerido.
* - Card espera una propiedad `status` que es un string requerido.
* - Card espera una propiedad `children` que es un nodo de React requerido.
* - Card espera una propiedad `styleMode` que es opcional y puede ser "override" o una cadena vacía.
* - Card espera una propiedad `className` que es un string opcional.
*
*/
const Card = ({ title, status, children, styleMode, className }) => { const Card = ({ title, status, children, styleMode, className }) => {
const cardRef = useRef(null); const cardRef = useRef(null);
const [shortTitle, setShortTitle] = useState(title); const [shortTitle, setShortTitle] = useState(title);

View File

@@ -1,6 +1,25 @@
import Card from "./Card.jsx"; import Card from "./Card.jsx";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
/**
* CardContainer.jsx
*
* Este archivo define el componente CardContainer, que actúa como contenedor para múltiples componentes Card.
*
* Importaciones:
* - Card: Componente que representa una tarjeta individual.
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
*
* Funcionalidad:
* - CardContainer: Componente que renderiza un contenedor (`div`) con una fila de tarjetas (`Card`).
* - Utiliza `props.cards` para mapear y renderizar cada tarjeta con su contenido.
*
* PropTypes:
* - CardContainer espera una propiedad `cards` que es un array de objetos con las propiedades `title`, `content` y `status`.
* - CardContainer espera una propiedad `className` que es un string opcional.
*
*/
const CardContainer = ({ cards, className }) => { const CardContainer = ({ cards, className }) => {
return ( return (
<div className={`row justify-content-center g-0 ${className}`}> <div className={`row justify-content-center g-0 ${className}`}>

View File

@@ -1,5 +1,21 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
/**
* Dashboard.jsx
*
* Este archivo define el componente Dashboard, que actúa como contenedor para los componentes principales de la página.
*
* Importaciones:
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
*
* Funcionalidad:
* - Dashboard: Componente que renderiza un contenedor principal (`main`) con los componentes hijos pasados como `props.children`.
*
* PropTypes:
* - Dashboard espera una propiedad `children` que es un nodo de React.
*
*/
const Dashboard = (props) => { const Dashboard = (props) => {
return ( return (
<main className='container justify-content-center'> <main className='container justify-content-center'>

View File

@@ -2,6 +2,25 @@ import PropTypes from 'prop-types';
import '../css/Header.css'; import '../css/Header.css';
import { useTheme } from "../contexts/ThemeContext"; import { useTheme } from "../contexts/ThemeContext";
/**
* Header.jsx
*
* Este archivo define el componente Header, que muestra el encabezado de la página con un título y un subtítulo.
*
* Importaciones:
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
* - "../css/Header.css": Archivo CSS que contiene los estilos para el encabezado.
* - useTheme: Hook personalizado para acceder al contexto del tema.
*
* Funcionalidad:
* - Header: Componente que renderiza un encabezado con un título y un subtítulo.
* - Utiliza el hook `useTheme` para aplicar la clase correspondiente al tema actual.
*
* PropTypes:
* - Header espera una propiedad `title` que es un string requerido.
* - Header espera una propiedad `subtitle` que es un string opcional.
*
*/
const Header = (props) => { const Header = (props) => {
const { theme } = useTheme(); const { theme } = useTheme();

View File

@@ -8,6 +8,33 @@ import { useTheme } from "../contexts/ThemeContext.jsx";
import { DataProvider, useData } from "../contexts/DataContext.jsx"; import { DataProvider, useData } from "../contexts/DataContext.jsx";
import { useConfig } from "../contexts/ConfigContext.jsx"; import { useConfig } from "../contexts/ConfigContext.jsx";
/**
* HistoryCharts.jsx
*
* Este archivo define el componente HistoryCharts, que muestra gráficos históricos de datos obtenidos de sensores.
*
* Importaciones:
* - Line: Componente de react-chartjs-2 para renderizar gráficos de líneas.
* - ChartJS, LineElement, PointElement, LinearScale, CategoryScale, Filler: Módulos de chart.js para configurar y registrar los elementos del gráfico.
* - CardContainer: Componente que actúa como contenedor para las tarjetas.
* - "../css/HistoryCharts.css": Archivo CSS que contiene los estilos para los gráficos históricos.
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
* - useTheme: Hook personalizado para acceder al contexto del tema.
* - DataProvider, useData: Funciones del contexto de datos para obtener y manejar datos.
* - useConfig: Hook personalizado para acceder al contexto de configuración.
*
* Funcionalidad:
* - HistoryCharts: Componente que configura la solicitud de datos y utiliza el DataProvider para obtener datos de sensores.
* - Muestra mensajes de carga y error según el estado de la configuración.
* - HistoryChartsContent: Componente que procesa los datos obtenidos y renderiza los gráficos históricos.
* - Utiliza el hook `useData` para acceder a los datos de sensores.
* - Renderiza gráficos de líneas con diferentes colores según el tipo de dato (temperatura, humedad, contaminación).
*
* PropTypes:
* - HistoryChartsContent espera propiedades `options` (objeto), `timeLabels` (array) y `data` (array).
*
*/
ChartJS.register(LineElement, PointElement, LinearScale, CategoryScale, Filler); ChartJS.register(LineElement, PointElement, LinearScale, CategoryScale, Filler);
const HistoryCharts = () => { const HistoryCharts = () => {

View File

@@ -5,6 +5,25 @@ import { useConfig } from '../contexts/ConfigContext.jsx';
import { DataProvider } from '../contexts/DataContext.jsx'; import { DataProvider } from '../contexts/DataContext.jsx';
import { useData } from '../contexts/DataContext.jsx'; import { useData } from '../contexts/DataContext.jsx';
/**
* PollutionMap.jsx
*
* Este archivo define el componente PollutionMap, que muestra un mapa con los niveles de contaminación en diferentes ubicaciones.
*
* Importaciones:
* - MapContainer, TileLayer, Circle, Popup: Componentes de react-leaflet para renderizar el mapa y los círculos de contaminación.
* - useConfig: Hook personalizado para acceder al contexto de configuración.
* - DataProvider, useData: Funciones del contexto de datos para obtener y manejar datos.
*
* Funcionalidad:
* - PollutionMap: Componente que configura la solicitud de datos y utiliza el DataProvider para obtener datos de sensores.
* - Muestra mensajes de carga y error según el estado de la configuración.
* - PollutionMapContent: Componente que procesa los datos obtenidos y renderiza los círculos de contaminación en el mapa.
* - Utiliza el hook `useData` para acceder a los datos de sensores.
* - Renderiza círculos de diferentes colores y tamaños según el nivel de contaminación.
*
*/
const PollutionCircles = ({ data }) => { const PollutionCircles = ({ data }) => {
return data.map(({ lat, lng, level }, index) => { return data.map(({ lat, lng, level }, index) => {
const baseColor = level < 20 ? '#00FF85' : level < 60 ? '#FFA500' : '#FF0000'; const baseColor = level < 20 ? '#00FF85' : level < 60 ? '#FFA500' : '#FF0000';

View File

@@ -6,6 +6,29 @@ import { useData } from '../contexts/DataContext';
import { useConfig } from '../contexts/ConfigContext'; import { useConfig } from '../contexts/ConfigContext';
/**
* SummaryCards.jsx
*
* Este archivo define el componente SummaryCards, que muestra tarjetas resumen con información relevante obtenida de sensores.
*
* Importaciones:
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
* - CardContainer: Componente que actúa como contenedor para las tarjetas.
* - DataProvider, useData: Funciones del contexto de datos para obtener y manejar datos.
* - useConfig: Hook personalizado para acceder al contexto de configuración.
*
* Funcionalidad:
* - SummaryCards: Componente que configura la solicitud de datos y utiliza el DataProvider para obtener datos de sensores.
* - Muestra mensajes de carga y error según el estado de la configuración.
* - SummaryCardsContent: Componente que procesa los datos obtenidos y actualiza el contenido de las tarjetas.
* - Utiliza el hook `useData` para acceder a los datos de sensores.
* - Actualiza el contenido y estado de las tarjetas según los datos obtenidos.
*
* PropTypes:
* - SummaryCards espera una propiedad `data` que es un array.
*
*/
const SummaryCards = () => { const SummaryCards = () => {
const { config, configLoading, configError } = useConfig(); const { config, configLoading, configError } = useConfig();

View File

@@ -1,6 +1,22 @@
import { useTheme } from "../contexts/ThemeContext.jsx"; import { useTheme } from "../contexts/ThemeContext.jsx";
import "../css/ThemeButton.css"; import "../css/ThemeButton.css";
/**
* ThemeButton.jsx
*
* Este archivo define el componente ThemeButton, que permite a los usuarios cambiar entre temas claro y oscuro.
*
* Importaciones:
* - useTheme: Hook personalizado para acceder al contexto del tema.
* - "../css/ThemeButton.css": Archivo CSS que contiene los estilos para el botón de cambio de tema.
*
* Funcionalidad:
* - ThemeButton: Componente que renderiza un botón para alternar entre temas claro y oscuro.
* - Utiliza el hook `useTheme` para acceder al tema actual y la función para cambiarlo.
* - El botón muestra un icono de sol (☀️) si el tema actual es oscuro, y un icono de luna (🌙) si el tema actual es claro.
*
*/
export default function ThemeButton() { export default function ThemeButton() {
const { theme, toggleTheme } = useTheme(); const { theme, toggleTheme } = useTheme();

View File

@@ -1,6 +1,27 @@
import { createContext, useContext, useState, useEffect } from "react"; import { createContext, useContext, useState, useEffect } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
/**
* ConfigContext.jsx
*
* Este archivo define el contexto de configuración para la aplicación, permitiendo cargar y manejar la configuración desde un archivo externo.
*
* Importaciones:
* - createContext, useContext, useState, useEffect: Funciones de React para crear y utilizar contextos, manejar estados y efectos secundarios.
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
*
* Funcionalidad:
* - ConfigContext: Contexto que almacena la configuración cargada, el estado de carga y cualquier error ocurrido durante la carga de la configuración.
* - ConfigProvider: Proveedor de contexto que maneja la carga de la configuración y proporciona el estado de la configuración a los componentes hijos.
* - Utiliza `fetch` para cargar la configuración desde un archivo JSON.
* - Maneja el estado de carga y errores durante la carga de la configuración.
* - useConfig: Hook personalizado para acceder al contexto de configuración.
*
* PropTypes:
* - ConfigProvider espera un único hijo (`children`) que es requerido y debe ser un nodo de React.
*
*/
const ConfigContext = createContext(); const ConfigContext = createContext();
export const ConfigProvider = ({ children }) => { export const ConfigProvider = ({ children }) => {

View File

@@ -1,6 +1,28 @@
import { createContext, useContext, useState, useEffect } from "react"; import { createContext, useContext, useState, useEffect } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
/**
* DataContext.jsx
*
* Este archivo define el contexto de datos para la aplicación, permitiendo obtener y manejar datos de una fuente externa.
*
* Importaciones:
* - createContext, useContext, useState, useEffect: Funciones de React para crear y utilizar contextos, manejar estados y efectos secundarios.
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
*
* Funcionalidad:
* - DataContext: Contexto que almacena los datos obtenidos, el estado de carga y cualquier error ocurrido durante la obtención de datos.
* - DataProvider: Proveedor de contexto que maneja la obtención de datos y proporciona el estado de los datos a los componentes hijos.
* - Utiliza `fetch` para obtener datos de una URL construida a partir de la configuración proporcionada.
* - Maneja el estado de carga y errores durante la obtención de datos.
* - useData: Hook personalizado para acceder al contexto de datos.
*
* PropTypes:
* - DataProvider espera un único hijo (`children`) que es requerido y debe ser un nodo de React.
* - DataProvider también espera una configuración (`config`) que debe incluir `baseUrl` (string) y opcionalmente `params` (objeto).
*
*/
const DataContext = createContext(); const DataContext = createContext();
export const DataProvider = ({ children, config }) => { export const DataProvider = ({ children, config }) => {

View File

@@ -1,6 +1,27 @@
import { createContext, useContext, useEffect, useState } from "react"; import { createContext, useContext, useEffect, useState } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
/**
* ThemeContext.jsx
*
* Este archivo define el contexto de tema para la aplicación, permitiendo cambiar entre temas claro y oscuro.
*
* Importaciones:
* - createContext, useContext, useEffect, useState: Funciones de React para crear y utilizar contextos, manejar efectos secundarios y estados.
* - PropTypes: Librería para la validación de tipos de propiedades en componentes de React.
*
* Funcionalidad:
* - ThemeContext: Contexto que almacena el tema actual y la función para cambiarlo.
* - ThemeProvider: Proveedor de contexto que maneja el estado del tema y proporciona la función para alternar entre temas.
* - Utiliza `localStorage` para persistir el tema seleccionado.
* - Aplica la clase correspondiente al `body` del documento para reflejar el tema actual.
* - useTheme: Hook personalizado para acceder al contexto del tema.
*
* PropTypes:
* - ThemeProvider espera un único hijo (`children`) que es requerido y debe ser un nodo de React.
*
*/
const ThemeContext = createContext(); const ThemeContext = createContext();
export function ThemeProvider({ children }) { export function ThemeProvider({ children }) {

View File

@@ -6,6 +6,25 @@ import App from './components/App.jsx'
import { ThemeProvider } from './contexts/ThemeContext.jsx' import { ThemeProvider } from './contexts/ThemeContext.jsx'
import { ConfigProvider } from './contexts/ConfigContext.jsx' import { ConfigProvider } from './contexts/ConfigContext.jsx'
/**
* main.jsx
*
* Este archivo es el punto de entrada principal de la aplicación React.
*
* Importaciones:
* - StrictMode: Un componente de React que ayuda a identificar problemas potenciales en la aplicación.
* - createRoot: Una función de ReactDOM que crea una raíz para renderizar la aplicación.
* - './css/index.css': Archivo CSS que contiene los estilos globales de la aplicación.
* - App: El componente principal de la aplicación.
* - ThemeProvider: Un proveedor de contexto que maneja el tema de la aplicación.
* - ConfigProvider: Un proveedor de contexto que maneja la configuración de la aplicación.
*
* Funcionalidad:
* - El archivo utiliza `createRoot` para obtener el elemento con el id 'root' del DOM y renderizar la aplicación React dentro de él.
* - La aplicación se envuelve en `StrictMode` para ayudar a detectar problemas potenciales.
* - `ThemeProvider` y `ConfigProvider` envuelven el componente `App` para proporcionar los contextos de tema y configuración a toda la aplicación.
*/
createRoot(document.getElementById('root')).render( createRoot(document.getElementById('root')).render(
<StrictMode> <StrictMode>
<ThemeProvider> <ThemeProvider>

View File

@@ -5,6 +5,27 @@ import HistoryCharts from '../components/HistoryCharts.jsx'
import ThemeButton from '../components/ThemeButton.jsx' import ThemeButton from '../components/ThemeButton.jsx'
import SummaryCards from '../components/SummaryCards.jsx' import SummaryCards from '../components/SummaryCards.jsx'
/**
* Home.jsx
*
* Este archivo define el componente Home, que es una página principal de la aplicación.
*
* Importaciones:
* - Header: Un componente que muestra el encabezado de la página.
* - Dashboard: Un componente que actúa como contenedor para los componentes principales de la página.
* - PollutionMap: Un componente que muestra un mapa de la contaminación.
* - HistoryCharts: Un componente que muestra gráficos históricos de la contaminación.
* - ThemeButton: Un componente que permite cambiar el tema de la aplicación.
* - SummaryCards: Un componente que muestra tarjetas resumen con información relevante.
*
* Funcionalidad:
* - El componente Home utiliza una estructura de JSX para organizar y renderizar los componentes importados.
* - El componente Header muestra el título y subtítulo de la página.
* - El componente Dashboard contiene los componentes SummaryCards, PollutionMap y HistoryCharts.
* - El componente ThemeButton se renderiza al final para permitir el cambio de tema.
*
*/
const Home = () => { const Home = () => {
return ( return (
<> <>