make app public page not require login at all
This commit is contained in:
@@ -11,8 +11,8 @@ use serde::Deserialize;
|
||||
|
||||
use crate::error::{Error, Result};
|
||||
|
||||
pub const MAX_PER_PAGE: usize = 1000;
|
||||
pub const DEFAULT_PER_PAGE: usize = 100;
|
||||
pub const MAX_PER_PAGE: usize = 10000;
|
||||
pub const DEFAULT_PER_PAGE: usize = 1000;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct Pagination {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
|
||||
import { Icon } from 'svelte-awesome'
|
||||
import { fade } from 'svelte/transition'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
import { Drawer, DrawerContent } from './common'
|
||||
|
||||
export let content: string | undefined
|
||||
@@ -52,10 +50,9 @@
|
||||
{/if}
|
||||
|
||||
<pre class="whitespace-pre-wrap break-words bg-gray-50 text-xs w-full p-2"
|
||||
>{#if content}<span>{content}</span>{:else if isLoading}<Icon
|
||||
data={faSpinner}
|
||||
class="animate-spin"
|
||||
/>{:else}<span class="text-gray-600">No logs are available yet</span>{/if}</pre
|
||||
>{#if content}<span>{content}</span>{:else if isLoading}
|
||||
<Loader2 class="animate-spin" />
|
||||
{:else}<span class="text-gray-600">No logs are available yet</span>{/if}</pre
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
import LogViewer from './LogViewer.svelte'
|
||||
import DisplayResult from './DisplayResult.svelte'
|
||||
import Button from './common/button/Button.svelte'
|
||||
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
|
||||
import { flowStateStore } from './flows/flowState'
|
||||
import { flowStore } from './flows/flowStore'
|
||||
import { workspaceStore } from '$lib/stores'
|
||||
import { Icon } from 'svelte-awesome'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
|
||||
export let mod: FlowModule
|
||||
export let schema: Schema
|
||||
@@ -77,16 +77,8 @@
|
||||
bind:args={stepArgs}
|
||||
/>
|
||||
{#if testIsLoading}
|
||||
<Button
|
||||
on:click={testJobLoader?.cancelJob}
|
||||
btnClasses="w-full mt-4"
|
||||
color="red"
|
||||
size="sm"
|
||||
startIcon={{
|
||||
icon: faSpinner,
|
||||
classes: 'animate-spin'
|
||||
}}
|
||||
>
|
||||
<Button on:click={testJobLoader?.cancelJob} btnClasses="w-full mt-4" color="red" size="sm">
|
||||
<Loader2 class="animate-spin mr-1" />
|
||||
Cancel
|
||||
</Button>
|
||||
{/if}
|
||||
@@ -104,7 +96,7 @@
|
||||
{:else}
|
||||
<div class="p-2">
|
||||
{#if testIsLoading}
|
||||
<Icon data={faSpinner} class="animate-spin" />
|
||||
<Loader2 class="animate-spin" />
|
||||
{:else}
|
||||
Test to see the result here
|
||||
{/if}
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
workspace: workspace!,
|
||||
id,
|
||||
running: job.running,
|
||||
logOffset: job.logs?.length ?? 0
|
||||
logOffset: job.logs?.length ? job.logs?.length + 1 : 0
|
||||
})
|
||||
|
||||
if (previewJobUpdates.new_logs) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { Button, type ButtonType } from '$lib/components/common'
|
||||
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
import { getContext } from 'svelte'
|
||||
import type { AppInput } from '../../inputType'
|
||||
import type { Output } from '../../rx'
|
||||
@@ -83,16 +83,12 @@
|
||||
}}
|
||||
{size}
|
||||
{color}
|
||||
endIcon={loading
|
||||
? {
|
||||
icon: faSpinner,
|
||||
classes: 'animate-spin w-4'
|
||||
}
|
||||
: undefined}
|
||||
>
|
||||
{labelValue}
|
||||
{#if !loading}
|
||||
<span class="w-5" />
|
||||
{:else}
|
||||
<Loader2 class="animate-spin" />
|
||||
{/if}
|
||||
</Button>
|
||||
</AlignWrapper>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
'dateinputcomponent'
|
||||
],
|
||||
'2:12-4:12': ['barchartcomponent', 'piechartcomponent', 'formcomponent', 'displaycomponent'],
|
||||
'3:6-6:8': ['tablecomponent']
|
||||
'3:10-6:12': ['tablecomponent']
|
||||
}
|
||||
// Finds the key that is associated with the component type and extracts the dimensions from it
|
||||
const [dimension] = Object.entries(dimensions).find(([_, value]) =>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import Icon from 'svelte-awesome'
|
||||
import { ButtonType } from './model'
|
||||
import { goto } from '$app/navigation'
|
||||
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
|
||||
export let size: ButtonType.Size = 'md'
|
||||
export let spacingSize: ButtonType.Size = size
|
||||
@@ -118,11 +118,7 @@
|
||||
type="submit"
|
||||
>
|
||||
{#if loading}
|
||||
<Icon
|
||||
data={faSpinner}
|
||||
class={`animate-spin ${startIconClass}`}
|
||||
scale={ButtonType.IconScale[size]}
|
||||
/>
|
||||
<Loader2 class="animate-spin mr-1" size={14} />
|
||||
{:else if startIcon}
|
||||
<Icon data={startIcon.icon} class={startIconClass} scale={ButtonType.IconScale[size]} />
|
||||
{/if}
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
</div>
|
||||
|
||||
<h3 class="mb-2 mt-6"
|
||||
>Use pre-made <span class="text-blue-500">{kind == 'script' ? 'common' : kind}</span> script</h3
|
||||
>Use pre-made <span class="text-blue-500">{kind == 'script' ? 'action' : kind}</span> script</h3
|
||||
>
|
||||
{#if pick_existing == 'hub'}
|
||||
<PickHubScript bind:filter {kind} on:pick>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import LogViewer from '../LogViewer.svelte'
|
||||
import { Pane } from 'svelte-splitpanes'
|
||||
import SplitPanesWrapper from '../splitPanes/SplitPanesWrapper.svelte'
|
||||
import { fade } from 'svelte/transition'
|
||||
import { Loader, Loader2 } from 'lucide-svelte'
|
||||
|
||||
export let path: string | undefined
|
||||
export let lang: Preview.language
|
||||
@@ -78,21 +78,25 @@
|
||||
-->
|
||||
{#if selectedTab === 'logs'}
|
||||
<SplitPanesWrapper horizontal>
|
||||
<Pane class="!duration-[0ms] relative">
|
||||
<Pane class="relative">
|
||||
<LogViewer
|
||||
duration={previewJob?.['duration_ms']}
|
||||
content={previewJob?.logs}
|
||||
isLoading={previewIsLoading}
|
||||
/>
|
||||
</Pane>
|
||||
<Pane class="!duration-[0ms]">
|
||||
<Pane>
|
||||
{#if previewJob != undefined && 'result' in previewJob && previewJob.result != undefined}
|
||||
<pre class="overflow-x-auto break-words relative h-full p-2"
|
||||
><DisplayResult result={previewJob.result} />
|
||||
</pre>
|
||||
{:else}
|
||||
<div class="text-sm text-gray-600 p-2">
|
||||
{previewIsLoading ? '' : 'Test to see the result here'}
|
||||
{#if previewIsLoading}
|
||||
<Loader2 class="animate-spin" />
|
||||
{:else}
|
||||
Test to see the result here'
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</Pane>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
import { OauthService } from '$lib/gen'
|
||||
import { oauthStore } from '$lib/stores'
|
||||
import Icon from 'svelte-awesome'
|
||||
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
|
||||
import CenteredPage from '$lib/components/CenteredPage.svelte'
|
||||
import PageHeader from '$lib/components/PageHeader.svelte'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
|
||||
let client_name = $page.params.client_name
|
||||
let error = $page.url.searchParams.get('error')
|
||||
@@ -41,6 +41,6 @@
|
||||
<CenteredPage>
|
||||
<PageHeader title="Connection to {client_name} in progress" />
|
||||
<div class="mx-auto w-0">
|
||||
<Icon class="animate-spin" data={faSpinner} scale={2.0} />
|
||||
<Loader2 class="animate-spin" />
|
||||
</div>
|
||||
</CenteredPage>
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
import { goto } from '$app/navigation'
|
||||
import Popover from '$lib/components/Popover.svelte'
|
||||
import ScheduleEditor from '$lib/components/ScheduleEditor.svelte'
|
||||
import { Loader2 } from 'lucide-svelte'
|
||||
|
||||
let userSettings: UserSettings
|
||||
let script: Script | undefined
|
||||
@@ -232,10 +233,8 @@
|
||||
</Badge>
|
||||
{/if}
|
||||
{#if deploymentInProgress}
|
||||
<Badge
|
||||
color="yellow"
|
||||
icon={{ data: faSpinner, position: 'right', class: 'animate-spin' }}
|
||||
>
|
||||
<Badge color="yellow">
|
||||
<Loader2 class="animate-spin mr-2" />
|
||||
Deployment in progress
|
||||
</Badge>
|
||||
{/if}
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
import type { EditorBreakpoint } from '$lib/components/apps/types'
|
||||
|
||||
import { Skeleton } from '$lib/components/common'
|
||||
import { AppService, AppWithLastVersion } from '$lib/gen'
|
||||
import { WindmillIcon } from '$lib/components/icons'
|
||||
import { AppService, AppWithLastVersion, GlobalUserInfo, UserService } from '$lib/gen'
|
||||
import { writable } from 'svelte/store'
|
||||
|
||||
let app: AppWithLastVersion | undefined = undefined
|
||||
let user: GlobalUserInfo | undefined = undefined
|
||||
|
||||
async function loadApp() {
|
||||
app = await AppService.getPublicAppBySecret({
|
||||
@@ -17,14 +19,35 @@
|
||||
})
|
||||
}
|
||||
|
||||
async function loadUser() {
|
||||
try {
|
||||
user = await UserService.globalWhoami()
|
||||
} catch (e) {}
|
||||
}
|
||||
if (browser) {
|
||||
loadApp()
|
||||
loadUser()
|
||||
}
|
||||
|
||||
const breakpoint = writable<EditorBreakpoint>('lg')
|
||||
</script>
|
||||
|
||||
<div class="z-50 text-xs fixed bottom-1 right-2 ">
|
||||
<a href="https://windmill.dev" class="whitespace-nowrap text-gray-500 inline-flex items-center"
|
||||
>Powered by <WindmillIcon /> Windmill</a
|
||||
>
|
||||
</div>
|
||||
{#if app}
|
||||
<div class="z-50 text-xs text-gray-500 fixed top-1 left-2">
|
||||
<div>
|
||||
{#if user}
|
||||
Logged in as {user.email}
|
||||
{:else}
|
||||
Not logged in
|
||||
{/if}
|
||||
</div>
|
||||
<a class="text-blue-400" href="/">Go to app</a>
|
||||
</div>
|
||||
<div class="border rounded-md p-2 w-full">
|
||||
<AppPreview
|
||||
workspace={$page.params.workspace}
|
||||
@@ -36,5 +59,5 @@
|
||||
/>
|
||||
</div>
|
||||
{:else}
|
||||
<Skeleton layout={[10]} />
|
||||
<Skeleton layout={[[4], 0.5, [50]]} />
|
||||
{/if}
|
||||
Reference in New Issue
Block a user