react-telegram-login
Version:
React telegram login widget for web
80 lines (73 loc) • 1.94 kB
JavaScript
// @flow
import React from "react";
import PropTypes from "prop-types";
class TelegramLoginButton extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
const {
botName,
buttonSize,
cornerRadius,
requestAccess,
usePic,
dataOnauth,
dataAuthUrl,
lang,
} = this.props;
window.TelegramLoginWidget = {
dataOnauth: (user) => dataOnauth(user),
};
const script = document.createElement("script");
script.src = "https://telegram.org/js/telegram-widget.js?9";
script.setAttribute("data-telegram-login", botName);
script.setAttribute("data-size", buttonSize);
if (cornerRadius !== undefined) {
script.setAttribute("data-radius", cornerRadius);
}
script.setAttribute("data-request-access", requestAccess);
script.setAttribute("data-userpic", usePic);
script.setAttribute("data-lang", lang);
if (dataAuthUrl !== undefined) {
script.setAttribute("data-auth-url", dataAuthUrl);
} else {
script.setAttribute(
"data-onauth",
"TelegramLoginWidget.dataOnauth(user)"
);
}
script.async = true;
this.instance.appendChild(script);
}
render() {
return (
<div
className={this.props.className}
ref={(component) => {
this.instance = component;
}}
>
{this.props.children}
</div>
);
}
}
TelegramLoginButton.propTypes = {
botName: PropTypes.string.isRequired,
dataOnauth: PropTypes.func,
buttonSize: PropTypes.oneOf(["large", "medium", "small"]),
cornerRadius: PropTypes.number,
requestAccess: PropTypes.string,
usePic: PropTypes.bool,
lang: PropTypes.string,
};
TelegramLoginButton.defaultProps = {
botName: "samplebot",
dataOnauth: () => undefined,
buttonSize: "large",
requestAccess: "write",
usePic: true,
lang: "en",
};
export default TelegramLoginButton;