1
0
mirror of https://github.com/flarum/core.git synced 2025-08-20 15:21:49 +02:00

Add Extension Updating

This commit is contained in:
SychO9
2021-09-25 18:33:17 +01:00
parent 26e09d1e9d
commit b3a62bbac4
11 changed files with 242 additions and 52 deletions

View File

@@ -3,6 +3,9 @@ import Component from 'flarum/common/Component';
import icon from "flarum/common/helpers/icon";
import Button from "flarum/common/components/Button";
import humanTime from "flarum/common/helpers/humanTime";
import LoadingModal from "flarum/admin/components/LoadingModal";
import ComposerFailureModal from "./ComposerFailureModal";
import Tooltip from "flarum/common/components/Tooltip";
type UpdatedPackage = {
name: string;
@@ -38,11 +41,17 @@ export default class Updater extends Component {
<div className="Form-group">
<label>{app.translator.trans('sycho-package-manager.admin.updater.updater_title')}</label>
<p className="helpText">{app.translator.trans('sycho-package-manager.admin.updater.updater_help')}</p>
<p className="PackageManager-lastUpdatedAt">
<span className="PackageManager-lastUpdatedAt-label">{app.translator.trans('sycho-package-manager.admin.updater.last_update_checked_at')}</span>
<span className="PackageManager-lastUpdatedAt-value">{humanTime(this.lastUpdateCheck?.checkedAt)}</span>
</p>
<Button className="Button" icon="fas fa-sync-alt" onclick={this.checkForUpdates.bind(this)} loading={this.isLoading}>
{Object.keys(this.lastUpdateCheck).length ? (
<p className="PackageManager-lastUpdatedAt">
<span className="PackageManager-lastUpdatedAt-label">{app.translator.trans('sycho-package-manager.admin.updater.last_update_checked_at')}</span>
<span className="PackageManager-lastUpdatedAt-value">{humanTime(this.lastUpdateCheck?.checkedAt)}</span>
</p>
) : null}
<Button
className="Button"
icon="fas fa-sync-alt"
onclick={this.checkForUpdates.bind(this)}
loading={this.isLoading}>
{app.translator.trans('sycho-package-manager.admin.updater.check_for_updates')}
</Button>
{extensions.length ? (
@@ -61,7 +70,13 @@ export default class Updater extends Component {
</div>
</div>
<div className="PackageManager-extension-controls">
<Button icon="fas fa-arrow-alt-circle-up" className="Button Button--icon Button--flat" />
<Tooltip text={app.translator.trans('sycho-package-manager.admin.extensions.update')}>
<Button
icon="fas fa-arrow-alt-circle-up"
className="Button Button--icon Button--flat"
onclick={this.update.bind(this, extension)}
aria-label={app.translator.trans('sycho-package-manager.admin.extensions.update')} />
</Tooltip>
</div>
</div>
))}
@@ -75,7 +90,7 @@ export default class Updater extends Component {
getExtensionUpdates() {
const updates = this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {
const extension = app.data.extensions[composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '')];
const safeToUpdate = composerPackage['latest-status'] === 'semver-safe-update';
const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);
if (extension && safeToUpdate) {
extension.newPackageUpdate = composerPackage;
@@ -99,4 +114,27 @@ export default class Updater extends Component {
m.redraw();
});
}
update(extension: any) {
app.modal.show(LoadingModal);
app.request({
method: 'PATCH',
url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,
errorHandler: (e: any) => {
const error = e.response.errors[0];
if (error.code !== 'composer_command_failure') {
throw e;
}
app.modal.show(ComposerFailureModal, { error });
},
}).then(() => {
app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title }));
window.location.reload();
}).finally(() => {
m.redraw();
});
}
}