doctor-mail/apps/web/src/app/main/letter/write/page.tsx

66 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-01-22 19:24:52 +08:00
import { useState, useMemo } from 'react';
2025-01-24 15:05:03 +08:00
import { motion, AnimatePresence } from 'framer-motion';
2025-01-22 19:24:52 +08:00
import { Leader } from './types';
import { leaders } from './mock';
2025-01-22 23:19:58 +08:00
import Header from './header';
import Filter from './filter';
2025-01-24 15:05:03 +08:00
import LeaderCard from './LeaderCard';
2025-01-24 17:37:51 +08:00
import { Spin, Empty } from 'antd';
import { api } from 'packages/client/dist';
2025-01-22 19:24:52 +08:00
export default function WriteLetterPage() {
2025-01-24 17:37:51 +08:00
2025-01-22 19:24:52 +08:00
const [selectedLeader, setSelectedLeader] = useState<Leader | null>(null);
const [searchQuery, setSearchQuery] = useState('');
const [selectedDivision, setSelectedDivision] = useState<string>('all');
const filteredLeaders = useMemo(() => {
return leaders.filter(leader => {
const matchesSearch = leader.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
leader.rank.toLowerCase().includes(searchQuery.toLowerCase());
const matchesDivision = selectedDivision === 'all' || leader.division === selectedDivision;
return matchesSearch && matchesDivision;
});
}, [searchQuery, selectedDivision]);
return (
2025-01-24 15:05:03 +08:00
<div className="min-h-screen bg-gradient-to-b from-slate-50 to-slate-100">
<Header />
<div className="container mx-auto px-4 py-8">
<Filter />
2025-01-22 19:24:52 +08:00
2025-01-24 15:05:03 +08:00
<AnimatePresence>
{filteredLeaders.length > 0 ? (
<motion.div
className="grid grid-cols-1 gap-6"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
>
{filteredLeaders.map((leader) => (
<LeaderCard
key={leader.id}
leader={leader}
isSelected={selectedLeader?.id === leader.id}
onSelect={() => setSelectedLeader(leader)}
/>
))}
</motion.div>
) : (
2025-01-22 19:24:52 +08:00
<motion.div
2025-01-24 15:05:03 +08:00
className="text-center py-12"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
2025-01-22 19:24:52 +08:00
>
2025-01-24 17:37:51 +08:00
<Empty></Empty>
2025-01-22 19:24:52 +08:00
</motion.div>
2025-01-24 15:05:03 +08:00
)}
</AnimatePresence>
2025-01-22 19:24:52 +08:00
</div>
</div>
);
}