import { useCallback, useEffect, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import getServerSchedule from '@/api/server/schedules/getServerSchedule'; import Spinner from '@/components/elements/Spinner'; import FlashMessageRender from '@/components/FlashMessageRender'; import EditScheduleModal from '@/components/server/schedules/EditScheduleModal'; import NewTaskButton from '@/components/server/schedules/NewTaskButton'; import DeleteScheduleButton from '@/components/server/schedules/DeleteScheduleButton'; import Can from '@/components/elements/Can'; import useFlash from '@/plugins/useFlash'; import { ServerContext } from '@/state/server'; import PageContentBlock from '@/components/elements/PageContentBlock'; import tw from 'twin.macro'; import { Button } from '@/components/elements/button/index'; import ScheduleTaskRow from '@/components/server/schedules/ScheduleTaskRow'; import isEqual from 'react-fast-compare'; import { format } from 'date-fns'; import ScheduleCronRow from '@/components/server/schedules/ScheduleCronRow'; import RunScheduleButton from '@/components/server/schedules/RunScheduleButton'; const CronBox = ({ title, value }: { title: string; value: string }) => (

{title}

{value}

); const ActivePill = ({ active }: { active: boolean }) => ( {active ? 'Active' : 'Inactive'} ); export default () => { const { id: scheduleId } = useParams<'id'>(); const navigate = useNavigate(); const id = ServerContext.useStoreState(state => state.server.data!.id); const uuid = ServerContext.useStoreState(state => state.server.data!.uuid); const { clearFlashes, clearAndAddHttpError } = useFlash(); const [isLoading, setIsLoading] = useState(true); const [showEditModal, setShowEditModal] = useState(false); const schedule = ServerContext.useStoreState( st => st.schedules.data.find(s => s.id === Number(scheduleId)), isEqual, ); const appendSchedule = ServerContext.useStoreActions(actions => actions.schedules.appendSchedule); useEffect(() => { if (schedule?.id === Number(scheduleId)) { setIsLoading(false); return; } clearFlashes('schedules'); getServerSchedule(uuid, Number(scheduleId)) .then(schedule => appendSchedule(schedule)) .catch(error => { console.error(error); clearAndAddHttpError({ error, key: 'schedules' }); }) .then(() => setIsLoading(false)); }, [scheduleId]); const toggleEditModal = useCallback(() => { setShowEditModal(s => !s); }, []); return ( {!schedule || isLoading ? ( ) : ( <>

{schedule.name} {schedule.isProcessing ? ( Processing ) : ( )}

Last run at:  {schedule.lastRunAt ? ( format(schedule.lastRunAt, "MMM do 'at' h:mma") ) : ( n/a )} Next run at:  {schedule.nextRunAt ? ( format(schedule.nextRunAt, "MMM do 'at' h:mma") ) : ( n/a )}

Edit
{schedule.tasks.length > 0 ? schedule.tasks .sort((a, b) => a.sequenceId === b.sequenceId ? 0 : a.sequenceId > b.sequenceId ? 1 : -1, ) .map(task => ( )) : null}
navigate(`/server/${id}/schedules`)} /> {schedule.tasks.length > 0 && ( )}
)}
); };