1
0

side menu to the left and icons in cards as props

This commit is contained in:
Jose
2025-02-27 11:02:55 +01:00
parent c9d9aa9ad3
commit 6e04f364f1
7 changed files with 29 additions and 13 deletions

View File

@@ -28,7 +28,7 @@ import { useTheme } from "../contexts/ThemeContext";
* *
*/ */
const Card = ({ title, status, children, styleMode, className }) => { const Card = ({ title, status, children, styleMode, className, titleIcon }) => {
const cardRef = useRef(null); const cardRef = useRef(null);
const [shortTitle, setShortTitle] = useState(title); const [shortTitle, setShortTitle] = useState(title);
const { theme } = useTheme(); const { theme } = useTheme();
@@ -57,7 +57,10 @@ const Card = ({ title, status, children, styleMode, className }) => {
`col-xl-3 col-sm-6 d-flex flex-column align-items-center p-3 card-container ${className}`} `col-xl-3 col-sm-6 d-flex flex-column align-items-center p-3 card-container ${className}`}
> >
<div className={`card p-3 w-100 ${theme}`}> <div className={`card p-3 w-100 ${theme}`}>
<h3 className="text-center">{shortTitle}</h3> <h3 className="text-center">
{titleIcon}
{shortTitle}
</h3>
<div className="card-content">{children}</div> <div className="card-content">{children}</div>
{status ? <span className="status text-center mt-2">{status}</span> : null} {status ? <span className="status text-center mt-2">{status}</span> : null}
</div> </div>
@@ -69,8 +72,9 @@ Card.propTypes = {
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
status: PropTypes.string.isRequired, status: PropTypes.string.isRequired,
children: PropTypes.node.isRequired, children: PropTypes.node.isRequired,
styleMode: PropTypes.oneOf(["override", ""]), // Nueva prop opcional styleMode: PropTypes.oneOf(["override", ""]),
className: PropTypes.string, // Nueva prop opcional className: PropTypes.string,
titleIcon: PropTypes.node,
}; };
Card.defaultProps = { Card.defaultProps = {

View File

@@ -24,7 +24,7 @@ const CardContainer = ({ cards, className }) => {
return ( return (
<div className={`row justify-content-center g-0 ${className}`}> <div className={`row justify-content-center g-0 ${className}`}>
{cards.map((card, index) => ( {cards.map((card, index) => (
<Card key={index} title={card.title} status={card.status} styleMode={card.styleMode} className={card.className}> <Card key={index} title={card.title} status={card.status} styleMode={card.styleMode} className={card.className} titleIcon={card.titleIcon}>
<p className="card-text text-center">{card.content}</p> <p className="card-text text-center">{card.content}</p>
</Card> </Card>
))} ))}

View File

@@ -30,9 +30,9 @@ const SideMenu = ({ isOpen, onClose }) => {
<FontAwesomeIcon icon={faTimes} /> <FontAwesomeIcon icon={faTimes} />
</button> </button>
<ul> <ul>
<li><a href="#inicio">Inicio</a></li> <li><a href="#inicio">ɪɴɪᴄɪᴏ</a></li>
<li><a href="#mapa">Mapa</a></li> <li><a href="#mapa">ᴍᴀᴘᴀ</a></li>
<li><a href="#historico">Histórico</a></li> <li><a href="#historico">ʜɪsᴛʀɪ</a></li>
</ul> </ul>
</div> </div>
); );

View File

@@ -5,6 +5,8 @@ import { DataProvider } from '../contexts/DataContext';
import { useData } from '../contexts/DataContext'; import { useData } from '../contexts/DataContext';
import { useConfig } from '../contexts/ConfigContext'; import { useConfig } from '../contexts/ConfigContext';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCloud, faGauge, faTemperature0, faWater } from '@fortawesome/free-solid-svg-icons';
/** /**
* SummaryCards.jsx * SummaryCards.jsx
@@ -58,10 +60,10 @@ const SummaryCardsContent = () => {
const { data } = useData(); const { data } = useData();
const CardsData = [ const CardsData = [
{ id: 1, title: "🌡️ Temperatura", content: "N/A", status: "Esperando datos..." }, { id: 1, title: "Temperatura", content: "N/A", status: "Esperando datos...", titleIcon: <FontAwesomeIcon icon={faTemperature0} /> },
{ id: 2, title: "💧 Humedad", content: "N/A", status: "Esperando datos..." }, { id: 2, title: "Humedad", content: "N/A", status: "Esperando datos...", titleIcon: <FontAwesomeIcon icon={faWater} /> },
{ id: 3, title: "☁️ Contaminación", content: "N/A", status: "Esperando datos..." }, { id: 3, title: "Contaminación", content: "N/A", status: "Esperando datos...", titleIcon: <FontAwesomeIcon icon={faCloud} /> },
{ id: 4, title: "🛤️ Carretera", content: "N/A", status: "Esperando datos..." } { id: 4, title: "Presión", content: "N/A", status: "Esperando datos...", titleIcon: <FontAwesomeIcon icon={faGauge} /> }
]; ];
if (data) { if (data) {

View File

@@ -42,6 +42,10 @@
font-weight: 600; font-weight: 600;
} }
.card > h3 > .svg-inline--fa {
margin-right: 10px;
}
p.card-text { p.card-text {
font-size: 2.2em; font-size: 2.2em;
font-weight: 600; font-weight: 600;

View File

@@ -59,5 +59,5 @@
text-decoration: none; text-decoration: none;
font-size: 30px; font-size: 30px;
font-weight: 600; font-weight: 600;
text-transform: uppercase; /*text-transform: uppercase;*/
} }

6
package-lock.json generated Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "ContaminUS",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}