Files
windmill/frontend/src/lib/components/graph/renderers/nodes/ModuleNode.svelte
HugoCasa ae8f29a4cb feat: http routing (#4339)
* feat: http routing

* all

* feat: improve UI

* final stuff

* fix: sqlx

* fix: nit

* fix: nits

* fix: error handler display

* fix: routes panel perms

* all

* fix: improve ability to paste from macos in vscode extension

* fix lock-write for deno

* all

* cleaning

* fix

* cli preprocessor

* nits

* nits

---------

Co-authored-by: Ruben Fiszel <ruben@rubenfiszel.com>
2024-09-20 15:38:38 +02:00

104 lines
2.9 KiB
Svelte

<script lang="ts">
import MapItem from '$lib/components/flows/map/MapItem.svelte'
import type { FlowModule, FlowModuleValue } from '$lib/gen'
import { GitBranchPlus } from 'lucide-svelte'
import NodeWrapper from './NodeWrapper.svelte'
import type { GraphEventHandlers } from '../../graphBuilder'
import type { GraphModuleState } from '../../model'
import { getStateColor } from '../../util'
export let data: {
offset: number
value: FlowModuleValue
module: FlowModule
insertable: boolean
insertableEnd: boolean
branchable: boolean
bgColor: string
modules: FlowModule[]
moving: string | undefined
disableAi: boolean
wrapperId: string | undefined
retries: number | undefined
flowJobs:
| { flowJobs: string[]; selected: number; flowJobsSuccess: (boolean | undefined)[] }
| undefined
eventHandlers: GraphEventHandlers
flowModuleStates: Record<string, GraphModuleState> | undefined
selected: boolean
}
$: type = data.flowModuleStates?.[data.module.id]?.type
if (!type && data.flowJobs) {
type = 'InProgress'
}
$: state = data.flowModuleStates?.[data.module.id]
$: flowJobs = state?.flow_jobs
? {
flowJobs: state?.flow_jobs,
selected: state?.selectedForloopIndex ?? -1,
flowJobsSuccess: state?.flow_jobs_success
}
: (undefined as any)
let selectedIteration = -1
</script>
<NodeWrapper offset={data.offset} let:darkMode>
<MapItem
mod={data.module}
insertable={data.insertable}
annotation={flowJobs &&
(data.module.value.type === 'forloopflow' || data.module.value.type === 'whileloopflow')
? 'Iteration: ' +
(selectedIteration >= 0 ? selectedIteration : state?.flow_jobs?.length) +
'/' +
(state?.iteration_total ?? '?')
: ''}
bgColor={getStateColor(type, darkMode, true)}
modules={data.modules ?? []}
moving={data.moving}
duration_ms={state?.duration_ms}
retries={data.retries}
disableAi={data.disableAi}
{flowJobs}
on:delete={(e) => {
data.eventHandlers.delete(e.detail, '')
}}
on:insert={(e) => {
data.eventHandlers.insert(e.detail)
}}
on:changeId={(e) => {
data.eventHandlers.changeId(e.detail)
}}
on:move={(e) => {
data.eventHandlers.move(data.module, data.modules)
}}
on:newBranch={(e) => {
data.eventHandlers.newBranch(data.module)
}}
on:select={(e) => {
data.eventHandlers.select(e.detail)
}}
on:selectedIteration={(e) => {
selectedIteration = e.detail.index + 1
data.eventHandlers.selectedIteration(e.detail, data.module.id)
}}
/>
<div class="absolute -bottom-10 left-1/2 transform -translate-x-1/2 z-10">
{#if (data.value.type === 'branchall' || data.value.type === 'branchone') && data.insertable}
<button
title="Add branch"
class="rounded text-secondary border hover:bg-surface-hover bg-surface p-1"
on:click={() => {
data?.eventHandlers?.newBranch(data.module)
}}
>
<GitBranchPlus size={16} />
</button>
{/if}
</div>
</NodeWrapper>