// maubot - A plugin-based Matrix bot system. // Copyright (C) 2022 Tulir Asokan // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . import React, { Component } from "react" import { Link } from "react-router-dom" import api from "../../api" class BaseMainView extends Component { constructor(props) { super(props) this.state = Object.assign(this.initialState, props.entry) } UNSAFE_componentWillReceiveProps(nextProps) { const newState = Object.assign(this.initialState, nextProps.entry) for (const key of this.entryKeys) { if (this.props.entry[key] === nextProps.entry[key]) { newState[key] = this.state[key] } } this.setState(newState) } delete = async () => { if (!window.confirm(`Are you sure you want to delete ${this.state.id}?`)) { return } this.setState({ deleting: true }) const resp = await this.deleteFunc(this.state.id) if (resp.success) { this.props.history.push("/") this.props.onDelete() } else { this.setState({ deleting: false, error: resp.error }) } } get entryKeys() { return [] } get initialState() { return {} } get hasInstances() { return this.state.instances && this.state.instances.length > 0 } get isNew() { return !this.props.entry.id } inputChange = event => { if (!event.target.name) { return } this.setState({ [event.target.name]: event.target.value }) } async readFile(file) { return new Promise((resolve, reject) => { const reader = new FileReader() reader.readAsArrayBuffer(file) reader.onload = evt => resolve(evt.target.result) reader.onerror = err => reject(err) }) } renderInstances = () => !this.isNew && (

{this.hasInstances ? "Instances" : "No instances :("}

{this.state.instances.map(instance => ( {instance.id} ))}
) renderLogButton = (filter) => !this.isNew && api.getFeatures().log &&
} export default BaseMainView