diff --git a/src/api/Elsa.Api/Endpoints/ActivityDescriptors/List.cs b/src/api/Elsa.Api/Endpoints/ActivityDescriptors/List.cs index e000b5c99..ac1d957da 100644 --- a/src/api/Elsa.Api/Endpoints/ActivityDescriptors/List.cs +++ b/src/api/Elsa.Api/Endpoints/ActivityDescriptors/List.cs @@ -20,7 +20,11 @@ public static partial class ActivityDescriptors return Results.Json(model, new JsonSerializerOptions { - Converters = { new TypeJsonConverter(wellKnownTypeRegistry) }, + Converters = + { + new JsonStringEnumConverter(), + new TypeJsonConverter(wellKnownTypeRegistry) + }, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault }); diff --git a/src/api/Elsa.Api/Endpoints/TriggerDescriptors/List.cs b/src/api/Elsa.Api/Endpoints/TriggerDescriptors/List.cs index 5cf232411..fb52ad38a 100644 --- a/src/api/Elsa.Api/Endpoints/TriggerDescriptors/List.cs +++ b/src/api/Elsa.Api/Endpoints/TriggerDescriptors/List.cs @@ -20,7 +20,11 @@ public static partial class TriggerDescriptors return Results.Json(model, new JsonSerializerOptions { - Converters = { new TypeJsonConverter(wellKnownTypeRegistry) }, + Converters = + { + new JsonStringEnumConverter(), + new TypeJsonConverter(wellKnownTypeRegistry) + }, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault }); diff --git a/src/core/Elsa.Management/ActivityInputOptions/EditorHeight.cs b/src/core/Elsa.Management/ActivityInputOptions/EditorHeight.cs new file mode 100644 index 000000000..6f39ea024 --- /dev/null +++ b/src/core/Elsa.Management/ActivityInputOptions/EditorHeight.cs @@ -0,0 +1,7 @@ +namespace Elsa.Management.ActivityInputOptions; + +public enum EditorHeight +{ + Default, + Large +} \ No newline at end of file diff --git a/src/core/Elsa.Management/ActivityInputOptions/MultiLineOptions.cs b/src/core/Elsa.Management/ActivityInputOptions/MultiLineOptions.cs new file mode 100644 index 000000000..8048963ef --- /dev/null +++ b/src/core/Elsa.Management/ActivityInputOptions/MultiLineOptions.cs @@ -0,0 +1,3 @@ +namespace Elsa.Management.ActivityInputOptions; + +public record MultiLineOptions(EditorHeight EditorHeight); \ No newline at end of file diff --git a/src/designer/elsa-workflows-designer/src/components.d.ts b/src/designer/elsa-workflows-designer/src/components.d.ts index f5b654304..30a7cb82d 100644 --- a/src/designer/elsa-workflows-designer/src/components.d.ts +++ b/src/designer/elsa-workflows-designer/src/components.d.ts @@ -71,6 +71,9 @@ export namespace Components { "show": (animate?: boolean) => Promise; "size": string; } + interface ElsaMultiLineInput { + "inputContext": NodeInputContext; + } interface ElsaPager { "page": number; "pageSize": number; @@ -206,6 +209,12 @@ declare global { prototype: HTMLElsaModalDialogElement; new (): HTMLElsaModalDialogElement; }; + interface HTMLElsaMultiLineInputElement extends Components.ElsaMultiLineInput, HTMLStencilElement { + } + var HTMLElsaMultiLineInputElement: { + prototype: HTMLElsaMultiLineInputElement; + new (): HTMLElsaMultiLineInputElement; + }; interface HTMLElsaPagerElement extends Components.ElsaPager, HTMLStencilElement { } var HTMLElsaPagerElement: { @@ -324,6 +333,7 @@ declare global { "elsa-flowchart": HTMLElsaFlowchartElement; "elsa-form-panel": HTMLElsaFormPanelElement; "elsa-modal-dialog": HTMLElsaModalDialogElement; + "elsa-multi-line-input": HTMLElsaMultiLineInputElement; "elsa-pager": HTMLElsaPagerElement; "elsa-panel": HTMLElsaPanelElement; "elsa-radio-list-input": HTMLElsaRadioListInputElement; @@ -394,6 +404,9 @@ declare namespace LocalJSX { "onShown"?: (event: CustomEvent) => void; "size"?: string; } + interface ElsaMultiLineInput { + "inputContext"?: NodeInputContext; + } interface ElsaPager { "onPaginated"?: (event: CustomEvent) => void; "page"?: number; @@ -486,6 +499,7 @@ declare namespace LocalJSX { "elsa-flowchart": ElsaFlowchart; "elsa-form-panel": ElsaFormPanel; "elsa-modal-dialog": ElsaModalDialog; + "elsa-multi-line-input": ElsaMultiLineInput; "elsa-pager": ElsaPager; "elsa-panel": ElsaPanel; "elsa-radio-list-input": ElsaRadioListInput; @@ -519,6 +533,7 @@ declare module "@stencil/core" { "elsa-flowchart": LocalJSX.ElsaFlowchart & JSXBase.HTMLAttributes; "elsa-form-panel": LocalJSX.ElsaFormPanel & JSXBase.HTMLAttributes; "elsa-modal-dialog": LocalJSX.ElsaModalDialog & JSXBase.HTMLAttributes; + "elsa-multi-line-input": LocalJSX.ElsaMultiLineInput & JSXBase.HTMLAttributes; "elsa-pager": LocalJSX.ElsaPager & JSXBase.HTMLAttributes; "elsa-panel": LocalJSX.ElsaPanel & JSXBase.HTMLAttributes; "elsa-radio-list-input": LocalJSX.ElsaRadioListInput & JSXBase.HTMLAttributes; diff --git a/src/designer/elsa-workflows-designer/src/components/inputs/multi-line.tsx b/src/designer/elsa-workflows-designer/src/components/inputs/multi-line.tsx new file mode 100644 index 000000000..a85580970 --- /dev/null +++ b/src/designer/elsa-workflows-designer/src/components/inputs/multi-line.tsx @@ -0,0 +1,41 @@ +import {Component, Prop, h} from '@stencil/core'; +import {LiteralExpression, SyntaxNames} from "../../models"; +import {NodeInputContext} from "../../services/node-input-driver"; +import {getInputPropertyValue} from "../../utils"; + +@Component({ + tag: 'elsa-multi-line-input', + shadow: false +}) +export class MultiLineInput { + @Prop() inputContext: NodeInputContext; + + public render() { + const inputContext = this.inputContext; + const inputProperty = inputContext.inputDescriptor; + const fieldName = inputProperty.name; + const fieldId = inputProperty.name; + const input = getInputPropertyValue(inputContext); + const options = inputProperty.options || {}; + const editorHeight = this.getEditorHeight(options); + const value = (input?.expression as LiteralExpression)?.value; + return