This commit is contained in:
Guilhem
2024-10-15 18:00:37 +02:00
parent b7485cf5ab
commit a10b902d30
5 changed files with 61 additions and 77 deletions
@@ -82,7 +82,8 @@ export async function createInlineScriptModule(
const flowModule: FlowModule = {
id,
summary,
value: { type: 'rawscript', content: code, language, input_transforms: {} }
value: { type: 'rawscript', content: code, language, input_transforms: {} },
isTrigger: kind === 'trigger'
}
return [flowModule, await loadFlowModuleState(flowModule)]
@@ -382,6 +382,7 @@
detail.inlineScript
)
$selectedId = detail.modules[detail.index ?? 0].id
console.log('Modules', detail.modules)
}
}
@@ -78,6 +78,8 @@
let fullWidth = 0
let width = 0
let forloopEdge: Edge | undefined = undefined
function layoutNodes(nodes: Node[]): Node[] {
let seenId: string[] = []
for (const n of nodes) {
@@ -260,7 +262,7 @@
return { nodes: updatedNodes, edges: updatedEdges }
}
function removeTriggerForLoopNodes(nodes, edges) {
function removeForLoopNodes(nodes, edges) {
let updatedGraph = {
nodes: [...nodes],
edges: [...edges]
@@ -271,21 +273,6 @@
return updatedGraph
}
if (forloopNode?.data?.value?.parentsIds?.length > 0) {
console.log('triggerScript', forloopNode?.data?.value?.parentsIds[0])
}
let forloopModules = forloopNode?.data?.value?.modules
if (!forloopModules) {
return updatedGraph
}
for (let i = 0; i < forloopModules.length; i++) {
const module = forloopModules[i]
console.log(`Processing module ${i}:`, module)
updatedGraph = removeInputNode(updatedGraph.nodes, updatedGraph.edges, module.id)
}
updatedGraph = removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id)
return updatedGraph
@@ -300,6 +287,7 @@
if (!forloopNode) {
return updatedGraph
}
forloopEdge = updatedGraph.edges.find((edge) => edge.source === forloopNode.id)
return removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id)
}
@@ -315,15 +303,47 @@
return removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id)
}
function removeTriggerScriptModule(nodes, edges) {
let updatedGraph = {
nodes: [...nodes],
edges: [...edges]
}
let triggerScriptModule = updatedGraph.nodes.find((node) => node?.data?.module?.isTrigger)
console.log('triggerScriptModule', triggerScriptModule)
if (!triggerScriptModule) {
return updatedGraph
}
return removeInputNode(updatedGraph.nodes, updatedGraph.edges, triggerScriptModule.id)
}
function processGraph(graph) {
let newGraph = { nodes: graph.nodes, edges: graph.edges }
newGraph = removeInputNode(newGraph.nodes, newGraph.edges, 'Input')
newGraph = removeTriggerForLoopNodes(newGraph.nodes, newGraph.edges)
newGraph = removeForLoopNodes(newGraph.nodes, newGraph.edges)
newGraph = removeForLoopStartNodes(newGraph.nodes, newGraph.edges)
newGraph = removeForLoopEndNodes(newGraph.nodes, newGraph.edges)
newGraph = removeTriggerScriptModule(newGraph.nodes, newGraph.edges)
newGraph.edges = replaceEdge(newGraph.edges, forloopEdge)
return newGraph
}
function replaceEdge(edges, edge) {
if (!edge) {
return edges
}
const schedulePollEdge = edges.find((edge) => edge.source === 'SchedulePoll')
if (!schedulePollEdge) {
return edges
}
const targetNode = schedulePollEdge.target
edge.source = 'SchedulePoll'
edge.target = targetNode
edges.push(edge)
// Remove the original SchedulePoll edge
return edges.filter((e) => e !== schedulePollEdge)
}
function updateStores() {
if (graph.error) {
return
@@ -6,7 +6,6 @@
import type { GraphEventHandlers } from '../../graphBuilder'
import { twMerge } from 'tailwind-merge'
import { NODE } from '../../util'
import InsertModuleButton from '../../../flows/map/InsertModuleButton.svelte'
import type { FlowModule } from '$lib/gen'
import MapItem from '../../../flows/map/MapItem.svelte'
@@ -26,31 +25,24 @@
console.log('Modules', data.modules)
let forloopModules: FlowModule[] = []
let triggerModule: FlowModule | undefined = undefined
let triggerScriptModule: FlowModule | undefined = undefined
function getSchedulePollModules() {
let forloopModule = data.modules.find((mod) => mod.value.type === 'forloopflow')
if (forloopModule) {
forloopModules = forloopModule.value.modules
}
console.log('Forloop Modules', forloopModules)
if (data.modules.length > 0) {
triggerModule = data.modules[0]
}
console.log('Trigger Module', triggerModule)
function getTriggerScriptModule() {
triggerScriptModule = data.modules.find((mod) => mod.isTrigger)
console.log('Trigger Module', triggerScriptModule)
}
$: getSchedulePollModules()
$: getTriggerScriptModule(), data.modules
</script>
<NodeWrapper wrapperClass="!shadow-none">
<div
class="flex flex-row"
style="width: {NODE.width}px; min-height: {NODE.height}px; transform: translate(0, calc({NODE.height}px - {componentHeight}px));"
>
<button
class={twMerge(
'flex flex-col gap-2 rounded-sm p-1 border absolute grow w-full',
'flex flex-row gap-2 rounded-sm p-2 border absolute grow w-full items-center',
$selectedId === 'schedulePoll'
? 'outline outline-offset-0 outline-2 outline-slate-500 dark:outline-gray-400'
: ''
@@ -60,13 +52,16 @@
on:mouseenter={() => (hover = true)}
on:mouseleave={() => (hover = false)}
>
{#if triggerModule}
<div class="flex flex-row gap-2">
<Repeat class="w-4 h-4 text-secondary" />
</div>
{#if triggerScriptModule}
<div
class="text-2xs text-secondary font-normal text-center rounded-sm shadow-md w-[80%] border bg-surface"
class="text-2xs text-secondary font-normal text-center rounded-sm shrink shadow-md w-full border bg-surface"
>
<MapItem
mod={triggerModule}
insertable={true}
mod={triggerScriptModule}
insertable={false}
bgColor={'#ffffff'}
modules={data.modules ?? []}
moving={''}
@@ -81,13 +76,13 @@
data.eventHandlers.changeId(e.detail)
}}
on:move={(e) => {
if (triggerModule) {
data.eventHandlers.move(triggerModule, data.modules)
if (triggerScriptModule) {
data.eventHandlers.move(triggerScriptModule, data.modules)
}
}}
on:newBranch={(e) => {
if (triggerModule) {
data.eventHandlers.newBranch(triggerModule)
if (triggerScriptModule) {
data.eventHandlers.newBranch(triggerScriptModule)
}
}}
on:select={(e) => {
@@ -95,43 +90,10 @@
}}
/>
</div>
{:else}
<div> loading ... </div>
{/if}
{#each forloopModules as mod}
<div class="text-2xs text-secondary font-normal w-[80%] ml-auto shadow-sm">
<MapItem
{mod}
insertable={true}
bgColor={'#ffffff'}
modules={data.modules ?? []}
moving={''}
flowJobs={undefined}
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(mod, data.modules)
}}
on:newBranch={(e) => {
data.eventHandlers.newBranch(mod)
}}
on:select={(e) => {
data.eventHandlers.select(e.detail)
}}
/>
</div>
{/each}
<div class="text-2xs text-secondary font-normal w-[80%] ml-auto">
<div class="flex justify-center items-center w-full">
<InsertModuleButton />
</div>
</div>
<button
class="absolute -top-[10px] -right-[10px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-150 hover:bg-red-400 hover:text-white
@@ -24,7 +24,7 @@
data?.eventHandlers.insert({
modules: data.modules,
index: 0,
kind: e.detail.kind,
kind: 'trigger',
inlineScript: e.detail.inlineScript
})
data?.eventHandlers.insert({