2025-08-21 10:51:23 +08:00
|
|
|
import React from "react";
|
|
|
|
|
import { List, Avatar, Badge } from "antd";
|
2025-08-22 14:21:35 +08:00
|
|
|
import { ContactData } from "./data";
|
2025-08-21 10:51:23 +08:00
|
|
|
import styles from "./ContactListSimple.module.scss";
|
|
|
|
|
|
|
|
|
|
interface ContactListSimpleProps {
|
|
|
|
|
contacts: ContactData[];
|
|
|
|
|
onContactClick: (contact: ContactData) => void;
|
2025-08-22 14:21:35 +08:00
|
|
|
selectedContactId?: number;
|
2025-08-21 10:51:23 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ContactListSimple: React.FC<ContactListSimpleProps> = ({
|
|
|
|
|
contacts,
|
|
|
|
|
onContactClick,
|
|
|
|
|
selectedContactId,
|
|
|
|
|
}) => {
|
|
|
|
|
return (
|
|
|
|
|
<div className={styles.contactListSimple}>
|
|
|
|
|
<div className={styles.header}>全部好友</div>
|
|
|
|
|
<List
|
|
|
|
|
className={styles.list}
|
|
|
|
|
dataSource={contacts}
|
|
|
|
|
renderItem={contact => (
|
|
|
|
|
<List.Item
|
|
|
|
|
key={contact.id}
|
|
|
|
|
onClick={() => onContactClick(contact)}
|
|
|
|
|
className={`${styles.contactItem} ${contact.id === selectedContactId ? styles.selected : ""}`}
|
|
|
|
|
>
|
|
|
|
|
<div className={styles.avatarContainer}>
|
|
|
|
|
<Badge dot={contact.online} color="green" offset={[-5, 5]}>
|
|
|
|
|
<Avatar
|
|
|
|
|
src={contact.avatar}
|
|
|
|
|
icon={
|
2025-08-22 14:21:35 +08:00
|
|
|
!contact.avatar && <span>{contact.nickname.charAt(0)}</span>
|
2025-08-21 10:51:23 +08:00
|
|
|
}
|
|
|
|
|
className={styles.avatar}
|
|
|
|
|
/>
|
|
|
|
|
</Badge>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.contactInfo}>
|
2025-08-22 14:21:35 +08:00
|
|
|
<div className={styles.name}>{contact.nickname}</div>
|
2025-08-21 10:51:23 +08:00
|
|
|
</div>
|
|
|
|
|
</List.Item>
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default ContactListSimple;
|