diff --git a/packages/web/src/Screen.svelte b/packages/web/src/Screen.svelte
index 3d0ab19eb..5d87f3308 100644
--- a/packages/web/src/Screen.svelte
+++ b/packages/web/src/Screen.svelte
@@ -6,6 +6,7 @@
currentThemeDefinition,
isFileDragActive,
leftPanelWidth,
+ openedSnackbars,
selectedWidget,
visibleCommandPalette,
visibleToolbar,
@@ -17,11 +18,13 @@
import splitterDrag from './utility/splitterDrag';
import CurrentDropDownMenu from './modals/CurrentDropDownMenu.svelte';
import StatusBar from './widgets/StatusBar.svelte';
+ import Snackbar from './widgets/Snackbar.svelte';
import ModalLayer from './modals/ModalLayer.svelte';
import DragAndDropFileTarget from './DragAndDropFileTarget.svelte';
import dragDropFileTarget from './utility/dragDropFileTarget';
$: currentThemeType = $currentThemeDefinition?.themeType == 'dark' ? 'theme-type-dark' : 'theme-type-light';
+
@@ -64,6 +67,11 @@
{#if $isFileDragActive}
{/if}
+
+ {#each $openedSnackbars as snackbar}
+
+ {/each}
+
diff --git a/packages/web/src/datagrid/SqlDataGridCore.svelte b/packages/web/src/datagrid/SqlDataGridCore.svelte
index f1c8ae84f..d25829c43 100644
--- a/packages/web/src/datagrid/SqlDataGridCore.svelte
+++ b/packages/web/src/datagrid/SqlDataGridCore.svelte
@@ -71,11 +71,7 @@
+ import { openedSnackbars } from '../stores';
+
+ export interface SnackbarButton {
+ label: string;
+ onClick: Function;
+ }
+
+ export interface SnackbarInfo {
+ message: string;
+ icon?: string;
+ autoClose?: boolean;
+ allowClose?: boolean;
+ buttons?: SnackbarButton[];
+ }
+
+ let lastSnackbarId = 0;
+
+ export function showSnackbar(snackbar: SnackbarInfo) {
+ lastSnackbarId += 1;
+ openedSnackbars.update(x => [
+ ...x,
+ {
+ ...snackbar,
+ id: lastSnackbarId,
+ },
+ ]);
+ }
+
+ export function showSnackbarSuccess(message: string) {
+ showSnackbar({
+ message,
+ icon: 'img ok',
+ allowClose: true,
+ autoClose: true,
+ });
+ }
+
+// showSnackbar({
+// icon: 'img ok',
+// message: 'Test snackbar',
+// allowClose: true,
+// });
+// showSnackbar({
+// icon: 'img ok',
+// message: 'Auto close',
+// autoClose: true,
+// });
+// showSnackbar({
+// icon: 'img warn',
+// message: 'Buttons',
+// buttons: [{ label: 'OK', onClick: () => console.log('OK') }],
+// });
+
+
+
+
+
+
+
+
+ {message}
+
+
+ {#if allowClose}
+
+
+
+ {/if}
+
+ {#if buttons?.length > 0}
+
+ {/if}
+
+
+