import React, { useMemo, useState } from 'react'; import getServerSchedules, { Schedule } from '@/api/server/schedules/getServerSchedules'; import { ServerContext } from '@/state/server'; import Spinner from '@/components/elements/Spinner'; import { RouteComponentProps } from 'react-router-dom'; import FlashMessageRender from '@/components/FlashMessageRender'; import ScheduleRow from '@/components/server/schedules/ScheduleRow'; import { httpErrorToHuman } from '@/api/http'; import { Actions, useStoreActions } from 'easy-peasy'; import { ApplicationStore } from '@/state'; import EditScheduleModal from '@/components/server/schedules/EditScheduleModal'; interface Params { schedule?: string; } export default ({ history, match }: RouteComponentProps) => { const { id, uuid } = ServerContext.useStoreState(state => state.server.data!); const [ active, setActive ] = useState(0); const [ schedules, setSchedules ] = useState(null); const { clearFlashes, addError } = useStoreActions((actions: Actions) => actions.flashes); useMemo(() => { clearFlashes('schedules'); getServerSchedules(uuid) .then(schedules => setSchedules(schedules)) .catch(error => { addError({ message: httpErrorToHuman(error), key: 'schedules' }); console.error(error); }); }, [ setSchedules ]); const matched = useMemo(() => { return schedules?.find(schedule => schedule.id === active); }, [ active ]); return (
{!schedules ? : schedules.map(schedule => (
setActive(schedule.id)} className={'grey-row-box cursor-pointer'} >
)) } {matched && setActive(0)} /> }
); };