PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / assets / src / components / wizard / Wizard.jsx
advanced-ads / assets / src / components / wizard Last commit date
Wizard.jsx 1 year ago index.js 1 year ago useWizard.js 1 year ago wizardContext.js 1 year ago
Wizard.jsx
109 lines
1 /* eslint-disable import/no-extraneous-dependencies */
2 import {
3 cloneElement,
4 memo,
5 useMemo,
6 useRef,
7 useState,
8 Children,
9 } from '@wordpress/element';
10
11 /**
12 * Internal Dependencies
13 */
14 import WizardContext from './wizardContext';
15
16 const Wizard = memo(
17 ({ header, footer, children, wrapper: Wrapper, startIndex = 1 }) => {
18 const [activeStep, setActiveStep] = useState(startIndex - 1);
19 const [isLoading, setIsLoading] = useState(false);
20 const hasNextStep = useRef(true);
21 const hasPreviousStep = useRef(false);
22 const nextStepHandler = useRef(() => {});
23 const stepCount = Children.toArray(children).length;
24
25 hasNextStep.current = activeStep < stepCount - 1;
26 hasPreviousStep.current = activeStep > 0;
27
28 const goToNextStep = useRef(() => {
29 if (hasNextStep.current) {
30 setActiveStep((newActiveStep) => newActiveStep + 1);
31 }
32 });
33
34 const goToPreviousStep = useRef(() => {
35 if (hasPreviousStep.current) {
36 nextStepHandler.current = null;
37 setActiveStep((newActiveStep) => newActiveStep - 1);
38 }
39 });
40
41 const goToStep = useRef((stepIndex) => {
42 if (stepIndex >= 0 && stepIndex < stepCount) {
43 nextStepHandler.current = null;
44 setActiveStep(stepIndex);
45 }
46 });
47
48 // Callback to attach the step handler
49 const handleStep = useRef((handler) => {
50 nextStepHandler.current = handler;
51 });
52
53 const doNextStep = useRef(async () => {
54 if (hasNextStep.current && nextStepHandler.current) {
55 try {
56 setIsLoading(true);
57 await nextStepHandler.current();
58 setIsLoading(false);
59 nextStepHandler.current = null;
60 goToNextStep.current();
61 } catch (error) {
62 setIsLoading(false);
63 throw error;
64 }
65 } else {
66 goToNextStep.current();
67 }
68 });
69
70 const wizardValue = useMemo(
71 () => ({
72 nextStep: doNextStep.current,
73 previousStep: goToPreviousStep.current,
74 handleStep: handleStep.current,
75 isLoading,
76 activeStep,
77 stepCount,
78 isFirstStep: !hasPreviousStep.current,
79 isLastStep: !hasNextStep.current,
80 goToStep: goToStep.current,
81 }),
82 [activeStep, stepCount, isLoading]
83 );
84
85 const activeStepContent = useMemo(() => {
86 const reactChildren = Children.toArray(children);
87 return reactChildren[activeStep];
88 }, [activeStep, children]);
89
90 const enhancedActiveStepContent = useMemo(
91 () =>
92 Wrapper
93 ? cloneElement(Wrapper, { children: activeStepContent })
94 : activeStepContent,
95 [Wrapper, activeStepContent]
96 );
97
98 return (
99 <WizardContext.Provider value={wizardValue}>
100 {header}
101 {enhancedActiveStepContent}
102 {footer}
103 </WizardContext.Provider>
104 );
105 }
106 );
107
108 export default Wizard;
109