Skip to content

Commit 81fde7a

Browse files
authored
Merge pull request #251 from code0-tech/feat/#250
Hidden and optional flag to be considered in file tabs
2 parents ba68653 + 3dcf9a0 commit 81fde7a

6 files changed

Lines changed: 310 additions & 51 deletions

File tree

package-lock.json

Lines changed: 201 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"@opentelemetry/instrumentation-fetch": "^0.218.0",
2929
"@opentelemetry/instrumentation-xml-http-request": "^0.218.0",
3030
"@opentelemetry/sdk-trace-web": "^2.6.1",
31+
"@radix-ui/react-collapsible": "^1.1.14",
3132
"@rails/actioncable": "^8.1.300",
3233
"@types/rails__actioncable": "^8.0.3",
3334
"@uidotdev/usehooks": "^2.4.1",

src/packages/ce/src/flowtype/services/fragments/FlowType.fragment.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ fragment FlowType on FlowType {
3939
updatedAt
4040
identifier
4141
unique
42+
optional
43+
hidden
4244
names {
4345
__typename
4446
code

src/packages/ce/src/function/components/files/FunctionFileDefaultComponent.tsx

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import {Alert, Spacing, Text, useForm, useService, useStore} from "@code0-tech/pictor";
2+
import {Alert, Button, Flex, Spacing, Text, useForm, useService, useStore} from "@code0-tech/pictor";
33
import {
44
Flow,
55
LiteralValue,
@@ -20,6 +20,8 @@ import {
2020
} from "@core/util/fallback-translations";
2121
import {useNodes} from "@xyflow/react";
2222
import {NodeSchema} from "@code0-tech/triangulum";
23+
import * as Collapsible from "@radix-ui/react-collapsible";
24+
import {IconChevronDown} from "@tabler/icons-react";
2325

2426
export interface FunctionFileDefaultComponentProps {
2527
nodeId: NodeFunction['id']
@@ -120,30 +122,55 @@ export const FunctionFileDefaultComponent: React.FC<FunctionFileDefaultComponent
120122
<Spacing spacing={"xl"}/>
121123
<Text size={"md"}>Parameters</Text>
122124
<Spacing spacing={"xs"}/>
123-
{definition?.parameterDefinitions?.nodes?.map((parameterDefinition, index) => {
124-
125-
if (!parameterDefinition) return null
126-
127-
const title = parameterDefinition?.names?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_NAME
128-
const description = parameterDefinition?.descriptions?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_DESCRIPTION
129-
130-
const schema = (flowNode?.data?.schema as NodeSchema[])?.[index]
131-
132-
return <div>
133-
<DataTypeInputComponent data-qa-selector={"flow-builder-parameter"}
134-
title={title}
135-
schema={schema}
136-
description={description}
137-
clearable
138-
key={parameterDefinition.id}
139-
onChange={() => {
140-
changedParameter.current.add(parameterDefinition.id!)
141-
validate()
142-
}}
143-
{...inputs.getInputProps(parameterDefinition.id!)}
144-
/>
145-
<Spacing spacing={"xl"}/>
146-
</div>
147-
})}
125+
{(() => {
126+
const indexedParameters = definition?.parameterDefinitions?.nodes
127+
?.map((parameterDefinition, index) => ({parameterDefinition, index}))
128+
?.filter(({parameterDefinition}) => parameterDefinition && !parameterDefinition.hidden) ?? []
129+
130+
const requiredParameters = indexedParameters.filter(({parameterDefinition}) => !parameterDefinition!.optional)
131+
const optionalParameters = indexedParameters.filter(({parameterDefinition}) => parameterDefinition!.optional)
132+
133+
const renderParameter = (parameterDefinition: NonNullable<typeof indexedParameters[number]['parameterDefinition']>, index: number) => {
134+
const title = parameterDefinition?.names?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_NAME
135+
const description = parameterDefinition?.descriptions?.[0]?.content ?? FALLBACK_FUNCTION_PARAMETER_DESCRIPTION
136+
137+
const schema = (flowNode?.data?.schema as NodeSchema[])?.[index]
138+
139+
return <div key={parameterDefinition.id}>
140+
<DataTypeInputComponent data-qa-selector={"flow-builder-parameter"}
141+
title={title}
142+
schema={schema}
143+
description={description}
144+
clearable
145+
onChange={() => {
146+
changedParameter.current.add(parameterDefinition.id!)
147+
validate()
148+
}}
149+
{...inputs.getInputProps(parameterDefinition.id!)}
150+
/>
151+
<Spacing spacing={"xl"}/>
152+
</div>
153+
}
154+
155+
return <>
156+
{requiredParameters.map(({parameterDefinition, index}) => renderParameter(parameterDefinition!, index))}
157+
{optionalParameters.length > 0 && (
158+
<Collapsible.Root>
159+
<Collapsible.Trigger asChild>
160+
<Flex justify={"space-between"} align={"center"} style={{gap: "0.7rem"}}>
161+
<Text size={"md"}>Optional parameters</Text>
162+
<Button variant={"none"} color={"primary"} paddingSize={"xxs"}>
163+
<IconChevronDown size={16}/>
164+
</Button>
165+
</Flex>
166+
</Collapsible.Trigger>
167+
<Spacing spacing={"md"}/>
168+
<Collapsible.Content>
169+
{optionalParameters.map(({parameterDefinition, index}) => renderParameter(parameterDefinition!, index))}
170+
</Collapsible.Content>
171+
</Collapsible.Root>
172+
)}
173+
</>
174+
})()}
148175
</>
149176
}

0 commit comments

Comments
 (0)