Skip to content

Commit b77e879

Browse files
authored
Merge branch 'main' into tool5
2 parents 15f7990 + ec6f9e3 commit b77e879

23 files changed

+1087
-1291
lines changed

.github/workflows/check_duplicate_tools.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ jobs:
1313

1414
- name: Check for duplicate entries in product.json
1515
run: |
16-
# Check for duplicate entries in product.json
17-
jq -r '.[].productName' product.json | sort | uniq -d > duplicates.txt
16+
# Check for duplicate entries based on the 'link' field in product.json
17+
jq -r '.[].link' product.json | sort | uniq -d > duplicates.txt
1818
if [ -s duplicates.txt ]; then
19-
echo "Duplicate entries found in product.json:"
19+
echo "Duplicate entries found in product.json based on 'link':"
2020
cat duplicates.txt
2121
exit 1
2222
else
23-
echo "No duplicate entries found."
23+
echo "No duplicate entries found based on 'link'."
2424
fi
2525
2626
close-issues:
@@ -46,4 +46,4 @@ jobs:
4646
-H "Accept: application/vnd.github.v3+json" \
4747
https://api.github.com/repos/${{ github.repository }}/issues/$ISSUE \
4848
-d '{"state":"closed"}'
49-
done
49+
done

README.md

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<a id="top"></a>
12
<div align="center">
23
<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>
34
<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>
@@ -212,7 +213,9 @@ If you would like to contribute to the project then kindly go through [Contribut
212213
<h2>Let's Collaborate and Make DevLabs Even Better! 💻🌟</h2>
213214
</div>
214215

215-
### ✨ Features
216+
<details>
217+
<summary><h2>✨ Features</h2></summary>
218+
216219

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

261+
</details>
262+
258263
### 🌍 Community
259264

260-
### 🏆 Contributors
265+
<hr>
261266

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

264-
```bash
265-
npx all-contributors-cli add <username> <contribution>
266-
```
271+
<a href="https://github.com/HimanshuNarware/Devlabs/graphs/contributors">
272+
<img src="https://contrib.rocks/image?repo=HimanshuNarware/Devlabs" />
273+
</a>
274+
275+
</div>
276+
277+
<hr>
278+
<div>
279+
<h2><img src="https://fonts.gstatic.com/s/e/notoemoji/latest/1f64f_1f3fb/512.webp" width="35" height="35"> Support </h2>
280+
</div>
281+
282+
<div>
283+
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!
284+
</div> <br>
285+
286+
<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>
287+
`

frontend/src/App.css

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
1-
* {
2-
cursor: none;
3-
}
4-
51
.sidebar-content {
62
padding: 10px;
7-
cursor: none;
3+
cursor: pointer;
4+
85
transition: background-color 0.2s;
9-
}
10-
11-
.Toastify__toast-container {
12-
color: #000;
13-
}
14-
15-
.Toastify__toast {
16-
font-size: 18px;
17-
color: black;
18-
background-color: rgb(165, 57, 197);
19-
}
6+
}
7+
8+
cursor: pointer;
9+
transition: background-color 0.2s;
10+
}

frontend/src/App.js

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,50 @@
1-
import React, { useState, useEffect, Suspense, lazy } from "react";
1+
import React, { useState, useEffect } from "react";
22
import { Route, Routes } from "react-router-dom"; // Correct import
3+
import "./App.css";
4+
import About from "./Component/About";
5+
import "./App.css";
6+
import About from "./Component/About";
7+
import Footer from "./Component/Footer";
8+
import Rateus from "./Component/Rateus";
9+
import "./App.css";
10+
import About from "./Component/About";
11+
import Footer from "./Component/Footer";
12+
import Rateus from "./Component/Rateus";
13+
import Home from "./Component/Home";
14+
import Navbar from "./Component/Navbar/Navbar";
15+
import BookMark from "./Component/BookMark";
16+
import ChatAssistant from "./ChatAssistant/ChatAssistant";
17+
import NotFound from "./Component/NotFound";
18+
import BackToTopButton from "./Component/BackToTopButton";
19+
import OpenSource from "./Component/OpenSource";
20+
import Review from "./Component/Review";
321
import "./App.css";
22+
import About from "./Component/About";
23+
import Footer from "./Component/Footer";
24+
import Rateus from "./Component/Rateus";
25+
import Home from "./Component/Home";
26+
import Navbar from "./Component/Navbar/Navbar";
27+
import BookMark from "./Component/BookMark";
28+
import ChatAssistant from "./ChatAssistant/ChatAssistant";
29+
import NotFound from "./Component/NotFound";
30+
import BackToTopButton from "./Component/BackToTopButton";
31+
import OpenSource from "./Component/OpenSource";
32+
import Review from "./Component/Review";
433
import AOS from "aos";
534
import "aos/dist/aos.css";
635
import { Toaster } from "react-hot-toast";
736
import ScrollToTop from "./Component/ScrollToTop";
37+
38+
import RemoteJobs from "./pages/RemoteJobs";
39+
import AI from "./pages/AI";
40+
import Movie from "./pages/Movie";
41+
import Extension from "./pages/Extension";
42+
import UI from "./pages/UI";
43+
import FrontendTools from "./pages/FrontendTools";
44+
import EthicalHacking from "./pages/EthicalHacking";
45+
import Faq from "./Component/Faq";
46+
import CodingPlatform from "./pages/CodingPlatform"; // Corrected import
47+
import CoursesPlatform from "./pages/CoursesPlatform";
848
import Navbar from "./Component/Navbar/Navbar";
949
import BackToTopButton from "./Component/BackToTopButton";
1050
import Footer from "./Component/Footer";
@@ -16,7 +56,7 @@ import ChatAssistant from "./ChatAssistant/ChatAssistant";
1656
const About = lazy(() => import("./Component/About"));
1757
const Rateus = lazy(() => import("./Component/Rateus"));
1858
const Home = lazy(() => import("./Component/Home"));
19-
// const NotFound = lazy(() => import("./Component/NotFound"));
59+
const NotFound = lazy(() => import("./Component/NotFound"));
2060
const OpenSource = lazy(() => import("./Component/OpenSource"));
2161
const Review = lazy(() => import("./Component/Review"));
2262
const BookMark = lazy(() => import("./Component/BookMark"));
@@ -48,11 +88,9 @@ function App() {
4888
useEffect(() => {
4989
AOS.init();
5090
}, []);
51-
5291
return (
5392
<>
5493
<ScrollToTop />
55-
<TrailingCursor />
5694
<Navbar setSearchQuery={setSearchQuery} />
5795
<Routes>
5896
<Route path="/" element={<Home searchQuery={searchQuery} />} />
@@ -62,7 +100,6 @@ function App() {
62100
<Route path="/review" element={<Review />} />
63101
<Route path="/faq" element={<Faq />} />
64102
<Route path="/rateus" element={<Rateus />} />
65-
<Route path="/contact" element={<Contact />} />
66103
<Route path="/remote-jobs" element={<RemoteJobs />} />
67104
<Route path="/ai" element={<AI />} />
68105
<Route path="/movies-series" element={<Movie />} />
@@ -71,48 +108,11 @@ function App() {
71108
<Route path="/front-end-tools" element={<FrontendTools />} />
72109
<Route path="/ethical-hacking" element={<EthicalHacking />} />
73110
<Route path="/coding-platform" element={<CodingPlatform />} />
74-
<Route path="/courses-platform" element={<CoursesPlatform />} />
75-
<Route path="/collaboration-tools" element={<Collaboration />} />
76-
<Route path="/login" element={<Login />} /> {/* New Route */}
77-
<Route path="/register" element={<Register />} /> {/* New Route */}
111+
112+
<Route path="/courses-platform" element={<CoursesPlatform />}/>
78113
{/* Define other routes as needed */}
79-
<Route path="*" element={<NotFound />} /> {/* 404 route */}
114+
<Route path="*" element={<NotFound />} /> {/* 404 route */}
80115
</Routes>
81-
=======
82-
<Suspense fallback={<div>Loading...</div>}>
83-
<Routes>
84-
<Route path="/" element={<Home searchQuery={searchQuery} />} />
85-
<Route path="/signup" element={<Signup />} />
86-
<Route path="/bookmark" element={<BookMark />} />
87-
<Route path="/about" element={<About />} />
88-
<Route path="/open-source" element={<OpenSource />} />
89-
<Route path="/review" element={<Review />} />
90-
<Route path="/faq" element={<Faq />} />
91-
<Route path="/rateus" element={<Rateus />} />
92-
<Route path="/contact" element={<Contact />} />
93-
<Route path="/profile" element={<Profile />} />
94-
<Route path="/remote-jobs" element={<RemoteJobs />} />
95-
<Route path="/ai" element={<AI />} />
96-
<Route path="/movies-series" element={<Movie />} />
97-
<Route path="/extension" element={<Extension />} />
98-
<Route path="/ui-design" element={<UI />} />
99-
<Route path="/front-end-tools" element={<FrontendTools />} />
100-
<Route path="/ethical-hacking" element={<EthicalHacking />} />
101-
<Route path="/coding-platform" element={<CodingPlatform />} />
102-
<Route path="/courses-platform" element={<CoursesPlatform />} />
103-
<Route path="/productivity-tools" element={<Productivity />} />
104-
<Route path="/collaboration-tools" element={<Collaboration />} />
105-
<Route path="/extensions" element={<Extensions />} />
106-
107-
<Route path="/movies&series" element={<Movies />} />
108-
109-
<Route path="/ui-designs" element={<Ui />} />
110-
<Route path="/remote-job" element={<RemoteJob />} />
111-
112-
{/* Define other routes as needed */}
113-
{/* <Route path="*" element={<NotFound />} /> 404 route */}
114-
</Routes>
115-
</Suspense>
116116
<BackToTopButton />
117117
<Footer />
118118
<ChatAssistant />

frontend/src/Component/BookMark.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from "react";
1+
import React, { useState, useEffect } from "react";
22
import { useSelector, useDispatch } from "react-redux";
33
import { deleteSource } from "../Slice/DataSlice";
44
import bookmarkAnimation from "../lottie/bookmark.json";
@@ -7,19 +7,18 @@ import Lottie from "lottie-react";
77
import toast from "react-hot-toast";
88

99
function BookMark() {
10-
const sourceData = useSelector((state) => state.SourceReducer.sourceData);
10+
const sourceData = useSelector((state) => state.SourceReducer.sourceData); // Adjust the selector to match your state structure
1111
const dispatch = useDispatch();
1212
const [currentPage, setCurrentPage] = useState(1);
1313
const [postPerPage] = useState(8); // Number of bookmarks per page
14+
15+
useEffect(() => {
16+
localStorage.setItem("bookmarks", JSON.stringify(sourceData));
17+
}, [sourceData]);
18+
1419
const handleDeleteBookmark = (name) => {
20+
console.log("remove", name);
1521
dispatch(deleteSource({ name }));
16-
17-
const bookmarksInStorage =
18-
JSON.parse(localStorage.getItem("bookmarks")) || [];
19-
const updatedBookmarks = bookmarksInStorage.filter(
20-
(bookmark) => bookmark.name !== name
21-
);
22-
localStorage.setItem("bookmarks", JSON.stringify(updatedBookmarks));
2322
toast.success("Bookmark removed successfully");
2423
};
2524

@@ -39,10 +38,17 @@ function BookMark() {
3938
{currentBookmarks?.length > 0 ? (
4039
currentBookmarks?.map((data, index) => (
4140
<div className="bookmark__box" key={index}>
42-
<img className="bookmark__logo" src={data.image} alt={data.name} />
41+
<img
42+
className="bookmark__logo"
43+
src={data.image}
44+
alt={data.name}
45+
/>
4346
<h2>{data.name}</h2>
4447
<p className="bookmark__box-text">{data.desc}</p>
45-
<button className="bookmark__button" onClick={() => window.open(data.link)}>
48+
<button
49+
className="bookmark__button"
50+
onClick={() => window.open(data.link)}
51+
>
4652
Link
4753
</button>
4854
<button
@@ -103,7 +109,9 @@ function BookMark() {
103109
style={{ height: "200px" }}
104110
/>
105111
<h1 className="text-2xl font-semibold">No bookmark Found</h1>
106-
<h3 className="mb-4">Explore Devlabs and add them to your bookmark</h3>
112+
<h3 className="mb-4">
113+
Explore Devlabs and add them to your bookmark
114+
</h3>
107115
</div>
108116
)}
109117
</div>

frontend/src/Component/Footer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,5 @@ function Footer() {
233233
</footer>
234234
);
235235
}
236-
237236
export default Footer;
237+

0 commit comments

Comments
 (0)