From 1bf3165cbe2211b250748d25da1dfde504fef6d3 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sun, 22 Mar 2020 14:11:26 -0700 Subject: [PATCH] Use a dropdown menu when selecting a power action --- .../server/schedules/TaskDetailsModal.tsx | 98 +++++++++++-------- 1 file changed, 59 insertions(+), 39 deletions(-) diff --git a/resources/scripts/components/server/schedules/TaskDetailsModal.tsx b/resources/scripts/components/server/schedules/TaskDetailsModal.tsx index 216c6163e..4c245c4a0 100644 --- a/resources/scripts/components/server/schedules/TaskDetailsModal.tsx +++ b/resources/scripts/components/server/schedules/TaskDetailsModal.tsx @@ -1,14 +1,13 @@ import React, { useEffect } from 'react'; import Modal from '@/components/elements/Modal'; import { Task } from '@/api/server/schedules/getServerSchedules'; -import { Form, Formik, Field as FormikField, FormikHelpers } from 'formik'; +import { Field as FormikField, Form, Formik, FormikHelpers, useFormikContext } from 'formik'; import { ServerContext } from '@/state/server'; import { Actions, useStoreActions } from 'easy-peasy'; import { ApplicationStore } from '@/state'; import createOrUpdateScheduleTask from '@/api/server/schedules/createOrUpdateScheduleTask'; import { httpErrorToHuman } from '@/api/http'; import Field from '@/components/elements/Field'; -import FormikFieldWrapper from '@/components/elements/FormikFieldWrapper'; import FlashMessageRender from '@/components/FlashMessageRender'; import { number, object, string } from 'yup'; @@ -26,6 +25,61 @@ interface Values { timeOffset: string; } +const TaskDetailsForm = ({ isEditingTask }: { isEditingTask: boolean }) => { + const { values: { action }, setFieldValue, setFieldTouched } = useFormikContext(); + + useEffect(() => { + setFieldValue('payload', ''); + setFieldTouched('payload', false); + }, [action]); + + return ( +
+

Edit Task

+
+
+ + + + + +
+
+ {action === 'command' ? + + : +
+ + + + + + + +
+ } +
+
+
+ +
+
+ +
+
+ ); +}; + export default ({ task, scheduleId, onDismissed }: Props) => { const uuid = ServerContext.useStoreState(state => state.server.data!.uuid); const { clearFlashes, addError } = useStoreActions((actions: Actions) => actions.flashes); @@ -54,7 +108,7 @@ export default ({ task, scheduleId, onDismissed }: Props) => { timeOffset: task?.timeOffset.toString() || '0', }} validationSchema={object().shape({ - action: string().required().oneOf(['command', 'power']), + action: string().required().oneOf([ 'command', 'power' ]), payload: string().required('A task payload must be provided.'), timeOffset: number().typeError('The time offset must be a valid number between 0 and 900.') .required('A time offset value must be provided.') @@ -62,7 +116,7 @@ export default ({ task, scheduleId, onDismissed }: Props) => { .max(900, 'The time offset must be less than 900 seconds.'), })} > - {({ values, isSubmitting }) => ( + {({ isSubmitting }) => ( { showSpinnerOverlay={isSubmitting} > -
-

Edit Task

-
-
- - - - - -
-
- -
-
-
- -
-
- -
-
+
)}