PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / hooks / useCompleteOnboarding.js
presto-player / src / admin / dashboard / hooks Last commit date
test 1 month ago useCompleteOnboarding.js 1 month ago useDateRangePicker.js 2 months ago useEmail.ts 2 months ago useEngagementChartData.js 2 months ago useLicenseSettings.js 2 months ago useLink.js 2 months ago useMediaDetail.js 2 months ago useMediaLibrary.js 2 months ago useMediaList.ts 1 month ago usePerformanceSettings.js 2 months ago useRegisterActivePage.js 2 months ago useSettingOption.js 2 months ago useSimpleSettingsPage.js 2 months ago useTopPerforming.js 2 months ago useTopVideosPaginated.js 2 months ago useUpgradeCTA.js 2 months ago useUserDetail.js 2 months ago
useCompleteOnboarding.js
72 lines
1 import { useEffect, useState } from "react";
2 import wpApiFetch from "@wordpress/api-fetch";
3
4 // Shared across hook instances so the topbar Exit can't race a step's own
5 // finish request (e.g. Activate License on the premium step), and so every
6 // instance's `isSubmitting` tracks the real guard — the topbar Exit disables
7 // while ANY step's request is in flight, not just its own.
8 // INVARIANT: every submit path below ends in a navigation, so the guard
9 // never resets in the browser. If you add a submit that doesn't navigate,
10 // reset the guard in its finally — otherwise it latches and blocks forever.
11 let inFlight = false;
12 const listeners = new Set();
13
14 const setInFlight = (value) => {
15 inFlight = value;
16 listeners.forEach((notify) => notify());
17 };
18
19 // jsdom doesn't unload pages, so specs reset the guard between cases.
20 export const __resetInFlightForTests = () => {
21 setInFlight(false);
22 };
23
24 const useCompleteOnboarding = () => {
25 const [isSubmitting, setIsSubmitting] = useState(inFlight);
26
27 // Track the shared guard so isSubmitting reflects any instance's request,
28 // keeping the topbar Exit disabled while another step is mid-submit.
29 useEffect(() => {
30 const notify = () => setIsSubmitting(inFlight);
31 listeners.add(notify);
32 notify();
33 return () => {
34 listeners.delete(notify);
35 };
36 }, []);
37
38 const setStatus = async (data, redirectUrl) => {
39 if (inFlight) return;
40 setInFlight(true);
41
42 try {
43 await wpApiFetch({
44 path: "/presto-player/v1/onboarding/set-status",
45 method: "POST",
46 data,
47 });
48 } catch (error) {
49 console.error("Error saving onboarding status:", error);
50 }
51
52 window.location.href = redirectUrl;
53 };
54
55 const completeOnboarding = (redirectUrl) =>
56 setStatus({ status: "completed" }, redirectUrl);
57
58 // Pass the step id the user bailed on, or null when exiting from the
59 // done step (that's a completion, not a skip).
60 const exitOnboarding = (skippedOnStep) =>
61 setStatus(
62 skippedOnStep
63 ? { status: "skipped", skipped_on_step: skippedOnStep }
64 : { status: "completed" },
65 window.prestoPlayer?.dashboardUrl || "admin.php?page=presto-dashboard"
66 );
67
68 return { completeOnboarding, exitOnboarding, isSubmitting };
69 };
70
71 export default useCompleteOnboarding;
72