diff --git a/frappe/public/js/frappe/widgets/onboarding_widget.js b/frappe/public/js/frappe/widgets/onboarding_widget.js index 870233cb25..8ece055a4b 100644 --- a/frappe/public/js/frappe/widgets/onboarding_widget.js +++ b/frappe/public/js/frappe/widgets/onboarding_widget.js @@ -12,16 +12,38 @@ export default class OnboardingWidget extends Widget { } add_step(step) { - let $step = $(`
- ${step.label} + let $step = $(`
+ + ${step.title}
`); + if (!step.is_complete) { + if (step.action == "Watch Video") { + $step.on('click', () => { + frappe.help.show_video(step.video_url, step.title); + this.mark_complete(step.name, $step); + }); + } else { + $step.on('click', () => { + frappe.ui.form.make_quick_entry(step.reference_document) + }); + } + } $step.appendTo(this.body); return $step; } + mark_complete(name, $step) { + frappe.call("frappe.desk.desktop.complete_onboarding_step", { + name: name + }).then(() => { + $step.removeClass('incomplete') + $step.addClass('complete') + }) + } + set_body() { this.widget.addClass("onboarding-widget-box"); if (this.is_dismissed()) { @@ -32,14 +54,16 @@ export default class OnboardingWidget extends Widget { } is_dismissed() { - let dismissed = JSON.parse(localStorage.getItem("dismissed-onboarding") || '{}'); + let dismissed = JSON.parse( + localStorage.getItem("dismissed-onboarding") || "{}" + ); if (Object.keys(dismissed).includes(this.label)) { let last_hidden = new Date(dismissed[this.label]); let today = new Date(); - let diff = frappe.datetime.get_hour_diff(today, last_hidden) + let diff = frappe.datetime.get_hour_diff(today, last_hidden); return diff < 24; } - return false + return false; } set_title(title) { @@ -54,7 +78,9 @@ export default class OnboardingWidget extends Widget { `
Dismiss
` ); dismiss.on("click", () => { - let dismissed = JSON.parse(localStorage.getItem("dismissed-onboarding") || '{}'); + let dismissed = JSON.parse( + localStorage.getItem("dismissed-onboarding") || "{}" + ); dismissed[this.label] = frappe.datetime.now_datetime(); localStorage.setItem( @@ -65,4 +91,4 @@ export default class OnboardingWidget extends Widget { }); dismiss.appendTo(this.action_area); } -} \ No newline at end of file +} diff --git a/frappe/public/less/desktop.less b/frappe/public/less/desktop.less index 349df6aa80..291653b6e6 100644 --- a/frappe/public/less/desktop.less +++ b/frappe/public/less/desktop.less @@ -319,23 +319,46 @@ .widget-body { margin-top: 20px; + display: grid; + grid-template-rows: 1fr 1fr 1fr 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr; + grid-auto-flow: column; .onboarding-step { margin-bottom: 8px; font-size: 16px; letter-spacing: 0.015em; - } - i { - padding-left: 5px; - padding-right: 12px; + i { + padding-left: 5px; + padding-right: 12px; + } &.complete { - color: @brand-primary; + i { + color: @brand-primary; + } + + span { + color: @text-color; + } } &.incomplete { - color: @text-muted; + i { + color: @text-muted; + } + + span { + color: @text-muted; + cursor: pointer; + } + + &:hover { + span { + color: @text-color; + } + } } } }