website refactor
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { TeamsTemplate } from '@/templates/TeamsTemplate';
|
||||
import type { TeamsViewData } from '@/lib/view-data/TeamsViewData';
|
||||
import { routes } from '@/lib/routing/RouteConfig';
|
||||
|
||||
interface TeamsPageClientProps {
|
||||
viewData: TeamsViewData;
|
||||
}
|
||||
|
||||
export function TeamsPageClient({ viewData }: TeamsPageClientProps) {
|
||||
const router = useRouter();
|
||||
|
||||
const handleTeamClick = (teamId: string) => {
|
||||
router.push(`/teams/${teamId}`);
|
||||
};
|
||||
|
||||
const handleViewFullLeaderboard = () => {
|
||||
router.push(routes.team.leaderboard);
|
||||
};
|
||||
|
||||
const handleCreateTeam = () => {
|
||||
router.push(routes.team.detail('create'));
|
||||
};
|
||||
|
||||
return (
|
||||
<TeamsTemplate
|
||||
viewData={viewData}
|
||||
onTeamClick={handleTeamClick}
|
||||
onViewFullLeaderboard={handleViewFullLeaderboard}
|
||||
onCreateTeam={handleCreateTeam}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import type { TeamDetailViewData } from '@/lib/view-data/TeamDetailViewData';
|
||||
import { TeamDetailTemplate } from '@/templates/TeamDetailTemplate';
|
||||
|
||||
type Tab = 'overview' | 'roster' | 'standings' | 'admin';
|
||||
|
||||
interface TeamDetailPageClientProps {
|
||||
viewData: TeamDetailViewData;
|
||||
}
|
||||
|
||||
export function TeamDetailPageClient({ viewData }: TeamDetailPageClientProps) {
|
||||
const router = useRouter();
|
||||
|
||||
// UI state only (no business logic)
|
||||
const [activeTab, setActiveTab] = useState<Tab>('overview');
|
||||
const [loading] = useState(false);
|
||||
|
||||
// Event handlers
|
||||
const handleTabChange = (tab: Tab) => {
|
||||
setActiveTab(tab);
|
||||
};
|
||||
|
||||
const handleUpdate = () => {
|
||||
// Trigger a refresh by reloading the page
|
||||
router.refresh();
|
||||
};
|
||||
|
||||
const handleRemoveMember = (driverId: string) => {
|
||||
// This would call an API to remove the member
|
||||
// For now, just log
|
||||
console.log('Remove member:', driverId);
|
||||
// In a real implementation, you'd have a mutation hook here
|
||||
alert('Remove member functionality would be implemented here');
|
||||
};
|
||||
|
||||
const handleGoBack = () => {
|
||||
router.back();
|
||||
};
|
||||
|
||||
return (
|
||||
<TeamDetailTemplate
|
||||
viewData={viewData}
|
||||
activeTab={activeTab}
|
||||
loading={loading}
|
||||
onTabChange={handleTabChange}
|
||||
onUpdate={handleUpdate}
|
||||
onRemoveMember={handleRemoveMember}
|
||||
onGoBack={handleGoBack}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { notFound } from 'next/navigation';
|
||||
import { TeamDetailPageQuery } from '@/lib/page-queries/TeamDetailPageQuery';
|
||||
import { TeamDetailPageClient } from './TeamDetailPageClient';
|
||||
import { TeamDetailPageClient } from '@/client-wrapper/TeamDetailPageClient';
|
||||
|
||||
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
||||
const { id } = await params;
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { TeamLeaderboardTemplate } from '@/templates/TeamLeaderboardTemplate';
|
||||
import { useState } from 'react';
|
||||
import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel';
|
||||
|
||||
type SkillLevel = 'pro' | 'advanced' | 'intermediate' | 'beginner';
|
||||
type SortBy = 'rating' | 'wins' | 'winRate' | 'races';
|
||||
|
||||
export function TeamLeaderboardPageWrapper({ data }: { data: TeamSummaryViewModel[] | null }) {
|
||||
const router = useRouter();
|
||||
|
||||
// Client-side UI state only (no business logic)
|
||||
const [searchQuery, setSearchQuery] = useState('');
|
||||
const [filterLevel, setFilterLevel] = useState<SkillLevel | 'all'>('all');
|
||||
const [sortBy, setSortBy] = useState<SortBy>('rating');
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const handleTeamClick = (teamId: string) => {
|
||||
router.push(`/teams/${teamId}`);
|
||||
};
|
||||
|
||||
const handleBackToTeams = () => {
|
||||
router.push('/teams');
|
||||
};
|
||||
|
||||
const viewData = {
|
||||
teams: data,
|
||||
searchQuery,
|
||||
filterLevel,
|
||||
sortBy,
|
||||
filteredAndSortedTeams: data,
|
||||
};
|
||||
|
||||
return (
|
||||
<TeamLeaderboardTemplate
|
||||
viewData={viewData}
|
||||
onSearchChange={setSearchQuery}
|
||||
filterLevelChange={setFilterLevel}
|
||||
onSortChange={setSortBy}
|
||||
onTeamClick={handleTeamClick}
|
||||
onBackToTeams={handleBackToTeams}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { notFound } from 'next/navigation';
|
||||
import { TeamLeaderboardPageQuery } from '@/lib/page-queries/TeamLeaderboardPageQuery';
|
||||
import { TeamLeaderboardPageWrapper } from './TeamLeaderboardPageWrapper';
|
||||
import { TeamLeaderboardPageWrapper } from '@/client-wrapper/TeamLeaderboardPageWrapper';
|
||||
|
||||
export default async function TeamLeaderboardPage() {
|
||||
const query = new TeamLeaderboardPageQuery();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { notFound } from 'next/navigation';
|
||||
import { TeamsPageQuery } from '@/lib/page-queries/TeamsPageQuery';
|
||||
import { TeamsPageClient } from './TeamsPageClient';
|
||||
import { TeamsPageClient } from '@/client-wrapper/TeamsPageClient';
|
||||
|
||||
export default async function Page() {
|
||||
const query = new TeamsPageQuery();
|
||||
|
||||
Reference in New Issue
Block a user