import { IonItemDivider, IonItemGroup, IonLabel, IonList, IonListHeader, IonAlert, AlertButton, } from '@ionic/react'; import React, { useState, useCallback, useRef, useEffect } from 'react'; import { Schedule, Session } from '../models/Schedule'; import SessionListItem from './SessionListItem'; import { connect } from '../data/connect'; import { addFavorite, removeFavorite } from '../data/sessions/sessions.actions'; interface OwnProps { schedule: Schedule; listType: 'all' | 'favorites'; hide: boolean; } interface StateProps { favoriteSessions: number[]; } interface DispatchProps { addFavorite: typeof addFavorite; removeFavorite: typeof removeFavorite; } interface SessionListProps extends OwnProps, StateProps, DispatchProps {} const SessionList: React.FC = ({ addFavorite, removeFavorite, favoriteSessions, hide, schedule, listType, }) => { const scheduleListRef = useRef(null); const [showAlert, setShowAlert] = useState(false); const [alertHeader, setAlertHeader] = useState(''); const [alertMessage, setAlertMessage] = useState(''); const [alertButtons, setAlertButtons] = useState<(AlertButton | string)[]>( [] ); const handleShowAlert = useCallback( (header: string, message: string, buttons: AlertButton[]) => { setAlertHeader(header); setAlertMessage(message); setAlertButtons(buttons); setShowAlert(true); }, [] ); useEffect(() => { if (scheduleListRef.current) { scheduleListRef.current.closeSlidingItems(); } }, [hide]); if (schedule.groups.length === 0 && !hide) { return ( No Sessions Found ); } return ( <> {schedule.groups.map((group, index: number) => ( {group.time} {group.sessions.map((session: Session, sessionIndex: number) => ( -1} onAddFavorite={addFavorite} onRemoveFavorite={removeFavorite} key={`group-${index}-${sessionIndex}`} session={session} listType={listType} /> ))} ))} setShowAlert(false)} > ); }; export default connect({ mapStateToProps: (state) => ({ favoriteSessions: state.data.favorites, }), mapDispatchToProps: { addFavorite, removeFavorite, }, component: SessionList, });