From bb8f75d4bf3fd7837b3e00fd18a9644f05ba30c1 Mon Sep 17 00:00:00 2001 From: Rafael Batista Date: Thu, 16 Apr 2026 12:34:21 -0300 Subject: [PATCH] reabertura manual --- .../controllers/onboarding_tour_controller.js | 20 +++++++++++++++++-- app/views/layouts/partials/_sidebar.html.erb | 7 +++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/javascript/controllers/onboarding_tour_controller.js b/app/javascript/controllers/onboarding_tour_controller.js index 504e89f..5c25904 100644 --- a/app/javascript/controllers/onboarding_tour_controller.js +++ b/app/javascript/controllers/onboarding_tour_controller.js @@ -27,6 +27,8 @@ export default class extends Controller { async startTour() { if (typeof window.introJs === "undefined") return + await this.resumeIfRequested() + const progress = await this.fetchProgress() const builtSteps = this.buildSteps() if (builtSteps.length === 0) return @@ -61,6 +63,13 @@ export default class extends Controller { } } + async resumeIfRequested() { + const url = new URL(window.location.href) + if (url.searchParams.get("resume_onboarding") !== "1") return + + await this.sendOperation("resume") + } + async fetchProgress() { if (!this.hasEndpointValue || !this.endpointValue) return null @@ -110,9 +119,15 @@ export default class extends Controller { } async persistLastSeen(stepKey) { - if (!this.hasEndpointValue || !this.endpointValue || !stepKey) return + await this.sendOperation("set_last_seen", stepKey) + } + + async sendOperation(operation, stepKey = null) { + if (!this.hasEndpointValue || !this.endpointValue) return const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute("content") + const body = { operation } + if (stepKey) body.step_key = stepKey try { await fetch(this.endpointValue, { @@ -123,7 +138,7 @@ export default class extends Controller { "X-CSRF-Token": csrfToken || "" }, credentials: "same-origin", - body: JSON.stringify({ operation: "set_last_seen", step_key: stepKey }) + body: JSON.stringify(body) }) } catch (_error) { // noop @@ -133,6 +148,7 @@ export default class extends Controller { clearAutoStartParam() { const url = new URL(window.location.href) url.searchParams.delete("onboarding_tour") + url.searchParams.delete("resume_onboarding") window.history.replaceState({}, "", url.toString()) } } diff --git a/app/views/layouts/partials/_sidebar.html.erb b/app/views/layouts/partials/_sidebar.html.erb index 640da97..3da847b 100644 --- a/app/views/layouts/partials/_sidebar.html.erb +++ b/app/views/layouts/partials/_sidebar.html.erb @@ -122,6 +122,13 @@ <% end %> <% end %> + <% unless current_user.tecnico? %> +
  • + <%= link_to app_dashboard_path(onboarding_tour: 1, resume_onboarding: 1) do %> + Ver tour novamente + <% end %> +
  • + <% end %> <% end %>