refactor: remove form tour settings

This commit is contained in:
Ankush Menat 2023-05-25 14:07:19 +05:30
parent 639de716d5
commit 81c103a741
12 changed files with 36 additions and 213 deletions

View file

@ -8,6 +8,7 @@ import frappe
import frappe.defaults
import frappe.desk.desk_page
from frappe.core.doctype.navbar_settings.navbar_settings import get_app_logo, get_navbar_settings
from frappe.desk.doctype.form_tour.form_tour import get_onboarding_ui_tours
from frappe.desk.doctype.route_history.route_history import frequently_visited_links
from frappe.desk.form.load import get_meta_bundle
from frappe.email.inbox import get_email_accounts
@ -68,11 +69,7 @@ def get_bootinfo():
bootinfo.home_folder = frappe.db.get_value("File", {"is_home_folder": 1})
bootinfo.navbar_settings = get_navbar_settings()
bootinfo.notification_settings = get_notification_settings()
bootinfo.onboarding_tours = (
frappe.parse_json(frappe.db.get_single_value("Form Tour Settings", "onboarding_tours") or "[]")
if frappe.get_system_settings("enable_onboarding")
else []
)
bootinfo.onboarding_tours = get_onboarding_ui_tours()
set_time_zone(bootinfo)
# ipinfo

View file

@ -1,6 +1,8 @@
# Copyright (c) 2021, Frappe Technologies and contributors
# License: MIT. See LICENSE
import json
import frappe
from frappe.model.document import Document
from frappe.modules.export_file import export_to_files
@ -32,40 +34,12 @@ class FormTour(Document):
def on_update(self):
frappe.cache().delete_key("bootinfo")
if self.ui_tour:
form_tour_settings = frappe.get_doc("Form Tour Settings", "Form Tour Settings")
in_settings = False
child_index = 0
for tour in form_tour_settings.form_tours:
if tour.form_tour == self.name:
in_settings = True
child_index = tour.idx
form_tour_settings.remove(tour)
if not in_settings:
child_index = len(form_tour_settings.form_tours) + 1
child = frappe.new_doc("Form Tour Settings Item")
child.update(
{
"idx": child_index,
"form_tour": self.name,
"parent": "Form Tour Settings",
"parentfield": "form_tours",
"parenttype": "Form Tour Settings",
}
)
child.save()
form_tour_settings.form_tours.insert(child_index, child)
form_tour_settings.save()
if frappe.conf.developer_mode and self.is_standard:
export_to_files([["Form Tour", self.name]], self.module)
def on_trash(self):
if self.ui_tour:
form_tour_settings = frappe.get_doc("Form Tour Settings", "Form Tour Settings")
for tour in form_tour_settings.form_tours:
if tour.form_tour == self.name:
form_tour_settings.remove(tour)
form_tour_settings.save()
frappe.cache().delete_key("bootinfo")
@frappe.whitelist()
@ -76,3 +50,31 @@ def reset_tour(tour_name):
onboarding_status.pop(tour_name, None)
user_doc.onboarding_status = frappe.as_json(onboarding_status)
user_doc.save()
@frappe.whitelist()
def update_user_status(value, step):
from frappe.utils.telemetry import capture
step = frappe.parse_json(step)
tour = frappe.parse_json(value)
capture(
frappe.scrub(f"{step.parent}_{step.title}"),
app="frappe_ui_tours",
properties={"is_completed": tour.is_completed},
)
frappe.db.set_value(
"User", frappe.session.user, "onboarding_status", value, update_modified=False
)
frappe.cache().hdel("bootinfo", frappe.session.user)
def get_onboarding_ui_tours():
if not frappe.get_system_settings("enable_onboarding"):
return []
ui_tours = frappe.get_all("Form Tour", filters={"ui_tour": 1}, fields=["page_route", "name"])
return [[tour.name, json.loads(tour.page_route)] for tour in ui_tours]

View file

@ -1,12 +0,0 @@
// Copyright (c) 2023, Frappe Technologies and contributors
// For license information, please see license.txt
frappe.ui.form.on("Form Tour Settings", {
refresh(frm) {
frm.dashboard.add_comment(
"This page is used to set priority for the UI form tours. If there are more than 1 matching tours found for the page, the tour with the highest priority will run.",
"blue",
true
);
},
});

