Skip to content

Commit

Permalink
Merge branch 'main' into foot
Browse files Browse the repository at this point in the history
  • Loading branch information
sailaja-adapa authored Aug 10, 2024
2 parents 6864a7f + 452beba commit 9474861
Show file tree
Hide file tree
Showing 16 changed files with 473 additions and 472 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/check_duplicate_tools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ jobs:

- name: Check for duplicate entries in product.json
run: |
# Check for duplicate entries in product.json
jq -r '.[].productName' product.json | sort | uniq -d > duplicates.txt
# Check for duplicate entries based on the 'link' field in product.json
jq -r '.[].link' product.json | sort | uniq -d > duplicates.txt
if [ -s duplicates.txt ]; then
echo "Duplicate entries found in product.json:"
echo "Duplicate entries found in product.json based on 'link':"
cat duplicates.txt
exit 1
else
echo "No duplicate entries found."
echo "No duplicate entries found based on 'link'."
fi
close-issues:
Expand All @@ -46,4 +46,4 @@ jobs:
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/issues/$ISSUE \
-d '{"state":"closed"}'
done
done
33 changes: 27 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<a id="top"></a>
<div align="center">
<h1><img src="https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Objects/Laptop.png" alt="Laptop" width="50" height="50" /> DevLabs</h1>
<p>Welcome to DevLabs, a website where you can search for free tools that are useful for your daily needs. This application is created by the incredible open-source community. On DevLabs, you can discover a collection of free tools that can assist you in various aspects of your life. Moreover, you have the opportunity to contribute to this project by adding more tools to the database.</p>
Expand Down Expand Up @@ -212,7 +213,9 @@ If you would like to contribute to the project then kindly go through [Contribut
<h2>Let's Collaborate and Make DevLabs Even Better! 💻🌟</h2>
</div>

### ✨ Features
<details>
<summary><h2>✨ Features</h2></summary>


1. User Authentication:
Secure user registration and login using JWT.
Expand Down Expand Up @@ -255,12 +258,30 @@ If you would like to contribute to the project then kindly go through [Contribut
### 📚 Learn
To know more about project, please go through [Learn](learn.md)

</details>

### 🌍 Community

### 🏆 Contributors
<hr>

Recognize the individuals who have contributed to the project. You can use tools like All Contributors to automatically generate a list of contributors.
<h2 align = "center">Our Contributors ❤️</h2>
<div align = "center">
<h3>Thank you for contributing to our repository</h3>

```bash
npx all-contributors-cli add <username> <contribution>
```
<a href="https://github.com/HimanshuNarware/Devlabs/graphs/contributors">
<img src="https://contrib.rocks/image?repo=HimanshuNarware/Devlabs" />
</a>

</div>

<hr>
<div>
<h2><img src="https://fonts.gstatic.com/s/e/notoemoji/latest/1f64f_1f3fb/512.webp" width="35" height="35"> Support </h2>
</div>

<div>
Don't forget to leave a star<img src="https://fonts.gstatic.com/s/e/notoemoji/latest/1f31f/512.webp" width="35" height="30"> for this project!
</div> <br>

<a href="#top" style="position: fixed; bottom: 20px; right: 20px; background-color: black ; color: white; padding: 10px 20px; text-align: center; text-decoration: none; display: inline-block; border-radius: 5px; font-family: Arial; font-size: 16px;">Go to Top</a>
`
6 changes: 4 additions & 2 deletions frontend/src/App.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
.sidebar-content {
padding: 10px;
cursor: pointer;
cursor: pointer;
transition: background-color 0.2s;
}
}


98 changes: 83 additions & 15 deletions frontend/src/App.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from "react";
import React, { useState, useEffect, Suspense, lazy } from "react";
import { Route, Routes } from "react-router-dom"; // Correct import

import "./App.css";
import About from "./Component/About";
import Footer from "./Component/Footer";
Expand All @@ -12,30 +13,59 @@ import NotFound from "./Component/NotFound";
import BackToTopButton from "./Component/BackToTopButton";
import OpenSource from "./Component/OpenSource";
import Review from "./Component/Review";
import "./App.css";
import AOS from "aos";
import "aos/dist/aos.css";
import { Toaster } from "react-hot-toast";
import ScrollToTop from "./Component/ScrollToTop";
//cards
import RemoteJobs from "./pages/RemoteJobs";
import AI from "./pages/AI";
import Movie from "./pages/Movie";
import Extension from "./pages/Extension";
import UI from "./pages/UI";
import FrontendTools from "./pages/FrontendTools";
import EthicalHacking from "./pages/EthicalHacking";
import Faq from "./Component/Faq";
import CodingPlatform from "./pages/CodingPlatform"; // Corrected import
import CoursesPlatform from "./pages/CoursesPlatform";
import Navbar from "./Component/Navbar/Navbar";
import BackToTopButton from "./Component/BackToTopButton";
import Footer from "./Component/Footer";
import TrailingCursor from "./Component/TrailingCursor/TrailingCursor";
import Login from "./Component/Login";
import Register from "./Component/Register";
import ChatAssistant from "./ChatAssistant/ChatAssistant";
// Lazy load components
const About = lazy(() => import("./Component/About"));
const Rateus = lazy(() => import("./Component/Rateus"));
const Home = lazy(() => import("./Component/Home"));
const NotFound = lazy(() => import("./Component/NotFound"));
const OpenSource = lazy(() => import("./Component/OpenSource"));
const Review = lazy(() => import("./Component/Review"));
const BookMark = lazy(() => import("./Component/BookMark"));
const Contact = lazy(() => import("./Component/Contact"));
const Signup = lazy(() => import("./Component/Signup"));
const Profile = lazy(() => import("./Component/Profile"));
const RemoteJobs = lazy(() => import("./pages/RemoteJobs"));
const AI = lazy(() => import("./pages/AI"));
const UI = lazy(() => import("./pages/UI"));
const Movie = lazy(() => import("./pages/Movie"));
const Extension = lazy(() => import("./pages/Extension"));
const EthicalHacking = lazy(() => import("./pages/EthicalHacking"));
const FrontendTools = lazy(() => import("./pages/FrontendTools"));
const Faq = lazy(() => import("./Component/Faq"));
const CodingPlatform = lazy(() => import("./pages/CodingPlatform")); // Corrected import
const CoursesPlatform = lazy(() => import("./pages/CoursesPlatform"));
const Collaboration = lazy(() => import("./pages/Collaboration"));
const Productivity = lazy(() => import("./pages/Productivity"));
const Extensions = lazy(() => import("./pages/Extensions"));

const Movies = lazy(() => import("./pages/Movies"));

const Ui = lazy(() => import("./pages/UserInterface"));

const RemoteJob = lazy(() => import("./pages/RemoteJob"));

function App() {
const [searchQuery, setSearchQuery] = useState("");
useEffect(() => {
AOS.init();
}, []);

return (
<>
<ScrollToTop />
<TrailingCursor />
<Navbar setSearchQuery={setSearchQuery} />
<Routes>
<Route path="/" element={<Home searchQuery={searchQuery} />} />
Expand All @@ -45,6 +75,7 @@ function App() {
<Route path="/review" element={<Review />} />
<Route path="/faq" element={<Faq />} />
<Route path="/rateus" element={<Rateus />} />
<Route path="/contact" element={<Contact />} />
<Route path="/remote-jobs" element={<RemoteJobs />} />
<Route path="/ai" element={<AI />} />
<Route path="/movies-series" element={<Movie />} />
Expand All @@ -53,11 +84,48 @@ function App() {
<Route path="/front-end-tools" element={<FrontendTools />} />
<Route path="/ethical-hacking" element={<EthicalHacking />} />
<Route path="/coding-platform" element={<CodingPlatform />} />

<Route path="/courses-platform" element={<CoursesPlatform />}/>
<Route path="/courses-platform" element={<CoursesPlatform />} />
<Route path="/collaboration-tools" element={<Collaboration />} />
<Route path="/login" element={<Login />} /> {/* New Route */}
<Route path="/register" element={<Register />} /> {/* New Route */}
{/* Define other routes as needed */}
<Route path="*" element={<NotFound />} /> {/* 404 route */}
<Route path="*" element={<NotFound />} /> {/* 404 route */}
</Routes>
=======
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Home searchQuery={searchQuery} />} />
<Route path="/signup" element={<Signup />} />
<Route path="/bookmark" element={<BookMark />} />
<Route path="/about" element={<About />} />
<Route path="/open-source" element={<OpenSource />} />
<Route path="/review" element={<Review />} />
<Route path="/faq" element={<Faq />} />
<Route path="/rateus" element={<Rateus />} />
<Route path="/contact" element={<Contact />} />
<Route path="/profile" element={<Profile />} />
<Route path="/remote-jobs" element={<RemoteJobs />} />
<Route path="/ai" element={<AI />} />
<Route path="/movies-series" element={<Movie />} />
<Route path="/extension" element={<Extension />} />
<Route path="/ui-design" element={<UI />} />
<Route path="/front-end-tools" element={<FrontendTools />} />
<Route path="/ethical-hacking" element={<EthicalHacking />} />
<Route path="/coding-platform" element={<CodingPlatform />} />
<Route path="/courses-platform" element={<CoursesPlatform />} />
<Route path="/productivity-tools" element={<Productivity />} />
<Route path="/collaboration-tools" element={<Collaboration />} />
<Route path="/extensions" element={<Extensions />} />

<Route path="/movies&series" element={<Movies />} />

<Route path="/ui-designs" element={<Ui />} />
<Route path="/remote-job" element={<RemoteJob />} />

{/* Define other routes as needed */}
{/* <Route path="*" element={<NotFound />} /> 404 route */}
</Routes>
</Suspense>
<BackToTopButton />
<Footer />
<ChatAssistant />
Expand Down
32 changes: 20 additions & 12 deletions frontend/src/Component/BookMark.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useState } from "react";
import React, { useState, useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { deleteSource } from "../Slice/DataSlice";
import bookmarkAnimation from "../lottie/bookmark.json";
Expand All @@ -7,19 +7,18 @@ import Lottie from "lottie-react";
import toast from "react-hot-toast";

function BookMark() {
const sourceData = useSelector((state) => state.SourceReducer.sourceData);
const sourceData = useSelector((state) => state.SourceReducer.sourceData); // Adjust the selector to match your state structure
const dispatch = useDispatch();
const [currentPage, setCurrentPage] = useState(1);
const [postPerPage] = useState(8); // Number of bookmarks per page

useEffect(() => {
localStorage.setItem("bookmarks", JSON.stringify(sourceData));
}, [sourceData]);

const handleDeleteBookmark = (name) => {
console.log("remove", name);
dispatch(deleteSource({ name }));

const bookmarksInStorage =
JSON.parse(localStorage.getItem("bookmarks")) || [];
const updatedBookmarks = bookmarksInStorage.filter(
(bookmark) => bookmark.name !== name
);
localStorage.setItem("bookmarks", JSON.stringify(updatedBookmarks));
toast.success("Bookmark removed successfully");
};

Expand All @@ -39,10 +38,17 @@ function BookMark() {
{currentBookmarks?.length > 0 ? (
currentBookmarks?.map((data, index) => (
<div className="bookmark__box" key={index}>
<img className="bookmark__logo" src={data.image} alt={data.name} />
<img
className="bookmark__logo"
src={data.image}
alt={data.name}
/>
<h2>{data.name}</h2>
<p className="bookmark__box-text">{data.desc}</p>
<button className="bookmark__button" onClick={() => window.open(data.link)}>
<button
className="bookmark__button"
onClick={() => window.open(data.link)}
>
Link
</button>
<button
Expand Down Expand Up @@ -103,7 +109,9 @@ function BookMark() {
style={{ height: "200px" }}
/>
<h1 className="text-2xl font-semibold">No bookmark Found</h1>
<h3 className="mb-4">Explore Devlabs and add them to your bookmark</h3>
<h3 className="mb-4">
Explore Devlabs and add them to your bookmark
</h3>
</div>
)}
</div>
Expand Down
8 changes: 5 additions & 3 deletions frontend/src/Component/Navbar/Navbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import NavbarLeft from "./NavbarLeft";
import NavbarCenter from "./NavbarCenter";
function Navbar(props) {
const [showSideNav, setShowSideNav] = useState(false);

return (
<header>
<div className="navbar">
<NavbarLeft showSideNav={showSideNav} setShowSideNav={setShowSideNav} />
<NavbarCenter showSideNav={showSideNav} />

<div style={{ marginLeft: "auto" }}>
<NavbarCenter showSideNav={showSideNav} />
</div>

{/* Pass setSearchQuery directly
<NavbarRight setSearchQuery={props.setSearchQuery} />
*/}
Expand Down
10 changes: 0 additions & 10 deletions frontend/src/Component/Rate.css
Original file line number Diff line number Diff line change
@@ -1,17 +1,7 @@
input[type=radio]{
display: none;
}
.Rate{
height: 500px;
}

.Rate p{
color: #fff;
font-size: 20px;
font-weight: 400;
margin-top: 20px;
/* background-color: ; */
}
.Rate .star{
cursor: pointer;
}
Expand Down
4 changes: 1 addition & 3 deletions frontend/src/Component/Sidebar/Sidebar.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from "react";
import { Link } from "react-router-dom";
import { BsBookmark } from "react-icons/bs";
import { AiFillHome } from "react-icons/ai";
import { AiFillHome } from "react-icons/ai";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {
faHome,
Expand All @@ -16,8 +16,6 @@ import {
} from "@fortawesome/free-solid-svg-icons";
import { FaRobot, FaUserSecret, FaFilm, FaCogs, FaLaptopCode, FaTools, FaBook, FaUsers, FaTasks } from "react-icons/fa";
import "../../style/Sidebar.css";


function Sidebar({ showSideNav }) {
const sidebarContent = [
{ name: "all", description: "All", url: "/", icon: AiFillHome },
Expand Down
2 changes: 0 additions & 2 deletions frontend/src/Component/Sidebar/SidebarContent.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import React from "react";
function SidebarContent({name,description,active}) {

function handleSidebarClick(prop) {
localStorage.setItem("filter", prop);

if (prop === "tools") {
localStorage.setItem("filter-2", "web");
}
Expand Down
Loading

0 comments on commit 9474861

Please sign in to comment.