@wix/form-public 0.487.0 → 0.488.0

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
@@ -43851,6 +43851,30 @@ var ReadOnlyField = ({ field, FieldLayout }) => {
43851
43851
  }
43852
43852
  }, /* @__PURE__ */ React171__default.default.createElement(FieldComponent, fieldProps));
43853
43853
  };
43854
+ var useSingleSubmit = (submit) => {
43855
+ const [isSubmitting, setIsSubmitting] = React171.useState(false);
43856
+ const isSubmittingRef = React171.useRef(false);
43857
+ const submitOnce = React171.useCallback(async () => {
43858
+ if (isSubmittingRef.current) {
43859
+ return;
43860
+ }
43861
+ isSubmittingRef.current = true;
43862
+ setIsSubmitting(true);
43863
+ try {
43864
+ await submit();
43865
+ } catch (error) {
43866
+ console.error(error);
43867
+ }
43868
+ isSubmittingRef.current = false;
43869
+ setIsSubmitting(false);
43870
+ }, [
43871
+ submit
43872
+ ]);
43873
+ return {
43874
+ submitOnce,
43875
+ isSubmitting
43876
+ };
43877
+ };
43854
43878
 
43855
43879
  // ../form-fields/dist/esm/fields/submit-button/submit-button/utils.js
