
@@ -80,21 +15,86 @@ import useCanvasStore from "@/stores/canvasStore";
import usePageStore from "@/stores/pageStore";
import { BuilderPage } from "@/types/Builder/BuilderPage";
import { triggerCopyEvent } from "@/utils/helpers";
-
import { useDark, useToggle } from "@vueuse/core";
import { Dropdown } from "frappe-ui";
+import { useRouter } from "vue-router";
const pageStore = usePageStore();
const isDark = useDark({
attribute: "data-theme",
});
+const router = useRouter();
const toggleDark = useToggle(isDark);
const canvasStore = useCanvasStore();
+const emit = defineEmits(["showSettings", "showShortcuts"]);
+
const handleCopyPage = () => {
if (!pageStore.activePage) return;
canvasStore.copyEntirePage = true;
canvasStore.requiresConfirmationForCopyingEntirePage = false;
triggerCopyEvent();
};
+
+const mainMenuOptions = [
+ {
+ group: "Builder",
+ hideLabel: true,
+ items: [{ label: "Back to Dashboard", onClick: () => router.push({ name: "home" }), icon: "arrow-left" }],
+ },
+ {
+ group: "Page",
+ hideLabel: true,
+ items: [
+ {
+ label: "New Page",
+ onClick: () => router.push({ name: "builder", params: { pageId: "new" } }),
+ icon: "plus",
+ },
+ {
+ label: "Copy Page",
+ onClick: handleCopyPage,
+ icon: "clipboard",
+ condition: () => Boolean(pageStore.activePage),
+ },
+ {
+ label: "Duplicate Page",
+ onClick: () => pageStore.duplicatePage(pageStore.activePage as BuilderPage),
+ icon: "copy",
+ },
+ {
+ label: "Delete Page",
+ onClick: () => {
+ if (!pageStore.activePage) return;
+ pageStore.deletePage(pageStore.activePage).then(() => {
+ router.push({ name: "home" });
+ });
+ },
+ icon: "trash-2",
+ condition: () => !Boolean(pageStore.activePage?.is_standard),
+ },
+ ],
+ },
+ {
+ group: "Preferences",
+ hideLabel: true,
+ items: [
+ {
+ label: `Toggle Theme`,
+ onClick: () => toggleDark(),
+ icon: isDark ? "sun" : "moon",
+ },
+ { label: "Settings", onClick: () => emit("showSettings"), icon: "settings" },
+ { label: "Shortcuts", onClick: () => emit("showShortcuts"), icon: "command" },
+ {
+ label: "Help",
+ onClick: () => {
+ // @ts-ignore
+ window.open("https://t.me/frappebuilder");
+ },
+ icon: "info",
+ },
+ ],
+ },
+];
diff --git a/frontend/src/components/Modals/NewBlockTemplate.vue b/frontend/src/components/Modals/NewBlockTemplate.vue
index 591bb8fae..06c15f915 100644
--- a/frontend/src/components/Modals/NewBlockTemplate.vue
+++ b/frontend/src/components/Modals/NewBlockTemplate.vue
@@ -1,6 +1,5 @@
diff --git a/frontend/src/components/Modals/VariableManager.vue b/frontend/src/components/Modals/VariableManager.vue
index 7a61e743a..a43a1a822 100644
--- a/frontend/src/components/Modals/VariableManager.vue
+++ b/frontend/src/components/Modals/VariableManager.vue
@@ -9,13 +9,14 @@
:width="520"
:container="container"
v-if="modelValue"
- :placement-offset="20"
+ :placement-offset-top="8"
+ :placement-offset-left="65"
action-label="Add Variable"
:action-handler="addNewVariable"
placement="top-left">