From a0523255c2ac77ba06a5a795a21f5ed3d17f5630 Mon Sep 17 00:00:00 2001 From: RWEMAREMY Date: Thu, 14 Nov 2024 09:10:59 +0200 Subject: [PATCH 1/3] new piechart and stats updated --- src/Chart/BarChart.tsx | 6 +- src/Chart/PieChart.tsx | 96 ++++++++++++++++ .../{AppointmentsChart.tsx => UsersChart.tsx} | 8 +- src/components/AdminDashboardTable.tsx | 103 ++++++++++++++++++ src/pages/AdminDashboard.tsx | 22 +++- 5 files changed, 223 insertions(+), 12 deletions(-) create mode 100644 src/Chart/PieChart.tsx rename src/Chart/{AppointmentsChart.tsx => UsersChart.tsx} (92%) create mode 100644 src/components/AdminDashboardTable.tsx diff --git a/src/Chart/BarChart.tsx b/src/Chart/BarChart.tsx index b7a81e61..895a544a 100644 --- a/src/Chart/BarChart.tsx +++ b/src/Chart/BarChart.tsx @@ -40,14 +40,14 @@ const BarChart: React.FC = () => { ], datasets: [ { - label: 'Last 8 days', + label: 'Nova', data: [12, 19, 3, 5, 2, 3, 12, 14, 5, 7, 9, 11], backgroundColor: '#5A6ACF', borderRadius: 0, barThickness: 8, }, { - label: 'Last Week', + label: 'Fighters', data: [10, 15, 5, 8, 6, 9, 13, 9, 6, 8, 7, 10], backgroundColor: '#D1D5DB', borderRadius: 0, @@ -63,7 +63,7 @@ const BarChart: React.FC = () => { legend: { position: 'bottom' as const, labels: { - color: '#121212', + color: '#D1D5DB', }, }, tooltip: { diff --git a/src/Chart/PieChart.tsx b/src/Chart/PieChart.tsx new file mode 100644 index 00000000..2ad039f2 --- /dev/null +++ b/src/Chart/PieChart.tsx @@ -0,0 +1,96 @@ +import React from 'react'; +import { Doughnut } from 'react-chartjs-2'; +import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js'; + +ChartJS.register(ArcElement, Tooltip, Legend); + +// eslint-disable-next-line react/function-component-definition +const PieChart: React.FC = () => { + const data = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [30, 100], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + const data2 = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [30, 70], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + const data3 = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [60, 60], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + + const options = { + responsive: true, + cutout: '70%', + plugins: { + tooltip: { + callbacks: { + // eslint-disable-next-line func-names, object-shorthand + label: function (tooltipItem: any) { + return `${tooltipItem.label}: ${tooltipItem.raw}%`; + }, + }, + }, + legend: { + display: false, + }, + }, + }; + + return ( +
+
+
+ +
+
+

10

+
+
+

New Invitations & Registration

+
+
+ +
+
+

20

+
+
+

Upcoming Events

+
+
+ +
+
+

50

+
+
+

Active& Progressive Tickets

+
+
+
+ ); +}; + +export default PieChart; diff --git a/src/Chart/AppointmentsChart.tsx b/src/Chart/UsersChart.tsx similarity index 92% rename from src/Chart/AppointmentsChart.tsx rename to src/Chart/UsersChart.tsx index 8713df2f..ee3ab2aa 100644 --- a/src/Chart/AppointmentsChart.tsx +++ b/src/Chart/UsersChart.tsx @@ -22,7 +22,7 @@ ChartJS.register( ); // eslint-disable-next-line react/function-component-definition -const AppointmentsChart: React.FC = () => { +const usersChart: React.FC = () => { const data = { labels: [ '01', @@ -59,7 +59,7 @@ const AppointmentsChart: React.FC = () => { ], datasets: [ { - label: 'Last days', + label: 'Andela', data: [ 1, 3, 0, 2, 1, 3, 2, 0, 2, 1, 3, 0, 2, 1, 4, 1, 2, 4, 7, 2, 3, 4, 4, 3, 8, 0, 3, 5, 7, @@ -69,7 +69,7 @@ const AppointmentsChart: React.FC = () => { tension: 0.4, }, { - label: 'Last days', + label: 'NESA', data: [ 2, 3, 6, 4, 3, 4, 2, 1, 2, 6, 2, 2, 3, 2, 3, 5, 7, 2, 1, 2, 4, 6, 6, 1, 2, 3, 4, 5, 6.5, @@ -110,4 +110,4 @@ const AppointmentsChart: React.FC = () => { ); }; -export default AppointmentsChart; +export default usersChart; diff --git a/src/components/AdminDashboardTable.tsx b/src/components/AdminDashboardTable.tsx new file mode 100644 index 00000000..e04847f7 --- /dev/null +++ b/src/components/AdminDashboardTable.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import { FaEye } from 'react-icons/fa'; + +const DashboardTableDesign = () => { + const dummyData = [ + { team: 'Nova', logins: '2.4k', users: 45 }, + { team: 'Fighters', logins: '1.8k', users: 32 }, + { team: 'Bitcrafters', logins: '1.2k', users: 28}, + { team: 'Team1', logins: '3.1k', users: 52 }, + { team: 'Team2', logins: '0.9k', users: 19 }, + ]; + + return ( +
+
+

Team Analytics

+
+ +
+
+ +
+
+ + + + + + + + + + + {dummyData.map((row, index) => ( + + + + + + + ))} + +
+
+ Team Name +
+
+
+ Logins +
+
+
+ Users +
+
+
+ Actions +
+
+
+
+ {row.team} +
+
+
{row.logins}
+
+
+ {row.users} +
+
+ +
+
+ +
+
+ Showing 5 of 12 teams +
+
+ + +
+
+
+
+ ); +}; + +export default DashboardTableDesign; \ No newline at end of file diff --git a/src/pages/AdminDashboard.tsx b/src/pages/AdminDashboard.tsx index 9b8c2392..216ac3c1 100644 --- a/src/pages/AdminDashboard.tsx +++ b/src/pages/AdminDashboard.tsx @@ -3,16 +3,19 @@ import { t } from 'i18next'; import { useTranslation } from 'react-i18next'; import { useMutation } from '@apollo/client'; import { toast } from 'react-toastify'; +import PieChart from '../Chart/PieChart'; import BarChart from '../Chart/BarChart'; -import AppointmentsChart from '../Chart/AppointmentsChart'; +import UsersChart from '../Chart/usersChart'; // eslint-disable-next-line import/no-useless-path-segments import useDocumentTitle from '../hook/useDocumentTitle'; import Comingsoon from './Comingsoon'; import Button from '../components/Buttons'; import { UserContext } from '../hook/useAuth'; import { INVITE_USER_MUTATION } from '../Mutations/manageStudentMutations'; +import { FaEye } from 'react-icons/fa'; +import DashboardTableDesign from '../components/AdminDashboardTable'; -function SupAdDashboard() { +function AdminDashboard() { const { user } = useContext(UserContext); const { t }: any = useTranslation(); @@ -25,7 +28,6 @@ function SupAdDashboard() { const inviteModel = () => { const newState = !inviteTraineeModel; setInviteTraineeModel(newState); - // this is true }; const [inviteUser] = useMutation(INVITE_USER_MUTATION, { @@ -125,11 +127,14 @@ function SupAdDashboard() {
+
+ +
Users
- +
@@ -140,8 +145,15 @@ function SupAdDashboard() {
+
+ +
); } -export default SupAdDashboard; +export default AdminDashboard; + + + + From f99dac5cc9d805fb034cde94ab03e42bbd90e469 Mon Sep 17 00:00:00 2001 From: RWEMAREMY Date: Thu, 14 Nov 2024 09:10:59 +0200 Subject: [PATCH 2/3] new piechart and stats updated --- src/Chart/BarChart.tsx | 6 +- src/Chart/PieChart.tsx | 96 +++++++++ .../{AppointmentsChart.tsx => UsersChart.tsx} | 8 +- src/components/AdminDashboardTable.tsx | 195 ++++++++++++++++++ src/components/AdminTeamDetails.tsx | 156 ++++++++++++++ src/pages/AdminDashboard.tsx | 22 +- 6 files changed, 471 insertions(+), 12 deletions(-) create mode 100644 src/Chart/PieChart.tsx rename src/Chart/{AppointmentsChart.tsx => UsersChart.tsx} (92%) create mode 100644 src/components/AdminDashboardTable.tsx create mode 100644 src/components/AdminTeamDetails.tsx diff --git a/src/Chart/BarChart.tsx b/src/Chart/BarChart.tsx index b7a81e61..895a544a 100644 --- a/src/Chart/BarChart.tsx +++ b/src/Chart/BarChart.tsx @@ -40,14 +40,14 @@ const BarChart: React.FC = () => { ], datasets: [ { - label: 'Last 8 days', + label: 'Nova', data: [12, 19, 3, 5, 2, 3, 12, 14, 5, 7, 9, 11], backgroundColor: '#5A6ACF', borderRadius: 0, barThickness: 8, }, { - label: 'Last Week', + label: 'Fighters', data: [10, 15, 5, 8, 6, 9, 13, 9, 6, 8, 7, 10], backgroundColor: '#D1D5DB', borderRadius: 0, @@ -63,7 +63,7 @@ const BarChart: React.FC = () => { legend: { position: 'bottom' as const, labels: { - color: '#121212', + color: '#D1D5DB', }, }, tooltip: { diff --git a/src/Chart/PieChart.tsx b/src/Chart/PieChart.tsx new file mode 100644 index 00000000..2ad039f2 --- /dev/null +++ b/src/Chart/PieChart.tsx @@ -0,0 +1,96 @@ +import React from 'react'; +import { Doughnut } from 'react-chartjs-2'; +import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js'; + +ChartJS.register(ArcElement, Tooltip, Legend); + +// eslint-disable-next-line react/function-component-definition +const PieChart: React.FC = () => { + const data = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [30, 100], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + const data2 = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [30, 70], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + const data3 = { + labels: ['new pie chart'], + datasets: [ + { + label: 'rates', + data: [60, 60], + backgroundColor: ['#4F46E5', '#A5B4FC'], + hoverOffset: 4, + }, + ], + }; + + const options = { + responsive: true, + cutout: '70%', + plugins: { + tooltip: { + callbacks: { + // eslint-disable-next-line func-names, object-shorthand + label: function (tooltipItem: any) { + return `${tooltipItem.label}: ${tooltipItem.raw}%`; + }, + }, + }, + legend: { + display: false, + }, + }, + }; + + return ( +
+
+
+ +
+
+

10

+
+
+

New Invitations & Registration

+
+
+ +
+
+

20

+
+
+

Upcoming Events

+
+
+ +
+
+

50

+
+
+

Active& Progressive Tickets

+
+
+
+ ); +}; + +export default PieChart; diff --git a/src/Chart/AppointmentsChart.tsx b/src/Chart/UsersChart.tsx similarity index 92% rename from src/Chart/AppointmentsChart.tsx rename to src/Chart/UsersChart.tsx index 8713df2f..ee3ab2aa 100644 --- a/src/Chart/AppointmentsChart.tsx +++ b/src/Chart/UsersChart.tsx @@ -22,7 +22,7 @@ ChartJS.register( ); // eslint-disable-next-line react/function-component-definition -const AppointmentsChart: React.FC = () => { +const usersChart: React.FC = () => { const data = { labels: [ '01', @@ -59,7 +59,7 @@ const AppointmentsChart: React.FC = () => { ], datasets: [ { - label: 'Last days', + label: 'Andela', data: [ 1, 3, 0, 2, 1, 3, 2, 0, 2, 1, 3, 0, 2, 1, 4, 1, 2, 4, 7, 2, 3, 4, 4, 3, 8, 0, 3, 5, 7, @@ -69,7 +69,7 @@ const AppointmentsChart: React.FC = () => { tension: 0.4, }, { - label: 'Last days', + label: 'NESA', data: [ 2, 3, 6, 4, 3, 4, 2, 1, 2, 6, 2, 2, 3, 2, 3, 5, 7, 2, 1, 2, 4, 6, 6, 1, 2, 3, 4, 5, 6.5, @@ -110,4 +110,4 @@ const AppointmentsChart: React.FC = () => { ); }; -export default AppointmentsChart; +export default usersChart; diff --git a/src/components/AdminDashboardTable.tsx b/src/components/AdminDashboardTable.tsx new file mode 100644 index 00000000..53b0aa8f --- /dev/null +++ b/src/components/AdminDashboardTable.tsx @@ -0,0 +1,195 @@ +import React, { useState } from 'react'; +import { FaEye } from 'react-icons/fa'; +import TeamDetailsModal from './AdminTeamDetails'; + +interface TeamData { + ttlName?: string; + team?: string; + organization?: string; + program?: string; + phase?: string; + cohort?: string; + activeUsers?: number; + droppedUsers?: number; + rating?: number; + logins: string; + users: number; +} + +const DashboardTableDesign: React.FC = () => { + const [selectedTeam, setSelectedTeam] = useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + + const dummyData: TeamData[] = [ + { + team: 'Nova', + logins: '2.4k', + users: 45, + ttlName: 'Sostene', + organization: 'Tech Corp', + program: 'Web Development', + phase: 'Phase 2', + cohort: 'Cohort 3', + activeUsers: 42, + droppedUsers: 3, + rating: 4.8 + }, + { + team: 'Fighters', + logins: '1.8k', + users: 32, + ttlName: 'John Doe', + organization: 'Tech Corp', + program: 'Mobile Development', + phase: 'Phase 1', + cohort: 'Cohort 2', + activeUsers: 30, + droppedUsers: 2, + rating: 4.5 + }, + { + team: 'Bitcrafters', + logins: '1.2k', + users: 28, + ttlName: 'Jane Smith', + organization: 'Tech Corp', + program: 'Data Science', + phase: 'Phase 3', + cohort: 'Cohort 1', + activeUsers: 25, + droppedUsers: 3, + rating: 4.6 + }, + { + team: 'Team1', + logins: '3.1k', + users: 52, + ttlName: 'Alice Johnson', + organization: 'Tech Corp', + program: 'Cloud Computing', + phase: 'Phase 2', + cohort: 'Cohort 4', + activeUsers: 48, + droppedUsers: 4, + rating: 4.7 + }, + { + team: 'Team2', + logins: '0.9k', + users: 19, + ttlName: 'Bob Wilson', + organization: 'Tech Corp', + program: 'DevOps', + phase: 'Phase 1', + cohort: 'Cohort 2', + activeUsers: 17, + droppedUsers: 2, + rating: 4.4 + } + ]; + + const handleViewClick = (team: TeamData) => { + setSelectedTeam(team); + setIsModalOpen(true); + }; + + return ( +
+
+

Team Analytics

+
+ +
+
+ +
+
+ + + + + + + + + + + {dummyData.map((row, index) => ( + + + + + + + ))} + +
+
+ Team Name +
+
+
+ Logins +
+
+
+ Users +
+
+
+ Actions +
+
+
+
+ {row.team} +
+
+
{row.logins}
+
+
+ {row.users} +
+
+ +
+
+ +
+
+ Showing 5 of 12 teams +
+
+ + +
+
+
+ + setIsModalOpen(false)} + teamData={selectedTeam} + /> +
+ ); +}; + +export default DashboardTableDesign; \ No newline at end of file diff --git a/src/components/AdminTeamDetails.tsx b/src/components/AdminTeamDetails.tsx new file mode 100644 index 00000000..dfe5588c --- /dev/null +++ b/src/components/AdminTeamDetails.tsx @@ -0,0 +1,156 @@ +import React, { useState } from 'react'; +import { FaAngleDown } from "react-icons/fa6"; + +interface TeamData { + ttlName?: string; + team?: string; + organization?: string; + program?: string; + phase?: string; + cohort?: string; + activeUsers?: number; + droppedUsers?: number; + rating?: number; +} + +interface TeamDetailsModalProps { + isOpen: boolean; + onClose: () => void; + teamData: TeamData | null; +} + +const TeamDetailsModal: React.FC = ({ isOpen, onClose, teamData }) => { + if (!isOpen) return null; + + const [showAttendanceSummary, setShowAttendanceSummary] = useState(false); + + const handleAttendanceSummaryEnter = () => { + setShowAttendanceSummary(true); + }; + + const handleAttendanceSummaryLeave = () => { + setShowAttendanceSummary(false); + }; + + return ( +
+
+
+
+

+ Overview +

+

+ Logins +

+
+ +
+ +
+
+
+ +

{teamData?.ttlName || 'Sostene'}

+
+ +
+ +

{teamData?.team}

+
+ +
+ +

{teamData?.organization || 'Organization Name'}

+
+ +
+ +

{teamData?.program || 'Program Name'}

+
+ +
+ +

{teamData?.phase || 'Current Phase'}

+
+ +
+ +

{teamData?.cohort || 'Current Cohort'}

+
+
+ +
+
+ +
+
+

Active Members

+

+ {teamData?.activeUsers || '0'} +

+
+
+

Dropped Members

+

+ {teamData?.droppedUsers || '0'} +

+
+
+
+ +
+ + {showAttendanceSummary && ( +
+

Quality: 1.5

+

Quantity: 2.3

+

Professionalism: 3.1

+
+ )} +
+ +
+ +
+

+ {teamData?.rating || '4.5'} / 5.0 +

+
+
+
+
+
+
+ ); +}; + +export default TeamDetailsModal; \ No newline at end of file diff --git a/src/pages/AdminDashboard.tsx b/src/pages/AdminDashboard.tsx index 9b8c2392..216ac3c1 100644 --- a/src/pages/AdminDashboard.tsx +++ b/src/pages/AdminDashboard.tsx @@ -3,16 +3,19 @@ import { t } from 'i18next'; import { useTranslation } from 'react-i18next'; import { useMutation } from '@apollo/client'; import { toast } from 'react-toastify'; +import PieChart from '../Chart/PieChart'; import BarChart from '../Chart/BarChart'; -import AppointmentsChart from '../Chart/AppointmentsChart'; +import UsersChart from '../Chart/usersChart'; // eslint-disable-next-line import/no-useless-path-segments import useDocumentTitle from '../hook/useDocumentTitle'; import Comingsoon from './Comingsoon'; import Button from '../components/Buttons'; import { UserContext } from '../hook/useAuth'; import { INVITE_USER_MUTATION } from '../Mutations/manageStudentMutations'; +import { FaEye } from 'react-icons/fa'; +import DashboardTableDesign from '../components/AdminDashboardTable'; -function SupAdDashboard() { +function AdminDashboard() { const { user } = useContext(UserContext); const { t }: any = useTranslation(); @@ -25,7 +28,6 @@ function SupAdDashboard() { const inviteModel = () => { const newState = !inviteTraineeModel; setInviteTraineeModel(newState); - // this is true }; const [inviteUser] = useMutation(INVITE_USER_MUTATION, { @@ -125,11 +127,14 @@ function SupAdDashboard() {
+
+ +
Users
- +
@@ -140,8 +145,15 @@ function SupAdDashboard() {
+
+ +
); } -export default SupAdDashboard; +export default AdminDashboard; + + + + From 6997c811af80a615d801e00390dac53f4d82932b Mon Sep 17 00:00:00 2001 From: Tuyisenge2 Date: Thu, 14 Nov 2024 16:19:39 +0200 Subject: [PATCH 3/3] ft-admin-dashboard-can-vieww-table-teams --- src/components/AdminDashboardTable.tsx | 147 +++++++++---------------- src/components/CoordinatorCard.tsx | 25 +++-- src/pages/AdminDashboard.tsx | 6 +- 3 files changed, 72 insertions(+), 106 deletions(-) diff --git a/src/components/AdminDashboardTable.tsx b/src/components/AdminDashboardTable.tsx index e04847f7..33644a6d 100644 --- a/src/components/AdminDashboardTable.tsx +++ b/src/components/AdminDashboardTable.tsx @@ -1,103 +1,62 @@ +import { useQuery } from '@apollo/client'; import React from 'react'; import { FaEye } from 'react-icons/fa'; +import { useTranslation } from 'react-i18next'; +import DataTable from './DataTable'; +import { GET_TEAMS_CARDS } from './CoordinatorCard'; -const DashboardTableDesign = () => { - const dummyData = [ - { team: 'Nova', logins: '2.4k', users: 45 }, - { team: 'Fighters', logins: '1.8k', users: 32 }, - { team: 'Bitcrafters', logins: '1.2k', users: 28}, - { team: 'Team1', logins: '3.1k', users: 52 }, - { team: 'Team2', logins: '0.9k', users: 19 }, - ]; +function DashboardTableDesign() { + const { t } = useTranslation(); + const { + data: TeamsData, + loading, + error, + refetch, + } = useQuery(GET_TEAMS_CARDS, { + variables: { + orgToken: localStorage.getItem('orgToken'), + }, + fetchPolicy: 'network-only', + }); + const TableData = TeamsData?.getAllTeams.map((items: any) => ({ + teams: items.name, + users: items.members.length, + logins: items.members.reduce( + (total: number, i: any) => total + i.profile.activity.length, + 0, + ), + })); + const organizationColumns = [ + { Header: t('Teams'), accessor: 'teams' }, + { Header: t('Logins'), accessor: 'logins' }, + { Header: t('Users'), accessor: 'users' }, + { + Header: t('action'), + accessor: '', + Cell: () => ( + <> + + + ), + }, + ]; return (
-
-

Team Analytics

-
- -
-
- -
-
- - - - - - - - - - - {dummyData.map((row, index) => ( - - - - - - - ))} - -
-
- Team Name -
-
-
- Logins -
-
-
- Users -
-
-
- Actions -
-
-
-
- {row.team} -
-
-
{row.logins}
-
-
- {row.users} -
-
- -
-
- -
-
- Showing 5 of 12 teams -
-
- - -
-
-
+
); -}; +} -export default DashboardTableDesign; \ No newline at end of file +export default DashboardTableDesign; diff --git a/src/components/CoordinatorCard.tsx b/src/components/CoordinatorCard.tsx index 4b856735..19258afc 100644 --- a/src/components/CoordinatorCard.tsx +++ b/src/components/CoordinatorCard.tsx @@ -31,8 +31,19 @@ export const GET_TEAMS_CARDS = gql` name lastName firstName + address + activity { + date + city + IPv4 + state + latitude + longitude + postal + failed + } } - status{ + status { status } } @@ -147,12 +158,12 @@ function ManagerCard() { rating = 'text-red-700'; } - const activeMembers = team.members.filter( - (member: any) => member.status?.status === 'active' - ).length; - const droppedMembers = team.members.filter( - (member: any) => member.status?.status === 'drop' - ).length; + const activeMembers = team.members.filter( + (member: any) => member.status?.status === 'active', + ).length; + const droppedMembers = team.members.filter( + (member: any) => member.status?.status === 'drop', + ).length; return { stylebg, diff --git a/src/pages/AdminDashboard.tsx b/src/pages/AdminDashboard.tsx index 216ac3c1..1323d7a9 100644 --- a/src/pages/AdminDashboard.tsx +++ b/src/pages/AdminDashboard.tsx @@ -3,6 +3,7 @@ import { t } from 'i18next'; import { useTranslation } from 'react-i18next'; import { useMutation } from '@apollo/client'; import { toast } from 'react-toastify'; +import { FaEye } from 'react-icons/fa'; import PieChart from '../Chart/PieChart'; import BarChart from '../Chart/BarChart'; import UsersChart from '../Chart/usersChart'; @@ -12,7 +13,6 @@ import Comingsoon from './Comingsoon'; import Button from '../components/Buttons'; import { UserContext } from '../hook/useAuth'; import { INVITE_USER_MUTATION } from '../Mutations/manageStudentMutations'; -import { FaEye } from 'react-icons/fa'; import DashboardTableDesign from '../components/AdminDashboardTable'; function AdminDashboard() { @@ -153,7 +153,3 @@ function AdminDashboard() { } export default AdminDashboard; - - - -