TelegramLoginButton.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import React from "react";
  2. import PropTypes from "prop-types";
  3. class TelegramLoginButton extends React.Component {
  4. componentDidMount() {
  5. const {
  6. botName,
  7. buttonSize,
  8. cornerRadius,
  9. requestAccess,
  10. usePic,
  11. dataOnAuth,
  12. dataAuthUrl,
  13. lang,
  14. } = this.props;
  15. window.TelegramLoginWidget = {
  16. dataOnAuth: (user) => dataOnAuth(user),
  17. };
  18. const script = document.createElement("script");
  19. script.src = "https://telegram.org/js/telegram-widget.js?14";
  20. script.setAttribute("data-telegram-login", botName);
  21. script.setAttribute("data-size", buttonSize);
  22. if (cornerRadius !== undefined) {
  23. script.setAttribute("data-radius", cornerRadius);
  24. }
  25. script.setAttribute("data-request-access", requestAccess);
  26. script.setAttribute("data-userpic", usePic);
  27. script.setAttribute("data-lang", lang);
  28. if (dataAuthUrl !== undefined) {
  29. script.setAttribute("data-auth-url", dataAuthUrl);
  30. } else {
  31. script.setAttribute(
  32. "data-onauth",
  33. "TelegramLoginWidget.dataOnAuth(user)"
  34. );
  35. }
  36. script.async = true;
  37. this.instance.appendChild(script);
  38. }
  39. render() {
  40. return (
  41. <div
  42. className={this.props.className}
  43. ref={(component) => {
  44. this.instance = component;
  45. }}
  46. >
  47. {this.props.children}
  48. </div>
  49. );
  50. }
  51. }
  52. TelegramLoginButton.propTypes = {
  53. botName: PropTypes.string.isRequired,
  54. dataOnauth: PropTypes.func,
  55. buttonSize: PropTypes.oneOf(["large", "medium", "small"]),
  56. cornerRadius: PropTypes.number,
  57. requestAccess: PropTypes.string,
  58. usePic: PropTypes.bool,
  59. lang: PropTypes.string,
  60. };
  61. TelegramLoginButton.defaultProps = {
  62. botName: "samplebot",
  63. dataOnauth: () => undefined,
  64. buttonSize: "large",
  65. requestAccess: "write",
  66. usePic: true,
  67. lang: "en",
  68. };
  69. export default TelegramLoginButton;