discourse/app/assets/javascripts/admin/addon/components/admin-backups-actions.gjs
Martin Brennan 1446596089
UX: Apply admin interface guidelines to Backups page (#28051)
This commit converts the Backups page in the admin interface
to follow our new admin interface guidelines.

As part of this work, I've also made `AdminPageHeader` and `AdminPageSubheader`
components that can be reused on any admin page for consistency, that handle
the title and action buttons and also breadcrumbs.

Also renamed `AdminPluginFilteredSiteSettings` to `AdminFilteredSiteSettings` since
it can be used generally to show a subset of filtered site settings, not only
settings for a plugin. Not sure if it's ideal to have to define a new route for this
for every config area, but not sure how else to do it right now.
2024-08-20 09:59:43 +10:00

101 lines
2.7 KiB
Plaintext

import Component from "@glimmer/component";
import { action } from "@ember/object";
import { service } from "@ember/service";
import routeAction from "discourse/helpers/route-action";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import I18n from "discourse-i18n";
export default class AdminBackupsActions extends Component {
@service currentUser;
@service site;
@service dialog;
@action
toggleReadOnlyMode() {
if (!this.site.isReadOnly) {
this.dialog.yesNoConfirm({
message: I18n.t("admin.backups.read_only.enable.confirm"),
didConfirm: () => {
this.currentUser.set("hideReadOnlyAlert", true);
this.#toggleReadOnlyMode(true);
},
});
} else {
this.#toggleReadOnlyMode(false);
}
}
get rollbackDisabled() {
return !this.rollbackEnabled;
}
get rollbackEnabled() {
return (
this.args.backups.canRollback &&
this.args.backups.restoreEnabled &&
!this.args.backups.isOperationRunning
);
}
async #toggleReadOnlyMode(enable) {
try {
await ajax("/admin/backups/readonly", {
type: "PUT",
data: { enable },
});
this.site.set("isReadOnly", enable);
} catch (err) {
popupAjaxError(err);
}
}
<template>
{{#if @backups.isOperationRunning}}
<@actions.Danger
@action={{routeAction "cancelOperation"}}
@title="admin.backups.operations.cancel.title"
@label="admin.backups.operations.cancel.label"
@icon="times"
class="admin-backups__cancel"
/>
{{else}}
<@actions.Primary
@action={{routeAction "showStartBackupModal"}}
@title="admin.backups.operations.backup.title"
@label="admin.backups.operations.backup.label"
@icon="rocket"
class="admin-backups__start"
/>
{{/if}}
{{#if @backups.canRollback}}
<@actions.Default
@action={{routeAction "rollback"}}
@label="admin.backups.operations.rollback.label"
@title="admin.backups.operations.rollback.title"
@icon="ambulance"
@disabled={{this.rollbackDisabled}}
class="admin-backups__rollback"
/>
{{/if}}
<@actions.Default
@icon={{if this.site.isReadOnly "far-eye-slash" "far-eye"}}
@action={{this.toggleReadOnlyMode}}
@disabled={{@backups.isOperationRunning}}
@title={{if
this.site.isReadOnly
"admin.backups.read_only.disable.title"
"admin.backups.read_only.enable.title"
}}
@label={{if
this.site.isReadOnly
"admin.backups.read_only.disable.label"
"admin.backups.read_only.enable.label"
}}
class="admin-backups__toggle-read-only"
/>
</template>
}