From 5e60d32c7d0d96be56ff7bc3d53618a613a14191 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Mon, 14 Oct 2024 14:51:42 +0200 Subject: [PATCH] Draft 1 : insert shedule poll in the trigger --- frontend/src/lib/components/Dev.svelte | 5 +- .../src/lib/components/FlowBuilder.svelte | 11 +- .../details/SchedulePollPanel.svelte | 52 ++++ .../flows/content/FlowTriggers.svelte | 13 +- .../flows/map/InsertTriggersButton.svelte | 120 ++++++++ .../flows/pickers/TopLevelNode.svelte | 30 +- .../renderers/triggers/TriggersWrapper.svelte | 284 ++++++++++++------ frontend/src/lib/components/triggers.ts | 3 +- frontend/src/routes/flows/dev/+page.svelte | 11 +- 9 files changed, 437 insertions(+), 92 deletions(-) create mode 100644 frontend/src/lib/components/details/SchedulePollPanel.svelte create mode 100644 frontend/src/lib/components/flows/map/InsertTriggersButton.svelte diff --git a/frontend/src/lib/components/Dev.svelte b/frontend/src/lib/components/Dev.svelte index c78eb2afc0..0fc401fbfb 100644 --- a/frontend/src/lib/components/Dev.svelte +++ b/frontend/src/lib/components/Dev.svelte @@ -489,7 +489,10 @@ setContext('TriggerContext', { httpTriggers: httpTriggersStore, schedule: scheduleStore, - primarySchedule: primaryScheduleStore + primarySchedule: primaryScheduleStore, + triggerModule: writable(undefined), + selectedTrigger: selectedTriggerStore, + schedules: schedulesStore }) setContext('FlowEditorContext', { selectedId: selectedIdStore, diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 7f22e0e544..57e6ee0a7c 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -83,7 +83,7 @@ import Summary from './Summary.svelte' import type { FlowBuilderWhitelabelCustomUi } from './custom_ui' import FlowYamlEditor from './flows/header/FlowYamlEditor.svelte' - + import type { TriggerContext } from './triggers' export let initialPath: string = '' export let pathStoreInit: string | undefined = undefined export let newFlow: boolean @@ -405,6 +405,15 @@ const schedulesStore = writable(undefined) let insertButtonOpen = writable(false) const primaryScheduleStore = writable(undefined) + setContext('TriggerContext', { + httpTriggers: httpTriggersStore, + schedule: scheduleStore, + primarySchedule: primaryScheduleStore, + triggerModule: writable(undefined), + selectedTrigger: selectedTriggerStore, + schedules: schedulesStore + }) + setContext('FlowEditorContext', { selectedId: selectedIdStore, selectedTrigger: selectedTriggerStore, diff --git a/frontend/src/lib/components/details/SchedulePollPanel.svelte b/frontend/src/lib/components/details/SchedulePollPanel.svelte new file mode 100644 index 0000000000..57f8fa498f --- /dev/null +++ b/frontend/src/lib/components/details/SchedulePollPanel.svelte @@ -0,0 +1,52 @@ + + + {}} bind:this={scheduleEditor} /> + +
+ {#if schedulePollExists && $triggerModule} + + + {:else} +
No schedule poll triggers
+ {/if} +
diff --git a/frontend/src/lib/components/flows/content/FlowTriggers.svelte b/frontend/src/lib/components/flows/content/FlowTriggers.svelte index 8673d09c1f..7f68d7b264 100644 --- a/frontend/src/lib/components/flows/content/FlowTriggers.svelte +++ b/frontend/src/lib/components/flows/content/FlowTriggers.svelte @@ -10,12 +10,14 @@ import FlowCard from '../common/FlowCard.svelte' import { getContext } from 'svelte' import type { FlowEditorContext } from '../types' - + import SchedulePollPanel from '$lib/components/details/SchedulePollPanel.svelte' + import type { TriggerContext } from '$lib/components/triggers' export let noEditor: boolean export let newFlow = false let path = '' const { pathStore, selectedTrigger } = getContext('FlowEditorContext') + const { triggerModule } = getContext('TriggerContext') $: path = $pathStore @@ -27,6 +29,9 @@ Email Routes Schedules + Schedule Poll {#if $selectedTrigger === 'webhooks'} @@ -70,6 +75,12 @@ /> {/if} + + {#if $selectedTrigger === 'schedule_poll' && triggerModule} +
+ +
+ {/if}
diff --git a/frontend/src/lib/components/flows/map/InsertTriggersButton.svelte b/frontend/src/lib/components/flows/map/InsertTriggersButton.svelte new file mode 100644 index 0000000000..f4c495d3ae --- /dev/null +++ b/frontend/src/lib/components/flows/map/InsertTriggersButton.svelte @@ -0,0 +1,120 @@ + + + + + + + + + + + +
{ + e.stopPropagation() + }} + role="none" + > +
+ + + +
+ +
+
+ +
+ + { + close(null) + }} + on:new + on:pickScript + on:pickFlow + {preFilter} + {small} + /> +
+
+
diff --git a/frontend/src/lib/components/flows/pickers/TopLevelNode.svelte b/frontend/src/lib/components/flows/pickers/TopLevelNode.svelte index af70d38508..74675c0893 100644 --- a/frontend/src/lib/components/flows/pickers/TopLevelNode.svelte +++ b/frontend/src/lib/components/flows/pickers/TopLevelNode.svelte @@ -1,6 +1,18 @@ {#if isEditor} @@ -80,90 +107,175 @@
Triggers
- - - {#if newFlow} - Deploy the flow to see webhooks triggers - {:else} - See default webhooks triggers - {/if} + {#if $modifiableTriggers.some((trigger) => trigger.type === 'webhooks')} + + + {#if newFlow} + Deploy the flow to see webhooks triggers + {:else} + See default webhooks triggers + {/if} + + { + if (isEditor) { + $selectedTrigger = 'webhooks' + $selectedId = 'webhooks' + } else { + dispatch('triggerDetail', 'webhooks') + } + }} + disabled={newFlow} + > + + + + {/if} + {#if $modifiableTriggers.some((trigger) => trigger.type === 'email')} + + + {#if newFlow} + Deploy the flow to see email triggers + {:else} + See all email triggers + {/if} + + { + if (isEditor) { + $selectedTrigger = 'mail' + $selectedId = 'mail' + } else { + dispatch('triggerDetail', 'mail') + } + }} + disabled={newFlow} + > + + + + {/if} + {#if $modifiableTriggers.some((trigger) => trigger.type === 'routes')} + + + {#if newFlow} + Deploy the flow to add routes triggers + {:else} + See all routes triggers + {/if} + + { + if (isEditor) { + $selectedTrigger = 'routes' + $selectedId = 'routes' + } else { + dispatch('triggerDetail', 'routes') + } + }} + disabled={newFlow} + > + + + + + {/if} + {#if $modifiableTriggers.some((trigger) => trigger.type === 'schedule')} + + See all schedules triggers + { + if (isEditor) { + $selectedTrigger = 'schedules' + $selectedId = 'schedules' + } else { + dispatch('triggerDetail', 'schedule') + } + }} + disabled={newFlow} + > + + + + + {/if} + {#if $modifiableTriggers.some((trigger) => trigger.type === 'schedule_poll')} + + See all schedules poll triggers + { + if (isEditor) { + $selectedTrigger = 'schedule_poll' + $selectedId = 'schedule_poll' + } else { + dispatch('triggerDetail', 'schedule_poll') + } + }} + disabled={newFlow} + > + + + + {/if} + + + { + // console.log('new', e) + $selectedId = 'triggers' + $selectedTrigger = 'schedule_poll' + addTrigger('schedule_poll') + }} + on:pickScript={(e) => { + pickScriptEventHandler(e.detail.path, e.detail.summary, e.detail.id) + // console.log('pickScript', e) + close(null) + }} + > + + {#each ['schedule', 'routes', 'email', 'webhooks', 'schedule_poll'] as triggersType} + {#if !$modifiableTriggers.some((trigger) => trigger.type === triggersType)} + {#if triggersType === 'schedule'} + { + close(null) + addTrigger('schedule') + }} + /> + {:else if triggersType === 'routes'} + { + close(null) + addTrigger('routes') + }} + /> + {:else if triggersType === 'email'} + { + close(null) + addTrigger('email') + }} + /> + {:else if triggersType === 'webhooks'} + { + close(null) + addTrigger('webhooks') + }} + /> + {:else if triggersType === 'schedule_poll'} + + {/if} + {/if} + {/each} - { - if (isEditor) { - $selectedTrigger = 'webhooks' - $selectedId = 'webhooks' - } else { - dispatch('triggerDetail', 'webhooks') - } - }} - disabled={newFlow} - > - - - - - - {#if newFlow} - Deploy the flow to see email triggers - {:else} - See all email triggers - {/if} - - { - if (isEditor) { - $selectedTrigger = 'mail' - $selectedId = 'mail' - } else { - dispatch('triggerDetail', 'mail') - } - }} - disabled={newFlow} - > - - - - - - {#if newFlow} - Deploy the flow to add routes triggers - {:else} - See all routes triggers - {/if} - - { - if (isEditor) { - $selectedTrigger = 'routes' - $selectedId = 'routes' - } else { - dispatch('triggerDetail', 'routes') - } - }} - disabled={newFlow} - > - - - - - - See all schedules triggers - { - if (isEditor) { - $selectedTrigger = 'schedules' - $selectedId = 'schedules' - } else { - dispatch('triggerDetail', 'schedule') - } - }} - disabled={newFlow} - > - - - - + diff --git a/frontend/src/lib/components/triggers.ts b/frontend/src/lib/components/triggers.ts index 92ba4b3cf7..2e1f49720f 100644 --- a/frontend/src/lib/components/triggers.ts +++ b/frontend/src/lib/components/triggers.ts @@ -1,4 +1,4 @@ -import type { HttpTrigger, Schedule } from '$lib/gen' +import type { HttpTrigger, Schedule, FlowModule } from '$lib/gen' import type { Writable } from 'svelte/store' export type ScheduleTrigger = { @@ -15,4 +15,5 @@ export type TriggerContext = { schedule: Writable primarySchedule: Writable schedules: Writable + triggerModule: Writable } diff --git a/frontend/src/routes/flows/dev/+page.svelte b/frontend/src/routes/flows/dev/+page.svelte index db330b4a01..7910a9b9f6 100644 --- a/frontend/src/routes/flows/dev/+page.svelte +++ b/frontend/src/routes/flows/dev/+page.svelte @@ -17,7 +17,7 @@ import { getUserExt } from '$lib/user' import DarkModeToggle from '$lib/components/sidebar/DarkModeToggle.svelte' import type { Schedule as ScheduleUtils } from '$lib/components/flows/scheduleUtils' - + import type { TriggerContext } from '$lib/components/triggers' let token = $page.url.searchParams.get('wm_token') ?? undefined let workspace = $page.url.searchParams.get('workspace') ?? undefined let themeDarkRaw = $page.url.searchParams.get('activeColorTheme') @@ -86,6 +86,15 @@ // selectedIdStore.set(selectedId) // } + setContext('TriggerContext', { + httpTriggers: httpTriggersStore, + schedule: scheduleStore, + primarySchedule: primaryScheduleStore, + triggerModule: writable(undefined), + selectedTrigger: selectedTriggerStore, + schedules: schedulesStore + }) + setContext('FlowEditorContext', { selectedId: selectedIdStore, selectedTrigger: selectedTriggerStore,