@@ -94,30 +92,31 @@ export default forwardRef(function BlogPostItem(
-
+
{post.authors
.map((author, index) =>
author.link ? (
- {
- e.stopPropagation();
+ e.preventDefault();
+
+ // Handle the click event, e.g., navigate to author.link
+ window.open(author.link, '_blank');
}}
- target='_blank'
- rel='noreferrer'
>
{author.name}
-
+
) : (
author.name
)
)
- .reduce((prev, curr) => (
- <>
+ .reduce((prev, curr, index) => (
+
{prev} & {curr}
- >
+
))}
diff --git a/components/navigation/CommunityPanel.tsx b/components/navigation/CommunityPanel.tsx
index 82306db1284a..2a6f0fd451b7 100644
--- a/components/navigation/CommunityPanel.tsx
+++ b/components/navigation/CommunityPanel.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import communityItems from './communityItems';
import FlyoutMenu from './FlyoutMenu';
diff --git a/components/navigation/DocsNav.tsx b/components/navigation/DocsNav.tsx
index d0ee433b5733..83bf94294f27 100644
--- a/components/navigation/DocsNav.tsx
+++ b/components/navigation/DocsNav.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import React, { useEffect, useState } from 'react';
import { buckets } from '../data/buckets';
import DocsArrow from '../icons/DocsArrow';
diff --git a/components/navigation/DocsNavItem.tsx b/components/navigation/DocsNavItem.tsx
index 43d4af17a6ff..eadc6f464184 100644
--- a/components/navigation/DocsNavItem.tsx
+++ b/components/navigation/DocsNavItem.tsx
@@ -1,4 +1,5 @@
import Link from 'next/link';
+import React from 'react';
export interface DocsNavItemProps {
title: string;
diff --git a/components/navigation/DocsNavWrapper.tsx b/components/navigation/DocsNavWrapper.tsx
index b7ad00dbcd85..c51f0cb2033e 100644
--- a/components/navigation/DocsNavWrapper.tsx
+++ b/components/navigation/DocsNavWrapper.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import type { IDocsTree, IPost } from '@/types/post';
import { DOCS_INDEX_NAME, SearchButton } from '../AlgoliaSearch';
diff --git a/components/navigation/Filter.tsx b/components/navigation/Filter.tsx
index d7f07c2e3224..7b69f4702931 100644
--- a/components/navigation/Filter.tsx
+++ b/components/navigation/Filter.tsx
@@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
-import { useEffect, useState } from 'react';
+import React, { useEffect, useState } from 'react';
import Select from '../form/Select';
import { applyFilterList, onFilterApply } from '../helpers/applyFilter';
diff --git a/components/navigation/FlyoutMenu.tsx b/components/navigation/FlyoutMenu.tsx
index b6faf8269fe3..fc5ab7d41a4e 100644
--- a/components/navigation/FlyoutMenu.tsx
+++ b/components/navigation/FlyoutMenu.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import type { MenuItem } from './MenuBlocks';
import MenuBlocks from './MenuBlocks';
diff --git a/components/navigation/Label.tsx b/components/navigation/Label.tsx
index 53315b0ea45a..25b8d5e7ef69 100644
--- a/components/navigation/Label.tsx
+++ b/components/navigation/Label.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
enum LabelColor {
Gray = 'gray',
Green = 'green'
diff --git a/components/navigation/LearningPanel.tsx b/components/navigation/LearningPanel.tsx
index 090cc7a16908..a2882b094ea2 100644
--- a/components/navigation/LearningPanel.tsx
+++ b/components/navigation/LearningPanel.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { buckets } from '../data/buckets';
import FlyoutMenu from './FlyoutMenu';
diff --git a/components/navigation/MenuBlocks.tsx b/components/navigation/MenuBlocks.tsx
index 1f239ba8b17e..81548f97ec0c 100644
--- a/components/navigation/MenuBlocks.tsx
+++ b/components/navigation/MenuBlocks.tsx
@@ -1,4 +1,5 @@
import { useRouter } from 'next/router';
+import React from 'react';
import { ParagraphTypeStyle } from '@/types/typography/Paragraph';
diff --git a/components/navigation/MobileNavMenu.tsx b/components/navigation/MobileNavMenu.tsx
index 1c6f57e130f9..8b0ccd740374 100644
--- a/components/navigation/MobileNavMenu.tsx
+++ b/components/navigation/MobileNavMenu.tsx
@@ -1,5 +1,5 @@
import Link from 'next/link';
-import { useState } from 'react';
+import React, { useState } from 'react';
import { SearchButton } from '../AlgoliaSearch';
import NavItemDropdown from '../icons/NavItemDropdown';
diff --git a/components/navigation/NavBar.tsx b/components/navigation/NavBar.tsx
index e76330c41cff..d0fd2ca6fa02 100644
--- a/components/navigation/NavBar.tsx
+++ b/components/navigation/NavBar.tsx
@@ -2,7 +2,7 @@ import Link from 'next/link';
import type { NextRouter } from 'next/router';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
-import { useEffect, useState } from 'react';
+import React, { useEffect, useState } from 'react';
import { defaultLanguage, i18nPaths, languages } from '@/utils/i18n';
diff --git a/components/navigation/SubCategoryDocsNav.tsx b/components/navigation/SubCategoryDocsNav.tsx
index 63f3a60337ac..2b72003a582a 100644
--- a/components/navigation/SubCategoryDocsNav.tsx
+++ b/components/navigation/SubCategoryDocsNav.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import React, { useEffect, useState } from 'react';
import DocsArrow from '../icons/DocsArrow';
import DocsNavItem from './DocsNavItem';
diff --git a/components/navigation/ToolsPanel.tsx b/components/navigation/ToolsPanel.tsx
index 6571bd6d3708..a90c248b2803 100644
--- a/components/navigation/ToolsPanel.tsx
+++ b/components/navigation/ToolsPanel.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import FlyoutMenu from './FlyoutMenu';
import toolingItems from './toolingItems';
diff --git a/components/navigation/TutorialList.tsx b/components/navigation/TutorialList.tsx
index a7cd0b8a790f..f2cfea0d5a23 100644
--- a/components/navigation/TutorialList.tsx
+++ b/components/navigation/TutorialList.tsx
@@ -1,5 +1,5 @@
import Link from 'next/link';
-import { useContext } from 'react';
+import React, { useContext } from 'react';
import type { DocsContextType } from '@/types/context/DocsContext';
import type { IDoc } from '@/types/post';
diff --git a/components/navigation/communityItems.tsx b/components/navigation/communityItems.tsx
index e5df44e22808..aa25ac89a1b3 100644
--- a/components/navigation/communityItems.tsx
+++ b/components/navigation/communityItems.tsx
@@ -1,3 +1,5 @@
+import type React from 'react';
+
import IconAmbassador from '../icons/Ambassador';
import IconContributing from '../icons/Contributing';
import IconDashboard from '../icons/Dashboard';
diff --git a/components/navigation/learningItems.tsx b/components/navigation/learningItems.tsx
index 40e9b0d670e8..d8f538bb8652 100644
--- a/components/navigation/learningItems.tsx
+++ b/components/navigation/learningItems.tsx
@@ -1,3 +1,5 @@
+import type React from 'react';
+
import IconGradCap from '../icons/GradCap';
import IconGuide from '../icons/Guide';
import IconMigration from '../icons/Migration';
diff --git a/components/navigation/toolingItems.tsx b/components/navigation/toolingItems.tsx
index 8c18db3bec06..e637a62d0070 100644
--- a/components/navigation/toolingItems.tsx
+++ b/components/navigation/toolingItems.tsx
@@ -1,4 +1,5 @@
import { TerminalIcon } from '@heroicons/react/outline';
+import type React from 'react';
import IconGenerator from '../icons/Generator';
import IconGithubActions from '../icons/GithubActions';
diff --git a/components/newsroom/FeaturedBlogPost.tsx b/components/newsroom/FeaturedBlogPost.tsx
index 515d0d0a2f66..49b4c8ef4ab4 100644
--- a/components/newsroom/FeaturedBlogPost.tsx
+++ b/components/newsroom/FeaturedBlogPost.tsx
@@ -1,5 +1,6 @@
import moment from 'moment';
import Link from 'next/link';
+import React from 'react';
import TextTruncate from 'react-text-truncate';
import { BlogPostType } from '@/types/components/navigation/BlogPostType';
@@ -87,18 +88,9 @@ export default function FeaturedBlogPost({ post, className = '' }: FeaturedBlogP
{post.authors
.map((author, index) =>
author.link ? (
-
{
- e.stopPropagation();
- }}
- target='_blank'
- rel='noreferrer'
- >
+
{author.name}
-
+
) : (
author.name
)
diff --git a/components/newsroom/Newsroom.tsx b/components/newsroom/Newsroom.tsx
index 649263afaebe..87b8bdff1809 100644
--- a/components/newsroom/Newsroom.tsx
+++ b/components/newsroom/Newsroom.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { TwitterTimelineEmbed } from 'react-twitter-embed';
import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading';
diff --git a/components/newsroom/NewsroomBlogPosts.tsx b/components/newsroom/NewsroomBlogPosts.tsx
index c5036b126995..7e79c1fb5342 100644
--- a/components/newsroom/NewsroomBlogPosts.tsx
+++ b/components/newsroom/NewsroomBlogPosts.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import React, { useState } from 'react';
import { A11y, Navigation } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/react';
diff --git a/components/newsroom/NewsroomSection.tsx b/components/newsroom/NewsroomSection.tsx
index c3a3e7df1cd7..7e660e69dfe4 100644
--- a/components/newsroom/NewsroomSection.tsx
+++ b/components/newsroom/NewsroomSection.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading';
import { ParagraphTypeStyle } from '@/types/typography/Paragraph';
diff --git a/components/newsroom/NewsroomYoutube.tsx b/components/newsroom/NewsroomYoutube.tsx
index 91015b937883..ced5fceedbe2 100644
--- a/components/newsroom/NewsroomYoutube.tsx
+++ b/components/newsroom/NewsroomYoutube.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import React, { useState } from 'react';
import { A11y, Navigation } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/react';
diff --git a/components/newsroom/swiper.tsx b/components/newsroom/swiper.tsx
index 1118cc36e8f4..4f040cbeca6c 100644
--- a/components/newsroom/swiper.tsx
+++ b/components/newsroom/swiper.tsx
@@ -1,3 +1,4 @@
+import type React from 'react';
import { useEffect, useRef, useState } from 'react';
/**
diff --git a/components/roadmap/RoadmapItem.tsx b/components/roadmap/RoadmapItem.tsx
index e82504eae658..34787b7252e6 100644
--- a/components/roadmap/RoadmapItem.tsx
+++ b/components/roadmap/RoadmapItem.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import React, { useState } from 'react';
// Since a roadmap item can contain nested roadmap lists, we need to import RoadmapList to display them.
/* eslint-disable import/no-cycle*/
diff --git a/components/roadmap/RoadmapList.tsx b/components/roadmap/RoadmapList.tsx
index b9ad17296622..57d500978bf4 100644
--- a/components/roadmap/RoadmapList.tsx
+++ b/components/roadmap/RoadmapList.tsx
@@ -1,5 +1,7 @@
// Since a RoadmapList may contain other RoadmapItems, we need to import RoadmapItem to display them.
/* eslint-disable import/no-cycle*/
+import React from 'react';
+
import RoadmapItem from './RoadmapItem';
interface IRoadmapListProps {
diff --git a/components/roadmap/RoadmapPill.tsx b/components/roadmap/RoadmapPill.tsx
index e89b9dba463c..d73ac46e84bf 100644
--- a/components/roadmap/RoadmapPill.tsx
+++ b/components/roadmap/RoadmapPill.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import React, { useState } from 'react';
import IconArrowRight from '../icons/ArrowRight';
import Modal from '../Modal';
diff --git a/components/slack/index.tsx b/components/slack/index.tsx
index 70bdef3e739b..5d3b4a17fd64 100644
--- a/components/slack/index.tsx
+++ b/components/slack/index.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import SlackMessage from './Message';
interface SlackProps {
diff --git a/components/sponsors/GoldSponsors.tsx b/components/sponsors/GoldSponsors.tsx
index 277f4332ad33..3729ffcc7e09 100644
--- a/components/sponsors/GoldSponsors.tsx
+++ b/components/sponsors/GoldSponsors.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { goldSponsors } from './GoldSponsorsList';
interface GoldSponsorsProps {
diff --git a/components/sponsors/SilverSponsors.tsx b/components/sponsors/SilverSponsors.tsx
index 62c8868980a6..4a737aef7df9 100644
--- a/components/sponsors/SilverSponsors.tsx
+++ b/components/sponsors/SilverSponsors.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { Silversponsors } from './SilverSponsorsList';
interface SilverSponsorsProps {
diff --git a/components/sponsors/Sponsors.tsx b/components/sponsors/Sponsors.tsx
index af0fed3882e3..fd5aff751179 100644
--- a/components/sponsors/Sponsors.tsx
+++ b/components/sponsors/Sponsors.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { sponsors } from './SponsorsList';
interface SponsorsProps {
diff --git a/components/tools/CategoryDropdown.tsx b/components/tools/CategoryDropdown.tsx
index f865a226021c..02d091008a0f 100644
--- a/components/tools/CategoryDropdown.tsx
+++ b/components/tools/CategoryDropdown.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import type { ToolsListData } from '@/types/components/tools/ToolDataType';
import ToolsDataList from '../../config/tools.json';
diff --git a/components/tools/Checkbox.stories.tsx b/components/tools/Checkbox.stories.tsx
index d9691aff1813..7445b41b4123 100644
--- a/components/tools/Checkbox.stories.tsx
+++ b/components/tools/Checkbox.stories.tsx
@@ -1,5 +1,6 @@
import { useArgs } from '@storybook/preview-api';
import type { Meta, StoryObj } from '@storybook/react';
+import React from 'react';
import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType';
diff --git a/components/tools/Checkbox.tsx b/components/tools/Checkbox.tsx
index 439bb040be02..25b4bceb2c2a 100644
--- a/components/tools/Checkbox.tsx
+++ b/components/tools/Checkbox.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { twMerge } from 'tailwind-merge';
import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType';
diff --git a/components/tools/Filters.tsx b/components/tools/Filters.tsx
index 0ca822b7eea9..4938828086c6 100644
--- a/components/tools/Filters.tsx
+++ b/components/tools/Filters.tsx
@@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
-import { useContext, useEffect, useState } from 'react';
+import React, { useContext, useEffect, useState } from 'react';
import { twMerge } from 'tailwind-merge';
import type { Language, Technology, VisibleDataListType } from '@/types/components/tools/ToolDataType';
diff --git a/components/tools/FiltersDisplay.tsx b/components/tools/FiltersDisplay.tsx
index 945481cae243..63c34db8dc17 100644
--- a/components/tools/FiltersDisplay.tsx
+++ b/components/tools/FiltersDisplay.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { twMerge } from 'tailwind-merge';
interface FiltersDisplayProps {
diff --git a/components/tools/FiltersDropdown.tsx b/components/tools/FiltersDropdown.tsx
index beb68e81eb5a..6c473541e871 100644
--- a/components/tools/FiltersDropdown.tsx
+++ b/components/tools/FiltersDropdown.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { twMerge } from 'tailwind-merge';
import type { Category, Language, Technology } from '@/types/components/tools/ToolDataType';
diff --git a/components/tools/Tags.tsx b/components/tools/Tags.tsx
index 7609b2237415..0fd1c2453b2e 100644
--- a/components/tools/Tags.tsx
+++ b/components/tools/Tags.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
interface SelectTagsProps {
// eslint-disable-next-line prettier/prettier
diff --git a/components/tools/Toggle.stories.tsx b/components/tools/Toggle.stories.tsx
index 2fcaf81c26df..5e72492197ea 100644
--- a/components/tools/Toggle.stories.tsx
+++ b/components/tools/Toggle.stories.tsx
@@ -1,5 +1,6 @@
import { useArgs } from '@storybook/preview-api';
import type { Meta, StoryObj } from '@storybook/react';
+import React from 'react';
import type { ToggleProps } from '@/types/components/tools/TogglePropsType';
diff --git a/components/tools/Toggle.tsx b/components/tools/Toggle.tsx
index bfa324b8538b..ee7066e7b900 100644
--- a/components/tools/Toggle.tsx
+++ b/components/tools/Toggle.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { twMerge } from 'tailwind-merge';
import type { ToggleProps } from '@/types/components/tools/TogglePropsType';
diff --git a/components/tools/ToolsCard.tsx b/components/tools/ToolsCard.tsx
index b3e73df9364a..2a6d9ced02f0 100644
--- a/components/tools/ToolsCard.tsx
+++ b/components/tools/ToolsCard.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useRef, useState } from 'react';
+import React, { useEffect, useRef, useState } from 'react';
import type { ToolData, VisibleDataListType } from '@/types/components/tools/ToolDataType';
import { HeadingTypeStyle } from '@/types/typography/Heading';
@@ -92,9 +92,12 @@ export default function ToolsCard({ toolData }: ToolsCardProp) {
}, 500)
}
>
-
+
{toolData.description}
-
+
diff --git a/components/tools/ToolsDashboard.tsx b/components/tools/ToolsDashboard.tsx
index 920aaee66eb3..ff9a364c87d4 100644
--- a/components/tools/ToolsDashboard.tsx
+++ b/components/tools/ToolsDashboard.tsx
@@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
-import { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react';
+import React, { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react';
import type { ToolsListData } from '@/types/components/tools/ToolDataType';
diff --git a/components/tools/ToolsList.tsx b/components/tools/ToolsList.tsx
index b6e6eeeafe51..5ce95974d722 100644
--- a/components/tools/ToolsList.tsx
+++ b/components/tools/ToolsList.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import type { ToolsListData } from '@/types/components/tools/ToolDataType';
import { HeadingTypeStyle } from '@/types/typography/Heading';
import { ParagraphTypeStyle } from '@/types/typography/Paragraph';
diff --git a/components/typography/Paragraph.tsx b/components/typography/Paragraph.tsx
index 261a83d96f49..17f8eadcce88 100644
--- a/components/typography/Paragraph.tsx
+++ b/components/typography/Paragraph.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { twMerge } from 'tailwind-merge';
import { ParagraphTypeStyle } from '@/types/typography/Paragraph';
diff --git a/components/typography/TextLink.tsx b/components/typography/TextLink.tsx
index 4b789ba9e0d7..c8f2bb4a6281 100644
--- a/components/typography/TextLink.tsx
+++ b/components/typography/TextLink.tsx
@@ -1,4 +1,5 @@
import Link from 'next/link';
+import React from 'react';
import { twMerge } from 'tailwind-merge';
export interface TextLinkProps {
diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json
index 7ae06a8ebacb..d5914331c17f 100644
--- a/config/MAINTAINERS.json
+++ b/config/MAINTAINERS.json
@@ -258,7 +258,6 @@
"website",
"spec-json-schemas",
"generator",
- "asyncapi-react",
"extensions-catalog",
"bindings",
"enterprise-patterns",
@@ -321,6 +320,7 @@
"availableForHire": false,
"isTscMember": true,
"repos": [
+ "asyncapi-react",
"conference-website",
"chatbot"
],
diff --git a/config/all-tags.json b/config/all-tags.json
index b2a1c6f3c3ac..bcbe78efc37c 100644
--- a/config/all-tags.json
+++ b/config/all-tags.json
@@ -1 +1 @@
-{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]}
\ No newline at end of file
+{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]}
\ No newline at end of file
diff --git a/config/tools-automated.json b/config/tools-automated.json
index 6fac6523de4b..a48496cf7dd4 100644
--- a/config/tools-automated.json
+++ b/config/tools-automated.json
@@ -72,19 +72,22 @@
}
},
{
- "title": "nestjs-asyncapi",
- "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.",
+ "title": "Zod Sockets",
+ "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.",
"links": {
- "repoUrl": "https://github.com/flamewow/nestjs-asyncapi"
+ "websiteUrl": "https://www.npmjs.com/package/zod-sockets",
+ "repoUrl": "https://github.com/RobinTail/zod-sockets"
},
"filters": {
- "language": "Typescript",
+ "language": "TypeScript",
"technology": [
"Node.js",
- "NestJS"
+ "TypeScript"
],
"categories": [
- "code-first"
+ "code-first",
+ "dsl",
+ "framework"
],
"hasCommercial": false,
"isAsyncAPIOwner": false
@@ -113,22 +116,19 @@
}
},
{
- "title": "Zod Sockets",
- "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.",
+ "title": "nestjs-asyncapi",
+ "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.",
"links": {
- "websiteUrl": "https://www.npmjs.com/package/zod-sockets",
- "repoUrl": "https://github.com/RobinTail/zod-sockets"
+ "repoUrl": "https://github.com/flamewow/nestjs-asyncapi"
},
"filters": {
- "language": "TypeScript",
+ "language": "Typescript",
"technology": [
"Node.js",
- "TypeScript"
+ "NestJS"
],
"categories": [
- "code-first",
- "dsl",
- "framework"
+ "code-first"
],
"hasCommercial": false,
"isAsyncAPIOwner": false
@@ -139,32 +139,6 @@
"Code Generators": {
"description": "The following is a list of tools that generate code from an AsyncAPI document; not the other way around.",
"toolsList": [
- {
- "title": "ZenWave SDK",
- "description": "DDD and API-First for Event-Driven Microservices",
- "links": {
- "websiteUrl": "https://zenwave360.github.io/",
- "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/",
- "repoUrl": "https://github.com/zenwave360/zenwave-sdk"
- },
- "filters": {
- "language": "Java",
- "technology": [
- "Maven",
- "CLI",
- "Spring Cloud Streams",
- "JHipster JDL"
- ],
- "categories": [
- "code-generator",
- "dsl",
- "mocking-and-testing",
- "cli"
- ],
- "hasCommercial": false,
- "isAsyncAPIOwner": false
- }
- },
{
"title": "Golang AsyncAPI Code Generator",
"description": "Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n",
@@ -200,6 +174,32 @@
"hasCommercial": false,
"isAsyncAPIOwner": true
}
+ },
+ {
+ "title": "ZenWave SDK",
+ "description": "DDD and API-First for Event-Driven Microservices",
+ "links": {
+ "websiteUrl": "https://zenwave360.github.io/",
+ "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/",
+ "repoUrl": "https://github.com/zenwave360/zenwave-sdk"
+ },
+ "filters": {
+ "language": "Java",
+ "technology": [
+ "Maven",
+ "CLI",
+ "Spring Cloud Streams",
+ "JHipster JDL"
+ ],
+ "categories": [
+ "code-generator",
+ "dsl",
+ "mocking-and-testing",
+ "cli"
+ ],
+ "hasCommercial": false,
+ "isAsyncAPIOwner": false
+ }
}
]
},
@@ -290,48 +290,48 @@
"description": "Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.",
"toolsList": [
{
- "title": "ZenWave SDK",
- "description": "DDD and API-First for Event-Driven Microservices",
+ "title": "Zod Sockets",
+ "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.",
"links": {
- "websiteUrl": "https://zenwave360.github.io/",
- "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/",
- "repoUrl": "https://github.com/zenwave360/zenwave-sdk"
+ "websiteUrl": "https://www.npmjs.com/package/zod-sockets",
+ "repoUrl": "https://github.com/RobinTail/zod-sockets"
},
"filters": {
- "language": "Java",
+ "language": "TypeScript",
"technology": [
- "Maven",
- "CLI",
- "Spring Cloud Streams",
- "JHipster JDL"
+ "Node.js",
+ "TypeScript"
],
"categories": [
- "code-generator",
+ "code-first",
"dsl",
- "mocking-and-testing",
- "cli"
+ "framework"
],
"hasCommercial": false,
"isAsyncAPIOwner": false
}
},
{
- "title": "Zod Sockets",
- "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.",
+ "title": "ZenWave SDK",
+ "description": "DDD and API-First for Event-Driven Microservices",
"links": {
- "websiteUrl": "https://www.npmjs.com/package/zod-sockets",
- "repoUrl": "https://github.com/RobinTail/zod-sockets"
+ "websiteUrl": "https://zenwave360.github.io/",
+ "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/",
+ "repoUrl": "https://github.com/zenwave360/zenwave-sdk"
},
"filters": {
- "language": "TypeScript",
+ "language": "Java",
"technology": [
- "Node.js",
- "TypeScript"
+ "Maven",
+ "CLI",
+ "Spring Cloud Streams",
+ "JHipster JDL"
],
"categories": [
- "code-first",
+ "code-generator",
"dsl",
- "framework"
+ "mocking-and-testing",
+ "cli"
],
"hasCommercial": false,
"isAsyncAPIOwner": false
@@ -387,34 +387,34 @@
}
},
{
- "title": "GitHub Action for Generator",
- "description": "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!",
+ "title": "GitHub Action for CLI",
+ "description": "GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone",
"links": {
- "repoUrl": "https://github.com/asyncapi/cli"
+ "repoUrl": "https://github.com/asyncapi/github-action-for-cli"
},
"filters": {
"technology": [
- "AsyncAPI Generator"
+ "AsyncAPI CLI"
],
"categories": [
- "github-actions"
+ "github-action"
],
"hasCommercial": false,
"isAsyncAPIOwner": true
}
},
{
- "title": "GitHub Action for CLI",
- "description": "GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone",
+ "title": "GitHub Action for Generator",
+ "description": "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!",
"links": {
- "repoUrl": "https://github.com/asyncapi/github-action-for-cli"
+ "repoUrl": "https://github.com/asyncapi/cli"
},
"filters": {
"technology": [
- "AsyncAPI CLI"
+ "AsyncAPI Generator"
],
"categories": [
- "github-action"
+ "github-actions"
],
"hasCommercial": false,
"isAsyncAPIOwner": true
@@ -564,6 +564,25 @@
"CLIs": {
"description": "The following is a list of tools that you can work with in terminal or do some CI/CD automation.",
"toolsList": [
+ {
+ "title": "AsyncAPI CLI",
+ "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n",
+ "links": {
+ "websiteUrl": "https://www.asyncapi.com/tools/cli",
+ "repoUrl": "https://github.com/asyncapi/cli"
+ },
+ "filters": {
+ "technology": [
+ "TypeScript"
+ ],
+ "categories": [
+ "others",
+ "cli"
+ ],
+ "hasCommercial": false,
+ "isAsyncAPIOwner": true
+ }
+ },
{
"title": "ZenWave SDK",
"description": "DDD and API-First for Event-Driven Microservices",
@@ -590,25 +609,6 @@
"isAsyncAPIOwner": false
}
},
- {
- "title": "AsyncAPI CLI",
- "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n",
- "links": {
- "websiteUrl": "https://www.asyncapi.com/tools/cli",
- "repoUrl": "https://github.com/asyncapi/cli"
- },
- "filters": {
- "technology": [
- "TypeScript"
- ],
- "categories": [
- "others",
- "cli"
- ],
- "hasCommercial": false,
- "isAsyncAPIOwner": true
- }
- },
{
"title": "AsyncAPI CLI",
"description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n",
@@ -719,15 +719,18 @@
"description": "The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.",
"toolsList": [
{
- "title": "HTML Template",
- "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.",
+ "title": "Java Spring Cloud Stream Template",
+ "description": "Java Spring Cloud Stream template for the AsyncAPI Generator",
"links": {
- "repoUrl": "https://github.com/asyncapi/html-template"
+ "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template"
},
"filters": {
- "language": "javascript",
+ "language": [
+ "javascript"
+ ],
"technology": [
- "HTML"
+ "Spring Cloud Streams",
+ "Maven"
],
"categories": [
"generator-template"
@@ -737,17 +740,15 @@
}
},
{
- "title": "Java Template",
- "description": "Java template for the AsyncAPI Generator",
+ "title": "Node.js Multiprotocol Template",
+ "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.",
"links": {
- "repoUrl": "https://github.com/asyncapi/java-template"
+ "repoUrl": "https://github.com/asyncapi/nodejs-template"
},
"filters": {
- "language": [
- "javascript"
- ],
+ "language": "javascript",
"technology": [
- "Java"
+ "Node.js"
],
"categories": [
"generator-template"
@@ -757,19 +758,17 @@
}
},
{
- "title": "Java Spring Template",
- "description": "Java Spring template for the AsyncAPI Generator",
+ "title": "Java Template",
+ "description": "Java template for the AsyncAPI Generator",
"links": {
- "repoUrl": "https://github.com/asyncapi/java-spring-template"
+ "repoUrl": "https://github.com/asyncapi/java-template"
},
"filters": {
"language": [
"javascript"
],
"technology": [
- "Springboot",
- "Maven",
- "Gradle"
+ "Java"
],
"categories": [
"generator-template"
@@ -779,18 +778,15 @@
}
},
{
- "title": "Java Spring Cloud Stream Template",
- "description": "Java Spring Cloud Stream template for the AsyncAPI Generator",
+ "title": "Node.js Websockets Template",
+ "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.",
"links": {
- "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template"
+ "repoUrl": "https://github.com/asyncapi/nodejs-ws-template"
},
"filters": {
- "language": [
- "javascript"
- ],
+ "language": "javascript",
"technology": [
- "Spring Cloud Streams",
- "Maven"
+ "Node.js"
],
"categories": [
"generator-template"
@@ -800,15 +796,15 @@
}
},
{
- "title": "Node.js Multiprotocol Template",
- "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.",
+ "title": "HTML Template",
+ "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.",
"links": {
- "repoUrl": "https://github.com/asyncapi/nodejs-template"
+ "repoUrl": "https://github.com/asyncapi/html-template"
},
"filters": {
"language": "javascript",
"technology": [
- "Node.js"
+ "HTML"
],
"categories": [
"generator-template"
@@ -818,15 +814,19 @@
}
},
{
- "title": "Node.js Websockets Template",
- "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.",
+ "title": "Java Spring Template",
+ "description": "Java Spring template for the AsyncAPI Generator",
"links": {
- "repoUrl": "https://github.com/asyncapi/nodejs-ws-template"
+ "repoUrl": "https://github.com/asyncapi/java-spring-template"
},
"filters": {
- "language": "javascript",
+ "language": [
+ "javascript"
+ ],
"technology": [
- "Node.js"
+ "Springboot",
+ "Maven",
+ "Gradle"
],
"categories": [
"generator-template"
diff --git a/context/AppContext.tsx b/context/AppContext.tsx
index 696c2ae6f2db..5d53b72dfe77 100644
--- a/context/AppContext.tsx
+++ b/context/AppContext.tsx
@@ -1,4 +1,5 @@
import { createContext } from 'react';
-import { AppContextType } from '@/types/context/AppContext';
-export default createContext
({ path: "" });
+import type { AppContextType } from '@/types/context/AppContext';
+
+export default createContext({ path: '' });
diff --git a/context/GenericPostContext.tsx b/context/GenericPostContext.tsx
index 65b510b15a84..6d9b519d7bd3 100644
--- a/context/GenericPostContext.tsx
+++ b/context/GenericPostContext.tsx
@@ -2,4 +2,4 @@ import { createContext } from 'react';
import type { IPosts } from '@/types/post';
-export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number]} | undefined>(undefined);
+export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number] } | undefined>(undefined);
diff --git a/context/ToolFilterContext.tsx b/context/ToolFilterContext.tsx
index b3ea042f49d3..0b2b582dcc70 100644
--- a/context/ToolFilterContext.tsx
+++ b/context/ToolFilterContext.tsx
@@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
-import { createContext, useEffect, useState } from 'react';
+import React, { createContext, useEffect, useState } from 'react';
interface ToolFilterContextProps {
isPaid: string;
diff --git a/next-env.d.ts b/next-env.d.ts
index 4f11a03dc6cc..a4a7b3f5cfa2 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -2,4 +2,4 @@
///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/basic-features/typescript for more information.
+// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information.
diff --git a/package-lock.json b/package-lock.json
index 376d20951273..bea2b1cc43e4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10621,9 +10621,9 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"engines": {
"node": ">= 0.6"
}
@@ -13775,16 +13775,16 @@
}
},
"node_modules/express": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
- "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
diff --git a/pages/_document.tsx b/pages/_document.tsx
index 80484623fe7b..b220a1b44841 100644
--- a/pages/_document.tsx
+++ b/pages/_document.tsx
@@ -1,4 +1,5 @@
import Document, { Head, Html, Main, NextScript } from 'next/document';
+import React from 'react';
import i18nextConfig from '../next-i18next.config';
diff --git a/pages/blog/index.tsx b/pages/blog/index.tsx
index 7829daf74355..37958cec4308 100644
--- a/pages/blog/index.tsx
+++ b/pages/blog/index.tsx
@@ -1,8 +1,9 @@
import { useRouter } from 'next/router';
-import { useContext, useState } from 'react';
+import React, { useContext, useEffect, useState } from 'react';
import Empty from '@/components/illustrations/Empty';
import GenericLayout from '@/components/layout/GenericLayout';
+import Loader from '@/components/Loader';
import BlogPostItem from '@/components/navigation/BlogPostItem';
import Filter from '@/components/navigation/Filter';
import Heading from '@/components/typography/Heading';
@@ -33,6 +34,7 @@ export default function BlogIndexPage() {
})
: []
);
+ const [isClient, setIsClient] = useState(false);
const onFilter = (data: IBlogPost[]) => setPosts(data);
const toFilter = [
@@ -57,6 +59,10 @@ export default function BlogIndexPage() {
const description = 'Find the latest and greatest stories from our community';
const image = '/img/social/blog.webp';
+ useEffect(() => {
+ setIsClient(true);
+ }, []);
+
return (
@@ -108,16 +114,24 @@ export default function BlogIndexPage() {
)}
- {Object.keys(posts).length === 0 ? (
+ {Object.keys(posts).length === 0 && (
No post matches your filter
- ) : (
+ )}
+ {Object.keys(posts).length > 0 && isClient && (
- {router.isReady && posts.map((post, index) => )}
+ {posts.map((post, index) => (
+
+ ))}
)}
+ {Object.keys(posts).length > 0 && !isClient && (
+
+
+
+ )}