From e9d35062d14c6417af39212096410739852756d3 Mon Sep 17 00:00:00 2001 From: Tai Sakuma Date: Wed, 8 Jan 2025 12:52:28 -0500 Subject: [PATCH 1/4] Add the route `/preview` --- src/app/navi-items.ts | 6 ++++++ .../schedule/preview/PreviewFrame.vue | 19 +++++++++++++++++++ .../schedule/preview/PreviewView.vue | 7 +++++++ src/plugins/router.ts | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 src/components/schedule/preview/PreviewFrame.vue create mode 100644 src/components/schedule/preview/PreviewView.vue diff --git a/src/app/navi-items.ts b/src/app/navi-items.ts index ef1280e4..56d78507 100644 --- a/src/app/navi-items.ts +++ b/src/app/navi-items.ts @@ -42,6 +42,12 @@ export function useNaviItems() { to: { name: "queue" }, exact: true, }, + { + icon: "mdi-script-text", + title: "Preview", + to: { name: "preview" }, + exact: true, + }, ]); return { naviItems }; diff --git a/src/components/schedule/preview/PreviewFrame.vue b/src/components/schedule/preview/PreviewFrame.vue new file mode 100644 index 00000000..6ba963cd --- /dev/null +++ b/src/components/schedule/preview/PreviewFrame.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/schedule/preview/PreviewView.vue b/src/components/schedule/preview/PreviewView.vue new file mode 100644 index 00000000..e8a8c045 --- /dev/null +++ b/src/components/schedule/preview/PreviewView.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/plugins/router.ts b/src/plugins/router.ts index 5ef1735c..e2885d15 100644 --- a/src/plugins/router.ts +++ b/src/plugins/router.ts @@ -21,6 +21,11 @@ const routes: RouteRecordRaw[] = [ name: "queue", component: () => import("@/components/schedule/queue/QueueView.vue"), }, + { + path: "/preview", + name: "preview", + component: () => import("@/components/schedule/preview/PreviewView.vue"), + }, { path: "/db/runs", name: "runs", From 2a3e601ade6f33506fbfd0fbc405a712818bd941 Mon Sep 17 00:00:00 2001 From: Tai Sakuma Date: Thu, 9 Jan 2025 12:15:10 -0500 Subject: [PATCH 2/4] Update a layout --- .../schedule/preview/PreviewFrame.vue | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/components/schedule/preview/PreviewFrame.vue b/src/components/schedule/preview/PreviewFrame.vue index 6ba963cd..774e6500 100644 --- a/src/components/schedule/preview/PreviewFrame.vue +++ b/src/components/schedule/preview/PreviewFrame.vue @@ -1,19 +1,36 @@ - + From f6d99a1fcc68e0f33af5fb577e57f4a96712e2f0 Mon Sep 17 00:00:00 2001 From: Tai Sakuma Date: Fri, 10 Jan 2025 13:53:26 -0500 Subject: [PATCH 3/4] Add query `ScheduleSchedulerPreview` --- src/graphql/codegen/generated.ts | 26 +++++++++++++++++++ .../queries/schedule/scheduler/Preview.gql | 9 +++++++ 2 files changed, 35 insertions(+) create mode 100644 src/graphql/gql/queries/schedule/scheduler/Preview.gql diff --git a/src/graphql/codegen/generated.ts b/src/graphql/codegen/generated.ts index 5598102f..8378056a 100644 --- a/src/graphql/codegen/generated.ts +++ b/src/graphql/codegen/generated.ts @@ -314,6 +314,7 @@ export type QueryScheduleScheduler = { apiUrl: Scalars['String']['output']; lengthMinutes: Scalars['Int']['output']; policy: Scalars['String']['output']; + preview: ScheduleSchedulerPreviewItem; }; export type RunNode = { @@ -389,6 +390,11 @@ export type ScheduleQueuePushInput = { script: Scalars['String']['input']; }; +export type ScheduleSchedulerPreviewItem = { + __typename?: 'ScheduleSchedulerPreviewItem'; + script: Scalars['String']['output']; +}; + export type StdoutNode = { __typename?: 'StdoutNode'; id: Scalars['Int']['output']; @@ -689,6 +695,11 @@ export type ScheduleQueueItemsQueryVariables = Exact<{ [key: string]: never; }>; export type ScheduleQueueItemsQuery = { __typename?: 'Query', schedule: { __typename?: 'QuerySchedule', queue: { __typename?: 'QueryScheduleQueue', items: Array<{ __typename?: 'ScheduleQueueItem', id: number, name: string, createdAt: any, script: string }> } } }; +export type ScheduleSchedulerPreviewQueryVariables = Exact<{ [key: string]: never; }>; + + +export type ScheduleSchedulerPreviewQuery = { __typename?: 'Query', schedule: { __typename?: 'QuerySchedule', scheduler: { __typename?: 'QueryScheduleScheduler', preview: { __typename?: 'ScheduleSchedulerPreviewItem', script: string } } } }; + export type CtrlContinuousEnabledSSubscriptionVariables = Exact<{ [key: string]: never; }>; @@ -1141,6 +1152,21 @@ export const ScheduleQueueItemsDocument = gql` export function useScheduleQueueItemsQuery(options: Omit, 'query'>) { return Urql.useQuery({ query: ScheduleQueueItemsDocument, ...options }); }; +export const ScheduleSchedulerPreviewDocument = gql` + query ScheduleSchedulerPreview { + schedule { + scheduler { + preview { + script + } + } + } +} + `; + +export function useScheduleSchedulerPreviewQuery(options: Omit, 'query'>) { + return Urql.useQuery({ query: ScheduleSchedulerPreviewDocument, ...options }); +}; export const CtrlContinuousEnabledSDocument = gql` subscription CtrlContinuousEnabledS { ctrlContinuousEnabled diff --git a/src/graphql/gql/queries/schedule/scheduler/Preview.gql b/src/graphql/gql/queries/schedule/scheduler/Preview.gql new file mode 100644 index 00000000..f28c91b7 --- /dev/null +++ b/src/graphql/gql/queries/schedule/scheduler/Preview.gql @@ -0,0 +1,9 @@ +query ScheduleSchedulerPreview { + schedule { + scheduler { + preview { + script + } + } + } +} From 473932c33b0c8045e097084123916ea435395217 Mon Sep 17 00:00:00 2001 From: Tai Sakuma Date: Fri, 10 Jan 2025 15:47:15 -0500 Subject: [PATCH 4/4] Add scheduler preview --- src/components/schedule/preview/Editor.vue | 16 +++++++ .../schedule/preview/PreviewFrame.vue | 34 ++++++++++++++- src/components/schedule/preview/preview.ts | 43 +++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/components/schedule/preview/Editor.vue create mode 100644 src/components/schedule/preview/preview.ts diff --git a/src/components/schedule/preview/Editor.vue b/src/components/schedule/preview/Editor.vue new file mode 100644 index 00000000..f31d18f9 --- /dev/null +++ b/src/components/schedule/preview/Editor.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/schedule/preview/PreviewFrame.vue b/src/components/schedule/preview/PreviewFrame.vue index 774e6500..6c2047b1 100644 --- a/src/components/schedule/preview/PreviewFrame.vue +++ b/src/components/schedule/preview/PreviewFrame.vue @@ -4,23 +4,45 @@
- preview + + preview + + +
+
+ +

+      
+
diff --git a/src/components/schedule/preview/preview.ts b/src/components/schedule/preview/preview.ts new file mode 100644 index 00000000..5e383411 --- /dev/null +++ b/src/components/schedule/preview/preview.ts @@ -0,0 +1,43 @@ +import { computed } from "vue"; +import type { Ref, ComputedRef } from "vue"; +import { refThrottled } from "@vueuse/core"; +import { useScheduleSchedulerPreviewQuery } from "@/graphql/codegen/generated"; +import { useRefresh } from "@/graphql/urql"; + +interface _UsePreviewResponse { + script: ComputedRef; + loading: Ref; + error: ComputedRef; + load: () => Promise; +} + +type UsePreviewResponse = _UsePreviewResponse & PromiseLike<_UsePreviewResponse>; + +export function usePreview(): UsePreviewResponse { + const query = useScheduleSchedulerPreviewQuery({ + requestPolicy: "network-only", + variables: {}, + pause: true, + }); + + const { refresh: load, refreshing } = useRefresh(query); + + const loading = refThrottled( + computed(() => query.fetching.value || refreshing.value), + 300 + ); + + const error = computed(() => query.error?.value); + + const script = computed(() => query.data.value?.schedule.scheduler.preview.script); + + const ret = { script, loading, error, load }; + + return { + ...ret, + async then(onFulfilled, onRejected) { + await query; + return Promise.resolve(ret).then(onFulfilled, onRejected); + }, + }; +}