diff --git a/frontend/src/lib/components/apps/CreateApp.svelte b/frontend/src/lib/components/apps/CreateApp.svelte
deleted file mode 100644
index 1562408453..0000000000
--- a/frontend/src/lib/components/apps/CreateApp.svelte
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
- closeDrawer()}>
-
-
- App permissions depend on their path. Select the group
all
- to share it, and
user to keep it private.
-
docs
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte
index 968c1e8ee1..02048baefe 100644
--- a/frontend/src/lib/components/apps/editor/AppEditor.svelte
+++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte
@@ -27,8 +27,7 @@
import { userStore } from '$lib/stores'
import InlineScriptsPanel from './inlineScriptsPanel/InlineScriptsPanel.svelte'
- import TablePanel from './TablePanel.svelte'
- import { grid } from 'd3-dag'
+
import SettingsPanel from './SettingsPanel.svelte'
import { fly } from 'svelte/transition'
import type { Policy } from '$lib/gen'
@@ -72,18 +71,7 @@
function saveDraft() {
timeout && clearTimeout(timeout)
- timeout = setTimeout(
- () =>
- localStorage.setItem(
- 'app',
- encodeState({
- path,
- value: $appStore,
- policy
- })
- ),
- 500
- )
+ timeout = setTimeout(() => localStorage.setItem('app', encodeState($appStore)), 500)
}
let mounted = false
diff --git a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte
index f667abd323..a0c3d095e2 100644
--- a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte
+++ b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte
@@ -1,16 +1,20 @@
+
+ closeDrawer()}>
+
+
+
+
+
+
+
+
@@ -73,13 +132,14 @@
-
+
+ Centered
+ Full Width
+
-
+
+
+
-
+
diff --git a/frontend/src/lib/components/apps/editor/AppExportButton.svelte b/frontend/src/lib/components/apps/editor/AppExportButton.svelte
new file mode 100644
index 0000000000..504d9d57ca
--- /dev/null
+++ b/frontend/src/lib/components/apps/editor/AppExportButton.svelte
@@ -0,0 +1,46 @@
+
+
+
+
+
+ jsonViewerDrawer.toggleDrawer()}>
+
+
+
+
+
+
diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte
index 7b6421c773..b99ae35f82 100644
--- a/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte
+++ b/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte
@@ -12,6 +12,7 @@
import { faAngleDown } from '@fortawesome/free-solid-svg-icons'
import { isOpenStore } from './store'
import { gridColumns } from '../../gridUtils'
+ import { dirtyStore } from '$lib/components/common/confirmationModal/dirtyStore'
const { app, selectedComponent } = getContext('AppEditorContext')
@@ -57,6 +58,7 @@
}
function addComponent(appComponent: AppComponent) {
+ $dirtyStore = true
const grid = $app.grid ?? []
const id = getNextId(grid.map((gridItem) => gridItem.data.id))
diff --git a/frontend/src/lib/components/apps/store.ts b/frontend/src/lib/components/apps/store.ts
new file mode 100644
index 0000000000..d5d2e7cb3b
--- /dev/null
+++ b/frontend/src/lib/components/apps/store.ts
@@ -0,0 +1,7 @@
+import { writable } from "svelte/store";
+import type {
+ App,
+
+} from './types'
+
+export const importStore = writable(undefined)
\ No newline at end of file
diff --git a/frontend/src/lib/components/flows/CreateActionsApp.svelte b/frontend/src/lib/components/flows/CreateActionsApp.svelte
new file mode 100644
index 0000000000..d23ba5a9c1
--- /dev/null
+++ b/frontend/src/lib/components/flows/CreateActionsApp.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+
+ New App (alpha)
+
+ drawer?.toggleDrawer?.()}>
+ Import from raw JSON
+
+
+
+
+
+
+ drawer?.toggleDrawer?.()}>
+
+
+
+
+
+
diff --git a/frontend/src/lib/components/flows/CreateActionsFlow.svelte b/frontend/src/lib/components/flows/CreateActionsFlow.svelte
index 58a6ec53b5..cd8942a97c 100644
--- a/frontend/src/lib/components/flows/CreateActionsFlow.svelte
+++ b/frontend/src/lib/components/flows/CreateActionsFlow.svelte
@@ -23,7 +23,12 @@
-
+
New Flow
diff --git a/frontend/src/lib/components/flows/header/FlowImportExportMenu.svelte b/frontend/src/lib/components/flows/header/FlowImportExportMenu.svelte
index d9ed4f047c..91ef62b783 100644
--- a/frontend/src/lib/components/flows/header/FlowImportExportMenu.svelte
+++ b/frontend/src/lib/components/flows/header/FlowImportExportMenu.svelte
@@ -27,7 +27,7 @@
- jsonViewerDrawer.toggleDrawer()}>
+ jsonViewerDrawer.toggleDrawer()}>
{#if $flowStore}
{/if}
diff --git a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte
index 61652ad7f7..f93f2701e9 100644
--- a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte
+++ b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte
@@ -1,5 +1,5 @@
+
+{#if value}
+
+{/if}
diff --git a/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.js b/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.js
new file mode 100644
index 0000000000..1ae579cdc7
--- /dev/null
+++ b/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.js
@@ -0,0 +1,5 @@
+export function load({ params }) {
+ return {
+ stuff: { title: `Edit App ${params.path}` }
+ }
+}
diff --git a/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.svelte
index f60cc82d4f..ce73ec5355 100644
--- a/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.svelte
+++ b/frontend/src/routes/(root)/(logged)/apps/edit/[...path]/+page.svelte
@@ -11,8 +11,6 @@
let path = $page.params.path
let nodraft = $page.url.searchParams.get('nodraft')
- const initialState = nodraft ? undefined : localStorage.getItem('app')
- let stateLoadedFromUrl = initialState != undefined ? decodeState(initialState) : undefined
if (nodraft) {
goto('?', { replaceState: true })
@@ -21,15 +19,16 @@
let loading = true
async function loadApp(): Promise {
loading = true
- console.log(stateLoadedFromUrl)
- app =
- stateLoadedFromUrl != undefined && stateLoadedFromUrl?.path == path
- ? stateLoadedFromUrl
- : await AppService.getAppByPath({
- path,
- workspace: $workspaceStore!
- })
+ app = await AppService.getAppByPath({
+ path,
+ workspace: $workspaceStore!
+ })
+ const initialState = nodraft ? undefined : localStorage.getItem('app')
+ let stateLoadedFromUrl = initialState != undefined ? decodeState(initialState) : undefined
+ if (stateLoadedFromUrl) {
+ app.value = stateLoadedFromUrl
+ }
loading = false
$dirtyStore = false
}
diff --git a/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte b/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte
index bd90754bbf..4b81908ac4 100644
--- a/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte
+++ b/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte
@@ -1,4 +1,5 @@