mirror of https://github.com/shuang854/Turtle
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import React, { useState } from 'react';
|
|
import { IonPopover, IonFabButton, IonIcon, IonList, IonListHeader, IonItem, IonLabel } from '@ionic/react';
|
|
import { peopleOutline } from 'ionicons/icons';
|
|
import './OnlineList.css';
|
|
|
|
type OnlineListProps = {
|
|
userList: string[];
|
|
};
|
|
|
|
const OnlineList: React.FC<OnlineListProps> = ({ userList }) => {
|
|
const [showPopover, setShowPopover] = useState<{ open: boolean; event: Event | undefined }>({
|
|
open: false,
|
|
event: undefined,
|
|
});
|
|
|
|
return (
|
|
<>
|
|
<IonPopover
|
|
cssClass="online-popover"
|
|
isOpen={showPopover.open}
|
|
event={showPopover.event}
|
|
showBackdrop={false}
|
|
onDidDismiss={(e) => setShowPopover({ open: false, event: undefined })}
|
|
>
|
|
<IonList class="popover-list">
|
|
<IonListHeader class="list-header">Online</IonListHeader>
|
|
{userList.map((user) => {
|
|
return (
|
|
<IonItem key={user} class="online-item" lines="none">
|
|
<IonLabel class="online-label">{user}</IonLabel>
|
|
</IonItem>
|
|
);
|
|
})}
|
|
</IonList>
|
|
</IonPopover>
|
|
<IonFabButton
|
|
slot="end"
|
|
size="small"
|
|
class="online-button"
|
|
onClick={(e) => setShowPopover({ open: true, event: e.nativeEvent })}
|
|
>
|
|
<IonIcon icon={peopleOutline}></IonIcon>
|
|
</IonFabButton>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default OnlineList;
|