PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 week ago useCompleteOnboarding.js 1 week ago useDateRangePicker.js 1 month ago useEmail.ts 1 month ago useEngagementChartData.js 1 month ago useLicenseSettings.js 1 month ago useLink.js 1 month ago useMediaDetail.js 1 month ago useMediaLibrary.js 1 month ago useMediaList.ts 1 month ago usePerformanceSettings.js 1 month ago useRegisterActivePage.js 1 month ago useSettingOption.js 1 month ago useSimpleSettingsPage.js 1 month ago useTopPerforming.js 1 month ago useTopVideosPaginated.js 1 month ago useUpgradeCTA.js 1 month ago useUserDetail.js 1 month 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