import React from 'react'; import PropTypes from 'prop-types'; import copy from 'copy-to-clipboard'; import { gettext, serviceURL } from '../../utils/constants'; import { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Alert, InputGroup, InputGroupAddon } from 'reactstrap'; import toaster from '../toast'; import wikiAPI from '../../utils/wiki-api'; const propTypes = { wiki: PropTypes.object, onPublish: PropTypes.func.isRequired, toggleCancel: PropTypes.func.isRequired, }; class PublishWikiDialog extends React.Component { constructor(props) { super(props); this.state = { url: serviceURL + '/wiki/publish/' + this.props.customUrl, errMessage: '', isSubmitBtnActive: false, }; this.newInput = React.createRef(); } handleChange = (e) => { this.setState({ isSubmitBtnActive: !!e.target.value.trim(), url: e.target.value }); }; handleSubmit = () => { let { isValid, errMessage } = this.validateInput(); if (!isValid) { this.setState({ errMessage: errMessage, url: serviceURL + '/wiki/publish/', }); } else { this.props.onPublish(this.state.url.trim()); } }; deleteCustomUrl = () => { let wiki_id = this.props.wiki.id; wikiAPI.deletePublishWikiLink(wiki_id).then((res) => { this.setState({ url: serviceURL + '/wiki/publish/' }); toaster.success(gettext('Successfully.')); }).catch((error) => { if (error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); }; handleKeyDown = (e) => { if (e.key === 'Enter') { this.handleSubmit(); } }; toggle = () => { this.props.toggleCancel(); }; validateInput = () => { let url = this.state.url.trim(); let isValid = true; let errMessage = ''; if (!url) { isValid = false; errMessage = gettext('url is required.'); return { isValid, errMessage }; } if (!(url.includes(serviceURL + '/wiki/publish/'))) { isValid = false; errMessage = gettext('url need include specific prefix.'); return { isValid, errMessage }; } return { isValid, errMessage }; }; copyLink = () => { copy(this.state.url); toaster.success(gettext('URL is copied to the clipboard')); }; render() { return ( {gettext('Publish Wiki')}

{gettext('Customize URL')}

{gettext('The custom part of the URL must be between 5 and 30 characters long and may only contain letters (a-z), numbers, and hyphens.')} {this.state.errMessage && {this.state.errMessage}}
); } } PublishWikiDialog.propTypes = propTypes; export default PublishWikiDialog;