View file

@ -1,51 +0,0 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2023-05-11 18:07:26.879273",
"default_view": "List",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"onboarding_tours",
"form_tours"
],
"fields": [
{
"fieldname": "form_tours",
"fieldtype": "Table",
"label": "Form Tours",
"options": "Form Tour Settings Item"
},
{
"default": "\"[]\"",
"fieldname": "onboarding_tours",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Onboarding Tours"
}
],
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-05-24 12:05:52.676242",
"modified_by": "Administrator",
"module": "Desk",
"name": "Form Tour Settings",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View file

@ -1,32 +0,0 @@
# Copyright (c) 2023, Frappe Technologies and contributors
# For license information, please see license.txt
import json
import frappe
from frappe.model.document import Document
class FormTourSettings(Document):
def before_save(self):
self.onboarding_tours = json.dumps(
[[tour.form_tour, json.loads(tour.page_route)] for tour in self.form_tours]
)
@frappe.whitelist()
def update_user_status(value, step):
from frappe.utils.telemetry import capture
step = frappe.parse_json(step)
tour = frappe.parse_json(value)
# from frappe.utils.telemetry import capture
capture(
frappe.scrub(f"{step.parent}_{step.title}"),
app="frappe_ui_tours",
properties={"is_completed": tour.is_completed},
)
frappe.db.set_value(
"User", frappe.session.user, "onboarding_status", value, update_modified=False
)
frappe.cache().hdel("bootinfo", frappe.session.user)

View file

@ -1,9 +0,0 @@
# Copyright (c) 2023, Frappe Technologies and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestFormTourSettings(FrappeTestCase):
pass

View file

@ -1,61 +0,0 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2023-05-11 18:10:15.194034",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"form_tour",
"view",
"list_view",
"page_route"
],
"fields": [
{
"fieldname": "form_tour",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Form Tour",
"options": "Form Tour",
"read_only": 1
},
{
"fetch_from": "form_tour.view_name",
"fieldname": "view",
"fieldtype": "Data",
"in_list_view": 1,
"label": "View",
"read_only": 1
},
{
"fetch_from": "form_tour.list_name",
"fieldname": "list_view",
"fieldtype": "Data",
"in_list_view": 1,
"label": "List View",
"read_only": 1
},
{
"fetch_from": "form_tour.page_route",
"fieldname": "page_route",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 1,
"label": "Page Route",
"read_only": 1
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2023-05-17 22:22:58.507769",
"modified_by": "Administrator",
"module": "Desk",
"name": "Form Tour Settings Item",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View file

@ -1,9 +0,0 @@
# Copyright (c) 2023, Frappe Technologies and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class FormTourSettingsItem(Document):
pass

View file

@ -42,7 +42,7 @@ frappe.ui.OnboardingTour = class OnboardingTour {
}
frappe.call({
method: "frappe.desk.doctype.form_tour_settings.form_tour_settings.update_user_status",
method: "frappe.desk.doctype.form_tour.form_tour.update_user_status",
args: {
value: JSON.stringify(frappe.boot.user.onboarding_status),
step: JSON.stringify(step.options.step_info),
@ -87,7 +87,7 @@ frappe.ui.OnboardingTour = class OnboardingTour {
}
this.last_step_saved = step;
frappe.call({
method: "frappe.desk.doctype.form_tour_settings.form_tour_settings.update_user_status",
method: "frappe.desk.doctype.form_tour.form_tour.update_user_status",
args: {
value: JSON.stringify(frappe.boot.user.onboarding_status),
step: JSON.stringify(step),

View file

@ -14,8 +14,6 @@ def before_install():
frappe.reload_doc("core", "doctype", "doctype_action")
frappe.reload_doc("core", "doctype", "doctype_link")
frappe.reload_doc("desk", "doctype", "form_tour_step")
frappe.reload_doc("desk", "doctype", "form_tour_settings")
frappe.reload_doc("desk", "doctype", "form_tour_settings_item")
frappe.reload_doc("desk", "doctype", "form_tour")
frappe.reload_doc("core", "doctype", "doctype")