Skip to content

Commit e7381e7

Browse files
committed
Add support for multiline text fields
1 parent cc6e0d8 commit e7381e7

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

airflow/example_dags/example_params_ui_tutorial.py

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@
169169
"multiline_text": Param(
170170
"A multiline text Param\nthat will keep the newline\ncharacters in its value.",
171171
description="This field allows for multiline text input. The returned value will be a single with newline (\\n) characters kept intact.",
172+
title="Multiline text",
172173
type=["string", "null"],
173174
format="multiline",
174175
),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*!
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
import { Textarea } from "@chakra-ui/react";
20+
21+
import type { ParamSchema } from "src/queries/useDagParams";
22+
23+
import type { FlexibleFormElementProps } from ".";
24+
25+
export const isFieldMultilineText = (fieldType: string, fieldSchema: ParamSchema) =>
26+
fieldType === "string" && fieldSchema.format === "multiline";
27+
28+
export const FlexibleFormFieldMultilineText = ({ name, param }: FlexibleFormElementProps) => (
29+
<Textarea
30+
defaultValue={param.value as string}
31+
id={`element_${name}`}
32+
name={`element_${name}`}
33+
rows={6}
34+
size="sm"
35+
/>
36+
);

airflow/ui/src/components/FlexibleForm/FlexibleFormFieldStringArray.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export const FlexibleFormFieldStringArray = ({ name, param }: FlexibleFormElemen
3131
defaultValue={(param.value as Array<string>).join("\n")}
3232
id={`element_${name}`}
3333
name={`element_${name}`}
34-
placeholder={JSON.stringify(param.value)}
3534
rows={6}
3635
size="sm"
3736
/>

airflow/ui/src/components/FlexibleForm/FlexibleFormNormalRow.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { FlexibleFormFieldDate, isFieldDate } from "./FlexibleFormFieldDate";
2929
import { FlexibleFormFieldDateTime, isFieldDateTime } from "./FlexibleFormFieldDateTime";
3030
import { FlexibleFormFieldDropdown, isFieldDropdown } from "./FlexibleFormFieldDropdown";
3131
import { FlexibleFormFieldMultiSelect, isFieldMultiSelect } from "./FlexibleFormFieldMultiSelect";
32+
import { FlexibleFormFieldMultilineText, isFieldMultilineText } from "./FlexibleFormFieldMultilineText";
3233
import { FlexibleFormFieldNumber, isFieldNumber } from "./FlexibleFormFieldNumber";
3334
import { FlexibleFormFieldObject, isFieldObject } from "./FlexibleFormFieldObject";
3435
import { FlexibleFormFieldString } from "./FlexibleFormFieldString";
@@ -84,11 +85,9 @@ export const FlexibleFormSelectElement = ({ key, name, param }: FlexibleFormElem
8485
return <FlexibleFormFieldObject key={key} name={name} param={param} />;
8586
} else if (isFieldNumber(fieldType)) {
8687
return <FlexibleFormFieldNumber key={key} name={name} param={param} />;
88+
} else if (isFieldMultilineText(fieldType, param.schema)) {
89+
return <FlexibleFormFieldMultilineText key={key} name={name} param={param} />;
8790
} else {
88-
// TODO other elements like number, integer, select etc.
89-
// Missing:
90-
// - Multiline Text
91-
// see airflow/www/templates/airflow/trigger.html for logic in Airflow 2
9291
return <FlexibleFormFieldString key={key} name={name} param={param} />;
9392
}
9493
};

0 commit comments

Comments
 (0)