67 lines
1.6 KiB
JavaScript
67 lines
1.6 KiB
JavaScript
import { createApp } from "vue";
|
|
import { createPinia } from "pinia";
|
|
import { useStore } from "./store";
|
|
import WorkflowBuilderComponent from "./WorkflowBuilder.vue";
|
|
import { registerGlobalComponents } from "./globals.js";
|
|
|
|
class WorkflowBuilder {
|
|
constructor({ wrapper, page, workflow }) {
|
|
this.$wrapper = $(wrapper);
|
|
this.page = page;
|
|
this.workflow = workflow;
|
|
|
|
this.init();
|
|
}
|
|
|
|
init() {
|
|
// set page title
|
|
this.page.set_title(__("Editing {0}", [this.workflow]));
|
|
|
|
this.setup_page_actions();
|
|
this.setup_app();
|
|
}
|
|
|
|
setup_page_actions() {
|
|
// clear actions
|
|
this.page.clear_actions();
|
|
this.page.clear_menu();
|
|
this.page.clear_custom_actions();
|
|
|
|
// setup page actions
|
|
this.primary_btn = this.page.set_primary_action(__("Save"), () =>
|
|
this.store.save_changes()
|
|
);
|
|
|
|
this.reset_changes_btn = this.page.add_button(__("Reset Changes"), () => {
|
|
this.store.reset_changes();
|
|
});
|
|
|
|
this.go_to_doctype_btn = this.page.add_menu_item(__("Go to Workflow"), () =>
|
|
frappe.set_route("Form", "Workflow", this.workflow)
|
|
);
|
|
}
|
|
|
|
setup_app() {
|
|
// create a pinia instance
|
|
let pinia = createPinia();
|
|
|
|
// create a vue instance
|
|
let app = createApp(WorkflowBuilderComponent, { workflow: this.workflow });
|
|
SetVueGlobals(app);
|
|
app.use(pinia);
|
|
|
|
// create a store
|
|
this.store = useStore();
|
|
this.store.workflow_name = this.workflow;
|
|
|
|
// register global components
|
|
registerGlobalComponents(app);
|
|
|
|
// mount the app
|
|
this.$workflow_builder = app.mount(this.$wrapper.get(0));
|
|
}
|
|
}
|
|
|
|
frappe.provide("frappe.ui");
|
|
frappe.ui.WorkflowBuilder = WorkflowBuilder;
|
|
export default WorkflowBuilder;
|