diff --git a/actions/fetchFilteredMemebers.ts b/actions/fetchFilteredMemebers.ts
index 79bf4608..e83caf93 100644
--- a/actions/fetchFilteredMemebers.ts
+++ b/actions/fetchFilteredMemebers.ts
@@ -46,9 +46,9 @@ export const fetchFilteredMembers = async (term: string) => {
longDescription: dummyMember.longDescription,
joinDate: dummyMember.joinDate,
isAdmin: dummyMember.isAdmin,
- linkedInUrl: linkedIn || '',
- githubUrl: github || '',
- twitterUrl: '',
+ linkedInUrl: linkedIn || '#/',
+ githubUrl: github || '#/',
+ twitterUrl: '#/',
_id: _id || '',
meta: meta || {},
timestamp: timestamp || '',
diff --git a/app/[locale]/members/page.tsx b/app/[locale]/members/page.tsx
index 8b418ca6..56ad7c90 100644
--- a/app/[locale]/members/page.tsx
+++ b/app/[locale]/members/page.tsx
@@ -9,6 +9,7 @@ import { useTranslations } from 'next-intl';
import useTextDirection from '@/hooks/useTextDirection';
import Magnifier from '@/components/SvgCmps/Magnifier';
import classNames from 'classnames';
+import SkeletonCards from '@/components/Members/Skeleton/SkeletonCards';
const WelcomeMessage = () => {
const t = useTranslations('Members');
@@ -48,6 +49,12 @@ const MembersPage: React.FC<{}> = ({}) => {
return () => clearTimeout(timeoutId);
}, [searchTerm]);
+ const notFoundJSX = (
+
+ {t('noMemberFound')}
+
+ );
+
return (
-
+ {members.length === 0 && searchTerm === '' && }
+ {members.length === 0 && searchTerm !== '' && notFoundJSX}
+ {members.length !== 0 && }
);
};
diff --git a/components/Members/Skeleton/SkeletonCard.tsx b/components/Members/Skeleton/SkeletonCard.tsx
new file mode 100644
index 00000000..7c9d87e5
--- /dev/null
+++ b/components/Members/Skeleton/SkeletonCard.tsx
@@ -0,0 +1,28 @@
+import { Skeleton } from '@/components/ui/skeleton';
+
+const SkeletonCard = () => {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+export default SkeletonCard;
diff --git a/components/Members/Skeleton/SkeletonCards.tsx b/components/Members/Skeleton/SkeletonCards.tsx
new file mode 100644
index 00000000..f810d651
--- /dev/null
+++ b/components/Members/Skeleton/SkeletonCards.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import SkeletonCard from './SkeletonCard';
+
+const SkeletonCards = ({ cards = 6 }: { cards?: number }) => {
+ const cardsToRender = Array(cards)
+ .fill(null)
+ .map((_, i) => i);
+ return (
+
+ {cardsToRender.map(card => (
+
+ ))}
+
+ );
+};
+
+export default SkeletonCards;
diff --git a/components/ui/skeleton.tsx b/components/ui/skeleton.tsx
new file mode 100644
index 00000000..16e55caf
--- /dev/null
+++ b/components/ui/skeleton.tsx
@@ -0,0 +1,18 @@
+import { cn } from '@/lib/utils/tailwind/cn';
+
+function Skeleton({
+ className,
+ ...props
+}: React.HTMLAttributes) {
+ return (
+
+ );
+}
+
+export { Skeleton };
diff --git a/next.config.js b/next.config.js
index 345ff148..4f614490 100644
--- a/next.config.js
+++ b/next.config.js
@@ -4,6 +4,9 @@ const createNextIntlPlugin = require('next-intl/plugin');
const withNextIntl = createNextIntlPlugin('./app/i18n.ts');
const nextConfig = {
+ experimental: {
+ serverActions: true,
+ },
eslint: {
dirs: ['app', 'components'],
},
diff --git a/public/locales/en.json b/public/locales/en.json
index 875face7..9bae24b6 100644
--- a/public/locales/en.json
+++ b/public/locales/en.json
@@ -129,7 +129,8 @@
"startOfActivity": "Start of activity",
"searchPlaceholder": "Search by name, role",
"secondOption": "Second option",
- "thirdOption": "Third option"
+ "thirdOption": "Third option",
+ "noMemberFound": "No Member found"
},
"Components": {
"home": {
diff --git a/public/locales/he.json b/public/locales/he.json
index 0e53aefe..a6bd4ba8 100644
--- a/public/locales/he.json
+++ b/public/locales/he.json
@@ -142,7 +142,8 @@
"startOfActivity": "תחילת פעילות",
"searchPlaceholder": "חפש לפי שם תפקיד...",
"secondOption": "אופציה שניה",
- "thirdOption": "אופציה שלישית"
+ "thirdOption": "אופציה שלישית",
+ "noMemberFound": "המשתמש לא נמצא"
},
"Components": {
"home": {