PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.9.1
GiveWP – Donation Plugin and Fundraising Platform v2.9.1
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 / MultiFormGoals / resources / js / components / server-side-render-x / index.js
give / src / MultiFormGoals / resources / js / components / server-side-render-x Last commit date
index.js 5 years ago
index.js
167 lines
1 /**
2 * NOTE: This is a fork of the original ServerSideRenderX component.
3 * You can find more about that project here: https://github.com/dgwyer/server-side-render-x
4 *
5 * Changes:
6 * - some minor clean up was done to remove references to variables which were never actually used.
7 */
8
9 /**
10 * External dependencies
11 */
12 import { isEqual, debounce } from 'lodash';
13
14 /**
15 * WordPress dependencies
16 */
17 const { Component, RawHTML, Fragment } = wp.element;
18 const { __, sprintf } = wp.i18n;
19 const apiFetch = wp.apiFetch;
20 const { addQueryArgs } = wp.url;
21 const { Placeholder } = wp.components;
22
23 export function rendererPath( block, attributes = null, urlQueryArgs = {} ) {
24 return addQueryArgs( `/wp/v2/block-renderer/${ block }`, {
25 context: 'edit',
26 ...( null !== attributes ? { attributes } : {} ),
27 ...urlQueryArgs,
28 } );
29 }
30
31 export class ServerSideRenderX extends Component {
32 constructor( props ) {
33 super( props );
34 this.state = {
35 response: null,
36 prevResponse: null,
37 };
38 }
39
40 componentDidMount() {
41 this.isStillMounted = true;
42 this.fetch( this.props );
43 // Only debounce once the initial fetch occurs to ensure that the first
44 // renders show data as soon as possible.
45 this.fetch = debounce( this.fetch, 500 );
46 }
47
48 componentWillUnmount() {
49 this.isStillMounted = false;
50 }
51
52 componentDidUpdate( prevProps ) {
53 if ( ! isEqual( prevProps, this.props ) ) {
54 this.fetch( this.props );
55 }
56 }
57
58 fetch( props ) {
59 if ( ! this.isStillMounted ) {
60 return;
61 }
62 if ( null !== this.state.response ) {
63 this.setState( state => (
64 {
65 response: null,
66 prevResponse: state.response,
67 }
68 ) );
69 }
70 const { block, attributes = null, urlQueryArgs = {} } = props;
71
72 const path = rendererPath( block, attributes, urlQueryArgs );
73 // Store the latest fetch request so that when we process it, we can
74 // check if it is the current request, to avoid race conditions on slow networks.
75 const fetchRequest = ( this.currentFetchRequest = apiFetch( { path } )
76 .then( ( response ) => {
77 if (
78 this.isStillMounted &&
79 fetchRequest === this.currentFetchRequest &&
80 response
81 ) {
82 this.setState( { response: response.rendered } );
83 }
84 } )
85 .catch( ( error ) => {
86 if (
87 this.isStillMounted &&
88 fetchRequest === this.currentFetchRequest
89 ) {
90 this.setState( {
91 response: {
92 error: true,
93 errorMsg: error.message,
94 },
95 } );
96 }
97 } ) );
98 return fetchRequest;
99 }
100
101 render() {
102 const { right, top, unit } = this.props.spinnerLocation;
103 const response = this.state.response;
104 const prevResponse = this.state.prevResponse;
105 let prevResponseHTML = '';
106 if ( prevResponse !== null ) {
107 prevResponseHTML = `<div style="position:relative;"><div style="position:absolute;right:${ right }${ unit };top:${ top }${ unit };z-index:1"><span class="components-spinner"></span></div>${ prevResponse }</div>`;
108 }
109
110 const {
111 className,
112 EmptyResponsePlaceholder,
113 ErrorResponsePlaceholder,
114 } = this.props;
115
116 if ( response === '' ) {
117 return (
118 <EmptyResponsePlaceholder
119 response={ response }
120 { ...this.props }
121 />
122 );
123 } else if ( ! response ) {
124 return (
125 <Fragment>
126 <RawHTML key="html" className={ className }>
127 { prevResponseHTML }
128 </RawHTML>
129 </Fragment>
130 );
131 } else if ( response.error ) {
132 return (
133 <ErrorResponsePlaceholder
134 response={ response }
135 { ...this.props }
136 />
137 );
138 }
139
140 return (
141 <RawHTML key="html" className={ className }>
142 { response }
143 </RawHTML>
144 );
145 }
146 }
147
148 ServerSideRenderX.defaultProps = {
149 EmptyResponsePlaceholder: ( { className } ) => (
150 <Placeholder className={ className }>
151 { __( 'Block rendered as empty.' ) }
152 </Placeholder>
153 ),
154 ErrorResponsePlaceholder: ( { response, className } ) => {
155 const errorMessage = sprintf(
156 // translators: %s: error message describing the problem
157 __( 'Error loading block: %s' ),
158 response.errorMsg
159 );
160 return (
161 <Placeholder className={ className }>{ errorMessage }</Placeholder>
162 );
163 },
164 };
165
166 export default ServerSideRenderX;
167