43856
43880
  var getCurrentStep = (form, fieldId) => {
@@ -43868,11 +43892,15 @@ var getCurrentStep = (form, fieldId) => {
43868
43892
  // ../form-fields/dist/esm/fields/submit-button/submit-button/use-submit-button.js
43869
43893
  var useSubmitButton = ({ form, id: id6 }) => {
43870
43894
  const { hasSteps, stepNumber, isLastStep } = getCurrentStep(form, id6);
43871
- const { inProgress, actions } = useFieldActions();
43872
- const [submitInProgress, setSubmitInProgress] = React171.useState(false);
43895
+ const { inProgress: actionsInProgress, actions } = useFieldActions();
43873
43896
  const { formStatus } = useFormStatus();
43874
- const isDisabled = submitInProgress;
43875
- const isInProgress = inProgress || formStatus === FORM_STATUS.BUSY;
43897
+ const submitForm = React171.useCallback(async () => {
43898
+ await actions?.submitForm();
43899
+ }, [
43900
+ actions
43901
+ ]);
43902
+ const { submitOnce, isSubmitting } = useSingleSubmit(submitForm);
43903
+ const isInProgress = actionsInProgress || formStatus === FORM_STATUS.BUSY;
43876
43904
  const showPreviousButton = hasSteps && stepNumber !== 0;
43877
43905
  const showNextButton = hasSteps && !isLastStep;
43878
43906
  const showSubmitButton = !hasSteps || hasSteps && isLastStep;
@@ -43880,21 +43908,16 @@ var useSubmitButton = ({ form, id: id6 }) => {
43880
43908
  if (isInProgress) {
43881
43909
  return;
43882
43910
  }
43883
- setSubmitInProgress(true);
43884
- try {
43885
- await actions?.submitForm();
43886
- } catch (error) {
43887
- console.error(error);
43888
- }
43889
- setSubmitInProgress(false);
43911
+ await submitOnce();
43890
43912
  }, [
43891
- actions,
43892
- isInProgress
43913
+ isInProgress,
43914
+ submitOnce
43893
43915
  ]);
43894
43916
  return {
43895
43917
  handleSubmitClick,
43896
- isDisabled,
43918
+ isDisabled: isSubmitting,
43897
43919
  isInProgress,
43920
+ isSubmitting,
43898
43921
  showPreviousButton,
43899
43922
  showNextButton,
43900
43923
  showSubmitButton,
@@ -43909,7 +43932,7 @@ var SubmitButtonField = ({ field, FieldLayout }) => {
43909
43932
  const externalData = useExternalData();
43910
43933
  const form = useForm();
43911
43934
  const { actions } = useFieldActions();
43912
- const { handleSubmitClick, isDisabled, isInProgress, showPreviousButton, showNextButton, showSubmitButton, hasSteps } = useSubmitButton({
43935
+ const { handleSubmitClick, isDisabled, isInProgress, isSubmitting, showPreviousButton, showNextButton, showSubmitButton, hasSteps } = useSubmitButton({
43913
43936
  form,
43914
43937
  id: field.id
43915
43938
  });
@@ -43929,6 +43952,7 @@ var SubmitButtonField = ({ field, FieldLayout }) => {
43929
43952
  hasSteps,
43930
43953
  isDisabled,
43931
43954
  isInProgress,
43955
+ isSubmitting,
43932
43956
  showPreviousButton,
43933
43957
  showNextButton,
43934
43958
  showSubmitButton,
@@ -49980,17 +50004,21 @@ function submitFormClick(params) {
49980
50004
  }
49981
50005
  var SubmitStatusContext = /* @__PURE__ */ React171.createContext(void 0);
49982
50006
  var SubmitStatusProvider = ({ children }) => {
50007
+ const [isSubmitting, setIsSubmitting] = React171.useState(false);
49983
50008
  const [submitSuccessMessage, setSubmitSuccessMessage] = React171.useState();
49984
50009
  const [submitFailureCode, setSubmitFailureCode] = React171.useState();
49985
50010
  const [submitFailureMessage, setSubmitFailureMessage] = React171.useState();
49986
50011
  const value = React171.useMemo(() => ({
50012
+ isSubmitting,
49987
50013
  submitSuccessMessage,
49988
50014
  submitFailureCode,
49989
50015
  submitFailureMessage,
50016
+ setIsSubmitting,
49990
50017
  setSubmitSuccessMessage,
49991
50018
  setSubmitFailureCode,
49992
50019
  setSubmitFailureMessage
49993
50020
  }), [
50021
+ isSubmitting,
49994
50022
  submitSuccessMessage,
49995
50023
  submitFailureCode,
49996
50024
  submitFailureMessage
@@ -50077,7 +50105,7 @@ var getCheckoutMessage = (text) => {
50077
50105
 
50078
50106
  // ../form-viewer/dist/esm/hooks/use-submit/use-submit.js
50079
50107
  var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuccess, onSubmitFailure, resetFormValues, values, submitSettings, limitationRule, handleStepChange, navigateToCheckout, openPopup, onValidate, handleScrollToFirstError, onSubmissionLimitReached }) => {
50080
- const { setSubmitSuccessMessage, setSubmitFailureCode, setSubmitFailureMessage } = useSubmitStatus();
50108
+ const { setIsSubmitting, setSubmitSuccessMessage, setSubmitFailureCode, setSubmitFailureMessage } = useSubmitStatus();
50081
50109
  const { t } = useTranslation2();
50082
50110
  const { report } = useBi();
50083
50111
  const fireSubmitSuccess = useSubmitSuccessTrigger();
@@ -50178,8 +50206,10 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50178
50206
  const submitTransaction = panorama.transaction(INTERACTIONS.SUBMIT_FORM);
50179
50207
  try {
50180
50208
  submitTransaction.start();
50209
+ setIsSubmitting(true);
50181
50210
  response = await submitAction(values);
50182
50211
  } catch (error) {
50212
+ setIsSubmitting(false);
50183
50213
  const errorCode = getErrorCode(error);
50184
50214
  if (isExpectedSubmissionRejection(error)) {
50185
50215
  submitTransaction.finish();
@@ -50202,6 +50232,7 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50202
50232
  handleSubmitFailure(error);
50203
50233
  throw error;
50204
50234
  }
50235
+ setIsSubmitting(false);
50205
50236
  if (response) {
50206
50237
  submitTransaction.finish();
50207
50238
  onSubmitSuccess?.(response);
@@ -50222,6 +50253,7 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50222
50253
  onSubmit,
50223
50254
  reportSubmitFormBi,
50224
50255
  panorama,
50256
+ setIsSubmitting,
50225
50257
  submitAction,
50226
50258
  onSubmitFailure,
50227
50259
  handleCustomErrorMessages,
@@ -61537,15 +61569,17 @@ var NextButton = ({ className }) => {
61537
61569
  }, nextText);
61538
61570
  };
61539
61571
  var SubmitButtonComponent = ({ className, children }) => {
61540
- const { showSubmitButton, onSubmitClick, submitText, isDisabled, isInProgress } = useFieldPropsV2();
61572
+ const { showSubmitButton, onSubmitClick, submitText, isDisabled, isInProgress, isSubmitting } = useFieldPropsV2();
61541
61573
  if (!showSubmitButton) {
61542
61574
  return null;
61543
61575
  }
61544
61576
  const loaderElement = findChildOfType(children, SubmitButtonComponent.Loader);
61577
+ const isBusy = isSubmitting || isInProgress;
61545
61578
  return /* @__PURE__ */ React171__default.default.createElement(reactAriaComponents.Button, {
61546
61579
  className,
61547
- onPress: onSubmitClick,
61548
- isDisabled: isDisabled || isInProgress,
61580
+ onPress: isBusy ? void 0 : onSubmitClick,
61581
+ isDisabled: isDisabled && !isBusy,
61582
+ "aria-disabled": isBusy || void 0,
61549
61583
  "data-in-progress": isInProgress
61550
61584
  }, isInProgress && loaderElement ? loaderElement : submitText);
61551
61585
  };