Skip to content

Commit c490605

Browse files
AIP-38 Add logical date to trigger DagRun form and remove dataInterval (#46471)
* AIP-38 Add logical date to trigger DagRun form * Automatically fill fields based on conditions * Remove dataIntervalEnd and dataIntervalStart
1 parent 67c4f77 commit c490605

File tree

2 files changed

+11
-78
lines changed

2 files changed

+11
-78
lines changed

Diff for: airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx

+6-41
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,21 @@ type TriggerDAGFormProps = {
4242
export type DagRunTriggerParams = {
4343
conf: string;
4444
dagRunId: string;
45-
dataIntervalEnd: string;
46-
dataIntervalStart: string;
45+
logicalDate: string;
4746
note: string;
4847
};
4948

5049
const TriggerDAGForm = ({ dagId, onClose, open }: TriggerDAGFormProps) => {
5150
const [errors, setErrors] = useState<{ conf?: string; date?: unknown }>({});
5251
const initialParamsDict = useDagParams(dagId, open);
53-
const {
54-
dateValidationError,
55-
error: errorTrigger,
56-
isPending,
57-
triggerDagRun,
58-
} = useTrigger({ dagId, onSuccessConfirm: onClose });
52+
const { error: errorTrigger, isPending, triggerDagRun } = useTrigger({ dagId, onSuccessConfirm: onClose });
5953
const { conf, setConf } = useParamStore();
6054

61-
const { control, handleSubmit, reset, watch } = useForm<DagRunTriggerParams>({
55+
const { control, handleSubmit, reset } = useForm<DagRunTriggerParams>({
6256
defaultValues: {
6357
conf,
6458
dagRunId: "",
65-
dataIntervalEnd: "",
66-
dataIntervalStart: "",
59+
logicalDate: "",
6760
note: "",
6861
},
6962
});
@@ -75,15 +68,6 @@ const TriggerDAGForm = ({ dagId, onClose, open }: TriggerDAGFormProps) => {
7568
}
7669
}, [conf, reset]);
7770

78-
useEffect(() => {
79-
if (Boolean(dateValidationError)) {
80-
setErrors((prev) => ({ ...prev, date: dateValidationError }));
81-
}
82-
}, [dateValidationError]);
83-
84-
const dataIntervalStart = watch("dataIntervalStart");
85-
const dataIntervalEnd = watch("dataIntervalEnd");
86-
8771
const onSubmit = (data: DagRunTriggerParams) => {
8872
triggerDagRun(data);
8973
};
@@ -136,31 +120,12 @@ const TriggerDAGForm = ({ dagId, onClose, open }: TriggerDAGFormProps) => {
136120
<Box p={5}>
137121
<Controller
138122
control={control}
139-
name="dataIntervalStart"
123+
name="logicalDate"
140124
render={({ field }) => (
141125
<Field.Root invalid={Boolean(errors.date)}>
142-
<Field.Label fontSize="md">Data Interval Start Date</Field.Label>
143-
<Input
144-
{...field}
145-
max={dataIntervalEnd || undefined}
146-
onBlur={resetDateError}
147-
placeholder="yyyy-mm-ddThh:mm"
148-
size="sm"
149-
type="datetime-local"
150-
/>
151-
</Field.Root>
152-
)}
153-
/>
154-
155-
<Controller
156-
control={control}
157-
name="dataIntervalEnd"
158-
render={({ field }) => (
159-
<Field.Root invalid={Boolean(errors.date)} mt={6}>
160-
<Field.Label fontSize="md">Data Interval End Date</Field.Label>
126+
<Field.Label fontSize="md">Logical Date</Field.Label>
161127
<Input
162128
{...field}
163-
min={dataIntervalStart || undefined}
164129
onBlur={resetDateError}
165130
placeholder="yyyy-mm-ddThh:mm"
166131
size="sm"

Diff for: airflow/ui/src/queries/useTrigger.ts

+5-37
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: { dagId: string; onSucce
3333
const queryClient = useQueryClient();
3434
const [error, setError] = useState<unknown>(undefined);
3535

36-
const [dateValidationError, setDateValidationError] = useState<unknown>(undefined);
37-
3836
const onSuccess = async () => {
3937
const queryKeys = [
4038
[useDagServiceGetDagsKey],
@@ -65,38 +63,10 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: { dagId: string; onSucce
6563
const triggerDagRun = (dagRunRequestBody: DagRunTriggerParams) => {
6664
const parsedConfig = JSON.parse(dagRunRequestBody.conf) as Record<string, unknown>;
6765

68-
const DataIntervalStart = dagRunRequestBody.dataIntervalStart
69-
? new Date(dagRunRequestBody.dataIntervalStart)
70-
: undefined;
71-
const DataIntervalEnd = dagRunRequestBody.dataIntervalEnd
72-
? new Date(dagRunRequestBody.dataIntervalEnd)
73-
: undefined;
74-
75-
if (Boolean(DataIntervalStart) !== Boolean(DataIntervalEnd)) {
76-
setDateValidationError({
77-
body: {
78-
detail:
79-
"Either both Data Interval Start Date and End Date must be provided, or both must be empty.",
80-
},
81-
});
82-
83-
return;
84-
}
85-
86-
if (DataIntervalStart && DataIntervalEnd) {
87-
if (DataIntervalStart > DataIntervalEnd) {
88-
setDateValidationError({
89-
body: {
90-
detail: "Data Interval Start Date must be less than or equal to Data Interval End Date.",
91-
},
92-
});
93-
94-
return;
95-
}
96-
}
66+
const logicalDate = dagRunRequestBody.logicalDate ? new Date(dagRunRequestBody.logicalDate) : undefined;
9767

98-
const formattedDataIntervalStart = DataIntervalStart?.toISOString() ?? undefined;
99-
const formattedDataIntervalEnd = DataIntervalEnd?.toISOString() ?? undefined;
68+
// eslint-disable-next-line unicorn/no-null
69+
const formattedLogicalDate = logicalDate?.toISOString() ?? null;
10070

10171
const checkDagRunId = dagRunRequestBody.dagRunId === "" ? undefined : dagRunRequestBody.dagRunId;
10272
const checkNote = dagRunRequestBody.note === "" ? undefined : dagRunRequestBody.note;
@@ -106,13 +76,11 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: { dagId: string; onSucce
10676
requestBody: {
10777
conf: parsedConfig,
10878
dag_run_id: checkDagRunId,
109-
data_interval_end: formattedDataIntervalEnd,
110-
data_interval_start: formattedDataIntervalStart,
111-
logical_date: null,
79+
logical_date: formattedLogicalDate,
11280
note: checkNote,
11381
},
11482
});
11583
};
11684

117-
return { dateValidationError, error, isPending, triggerDagRun };
85+
return { error, isPending, triggerDagRun };
11886
};

0 commit comments

Comments
 (0)