@marvalt/madapter 2.3.2 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2171,8 +2171,8 @@ const MauticForm = ({ formId, title, description, className = '', form, onSubmit
2171
2171
  const [showSuccessMessage, setShowSuccessMessage] = React.useState(false);
2172
2172
  const [turnstileToken, setTurnstileToken] = React.useState(null);
2173
2173
  const submitMutation = useMauticFormSubmission();
2174
- // Get Turnstile site key from environment
2175
- const getTurnstilesiteKey = () => {
2174
+ // Get Turnstile site key from environment - memoized to prevent re-renders
2175
+ const turnstilesiteKey = React.useMemo(() => {
2176
2176
  try {
2177
2177
  // @ts-ignore - import.meta is a Vite-specific global
2178
2178
  if (typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) }) !== 'undefined' && undefined) {
@@ -2186,8 +2186,27 @@ const MauticForm = ({ formId, title, description, className = '', form, onSubmit
2186
2186
  // import.meta not available
2187
2187
  }
2188
2188
  return undefined;
2189
- };
2190
- const turnstilesiteKey = getTurnstilesiteKey();
2189
+ }, []); // Empty deps - site key doesn't change during runtime
2190
+ // Memoize Turnstile callbacks to prevent widget re-renders
2191
+ const handleTurnstileSuccess = React.useCallback((token) => {
2192
+ setTurnstileToken(token);
2193
+ // Clear any turnstile error
2194
+ setErrors(prev => {
2195
+ if (!prev._turnstile)
2196
+ return prev;
2197
+ const next = { ...prev };
2198
+ delete next._turnstile;
2199
+ return next;
2200
+ });
2201
+ }, []);
2202
+ const handleTurnstileError = React.useCallback(() => {
2203
+ setTurnstileToken(null);
2204
+ setErrors(prev => ({ ...prev, _turnstile: 'Verification failed. Please try again.' }));
2205
+ }, []);
2206
+ const handleTurnstileExpire = React.useCallback(() => {
2207
+ setTurnstileToken(null);
2208
+ setErrors(prev => ({ ...prev, _turnstile: 'Verification expired. Please verify again.' }));
2209
+ }, []);
2191
2210
  React.useEffect(() => {
2192
2211
  if (!form) {
2193
2212
  console.warn(`Form ${formId} not found`);
@@ -2360,23 +2379,7 @@ const MauticForm = ({ formId, title, description, className = '', form, onSubmit
2360
2379
  return (jsxRuntimeExports.jsxs("form", { className: `mautic-form ${className}`, onSubmit: handleSubmit, children: [(title || form.name) && (jsxRuntimeExports.jsxs("div", { className: "form-header", children: [jsxRuntimeExports.jsx("h3", { children: title || form.name }), (description || form.description) && (jsxRuntimeExports.jsx("p", { className: "form-description", children: description || form.description }))] })), jsxRuntimeExports.jsx("div", { className: "form-fields", children: form.fields
2361
2380
  // Filter out button/submit from field group; render them in actions
2362
2381
  .filter((field) => field.type !== 'button' && field.alias !== 'submit')
2363
- .map((field) => (jsxRuntimeExports.jsxs("div", { className: `form-field form-field-${field.type}`, children: [field.showLabel !== false && (jsxRuntimeExports.jsxs("label", { htmlFor: field.alias, className: "field-label", children: [field.label, field.isRequired && jsxRuntimeExports.jsx("span", { className: "required", children: "*" })] })), renderField(field), field.properties?.helpText && (jsxRuntimeExports.jsx("p", { className: "field-help", children: field.properties.helpText })), errors[field.alias] && (jsxRuntimeExports.jsx("p", { className: "field-error", children: errors[field.alias] }))] }, field.id))) }), turnstilesiteKey && (jsxRuntimeExports.jsxs("div", { className: "form-turnstile", children: [jsxRuntimeExports.jsx(TurnstileWidget, { siteKey: turnstilesiteKey, onSuccess: (token) => {
2364
- setTurnstileToken(token);
2365
- // Clear any turnstile error
2366
- if (errors._turnstile) {
2367
- setErrors(prev => {
2368
- const next = { ...prev };
2369
- delete next._turnstile;
2370
- return next;
2371
- });
2372
- }
2373
- }, onError: () => {
2374
- setTurnstileToken(null);
2375
- setErrors(prev => ({ ...prev, _turnstile: 'Verification failed. Please try again.' }));
2376
- }, onExpire: () => {
2377
- setTurnstileToken(null);
2378
- setErrors(prev => ({ ...prev, _turnstile: 'Verification expired. Please verify again.' }));
2379
- }, theme: "auto", size: "normal" }), errors._turnstile && (jsxRuntimeExports.jsx("p", { className: "field-error turnstile-error", children: errors._turnstile }))] })), jsxRuntimeExports.jsx("div", { className: "form-actions", children: jsxRuntimeExports.jsx("button", { type: "submit", disabled: isSubmitting || (!!turnstilesiteKey && !turnstileToken), className: "submit-button", children: isSubmitting ? 'Submitting...' : 'Submit' }) }), submitMutation.error && (jsxRuntimeExports.jsx("div", { className: "form-error", children: jsxRuntimeExports.jsx("p", { children: "There was an error submitting the form. Please try again." }) }))] }));
2382
+ .map((field) => (jsxRuntimeExports.jsxs("div", { className: `form-field form-field-${field.type}`, children: [field.showLabel !== false && (jsxRuntimeExports.jsxs("label", { htmlFor: field.alias, className: "field-label", children: [field.label, field.isRequired && jsxRuntimeExports.jsx("span", { className: "required", children: "*" })] })), renderField(field), field.properties?.helpText && (jsxRuntimeExports.jsx("p", { className: "field-help", children: field.properties.helpText })), errors[field.alias] && (jsxRuntimeExports.jsx("p", { className: "field-error", children: errors[field.alias] }))] }, field.id))) }), turnstilesiteKey && (jsxRuntimeExports.jsxs("div", { className: "form-turnstile", children: [jsxRuntimeExports.jsx(TurnstileWidget, { siteKey: turnstilesiteKey, onSuccess: handleTurnstileSuccess, onError: handleTurnstileError, onExpire: handleTurnstileExpire, theme: "auto", size: "normal" }), errors._turnstile && (jsxRuntimeExports.jsx("p", { className: "field-error turnstile-error", children: errors._turnstile }))] })), jsxRuntimeExports.jsx("div", { className: "form-actions", children: jsxRuntimeExports.jsx("button", { type: "submit", disabled: isSubmitting || (!!turnstilesiteKey && !turnstileToken), className: "submit-button", children: isSubmitting ? 'Submitting...' : 'Submit' }) }), submitMutation.error && (jsxRuntimeExports.jsx("div", { className: "form-error", children: jsxRuntimeExports.jsx("p", { children: "There was an error submitting the form. Please try again." }) }))] }));
2380
2383
  };
2381
2384
 
2382
2385
  const MauticTracking = ({ enabled, mauticUrl, proxyUrl, children }) => {