Type snippetDrawer

This commit is contained in:
Adria Navarro 2025-02-21 10:21:21 +01:00
parent 39ff078978
commit 25c5f7f70c
4 changed files with 16 additions and 14 deletions

View File

@ -64,7 +64,7 @@
import { setContext, createEventDispatcher, onDestroy } from "svelte" import { setContext, createEventDispatcher, onDestroy } from "svelte"
import { generate } from "shortid" import { generate } from "shortid"
export let title export let title = null
export let forceModal = false export let forceModal = false
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()

View File

@ -56,7 +56,7 @@
export let context = null export let context = null
export let snippets: Snippet[] | null = null export let snippets: Snippet[] | null = null
export let autofocusEditor = false export let autofocusEditor = false
export let placeholder = null export let placeholder: string | null = null
export let showTabBar = true export let showTabBar = true
let mode: BindingMode let mode: BindingMode

View File

@ -620,7 +620,6 @@
padding-bottom: var(--spacing-l); padding-bottom: var(--spacing-l);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
/* gap: var(--spacing-s); */
} }
.snippet { .snippet {
font-size: var(--font-size-s); font-size: var(--font-size-s);

View File

@ -1,4 +1,4 @@
<script> <script lang="ts">
import { import {
Button, Button,
Drawer, Drawer,
@ -14,6 +14,7 @@
import { getSequentialName } from "@/helpers/duplicate" import { getSequentialName } from "@/helpers/duplicate"
import ConfirmDialog from "@/components/common/ConfirmDialog.svelte" import ConfirmDialog from "@/components/common/ConfirmDialog.svelte"
import { ValidSnippetNameRegex } from "@budibase/shared-core" import { ValidSnippetNameRegex } from "@budibase/shared-core"
import { Snippet } from "@budibase/types"
export let snippet export let snippet
@ -22,11 +23,11 @@
const firstCharNumberRegex = /^[0-9].*$/ const firstCharNumberRegex = /^[0-9].*$/
let drawer let drawer: Drawer
let name = "" let name = ""
let code = "" let code = ""
let loading = false let loading = false
let deleteConfirmationDialog let deleteConfirmationDialog: ConfirmDialog
$: defaultName = getSequentialName($snippets, "MySnippet", { $: defaultName = getSequentialName($snippets, "MySnippet", {
getName: x => x.name, getName: x => x.name,
@ -40,11 +41,11 @@
const saveSnippet = async () => { const saveSnippet = async () => {
loading = true loading = true
try { try {
const newSnippet = { name, code: rawJS } const newSnippet: Snippet = { name, code: rawJS || "" }
await snippets.saveSnippet(newSnippet) await snippets.saveSnippet(newSnippet)
drawer.hide() drawer.hide()
notifications.success(`Snippet ${newSnippet.name} saved`) notifications.success(`Snippet ${newSnippet.name} saved`)
} catch (error) { } catch (error: any) {
notifications.error(error.message || "Error saving snippet") notifications.error(error.message || "Error saving snippet")
} }
loading = false loading = false
@ -61,7 +62,7 @@
loading = false loading = false
} }
const validateName = (name, snippets) => { const validateName = (name: string, snippets: Snippet[]) => {
if (!name?.length) { if (!name?.length) {
return "Name is required" return "Name is required"
} }
@ -78,7 +79,7 @@
} }
</script> </script>
<Drawer bind:this={drawer}> <Drawer bind:this={drawer} forceModal>
<svelte:fragment slot="title"> <svelte:fragment slot="title">
{#if snippet} {#if snippet}
{snippet.name} {snippet.name}
@ -108,7 +109,11 @@
Delete Delete
</Button> </Button>
{/if} {/if}
<Button cta on:click={saveSnippet} disabled={!code || loading || nameError}> <Button
cta
on:click={saveSnippet}
disabled={!code || loading || !!nameError}
>
Save Save
</Button> </Button>
</svelte:fragment> </svelte:fragment>
@ -124,9 +129,7 @@
value={code} value={code}
on:change={e => (code = e.detail)} on:change={e => (code = e.detail)}
> >
<div slot="tabs">
<Input placeholder="Name" /> <Input placeholder="Name" />
</div>
</BindingPanel> </BindingPanel>
{/key} {/key}
</svelte:fragment> </svelte:fragment>