Building a Yahoo-Inspired Dashboard in React with Chakra UI

Building a Yahoo-Inspired Dashboard in React with Chakra UI

Creating a dashboard similar to Yahoo's using React JS components with Chakra UI involves structuring your application into modular, reusable components while leveraging Chakra UI for styling and layout. Below, I will outline a basic structure for such a dashboard, including some key components you might want to use. I'll assume that you have a basic understanding of React and familiarity with Chakra UI.

Setting up the Environment

First, ensure you have Node.js installed. Then, create a new React project and add Chakra UI:

npx create-react-app yahoo-dashboard
cd yahoo-dashboard
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion

Directory Structure

Here’s a simple directory structure for your project:

yahoo-dashboard/
|-- public/
|-- src/
    |-- components/
        |-- Header.js
        |-- NewsFeed.js
        |-- WeatherWidget.js
        |-- Footer.js
    |-- App.js
    |-- index.js
    |-- theme.js

Theme Configuration (Optional)

You can customize the theme to match Yahoo's color scheme and styling:

// src/theme.js
import { extendTheme } from "@chakra-ui/react";

const theme = extendTheme({
  colors: {
    brand: {
      900: "#123456", // Example color
      800: "#567890", // Example color
    },
  },
});

export default theme;

App Component

In App.js, wrap your application in a ChakraProvider and use the custom theme:

// src/App.js
import React from "react";
import { ChakraProvider } from "@chakra-ui/react";
import theme from "./theme";
import Header from "./components/Header";
import NewsFeed from "./components/NewsFeed";
import WeatherWidget from "./components/WeatherWidget";
import Footer from "./components/Footer";

function App() {
  return (
    <ChakraProvider theme={theme}>
      <Header />
      <NewsFeed />
      <WeatherWidget />
      <Footer />
    </ChakraProvider>
  );
}

export default App;

Components

Each component will be designed using Chakra UI components. Here’s a brief overview of each:

Header Component

This will include the top navigation bar and any global branding.

// src/components/Header.js
import { Box, Flex, Text } from "@chakra-ui/react";

function Header() {
  return (
    <Flex bg="blue.500" color="white" p={4} justifyContent="space-between">
      <Text fontSize="lg" fontWeight="bold">Yahoo Dashboard</Text>
      <Flex>
        {/* Navigation Items */}
        <Text p={2}>Home</Text>
        <Text p={2}>News</Text>
        <Text p={2}>Weather</Text>
      </Flex>
    </Flex>
  );
}

export default Header;

NewsFeed Component

This could display a list of news articles using a simple layout.

// src/components/NewsFeed.js
import { Box, Heading, Text } from "@chakra-ui/react";

function NewsFeed() {
  return (
    <Box p={4}>
      <Heading as="h3" size="lg">Latest News</Heading>
      {/* Map through news articles here */}
      <Text mt={2}>News Article #1</Text>
    </Box>
  );
}

export default NewsFeed;

Weather Widget

This component can show the current weather status.

// src/components/WeatherWidget.js
import { Box, Text } from "@chakra-ui/react";

function WeatherWidget() {
  return (
    <Box p={4} bg="gray.300">
      <Text fontSize="sm">Weather Widget</Text>
    </Box>
  );
}

export default WeatherWidget;

Footer Component

This includes copyright information or additional links.

// src/components/Footer.js
import { Box, Text } from "@chakra-ui/react";

function Footer() {
  return (
    <Box p={4} bg="blue.500" color="white" textAlign="center">
      <Text>© 2024 Yahoo Dashboard Clone</Text>
    </Box>
  );
}

export default Footer;

Running the Project

To see your project in action, run:

npm start

This will launch the React application in your default web browser. From here, you can continue to refine and expand the components to more closely mimic the features and layout of Yahoo's dashboard. This setup provides a scalable foundation to build a more detailed and interactive dashboard.

 

Add the Navigation

Creating an effective navigation menu for the Yahoo-like dashboard using React and Chakra UI involves structuring the menu for ease of use, ensuring that it fits into the overall design and functionality of the dashboard, and potentially adding responsiveness for different device sizes. Below, I'll show how to implement a basic navigation menu in your dashboard.

Implementing Navigation Menu with Chakra UI

To create a navigation menu in your dashboard, you'll want to use a combination of Chakra UI components such as Flex, Box, and interactive elements like Link or Button. Here's a step-by-step guide on setting it up.

1. Header Component Update

