import { inject, observer } from 'mobx-react'; import PropTypes from 'prop-types'; import { Component } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; import injectSheet from 'react-jss'; import { state as ModalState } from './store'; import { H1 } from '../../components/ui/headline'; import { sendAuthRequest } from '../../api/utils/auth'; import Button from '../../components/ui/button'; import Input from '../../components/ui/input/index'; import Modal from '../../components/ui/Modal'; import { DEBUG_API } from '../../config'; import AppStore from '../../stores/AppStore'; import ServicesStore from '../../stores/ServicesStore'; const debug = require('../../preload-safe-debug')( 'Ferdium:feature:publishDebugInfo', ); const messages = defineMessages({ title: { id: 'feature.publishDebugInfo.title', defaultMessage: 'Publish debug information', }, info: { id: 'feature.publishDebugInfo.info', defaultMessage: "Publishing your debug information helps us find issues and errors in Ferdium. By publishing your debug information you accept Ferdium Debugger's privacy policy and terms of service", }, error: { id: 'feature.publishDebugInfo.error', defaultMessage: 'There was an error while trying to publish the debug information. Please try again later or view the console for more information.', }, privacy: { id: 'feature.publishDebugInfo.privacy', defaultMessage: 'Privacy policy', }, terms: { id: 'feature.publishDebugInfo.terms', defaultMessage: 'Terms of service', }, publish: { id: 'feature.publishDebugInfo.publish', defaultMessage: 'Accept and publish', }, published: { id: 'feature.publishDebugInfo.published', defaultMessage: 'Your debug log was published and is now availible at', }, }); const styles = theme => ({ modal: { width: '80%', maxWidth: 600, background: theme.styleTypes.primary.contrast, paddingTop: 30, }, headline: { fontSize: 20, marginBottom: 20, marginTop: -27, }, info: { paddingBottom: 20, }, link: { color: `${theme.styleTypes.primary.accent} !important`, padding: 10, cursor: 'pointer', }, button: { width: '100%', marginTop: 10, cursor: 'pointer', }, }); class PublishDebugLogModal extends Component { state = { log: null, error: false, isSendingLog: false, }; // Close this modal close() { ModalState.isModalVisible = false; this.setState({ log: null, error: false, isSendingLog: false, }); } async publishDebugInfo() { debug('debugInfo: starting publish'); this.setState({ isSendingLog: true, }); const debugInfo = JSON.stringify(this.props.stores.app.debugInfo); const request = await sendAuthRequest( `${DEBUG_API}/create`, { method: 'POST', body: JSON.stringify({ log: debugInfo, }), }, false, ); debug(`debugInfo: publishing status: ${request.status}`); if (request.status === 200) { const response = await request.json(); if (response.id) { this.setState({ log: response.id, }); } else { this.setState({ error: true, }); } } else { this.setState({ error: true, }); } debug('debugInfo: finished publishing'); } render() { const { isModalVisible } = ModalState; const { classes } = this.props; const { log, error, isSendingLog } = this.state; const { intl } = this.props; return ( this.close()} >

{intl.formatMessage(messages.title)}

{log && ( <>

{intl.formatMessage(messages.published)}

)} {error && (

{intl.formatMessage(messages.error)}

)} {!log && !error && ( <>

{intl.formatMessage(messages.info)}

{intl.formatMessage(messages.privacy)} {intl.formatMessage(messages.terms)}