feat: initialise and preload system settings and user for setup wizard (#32108)

used in press to smoothen the signup experience
This commit is contained in:
Suhail 2025-04-15 18:30:39 +05:30 committed by GitHub
parent 20e6957312
commit dafc73836f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 73 additions and 9 deletions

View file

@ -417,10 +417,19 @@ frappe.setup.slides_settings = [
],
onload: function (slide) {
frappe.setup.utils.load_prefilled_data(slide, this.initialize_fields);
},
initialize_fields: function (slide) {
const setup_fields = function (slide) {
frappe.setup.utils.setup_region_fields(slide);
frappe.setup.utils.setup_language_field(slide);
};
if (frappe.setup.data.regional_data) {
this.setup_fields(slide);
} else {
frappe.setup.utils.load_regional_data(slide, this.setup_fields);
frappe.setup.utils.load_regional_data(slide, setup_fields);
}
if (!slide.get_value("language")) {
let session_language =
@ -439,11 +448,6 @@ frappe.setup.slides_settings = [
frappe.setup.utils.bind_region_events(slide);
frappe.setup.utils.bind_language_events(slide);
},
setup_fields: function (slide) {
frappe.setup.utils.setup_region_fields(slide);
frappe.setup.utils.setup_language_field(slide);
},
},
{
// Profile slide
@ -471,6 +475,7 @@ frappe.setup.slides_settings = [
: __("Update Password"),
fieldtype: "Password",
length: 512,
depends_on: "eval:!frappe.boot.is_fc_site",
},
],
@ -488,7 +493,7 @@ frappe.setup.slides_settings = [
} else {
slide.form.fields_dict.email.df.reqd = 1;
slide.form.fields_dict.email.refresh();
slide.form.fields_dict.password.df.reqd = 1;
if (!frappe.boot.is_fc_site) slide.form.fields_dict.password.df.reqd = 1;
slide.form.fields_dict.password.refresh();
frappe.setup.utils.load_user_details(slide, this.setup_fields);
@ -508,6 +513,37 @@ frappe.setup.slides_settings = [
];
frappe.setup.utils = {
load_prefilled_data: function (slide, callback) {
frappe.db
.get_value("System Settings", "System Settings", [
"country",
"timezone",
"currency",
"language",
])
.then((r) => {
if (r.message) {
frappe.wizard.values.currency = r.message.currency;
frappe.wizard.values.country = r.message.country;
frappe.wizard.values.timezone = r.message.timezone;
frappe.wizard.values.language = r.message.language;
frappe.db.get_value(
"User",
{ name: ["not in", ["Administrator", "Guest"]] },
["full_name", "email"],
(r) => {
if (r) {
frappe.wizard.values.full_name = r.full_name;
frappe.wizard.values.email = r.email;
}
}
);
}
callback(slide);
});
},
load_regional_data: function (slide, callback) {
frappe.call({
method: "frappe.geo.country_info.get_country_timezone_info",

View file

@ -61,6 +61,35 @@ def setup_complete(args):
return process_setup_stages(stages, args)
@frappe.whitelist()
def initialize_system_settings_and_user(system_settings_data, user_data):
system_settings = frappe.get_single("System Settings")
if cint(system_settings.setup_complete):
return
system_settings_data = parse_args(sanitize_input(system_settings_data))
system_settings.update(
{
"language": system_settings_data.get("language"),
"country": system_settings_data.get("country"),
"currency": system_settings_data.get("currency"),
"time_zone": system_settings_data.get("time_zone"),
}
)
system_settings.save()
user_data = parse_args(sanitize_input(user_data))
frappe.get_doc(
{
"doctype": "User",
"email": user_data.get("email"),
"first_name": user_data.get("first_name"),
"last_name": user_data.get("last_name"),
}
).insert()
@frappe.task()
def process_setup_stages(stages, user_input, is_background_task=False):
from frappe.utils.telemetry import capture

View file

@ -77,8 +77,7 @@ def api(method, data=None):
@frappe.whitelist()
def is_fc_site() -> bool:
is_system_manager = frappe.get_roles(frappe.session.user).count("System Manager")
setup_completed = frappe.get_system_settings("setup_complete")
return bool(is_system_manager and setup_completed and frappe.conf.get("fc_communication_secret"))
return bool(is_system_manager and frappe.conf.get("fc_communication_secret"))
# login to frappe cloud dashboard