Let's update the Header.js component to include navigation links that might correspond to different sections or widgets in your dashboard (e.g., Home, News, Finance, Weather). I'll add react-router-dom for handling routing. First, make sure to install it:

npm install react-router-dom

2. Setup Router in Main App Component

Before updating the Header, let's wrap the application in a router in src/index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();

3. Updated Header Component

Now update the Header.js to include navigation:

// src/components/Header.js
import { Flex, Text, Link as ChakraLink } from "@chakra-ui/react";
import { Link } from "react-router-dom";

function Header() {
  return (
    <Flex bg="blue.500" color="white" p={4} justifyContent="space-between" alignItems="center">
      <Text fontSize="lg" fontWeight="bold">Yahoo Dashboard</Text>
      <Flex>
        {/* Navigation Items as Links */}
        <ChakraLink as={Link} to="/" p={2} style={{ textDecoration: 'none' }}>Home</ChakraLink>
        <ChakraLink as={Link} to="/news" p={2} style={{ textDecoration: 'none' }}>News</ChakraLink>
        <ChakraLink as={Link} to="/finance" p={2} style={{ textDecoration: 'none' }}>Finance</ChakraLink>
        <ChakraLink as={Link} to="/weather" p={2} style={{ textDecoration: 'none' }}>Weather</ChakraLink>
      </Flex>
    </Flex>
  );
}

export default Header;

4. Routing in App Component

Now, in App.js, define the routes for each navigation item:

// src/App.js
import React from "react";
import { ChakraProvider } from "@chakra-ui/react";
import { Routes, Route } from "react-router-dom";
import theme from "./theme";
import Header from "./components/Header";
import NewsFeed from "./components/NewsFeed";
import WeatherWidget from "./components/WeatherWidget";
import FinanceWidget from "./components/FinanceWidget";
import Footer from "./components/Footer";

function App() {
  return (
    <ChakraProvider theme={theme}>
      <Header />
      <Routes>
        <Route path="/" element={<NewsFeed />} />
        <Route path="/news" element={<NewsFeed />} />
        <Route path="/finance" element={<FinanceWidget />} />
        <Route path="/weather" element={<WeatherWidget />} />
      </Routes>
      <Footer />
    </ChakraProvider>
  );
}

export default App;

Final Thoughts

This setup provides a simple and effective navigation menu that integrates with a React Router for navigating different sections of the dashboard. It's straightforward, uses Chakra UI components for styling, and can be expanded with more sophisticated features like dropdowns or mega menus as needed. See the all project in GitHub:

GitHub - icpmtech/yahoo-dashboard

Voltar para o blogue
  • ChatGPT Uncovered Podcast

    Podcast descoberto do ChatGPT

    Pedro Martins

    Podcast descoberto do ChatGPT Podcast descoberto do ChatGPT Explorando as fronteiras dos modelos de conversação de IA Episódio 1: Compreendendo o ChatGPT Publicado em: 15 de maio de 2023 Seu...

    Podcast descoberto do ChatGPT

    Pedro Martins

    Podcast descoberto do ChatGPT Podcast descoberto do ChatGPT Explorando as fronteiras dos modelos de conversação de IA Episódio 1: Compreendendo o ChatGPT Publicado em: 15 de maio de 2023 Seu...

  • Power Apps In-Depth Podcast

    Podcast detalhado do Power Apps

    Pedro Martins

    Podcast detalhado do Power Apps Podcast detalhado do Power Apps Explorando os recursos do Microsoft Power Apps Episódio 1: Introdução ao Power Apps Publicado em: 20 de abril de 2023...

    Podcast detalhado do Power Apps

    Pedro Martins

    Podcast detalhado do Power Apps Podcast detalhado do Power Apps Explorando os recursos do Microsoft Power Apps Episódio 1: Introdução ao Power Apps Publicado em: 20 de abril de 2023...

  • Exploring Power Pages Podcast

    Explorando o podcast Power Pages

    Pedro Martins

    Explorando o podcast Power Pages Explorando o podcast Power Pages Mergulhando no mundo das Power Pages da Microsoft Episódio 1: Primeiros passos com Power Pages Publicado em: 10 de março...

    Explorando o podcast Power Pages

    Pedro Martins

    Explorando o podcast Power Pages Explorando o podcast Power Pages Mergulhando no mundo das Power Pages da Microsoft Episódio 1: Primeiros passos com Power Pages Publicado em: 10 de março...

1 de 3