feat(frontend): wip
This commit is contained in:
@@ -225,7 +225,7 @@
|
||||
|
||||
const viewport = writable<Viewport>({
|
||||
x: 0,
|
||||
y: 5,
|
||||
y: 100,
|
||||
zoom: 1
|
||||
})
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import VirtualItem from '$lib/components/flows/map/VirtualItem.svelte'
|
||||
import { ExternalLink, Wand2 } from 'lucide-svelte'
|
||||
import { Calendar, ExternalLink, Split, Wand2, Webhook } from 'lucide-svelte'
|
||||
import NodeWrapper from './NodeWrapper.svelte'
|
||||
import Popover from '$lib/components/Popover.svelte'
|
||||
import type { GraphEventHandlers } from '../../graphBuilder'
|
||||
@@ -12,6 +12,7 @@
|
||||
import { copilotInfo } from '$lib/stores'
|
||||
import { base } from '$lib/base'
|
||||
import type { Writable } from 'svelte/store'
|
||||
import TriggersWrapper from '../triggers/TriggersWrapper.svelte'
|
||||
|
||||
export let data: {
|
||||
insertable: boolean
|
||||
@@ -30,6 +31,10 @@
|
||||
</script>
|
||||
|
||||
<NodeWrapper enableTargetHandle={false} let:darkMode>
|
||||
<div class="absolute -top-32 left-1/2 transform -translate-x-1/2 z-10">
|
||||
<TriggersWrapper />
|
||||
</div>
|
||||
|
||||
{#if data.insertable && !data.disableAi}
|
||||
<div class="absolute -top-10 left-1/2 transform -translate-x-1/2 z-10">
|
||||
<Popover>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<div
|
||||
class="bg-surface hover:bg-surface-hover rounded-full border center-center text-xs relative w-8 h-8 flex flex-row gap-2"
|
||||
>
|
||||
<slot />
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
<script lang="ts">
|
||||
export let count: number = 0
|
||||
</script>
|
||||
|
||||
<div class="absolute -right-1 -top-1">
|
||||
<div class="bg-blue-500 rounded-full w-4 h-4 flex center-center text-white text-xs">
|
||||
{count}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,36 @@
|
||||
<script lang="ts">
|
||||
import { Calendar, Plus, Split, Webhook } from 'lucide-svelte'
|
||||
import { getStateColor } from '../../util'
|
||||
import TriggerButton from './TriggerButton.svelte'
|
||||
|
||||
export let darkMode: boolean = false
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="text-xs border-x border-t py-1 px-2 rounded-t-sm w-min border-surface-selected"
|
||||
style={`background-color: ${getStateColor(undefined, darkMode)};`}
|
||||
>
|
||||
Triggers
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="flex flex-row gap-4 border p-2 rounded-b-lg rounded-r-lg border-surface-selected relative"
|
||||
>
|
||||
<TriggerButton>
|
||||
<Webhook size={14} />
|
||||
</TriggerButton>
|
||||
<TriggerButton>
|
||||
<Calendar size={14} />
|
||||
</TriggerButton>
|
||||
<TriggerButton>
|
||||
<Split size={14} />
|
||||
</TriggerButton>
|
||||
|
||||
<div class="absolute -right-10 top-1/2 -translate-y-1/2">
|
||||
<div
|
||||
class="bg-surface hover:bg-surface-hover rounded-full border center-center text-xs relative w-6 h-6 flex flex-row gap-2"
|
||||
>
|
||||
<Plus size={14} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
5
frontend/src/routes/(root)/(logged)/routing/+page.js
Normal file
5
frontend/src/routes/(root)/(logged)/routing/+page.js
Normal file
@@ -0,0 +1,5 @@
|
||||
export function load() {
|
||||
return {
|
||||
stuff: { title: 'Routing' }
|
||||
}
|
||||
}
|
||||
86
frontend/src/routes/(root)/(logged)/routing/+page.svelte
Normal file
86
frontend/src/routes/(root)/(logged)/routing/+page.svelte
Normal file
@@ -0,0 +1,86 @@
|
||||
<script lang="ts">
|
||||
import CenteredPage from '$lib/components/CenteredPage.svelte'
|
||||
import { Badge, Button } from '$lib/components/common'
|
||||
import PageHeader from '$lib/components/PageHeader.svelte'
|
||||
import DataTable from '$lib/components/table/DataTable.svelte'
|
||||
import Head from '$lib/components/table/Head.svelte'
|
||||
import Cell from '$lib/components/table/Cell.svelte'
|
||||
import { Plus } from 'lucide-svelte'
|
||||
|
||||
const workers: {
|
||||
method: string
|
||||
route: string
|
||||
path: string
|
||||
}[] = [
|
||||
{
|
||||
method: 'GET',
|
||||
route: '/api/v1/{:id}/flows',
|
||||
path: 'flows'
|
||||
},
|
||||
{
|
||||
method: 'POST',
|
||||
route: '/api/v1/flows',
|
||||
path: 'flows'
|
||||
},
|
||||
{
|
||||
method: 'GET',
|
||||
route: '/api/v1/flows/:id',
|
||||
path: 'flows'
|
||||
},
|
||||
{
|
||||
method: 'PUT',
|
||||
route: '/api/v1/flows/:id',
|
||||
path: 'flows'
|
||||
},
|
||||
{
|
||||
method: 'DELETE',
|
||||
route: '/api/v1/flows/:id',
|
||||
path: 'flows'
|
||||
}
|
||||
]
|
||||
</script>
|
||||
|
||||
<CenteredPage>
|
||||
<PageHeader
|
||||
title="Routing"
|
||||
tooltip="Trigger Scripts and Flows according to a cron schedule"
|
||||
documentationLink="https://www.windmill.dev/docs/core_concepts/routing"
|
||||
>
|
||||
<Button size="md" startIcon={{ icon: Plus }} on:click={() => {}}>New route</Button>
|
||||
</PageHeader>
|
||||
<div class="w-full h-full flex flex-col">
|
||||
<DataTable>
|
||||
<Head>
|
||||
<tr>
|
||||
<Cell head first class="w-24">Method</Cell>
|
||||
<Cell head>Path</Cell>
|
||||
<Cell head last>Flow/Script</Cell>
|
||||
</tr>
|
||||
</Head>
|
||||
<tbody class="divide-y">
|
||||
{#each workers as x}
|
||||
<tr>
|
||||
<Cell first class="!w-24">
|
||||
<select value={x.method} class="!w-24">
|
||||
<option value="GET" class="!text-green-500">GET</option>
|
||||
<option value="POST">POST</option>
|
||||
<option value="PUT">PUT</option>
|
||||
<option value="DELETE">DELETE</option>
|
||||
</select>
|
||||
</Cell>
|
||||
<Cell>
|
||||
<Badge small>
|
||||
{x.route}
|
||||
</Badge>
|
||||
</Cell>
|
||||
<Cell last>
|
||||
<Badge small>
|
||||
{x.path}
|
||||
</Badge>
|
||||
</Cell>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</DataTable>
|
||||
</div>
|
||||
</CenteredPage>
|
||||
Reference in New Issue
Block a user