PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
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 / fields / SectionNode.tsx
give / src / DonationForms / resources / app / fields Last commit date
ElementNode.tsx 2 years ago FieldNode.tsx 2 years ago GatewayFieldNode.tsx 2 years ago GroupNode.tsx 2 years ago SectionNode.tsx 2 years ago
SectionNode.tsx
67 lines
1 import {isElement, isField, isGroup, Node} from '@givewp/forms/types';
2 import FieldNode from './FieldNode';
3 import ElementNode from './ElementNode';
4 import GroupNode from './GroupNode';
5 import GatewayFieldNode from '@givewp/forms/app/fields/GatewayFieldNode';
6 import {elementTemplateExists, fieldTemplateExists, groupTemplateExists} from '@givewp/forms/app/templates';
7 import useVisibilityCondition from '@givewp/forms/app/hooks/useVisibilityCondition';
8 import {useEffect} from '@wordpress/element';
9 import memoNode from '@givewp/forms/app/utilities/memoNode';
10
11 const formTemplates = window.givewp.form.templates;
12
13 /**
14 * Determine which node template to render and apply visibility conditions. It is important the visibility conditions
15 * occur here, instead of in the more specific components, as it prevents the subsequent hooks from firing, which can
16 * cause an infinite re-render loop.
17 *
18 * @since 3.0.0
19 */
20 function SectionNode({node}: {node: Node}) {
21 const showNode = useVisibilityCondition(node.visibilityConditions);
22 const {unregister} = window.givewp.form.hooks.useFormContext();
23
24 useEffect(() => {
25 if (showNode) {
26 return;
27 }
28
29 if (isField(node)) {
30 unregister(node.name, {
31 keepDefaultValue: true,
32 });
33 }
34
35 if (isGroup(node)) {
36 node.walkNodes((node) => {
37 unregister(node.name, {
38 keepDefaultValue: true,
39 });
40 }, isField);
41 }
42 }, [showNode, unregister]);
43
44 if (!showNode) {
45 return null;
46 }
47
48 if (isField(node) && fieldTemplateExists(node)) {
49 if (node.type === 'gateways') {
50 return <GatewayFieldNode node={node} />;
51 }
52 return <FieldNode node={node} />;
53 } else if (isElement(node) && elementTemplateExists(node)) {
54 return <ElementNode node={node} />;
55 } else if (isGroup(node) && groupTemplateExists(node)) {
56 return <GroupNode node={node} />;
57 } else {
58 console.error(`Node: ${JSON.stringify(node)} does not exist in Form Design: ${JSON.stringify(formTemplates)}`);
59
60 return null;
61 }
62 }
63
64 const MemoizedSectionNode = memoNode(SectionNode);
65
66 export default MemoizedSectionNode;
67