import React, { useMemo } from 'react'; import classNames from 'classnames'; import dayjs, { type Dayjs } from 'dayjs'; import { User } from '@carbon/react/icons'; import { navigate, useLayoutType } from '@openmrs/esm-framework'; import { spaHomePage } from '../../constants'; import { isSameMonth } from '../../helpers'; import { type DailyAppointmentsCountByService } from '../../types'; import { useSelectedDateContext } from '../../hooks/selected-date-context'; import MonthlyWorkloadViewExpanded from './monthly-workload-view-expanded.component'; import styles from './monthly-view-workload.scss'; export interface MonthlyWorkloadViewProps { events: Array; dateTime: Dayjs; showAllServices?: boolean; } const MonthlyWorkloadView: React.FC = ({ dateTime, events, showAllServices = false }) => { const layout = useLayoutType(); const { selectedDate } = useSelectedDateContext(); const currentData = useMemo( () => events?.find( (event) => dayjs(event.appointmentDate)?.format('YYYY-MM-DD') === dayjs(dateTime)?.format('YYYY-MM-DD'), ), [dateTime, events], ); const visibleServices = useMemo(() => { if (currentData?.services) { if (showAllServices) { return currentData.services; } return currentData.services.slice(0, layout === 'small-desktop' ? 2 : 4); } return []; }, [currentData, showAllServices, layout]); const hasHiddenServices = useMemo(() => { if (currentData?.services) { if (showAllServices) { return false; } return layout === 'small-desktop' ? currentData.services.length > 2 : currentData.services.length > 4; } return false; }, [currentData?.services, layout, showAllServices]); const navigateToAppointmentsByDate = (serviceUuid: string) => { const dateParam = dayjs(dateTime).format('YYYY-MM-DD'); const url = serviceUuid ? `${spaHomePage}/appointments/${dateParam}/${serviceUuid}` : `${spaHomePage}/appointments/${dateParam}`; navigate({ to: url }); }; return (
navigateToAppointmentsByDate('')} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { navigateToAppointmentsByDate(''); } }} className={classNames( styles[isSameMonth(dateTime, dayjs(selectedDate)) ? 'monthly-cell' : 'monthly-cell-disabled'], showAllServices ? {} : { [styles.smallDesktop]: layout === 'small-desktop', [styles.largeDesktop]: layout !== 'small-desktop', }, )} aria-label={`View appointments for ${dateTime.format('YYYY-MM-DD')}`} > {isSameMonth(dateTime, dayjs(selectedDate)) && (
{currentData?.services ? (
{currentData?.services.reduce((sum, { count = 0 }) => sum + count, 0)}
) : (
)} {dateTime.format('D')} {currentData?.services && (
{visibleServices.map(({ serviceName, serviceUuid, count }, i) => (
{ e.stopPropagation(); navigateToAppointmentsByDate(serviceUuid); }} className={styles.serviceArea} > {serviceName} {count}
))} {hasHiddenServices ? ( ) : ( '' )}
)}
)}
); }; export default MonthlyWorkloadView;