Умные кнопки PayPal в React, отключить кнопку - PullRequest
1 голос
/ 11 марта 2020

У меня есть эта реализация интеллектуальных кнопок PayPal в React:

function PayPalButtonComponent(props: PayPalButtonProps) {
  const [show, set_show] = useState(false);
  const [error, set_error] = useState<string>();

  const create_order = (_: any, actions: any) => {
    return actions.order.create({
      purchase_units: [
        {
          amount: {
            currency: props.currency || "EUR",
            value: props.total
          }
        }
      ]
    });
  };
  const handle_approve = (_: any, actions: any) => {
    return actions.order.capture().then((details: any) => {
      if (props.onSuccess) props.onSuccess(details);
    });
  };
  const handle_cancel = () => {
    if (props.onCancel) props.onCancel();
  };
  const handle_error = () => {
    if (props.onError) props.onError();
  };
  const render_button = () => {
    const Button = paypal.Buttons.driver("react", { React, ReactDOM });
    return (
      <Button
        style={{
          layout: "horizontal",
          size: "responsive",
          shape: "rect",
          color: "gold",
          tagline: false
        }}
        funding={{
          allowed: [paypal.FUNDING.CARD, paypal.FUNDING.PAYPAL],
          disallowed: [paypal.FUNDING.CREDIT]
        }}
        createOrder={create_order}
        onApprove={handle_approve}
        onError={handle_error}
        onCancel={handle_cancel}
      />
    );
  };

  useEffect(() => {
    if (props.isScriptLoaded) {
      if (props.isScriptLoadSucceed) set_show(true);
      else set_error("Unable to load the paypalscript");
    }
  }, [props.isScriptLoaded, props.isScriptLoadSucceed]);

  if (error) return <p>{error}</p>;
  if (!show) return <FakeButton />;

  return render_button();
}

Я изо всех сил пытался реализовать эти кнопки в реакции, так как нет документации, я нашел и скопировал некоторый код из здесь и пытается угадать другие вещи. Но я не могу понять, как отключить кнопку.

В этом руководстве они утверждают, что можно вызвать метод disable () для объекта действий, но не могут понять, как я могу выполнить sh, что с моей конфигурацией.

Вы когда-нибудь пробовали что-то подобное? Знаете ли вы какую-либо документацию, которой можно следовать?

edit

То, что я пытаюсь выполнить sh, это установить кнопку в состояние отключения во время оплаты , Я знаю, что есть наложение PayPal, но когда транзакция завершается, я изменяю маршрут приложения, и так как это происходит при вызове onSuccess, из-за очевидной асин * *2626* action_order.capture () это не может произойти мгновенно и, таким образом, есть момент, когда можно снова нажать на кнопку PayPal. Если я могу отключить кнопку, у меня есть решение проблемы.

Реализация onInit позволяет отключить / включить кнопку перед нажатием на нее, что полезно для некоторой проверки перед извлечением (например, проверенные условия), но не не относится к моему делу. Я также пытался вызвать actions.disable () в create_order, но это сломало кнопку.

...