@wix/form-public 0.487.0 → 0.489.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.js CHANGED
@@ -43841,6 +43841,30 @@ var ReadOnlyField = ({ field, FieldLayout }) => {
43841
43841
  }
43842
43842
  }, /* @__PURE__ */ React171.createElement(FieldComponent, fieldProps));
43843
43843
  };
43844
+ var useSingleSubmit = (submit) => {
43845
+ const [isSubmitting, setIsSubmitting] = useState(false);
43846
+ const isSubmittingRef = useRef(false);
43847
+ const submitOnce = useCallback(async () => {
43848
+ if (isSubmittingRef.current) {
43849
+ return;
43850
+ }
43851
+ isSubmittingRef.current = true;
43852
+ setIsSubmitting(true);
43853
+ try {
43854
+ await submit();
43855
+ } catch (error) {
43856
+ console.error(error);
43857
+ }
43858
+ isSubmittingRef.current = false;
43859
+ setIsSubmitting(false);
43860
+ }, [
43861
+ submit
43862
+ ]);
43863
+ return {
43864
+ submitOnce,
43865
+ isSubmitting
43866
+ };
43867
+ };
43844
43868
 
43845
43869
  // ../form-fields/dist/esm/fields/submit-button/submit-button/utils.js
43846
43870
  var getCurrentStep = (form, fieldId) => {
@@ -43858,11 +43882,15 @@ var getCurrentStep = (form, fieldId) => {
43858
43882
  // ../form-fields/dist/esm/fields/submit-button/submit-button/use-submit-button.js
43859
43883
  var useSubmitButton = ({ form, id: id6 }) => {
43860
43884
  const { hasSteps, stepNumber, isLastStep } = getCurrentStep(form, id6);
43861
- const { inProgress, actions } = useFieldActions();
43862
- const [submitInProgress, setSubmitInProgress] = useState(false);
43885
+ const { inProgress: actionsInProgress, actions } = useFieldActions();
43863
43886
  const { formStatus } = useFormStatus();
43864
- const isDisabled = submitInProgress;
43865
- const isInProgress = inProgress || formStatus === FORM_STATUS.BUSY;
43887
+ const submitForm = useCallback(async () => {
43888
+ await actions?.submitForm();
43889
+ }, [
43890
+ actions
43891
+ ]);
43892
+ const { submitOnce, isSubmitting } = useSingleSubmit(submitForm);
43893
+ const isInProgress = actionsInProgress || formStatus === FORM_STATUS.BUSY;
43866
43894
  const showPreviousButton = hasSteps && stepNumber !== 0;
43867
43895
  const showNextButton = hasSteps && !isLastStep;
43868
43896
  const showSubmitButton = !hasSteps || hasSteps && isLastStep;
@@ -43870,21 +43898,16 @@ var useSubmitButton = ({ form, id: id6 }) => {
43870
43898
  if (isInProgress) {
43871
43899
  return;
43872
43900
  }
43873
- setSubmitInProgress(true);
43874
- try {
43875
- await actions?.submitForm();
43876
- } catch (error) {
43877
- console.error(error);
43878
- }
43879
- setSubmitInProgress(false);
43901
+ await submitOnce();
43880
43902
  }, [
43881
- actions,
43882
- isInProgress
43903
+ isInProgress,
43904
+ submitOnce
43883
43905
  ]);
43884
43906
  return {
43885
43907
  handleSubmitClick,
43886
- isDisabled,
43908
+ isDisabled: isSubmitting,
43887
43909
  isInProgress,
43910
+ isSubmitting,
43888
43911
  showPreviousButton,
43889
43912
  showNextButton,
43890
43913
  showSubmitButton,
@@ -43899,7 +43922,7 @@ var SubmitButtonField = ({ field, FieldLayout }) => {
43899
43922
  const externalData = useExternalData();
43900
43923
  const form = useForm();
43901
43924
  const { actions } = useFieldActions();
43902
- const { handleSubmitClick, isDisabled, isInProgress, showPreviousButton, showNextButton, showSubmitButton, hasSteps } = useSubmitButton({
43925
+ const { handleSubmitClick, isDisabled, isInProgress, isSubmitting, showPreviousButton, showNextButton, showSubmitButton, hasSteps } = useSubmitButton({
43903
43926
  form,
43904
43927
  id: field.id
43905
43928
  });
@@ -43919,6 +43942,7 @@ var SubmitButtonField = ({ field, FieldLayout }) => {
43919
43942
  hasSteps,
43920
43943
  isDisabled,
43921
43944
  isInProgress,
43945
+ isSubmitting,
43922
43946
  showPreviousButton,
43923
43947
  showNextButton,
43924
43948
  showSubmitButton,
@@ -49970,17 +49994,21 @@ function submitFormClick(params) {
49970
49994
  }
49971
49995
  var SubmitStatusContext = /* @__PURE__ */ createContext(void 0);
49972
49996
  var SubmitStatusProvider = ({ children }) => {
49997
+ const [isSubmitting, setIsSubmitting] = useState(false);
49973
49998
  const [submitSuccessMessage, setSubmitSuccessMessage] = useState();
49974
49999
  const [submitFailureCode, setSubmitFailureCode] = useState();
49975
50000
  const [submitFailureMessage, setSubmitFailureMessage] = useState();
49976
50001
  const value = useMemo(() => ({
50002
+ isSubmitting,
49977
50003
  submitSuccessMessage,
49978
50004
  submitFailureCode,
49979
50005
  submitFailureMessage,
50006
+ setIsSubmitting,
49980
50007
  setSubmitSuccessMessage,
49981
50008
  setSubmitFailureCode,
49982
50009
  setSubmitFailureMessage
49983
50010
  }), [
50011
+ isSubmitting,
49984
50012
  submitSuccessMessage,
49985
50013
  submitFailureCode,
49986
50014
  submitFailureMessage
@@ -50067,7 +50095,7 @@ var getCheckoutMessage = (text) => {
50067
50095
 
50068
50096
  // ../form-viewer/dist/esm/hooks/use-submit/use-submit.js
50069
50097
  var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuccess, onSubmitFailure, resetFormValues, values, submitSettings, limitationRule, handleStepChange, navigateToCheckout, openPopup, onValidate, handleScrollToFirstError, onSubmissionLimitReached }) => {
50070
- const { setSubmitSuccessMessage, setSubmitFailureCode, setSubmitFailureMessage } = useSubmitStatus();
50098
+ const { setIsSubmitting, setSubmitSuccessMessage, setSubmitFailureCode, setSubmitFailureMessage } = useSubmitStatus();
50071
50099
  const { t } = useTranslation2();
50072
50100
  const { report } = useBi();
50073
50101
  const fireSubmitSuccess = useSubmitSuccessTrigger();
@@ -50168,8 +50196,10 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50168
50196
  const submitTransaction = panorama.transaction(INTERACTIONS.SUBMIT_FORM);
50169
50197
  try {
50170
50198
  submitTransaction.start();
50199
+ setIsSubmitting(true);
50171
50200
  response = await submitAction(values);
50172
50201
  } catch (error) {
50202
+ setIsSubmitting(false);
50173
50203
  const errorCode = getErrorCode(error);
50174
50204
  if (isExpectedSubmissionRejection(error)) {
50175
50205
  submitTransaction.finish();
@@ -50192,6 +50222,7 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50192
50222
  handleSubmitFailure(error);
50193
50223
  throw error;
50194
50224
  }
50225
+ setIsSubmitting(false);
50195
50226
  if (response) {
50196
50227
  submitTransaction.finish();
50197
50228
  onSubmitSuccess?.(response);
@@ -50212,6 +50243,7 @@ var useSubmit = ({ validateAndScrollToError, submitAction, onSubmit, onSubmitSuc
50212
50243
  onSubmit,
50213
50244
  reportSubmitFormBi,
50214
50245
  panorama,
50246
+ setIsSubmitting,
50215
50247
  submitAction,
50216
50248
  onSubmitFailure,
50217
50249
  handleCustomErrorMessages,
@@ -61527,15 +61559,17 @@ var NextButton = ({ className }) => {
61527
61559
  }, nextText);
61528
61560
  };
61529
61561
  var SubmitButtonComponent = ({ className, children }) => {
61530
- const { showSubmitButton, onSubmitClick, submitText, isDisabled, isInProgress } = useFieldPropsV2();
61562
+ const { showSubmitButton, onSubmitClick, submitText, isDisabled, isInProgress, isSubmitting } = useFieldPropsV2();
61531
61563
  if (!showSubmitButton) {
61532
61564
  return null;
61533
61565
  }
61534
61566
  const loaderElement = findChildOfType(children, SubmitButtonComponent.Loader);
61567
+ const isBusy = isSubmitting || isInProgress;
61535
61568
  return /* @__PURE__ */ React171.createElement(Button, {
61536
61569
  className,
61537
- onPress: onSubmitClick,
61538
- isDisabled: isDisabled || isInProgress,
61570
+ onPress: isBusy ? void 0 : onSubmitClick,
61571
+ isDisabled: isDisabled && !isBusy,
61572
+ "aria-disabled": isBusy || void 0,
61539
61573
  "data-in-progress": isInProgress
61540
61574
  }, isInProgress && loaderElement ? loaderElement : submitText);
61541
61575
  };