diff --git a/scheduling.py b/scheduling.py index 091be08..a4d94dd 100644 --- a/scheduling.py +++ b/scheduling.py @@ -48,7 +48,7 @@ class OrderScheduler(): if orders_pool.scheduled: self.scheduled_pools[orders_pool.id] = self.scheduler.daily( - order_time(orders_pool.time), + [order_time(t) for t in orders_pool.time.split(",")], self.scheduled_order, args=(orders_pool.id,) ) diff --git a/web/vite/src/OrderSet.tsx b/web/vite/src/OrderSet.tsx index c3933d8..d8e2fb5 100644 --- a/web/vite/src/OrderSet.tsx +++ b/web/vite/src/OrderSet.tsx @@ -69,8 +69,9 @@ type FormOrderSetOrder = Omit & { add_ons: FormOrderSetOrderAddOn[]; }; -type FormOrderSet = Omit & { +type FormOrderSet = Omit & { orders: FormOrderSetOrder[]; + time: string[] | string; punishment_pool_id?: string | number; }; @@ -98,9 +99,14 @@ export const OrderSet: React.FC = () => { const form = useForm>({ mode: "uncontrolled", + cascadeUpdates: true, initialValues: orderSet ? { ...orderSet, + time: + orderSet.scheduled && orderSet.time.indexOf(",") != -1 + ? [...orderSet.time.split(","), ""] + : [orderSet.time, ""], punishment_pool_id: orderSet.punishment_pool_id ? `${orderSet.punishment_pool_id}` : undefined, @@ -113,7 +119,7 @@ export const OrderSet: React.FC = () => { name: (value: string) => value.length < 1 ? "Please enter a name" : null, time: (value: string, values: FormOrderSet) => - values.scheduled && (!value || value.length < 1) + values.scheduled && (!value || value.length < 1 || !value[0]) ? "Please set a time" : null, probability: (value: number, values: FormOrderSet) => @@ -140,12 +146,27 @@ export const OrderSet: React.FC = () => { }, transformValues: (values) => ({ ...values, + time: + values.scheduled && values.time && values.time.length > 0 + ? (values.time as string[]).filter((time) => !!time).join(",") + : values.time, punishment_pool_id: values.punishment_pool_id ? Number(values.punishment_pool_id) : undefined, }), }); + form.watch("time", ({ previousValue, value }) => { + let newValue = [...(value as string[]).filter((time) => !!time), ""]; + + for (let i = 0; i < Math.min(previousValue.length, newValue.length); i++) { + if (previousValue[i] !== newValue[i]) { + form.setFieldValue("time", newValue); + break; + } + } + }); + const handleSubmit = React.useCallback( form.onSubmit((values) => { fetch(`/api/orders/${username}/sets/${set_id || ""}`, { @@ -256,7 +277,20 @@ export const OrderSet: React.FC = () => { Weekends - + + {(form.getValues().time as string[]).map((time, idx) => ( + + + + ))} + = ({ {name} {scheduled ? ( <> - - Scheduled: - + + Scheduled: + {time.split(",").map((time) => ( +
+ +
+ ))} +
{weekdays ? ( Weekdays