mutation-button.jsx (1719B)
1 /* 2 GoToSocial 3 Copyright (C) GoToSocial Authors admin@gotosocial.org 4 SPDX-License-Identifier: AGPL-3.0-or-later 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 "use strict"; 21 22 const React = require("react"); 23 const { Error } = require("../error"); 24 25 module.exports = function MutationButton({ label, result, disabled, showError = true, className = "", wrapperClassName = "", ...inputProps }) { 26 let iconClass = ""; 27 const targetsThisButton = result.action == inputProps.name; // can also both be undefined, which is correct 28 29 if (targetsThisButton) { 30 if (result.isLoading) { 31 iconClass = "fa-spin fa-refresh"; 32 } else if (result.isSuccess) { 33 iconClass = "fa-check fadeout"; 34 } 35 } 36 37 return (<div className={wrapperClassName}> 38 {(showError && targetsThisButton && result.error) && 39 <Error error={result.error} /> 40 } 41 <button type="submit" className={"with-icon " + className} disabled={result.isLoading || disabled} {...inputProps}> 42 <i className={`fa fa-fw ${iconClass}`} aria-hidden="true"></i> 43 {(targetsThisButton && result.isLoading) 44 ? "Processing..." 45 : label 46 } 47 </button> 48 </div> 49 ); 50 };