PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.4.1
GiveWP – Donation Plugin and Fundraising Platform v3.4.1
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / DonationForms / resources / app / utilities / useDonationFormPubSub.ts
give / src / DonationForms / resources / app / utilities Last commit date
ConvertFieldAPIRulesToJoi.ts 2 years ago PrepareFormData.ts 2 years ago amountFormatter.ts 2 years ago buildRegisterValidationOptions.ts 2 years ago conditionOperatorFunctions.js 2 years ago convertValuesToFormData.ts 2 years ago createValidationObjectFromFields.js 2 years ago generateRequestErrors.ts 2 years ago getCurrentFormUrlData.js 2 years ago getDefaultValuesFromSections.ts 2 years ago getDonationFormNodeSettings.ts 2 years ago getErrorByFieldName.ts 2 years ago getWindowData.ts 2 years ago groups.ts 2 years ago handleFormRedirect.ts 2 years ago handleFormSubmitRequest.ts 2 years ago handleValidationRequest.ts 2 years ago isRouteInlineRedirect.ts 2 years ago memoNode.ts 2 years ago mountWindowData.ts 2 years ago postData.ts 2 years ago postFormData.ts 2 years ago registerFieldAndBuildProps.tsx 2 years ago setDesignSettings.ts 2 years ago useDonationFormPubSub.ts 2 years ago
useDonationFormPubSub.ts
166 lines
1 import {RefObject, useEffect} from 'react';
2 import {iframeRef} from '@givewp/form-builder/components/canvas/DesignPreview';
3 import {FormSettings} from '@givewp/form-builder/types';
4 import {FormColors, FormGoal, RequireAtLeastOne} from '@givewp/forms/types';
5
6 /**
7 * Events used in design mode
8 */
9 export const PREVIEW_EVENTS = {
10 SETTINGS: 'preview:settings',
11 GOAL: 'preview:goal',
12 COLORS: 'preview:colors',
13 CSS: 'preview:css',
14 DESIGN_SETTINGS: 'preview:design-settings',
15 }
16
17 /**
18 * Simple Publish/Subscribe system used for handling form state in preview mode
19 *
20 * @since 3.1.0
21 */
22 export default function useDonationFormPubSub() {
23
24 const events = {};
25
26 useEffect(() => {
27 addEventListener('message', eventListener, false);
28 return () => removeEventListener('message', eventListener);
29 }, []);
30
31 const getMessage = (message: MessageEvent) => {
32 // handle IframeResizer messages
33 if (typeof message.data === 'string') {
34 if (message.data.includes('[iFrameSizer]message:')) {
35 return JSON.parse(message.data.replace('[iFrameSizer]message:', ''));
36 }
37 }
38
39 return message.data
40 }
41
42 const eventListener = (message: MessageEvent) => {
43 const {event, data} = getMessage(message);
44
45 if (events[event]) {
46
47 const filtered = {};
48 // Allow only primitive values
49 Object.entries(data).forEach(([key, value]) => {
50 if (typeof value !== 'function' && typeof value !== 'object') {
51 filtered[key] = value;
52 }
53 });
54
55 events[event].forEach((callback: (data: any) => void) => {
56 callback(filtered);
57 });
58 }
59 }
60
61 const subscribe = (event: string, callback: Function) => {
62 if (!events[event]) {
63 events[event] = [];
64 }
65
66 events[event].push(callback);
67 }
68
69 const publish = (event: string, data: any, iframeRef: RefObject<any>) => {
70 if (iframeRef.current?.sendMessage) {
71 iframeRef.current.sendMessage({
72 event,
73 data
74 });
75 }
76 }
77
78 const publishSettings = (data: RequireAtLeastOne<FormSettings>) => {
79 publish(PREVIEW_EVENTS.SETTINGS, data, iframeRef)
80 }
81
82
83 const publishDesignSettings = (data: RequireAtLeastOne<FormSettings>) => {
84 publish(PREVIEW_EVENTS.DESIGN_SETTINGS, data, iframeRef)
85 }
86
87 const publishGoal = (data: RequireAtLeastOne<FormGoal>) => {
88 publish(PREVIEW_EVENTS.GOAL, data, iframeRef)
89 }
90
91 const publishGoalType = (type: string) => {
92 const isMoney = ['amount', 'amountFromSubscriptions'].includes(type);
93
94 publish(PREVIEW_EVENTS.GOAL, {
95 type,
96 label: type,
97 typeIsCount: !isMoney,
98 typeIsMoney: isMoney,
99 }, iframeRef)
100 }
101
102 const publishColors = (data: RequireAtLeastOne<FormColors>) => {
103 publish(PREVIEW_EVENTS.COLORS, data, iframeRef)
104 }
105
106 const publishCss = (data: {customCss: string} ) => {
107 publish(PREVIEW_EVENTS.CSS, data, iframeRef)
108 }
109
110 const subscribeToSettings = (callback: (data: FormSettings) => void) => {
111 subscribe(PREVIEW_EVENTS.SETTINGS, callback)
112 }
113
114 const subscribeToDesignSettings = (callback: (data) => void) => {
115 subscribe(PREVIEW_EVENTS.DESIGN_SETTINGS, callback)
116 }
117
118 const subscribeToGoal = (callback: (data: FormGoal) => void) => {
119 subscribe(PREVIEW_EVENTS.GOAL, callback)
120 }
121
122 const subscribeToColors = (callback: (data: FormColors) => void) => {
123 subscribe(PREVIEW_EVENTS.COLORS, callback)
124 }
125
126 const subscribeToCss = (callback: (data: {customCss: string}) => void) => {
127 subscribe(PREVIEW_EVENTS.CSS, callback)
128 }
129
130 /**
131 * Unsubscribe from event
132 *
133 * @param event
134 */
135 const unsubscribe = (event: string) => {
136 if (events[event]) {
137 delete events[event];
138 }
139 }
140
141 /**
142 * Unsubscribe from all event
143 */
144 const unsubscribeAll = () => {
145 for (const key in PREVIEW_EVENTS) {
146 delete events[key];
147 }
148 }
149
150 return {
151 unsubscribe,
152 unsubscribeAll,
153 publishGoal,
154 publishGoalType,
155 publishColors,
156 publishCss,
157 publishSettings,
158 publishDesignSettings,
159 subscribeToGoal,
160 subscribeToColors,
161 subscribeToSettings,
162 subscribeToCss,
163 subscribeToDesignSettings
164 }
165 }
166