From 2e587b3dfaea5c42a974d063e4af335678c7cefc Mon Sep 17 00:00:00 2001 From: Guilhem Date: Wed, 9 Oct 2024 16:34:07 +0200 Subject: [PATCH] fix schedule sync --- frontend/src/lib/components/Dev.svelte | 11 +++++--- .../src/lib/components/FlowBuilder.svelte | 14 ++++++---- .../src/lib/components/PrimarySchedule.svelte | 10 ++++--- .../lib/components/RunPageSchedules.svelte | 26 ++++++++++++------- frontend/src/lib/components/flows/types.ts | 7 +++-- .../renderers/triggers/TriggersWrapper.svelte | 18 +++++-------- frontend/src/routes/flows/dev/+page.svelte | 10 ++++--- 7 files changed, 58 insertions(+), 38 deletions(-) diff --git a/frontend/src/lib/components/Dev.svelte b/frontend/src/lib/components/Dev.svelte index a15071d324..0453ef9db5 100644 --- a/frontend/src/lib/components/Dev.svelte +++ b/frontend/src/lib/components/Dev.svelte @@ -15,7 +15,8 @@ WorkspaceService, type InputTransform, type RawScript, - type PathScript + type PathScript, + type Schedule } from '$lib/gen' import { inferArgs } from '$lib/infer' import { copilotInfo, userStore, workspaceStore } from '$lib/stores' @@ -41,7 +42,7 @@ import { workspacedOpenai } from './copilot/lib' import type { FlowCopilotContext, FlowCopilotModule } from './copilot/flow' import { pickScript } from './flows/flowStateUtils' - import type { Schedule } from './flows/scheduleUtils' + import type { Schedule as ScheduleUtils } from './flows/scheduleUtils' import { approximateFindPythonRelativePath, isTypescriptRelativePath, @@ -466,7 +467,7 @@ } const flowStateStore = writable({} as FlowState) - const scheduleStore = writable({ + const scheduleStore = writable({ args: {}, cron: '', timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, @@ -482,11 +483,15 @@ const selectedIdStore = writable('settings-metadata') const selectedTriggerStore = writable('webhooks') const httpTriggersStore = writable(undefined) + const schedulesStore = writable(undefined) + const primaryScheduleStore = writable(undefined) setContext('FlowEditorContext', { selectedId: selectedIdStore, selectedTrigger: selectedTriggerStore, httpTriggers: httpTriggersStore, schedule: scheduleStore, + primarySchedule: primaryScheduleStore, + schedules: schedulesStore, previewArgs: previewArgsStore, scriptEditorDrawer, moving, diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 194264c8a0..7f22e0e544 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -9,7 +9,8 @@ ScriptService, type OpenFlow, type RawScript, - type InputTransform + type InputTransform, + type Schedule } from '$lib/gen' import { initHistory, push, redo, undo } from '$lib/history' import { @@ -40,7 +41,7 @@ import { dfs, getPreviousIds } from './flows/previousResults' import FlowImportExportMenu from './flows/header/FlowImportExportMenu.svelte' import FlowPreviewButtons from './flows/header/FlowPreviewButtons.svelte' - import { loadFlowSchedule, type Schedule } from './flows/scheduleUtils' + import { loadFlowSchedule, type Schedule as ScheduleUtils } from './flows/scheduleUtils' import type { FlowEditorContext, FlowInput } from './flows/types' import { cleanInputs, emptyFlowModuleState } from './flows/utils' import { @@ -375,7 +376,7 @@ return $selectedIdStore } - const scheduleStore = writable({ + const scheduleStore = writable({ summary: undefined, args: {}, cron: '', @@ -401,13 +402,16 @@ } const httpTriggersStore = writable(undefined) - + const schedulesStore = writable(undefined) let insertButtonOpen = writable(false) + const primaryScheduleStore = writable(undefined) setContext('FlowEditorContext', { selectedId: selectedIdStore, selectedTrigger: selectedTriggerStore, httpTriggers: httpTriggersStore, schedule: scheduleStore, + primarySchedule: primaryScheduleStore, + schedules: schedulesStore, previewArgs: previewArgsStore, scriptEditorDrawer, moving, @@ -425,7 +429,7 @@ async function loadSchedule() { loadFlowSchedule(initialPath, $workspaceStore!) - .then((schedule: Schedule) => { + .then((schedule: ScheduleUtils) => { scheduleStore.set(schedule) }) .catch(() => { diff --git a/frontend/src/lib/components/PrimarySchedule.svelte b/frontend/src/lib/components/PrimarySchedule.svelte index e323d61db8..9a5ee71c3f 100644 --- a/frontend/src/lib/components/PrimarySchedule.svelte +++ b/frontend/src/lib/components/PrimarySchedule.svelte @@ -10,12 +10,14 @@ import { type Schedule } from '$lib/gen' export let light = false - export let schedule: Schedule + export let schedule: any export let can_write: boolean export let path: string export let isFlow: boolean export let scheduleEditor: ScheduleEditor export let setScheduleEnabled: (path: string, enabled: boolean) => void + + $: schedule = typeof schedule === 'boolean' ? undefined : (schedule as Schedule | undefined)
@@ -38,11 +40,11 @@ id="cron-schedule" name="cron-schedule" placeholder="*/30 * * * *" - value={schedule.schedule} + value={schedule?.schedule ?? ''} disabled={true} /> { if (can_write) { setScheduleEnabled(path, e.detail) @@ -88,7 +90,7 @@ {#if !light} {#if Object.keys(schedule?.args ?? {}).length > 0}
- +
{:else}
No arguments
diff --git a/frontend/src/lib/components/RunPageSchedules.svelte b/frontend/src/lib/components/RunPageSchedules.svelte index 1406ed457e..c374e3be72 100644 --- a/frontend/src/lib/components/RunPageSchedules.svelte +++ b/frontend/src/lib/components/RunPageSchedules.svelte @@ -9,13 +9,14 @@ import PrimarySchedule from './PrimarySchedule.svelte' import Label from '$lib/components/Label.svelte' import Alert from './common/alert/Alert.svelte' + import { getContext } from 'svelte' + import type { FlowEditorContext } from '$lib/components/flows/types' export let isFlow: boolean export let path: string export let can_write: boolean let scheduleEditor: ScheduleEditor - let schedule: Schedule | false | undefined = undefined export let schedules: Schedule[] | undefined = undefined export let newFlow: boolean = false @@ -24,17 +25,15 @@ export async function loadSchedule() { try { - let exists = await ScheduleService.existsSchedule({ + $primarySchedule = await ScheduleService.existsSchedule({ workspace: $workspaceStore ?? '', path }) - if (exists) { - schedule = await ScheduleService.getSchedule({ + if ($primarySchedule) { + $primarySchedule = await ScheduleService.getSchedule({ workspace: $workspaceStore ?? '', path }) - } else { - schedule = false } } catch (e) { console.log('no primary schedule') @@ -70,6 +69,8 @@ loadSchedule() } } + + const { primarySchedule } = getContext('FlowEditorContext') - {#if schedule} - - {:else if schedule == undefined} + {#if $primarySchedule} + + {:else if $primarySchedule == undefined} {/if} diff --git a/frontend/src/lib/components/flows/types.ts b/frontend/src/lib/components/flows/types.ts index fee0dc9506..2c5cb368d9 100644 --- a/frontend/src/lib/components/flows/types.ts +++ b/frontend/src/lib/components/flows/types.ts @@ -3,9 +3,10 @@ import type { History } from '$lib/history' import type { Writable } from 'svelte/store' import type ScriptEditorDrawer from './content/ScriptEditorDrawer.svelte' import type { FlowState } from './flowState' -import type { Schedule } from './scheduleUtils' +import type { Schedule as ScheduleUtils } from './scheduleUtils' import type { FlowBuilderWhitelabelCustomUi } from '../custom_ui' import { type HttpTrigger } from '$lib/gen' +import type { Schedule } from '$lib/gen' export type FlowInput = Record< string, @@ -32,7 +33,9 @@ export type FlowEditorContext = { selectedTrigger: Writable httpTriggers: Writable<(HttpTrigger & { canWrite: boolean })[] | undefined> moving: Writable<{ module: FlowModule; modules: FlowModule[] } | undefined> - schedule: Writable + schedule: Writable + primarySchedule: Writable + schedules: Writable previewArgs: Writable> scriptEditorDrawer: Writable history: History diff --git a/frontend/src/lib/components/graph/renderers/triggers/TriggersWrapper.svelte b/frontend/src/lib/components/graph/renderers/triggers/TriggersWrapper.svelte index 6d55f99248..5e1aabd81d 100644 --- a/frontend/src/lib/components/graph/renderers/triggers/TriggersWrapper.svelte +++ b/frontend/src/lib/components/graph/renderers/triggers/TriggersWrapper.svelte @@ -2,7 +2,7 @@ import { Calendar, Mail, Webhook } from 'lucide-svelte' import TriggerButton from './TriggerButton.svelte' import { NODE } from '../../util' - import { HttpTriggerService, ScheduleService, type Schedule } from '$lib/gen' + import { HttpTriggerService, ScheduleService } from '$lib/gen' import { userStore, workspaceStore } from '$lib/stores' import Popover from '$lib/components/Popover.svelte' import TriggerCount from './TriggerCount.svelte' @@ -12,25 +12,21 @@ import { getContext } from 'svelte' import type { FlowEditorContext } from '../../../flows/types' - let schedules: Schedule[] | undefined = undefined - export let path: string export let isEditor: boolean export let newFlow: boolean - let primaryScheduleExists: boolean = false - const dispatch = createEventDispatcher() async function loadSchedules() { if (!path) return try { - primaryScheduleExists = await ScheduleService.existsSchedule({ + $primarySchedule = await ScheduleService.existsSchedule({ workspace: $workspaceStore ?? '', path }) - schedules = ( + $schedules = ( await ScheduleService.listSchedules({ workspace: $workspaceStore ?? '', path: path, @@ -66,10 +62,8 @@ } }) - const flowEditorContext = getContext('FlowEditorContext') - const httpTriggers = flowEditorContext?.httpTriggers ?? { subscribe: () => () => {} } - const selectedId = flowEditorContext?.selectedId ?? { subscribe: () => () => {} } - const selectedTrigger = flowEditorContext?.selectedTrigger ?? { subscribe: () => () => {} } + const { httpTriggers, selectedId, selectedTrigger, schedules, primarySchedule } = + getContext('FlowEditorContext') ?? {} {#if isEditor} @@ -172,7 +166,7 @@ }} disabled={newFlow} > - + diff --git a/frontend/src/routes/flows/dev/+page.svelte b/frontend/src/routes/flows/dev/+page.svelte index c5ccd58ccc..db330b4a01 100644 --- a/frontend/src/routes/flows/dev/+page.svelte +++ b/frontend/src/routes/flows/dev/+page.svelte @@ -6,7 +6,7 @@ import FlowPreviewButtons from '$lib/components/flows/header/FlowPreviewButtons.svelte' import type { FlowEditorContext, FlowInput } from '$lib/components/flows/types' import { writable } from 'svelte/store' - import { OpenAPI, type FlowModule, type OpenFlow } from '$lib/gen' + import { OpenAPI, type FlowModule, type OpenFlow, type Schedule } from '$lib/gen' import { initHistory } from '$lib/history' import type { FlowState } from '$lib/components/flows/flowState' import FlowModuleSchemaMap from '$lib/components/flows/map/FlowModuleSchemaMap.svelte' @@ -16,7 +16,7 @@ import { userStore, workspaceStore } from '$lib/stores' import { getUserExt } from '$lib/user' import DarkModeToggle from '$lib/components/sidebar/DarkModeToggle.svelte' - import type { Schedule } from '$lib/components/flows/scheduleUtils' + import type { Schedule as ScheduleUtils } from '$lib/components/flows/scheduleUtils' let token = $page.url.searchParams.get('wm_token') ?? undefined let workspace = $page.url.searchParams.get('workspace') ?? undefined @@ -63,7 +63,7 @@ let initialCode = JSON.stringify($flowStore, null, 4) const flowStateStore = writable({} as FlowState) - const scheduleStore = writable({ + const scheduleStore = writable({ args: {}, cron: '', timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, @@ -80,6 +80,8 @@ const selectedIdStore = writable('settings-metadata') const selectedTriggerStore = writable('webhooks') const httpTriggersStore = writable(undefined) + const schedulesStore = writable(undefined) + const primaryScheduleStore = writable(undefined) // function select(selectedId: string) { // selectedIdStore.set(selectedId) // } @@ -89,6 +91,8 @@ selectedTrigger: selectedTriggerStore, httpTriggers: httpTriggersStore, schedule: scheduleStore, + primarySchedule: primaryScheduleStore, + schedules: schedulesStore, previewArgs: previewArgsStore, scriptEditorDrawer, moving,