From f439bf14cc46ff8d9b0a81d063b98b5e1cc91dff Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 5 Feb 2025 14:34:15 +1100 Subject: [PATCH] DEV: Refactor the Automation Plugin UI to match admin UI guidelines (#31060) This change updates the Automation plugin to make use of the `use_new_show_route` plugin flag, as well as generally updating the UI to match current admin UI guidelines. Notable changes include: - Moving template/router/controller files to make use of the `admin.adminPlugins.show` route. - Changing the URIs from `/admin/plugins/discourse-automation` to `/admin/plugins/automation`, to match the `PLUGIN_NAME`. - Adding UI wrappers around the New/Edit forms, and polishing the list of defined automations. --- .../adapters/discourse-automation-adapter.js | 2 +- .../admin-plugins-discourse-automation.js | 19 -- .../admin-plugins-discourse-automation.js | 5 - ...dmin-plugins-discourse-automation-edit.hbs | 174 ---------------- ...min-plugins-discourse-automation-index.hbs | 117 ----------- ...admin-plugins-discourse-automation-new.hbs | 33 --- .../admin-plugins-discourse-automation.hbs | 21 -- .../admin-plugins/show/automation/edit.js} | 4 +- .../admin-plugins/show/automation/index.js} | 4 +- .../admin-plugins/show/automation/new.js} | 2 +- .../admin-plugins/show/automation/edit.js} | 6 +- .../admin-plugins/show/automation/index.js} | 8 - .../admin-plugins/show/automation/new.js} | 2 - .../admin-plugins/show/automation/edit.hbs | 189 ++++++++++++++++++ .../admin-plugins/show/automation/index.hbs | 131 ++++++++++++ .../admin-plugins/show/automation/new.hbs | 27 +++ .../admin-automation-route-map.js} | 4 +- ...tomation-admin-plugin-configuration-nav.js | 21 ++ .../common/discourse-automation.scss | 18 +- .../automation/config/locales/client.en.yml | 9 +- plugins/automation/config/routes.rb | 8 +- plugins/automation/plugin.rb | 2 +- ...n_discourse_automation_automations_spec.rb | 30 +-- .../discourse_automation/automation.rb | 4 +- .../discourse_automation/new_automation.rb | 2 +- .../automation/spec/system/smoke_test_spec.rb | 11 +- 26 files changed, 432 insertions(+), 421 deletions(-) delete mode 100644 plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation.js delete mode 100644 plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation.js delete mode 100644 plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-edit.hbs delete mode 100644 plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-index.hbs delete mode 100644 plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-new.hbs delete mode 100644 plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation.hbs rename plugins/automation/admin/assets/javascripts/{admin/controllers/admin-plugins-discourse-automation-edit.js => discourse/controllers/admin-plugins/show/automation/edit.js} (94%) rename plugins/automation/admin/assets/javascripts/{admin/controllers/admin-plugins-discourse-automation-index.js => discourse/controllers/admin-plugins/show/automation/index.js} (88%) rename plugins/automation/admin/assets/javascripts/{admin/controllers/admin-plugins-discourse-automation-new.js => discourse/controllers/admin-plugins/show/automation/new.js} (95%) rename plugins/automation/admin/assets/javascripts/{admin/routes/admin-plugins-discourse-automation-edit.js => discourse/routes/admin-plugins/show/automation/edit.js} (87%) rename plugins/automation/admin/assets/javascripts/{admin/routes/admin-plugins-discourse-automation-index.js => discourse/routes/admin-plugins/show/automation/index.js} (64%) rename plugins/automation/admin/assets/javascripts/{admin/routes/admin-plugins-discourse-automation-new.js => discourse/routes/admin-plugins/show/automation/new.js} (86%) create mode 100644 plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/edit.hbs create mode 100644 plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/index.hbs create mode 100644 plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/new.hbs rename plugins/automation/{admin/assets/javascripts/admin/discourse-automation-route-map.js => assets/javascripts/admin-automation-route-map.js} (73%) create mode 100644 plugins/automation/assets/javascripts/discourse/initializers/automation-admin-plugin-configuration-nav.js diff --git a/plugins/automation/admin/assets/javascripts/admin/adapters/discourse-automation-adapter.js b/plugins/automation/admin/assets/javascripts/admin/adapters/discourse-automation-adapter.js index b8d302bab3a..f86ea85c66a 100644 --- a/plugins/automation/admin/assets/javascripts/admin/adapters/discourse-automation-adapter.js +++ b/plugins/automation/admin/assets/javascripts/admin/adapters/discourse-automation-adapter.js @@ -2,7 +2,7 @@ import RestAdapter from "discourse/adapters/rest"; export default class Adapter extends RestAdapter { basePath() { - return "/admin/plugins/discourse-automation/"; + return "/admin/plugins/automation/"; } pathFor() { diff --git a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation.js b/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation.js deleted file mode 100644 index c9526ef4ca6..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation.js +++ /dev/null @@ -1,19 +0,0 @@ -import Controller from "@ember/controller"; -import { action, computed } from "@ember/object"; -import { service } from "@ember/service"; - -export default class Automation extends Controller { - @service router; - - @computed("router.currentRouteName") - get showNewAutomation() { - return ( - this.router.currentRouteName === "adminPlugins.discourse-automation.index" - ); - } - - @action - newAutomation() { - this.router.transitionTo("adminPlugins.discourse-automation.new"); - } -} diff --git a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation.js b/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation.js deleted file mode 100644 index 6c41265ca47..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation.js +++ /dev/null @@ -1,5 +0,0 @@ -import DiscourseRoute from "discourse/routes/discourse"; - -export default class Automation extends DiscourseRoute { - controllerName = "admin-plugins-discourse-automation"; -} diff --git a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-edit.hbs b/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-edit.hbs deleted file mode 100644 index 8a784c63c56..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-edit.hbs +++ /dev/null @@ -1,174 +0,0 @@ -
-
- - -
-
- - -
- -
-
- -
- - -
- -
-
-
- -
-

- {{i18n "discourse_automation.edit_automation.trigger_section.title"}} -

- -
- {{#if this.model.automation.script.forced_triggerable}} -
- {{i18n - "discourse_automation.edit_automation.trigger_section.forced" - }} -
- {{/if}} - - - -
- -
-
- - {{#if this.automationForm.trigger}} - {{#if this.model.automation.trigger.doc}} -
-

{{this.model.automation.trigger.doc}}

-
- {{/if}} - - {{#if - (and - this.model.automation.enabled - this.model.automation.trigger.settings.manual_trigger - ) - }} -
- - {{#if this.nextPendingAutomationAtFormatted}} -

- {{i18n - "discourse_automation.edit_automation.trigger_section.next_pending_automation" - date=this.nextPendingAutomationAtFormatted - }} -

- {{/if}} - - -
- {{/if}} - - {{#each this.triggerFields as |field|}} - - {{/each}} - {{/if}} -
- - {{#if this.automationForm.trigger}} - {{#if this.scriptFields}} -
-

- {{i18n "discourse_automation.edit_automation.fields_section.title"}} -

- - {{#if this.model.automation.script.with_trigger_doc}} -
-

{{this.model.automation.script.with_trigger_doc}}

-
- {{/if}} - -
- {{#each this.scriptFields as |field|}} - - {{/each}} -
-
- {{/if}} - - {{#if this.automationForm.trigger}} -
- {{i18n - "discourse_automation.models.automation.enabled.label" - }} - -
- {{/if}} - -
- -
- {{/if}} - -
\ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-index.hbs b/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-index.hbs deleted file mode 100644 index 5d59441ce68..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-index.hbs +++ /dev/null @@ -1,117 +0,0 @@ -{{#if this.model.length}} - - - - - - - - - - - - - {{#each this.model as |automation|}} - - {{#if automation.script.not_found}} - - {{else if automation.trigger.not_found}} - - {{else}} - - - - - - {{/if}} - - - - {{/each}} - -
{{i18n "discourse_automation.models.automation.name.label"}}{{i18n "discourse_automation.models.automation.trigger.label"}}{{i18n "discourse_automation.models.automation.script.label"}}{{i18n - "discourse_automation.models.automation.last_updated_by.label" - }}
-
- {{i18n "discourse_automation.models.automation.status.label"}} -
- {{i18n - "discourse_automation.scriptables.not_found" - script=automation.script.id - automation=automation.name - }} -
-
- {{i18n "discourse_automation.models.automation.status.label"}} -
- {{i18n - "discourse_automation.triggerables.not_found" - trigger=automation.trigger.id - automation=automation.name - }} -
-
- {{i18n "discourse_automation.models.automation.status.label"}} -
- {{format-enabled-automation - automation.enabled - automation.trigger - }} -
- {{if - automation.name - automation.name - (i18n "discourse_automation.unnamed_automation") - }} - -
- {{i18n "discourse_automation.models.automation.trigger.label"}} -
- {{if automation.trigger.id automation.trigger.name "-"}} -
-
- {{i18n "discourse_automation.models.automation.script.label"}} -
- {{automation.script.name}} - (v{{automation.script.version}}) -
-
- {{i18n - "discourse_automation.models.automation.last_updated_by.label" - }} -
-
- - {{avatar automation.last_updated_by imageSize="small"}} - - {{format-date automation.updated_at leaveAgo="true"}} -
-
- -
-{{/if}} \ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-new.hbs b/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-new.hbs deleted file mode 100644 index aeb84074276..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation-new.hbs +++ /dev/null @@ -1,33 +0,0 @@ -
- -
-

{{i18n "discourse_automation.select_script"}}

- - -
- - {{#unless this.model.scripts.length}} -
-

{{i18n "discourse_automation.no_automation_yet"}}

-
- {{/unless}} - -
- {{#each this.scriptableContent as |script|}} - - {{/each}} -
- -
\ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation.hbs b/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation.hbs deleted file mode 100644 index a5f7db17765..00000000000 --- a/plugins/automation/admin/assets/javascripts/admin/templates/admin-plugins-discourse-automation.hbs +++ /dev/null @@ -1,21 +0,0 @@ - -

- {{i18n "discourse_automation.title"}} -

- - {{#if this.showNewAutomation}} - - {{/if}} -
- -
- -{{outlet}} \ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-edit.js b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/edit.js similarity index 94% rename from plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-edit.js rename to plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/edit.js index 1a436631c3b..005fe358b37 100644 --- a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-edit.js +++ b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/edit.js @@ -31,7 +31,7 @@ export default class AutomationEdit extends Controller { this.setProperties({ error: null, isUpdatingAutomation: true }); return ajax( - `/admin/plugins/discourse-automation/automations/${this.model.automation.id}.json`, + `/admin/plugins/automation/automations/${this.model.automation.id}.json`, { type: "PUT", data: JSON.stringify({ automation: this.automationForm }), @@ -42,7 +42,7 @@ export default class AutomationEdit extends Controller { .then(() => { this.send("refreshRoute"); if (routeToIndex) { - this.router.transitionTo("adminPlugins.discourse-automation.index"); + this.router.transitionTo("adminPlugins.show.automation.index"); } }) .catch((e) => this._showError(e)) diff --git a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-index.js b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/index.js similarity index 88% rename from plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-index.js rename to plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/index.js index 692858411a0..ad619293d23 100644 --- a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-index.js +++ b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/index.js @@ -12,14 +12,14 @@ export default class AutomationIndex extends Controller { @action editAutomation(automation) { this.router.transitionTo( - "adminPlugins.discourse-automation.edit", + "adminPlugins.show.automation.edit", automation.id ); } @action newAutomation() { - this.router.transitionTo("adminPlugins.discourse-automation.new"); + this.router.transitionTo("adminPlugins.show.automation.new"); } @action diff --git a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-new.js b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/new.js similarity index 95% rename from plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-new.js rename to plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/new.js index 8eafccdb4b0..326faaaeccc 100644 --- a/plugins/automation/admin/assets/javascripts/admin/controllers/admin-plugins-discourse-automation-new.js +++ b/plugins/automation/admin/assets/javascripts/discourse/controllers/admin-plugins/show/automation/new.js @@ -38,7 +38,7 @@ export default class AutomationNew extends Controller { selectScriptToEdit(newScript) { this.model.automation.save({ script: newScript.id }).then(() => { this.router.transitionTo( - "adminPlugins.discourse-automation.edit", + "adminPlugins.show.automation.edit", this.model.automation.id ); }); diff --git a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-edit.js b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/edit.js similarity index 87% rename from plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-edit.js rename to plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/edit.js index 9016555935d..b2e0d8f52df 100644 --- a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-edit.js +++ b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/edit.js @@ -2,18 +2,16 @@ import { action } from "@ember/object"; import { hash } from "rsvp"; import { ajax } from "discourse/lib/ajax"; import DiscourseRoute from "discourse/routes/discourse"; -import Field from "../models/discourse-automation-field"; +import Field from "discourse/plugins/automation/admin/models/discourse-automation-field"; export default class AutomationEdit extends DiscourseRoute { - controllerName = "admin-plugins-discourse-automation-edit"; - model(params) { return hash({ scriptables: this.store .findAll("discourse-automation-scriptable") .then((result) => result.content), triggerables: ajax( - `/admin/plugins/discourse-automation/triggerables.json?automation_id=${params.id}` + `/admin/plugins/automation/triggerables.json?automation_id=${params.id}` ).then((result) => (result ? result.triggerables : [])), automation: this.store.find("discourse-automation-automation", params.id), }); diff --git a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-index.js b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/index.js similarity index 64% rename from plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-index.js rename to plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/index.js index 586341b2027..84704a1210b 100644 --- a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-index.js +++ b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/index.js @@ -5,18 +5,10 @@ import DiscourseRoute from "discourse/routes/discourse"; export default class AutomationIndex extends DiscourseRoute { @service router; - controllerName = "admin-plugins-discourse-automation-index"; - model() { return this.store.findAll("discourse-automation-automation"); } - afterModel(model) { - if (!model.length) { - this.router.transitionTo("adminPlugins.discourse-automation.new"); - } - } - @action triggerRefresh() { this.refresh(); diff --git a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-new.js b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/new.js similarity index 86% rename from plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-new.js rename to plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/new.js index 9fe8164815e..c281ee9abc4 100644 --- a/plugins/automation/admin/assets/javascripts/admin/routes/admin-plugins-discourse-automation-new.js +++ b/plugins/automation/admin/assets/javascripts/discourse/routes/admin-plugins/show/automation/new.js @@ -2,8 +2,6 @@ import { hash } from "rsvp"; import DiscourseRoute from "discourse/routes/discourse"; export default class AutomationNew extends DiscourseRoute { - controllerName = "admin-plugins-discourse-automation-new"; - model() { return hash({ scripts: this.store.findAll("discourse-automation-automation"), diff --git a/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/edit.hbs b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/edit.hbs new file mode 100644 index 00000000000..b1075fbc26a --- /dev/null +++ b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/edit.hbs @@ -0,0 +1,189 @@ +
+ + + <:content> +
+ + +
+
+ + +
+ +
+
+ +
+ + +
+ +
+
+
+ +
+

+ {{i18n + "discourse_automation.edit_automation.trigger_section.title" + }} +

+ +
+ {{#if this.model.automation.script.forced_triggerable}} +
+ {{i18n + "discourse_automation.edit_automation.trigger_section.forced" + }} +
+ {{/if}} + + + +
+ +
+
+ + {{#if this.automationForm.trigger}} + {{#if this.model.automation.trigger.doc}} +
+

{{this.model.automation.trigger.doc}}

+
+ {{/if}} + + {{#if + (and + this.model.automation.enabled + this.model.automation.trigger.settings.manual_trigger + ) + }} +
+ + {{#if this.nextPendingAutomationAtFormatted}} +

+ {{i18n + "discourse_automation.edit_automation.trigger_section.next_pending_automation" + date=this.nextPendingAutomationAtFormatted + }} +

+ {{/if}} + + +
+ {{/if}} + + {{#each this.triggerFields as |field|}} + + {{/each}} + {{/if}} +
+ + {{#if this.automationForm.trigger}} + {{#if this.scriptFields}} +
+

+ {{i18n + "discourse_automation.edit_automation.fields_section.title" + }} +

+ + {{#if this.model.automation.script.with_trigger_doc}} +
+

{{this.model.automation.script.with_trigger_doc}}

+
+ {{/if}} + +
+ {{#each this.scriptFields as |field|}} + + {{/each}} +
+
+ {{/if}} + + {{#if this.automationForm.trigger}} +
+ {{i18n + "discourse_automation.models.automation.enabled.label" + }} + +
+ {{/if}} + +
+ +
+ {{/if}} + + +
+
\ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/index.hbs b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/index.hbs new file mode 100644 index 00000000000..5bb1e7fa297 --- /dev/null +++ b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/index.hbs @@ -0,0 +1,131 @@ +
+ + <:actions as |actions|> + + + + + {{#if this.model.length}} + + + + + + + + + + + + + {{#each this.model as |automation|}} + + {{#if automation.script.not_found}} + + {{else if automation.trigger.not_found}} + + {{else}} + + + + + + {{/if}} + + + + {{/each}} + +
{{i18n "discourse_automation.models.automation.name.label"}}{{i18n + "discourse_automation.models.automation.trigger.label" + }}{{i18n + "discourse_automation.models.automation.script.label" + }}{{i18n + "discourse_automation.models.automation.last_updated_by.label" + }}
+
+ {{i18n "discourse_automation.models.automation.status.label"}} +
+ {{i18n + "discourse_automation.scriptables.not_found" + script=automation.script.id + automation=automation.name + }} +
+
+ {{i18n "discourse_automation.models.automation.status.label"}} +
+ {{i18n + "discourse_automation.triggerables.not_found" + trigger=automation.trigger.id + automation=automation.name + }} +
+
+ {{i18n "discourse_automation.models.automation.status.label"}} +
+ {{format-enabled-automation + automation.enabled + automation.trigger + }} +
+ {{if + automation.name + automation.name + (i18n "discourse_automation.unnamed_automation") + }} + +
+ {{i18n + "discourse_automation.models.automation.trigger.label" + }} +
+ {{if automation.trigger.id automation.trigger.name "-"}} +
+
+ {{i18n "discourse_automation.models.automation.script.label"}} +
+ {{automation.script.name}} + (v{{automation.script.version}}) +
+
+ {{i18n + "discourse_automation.models.automation.last_updated_by.label" + }} +
+
+ + {{avatar automation.last_updated_by imageSize="small"}} + + {{format-date automation.updated_at leaveAgo="true"}} +
+
+ + + +
+ {{else}} + + {{/if}} +
\ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/new.hbs b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/new.hbs new file mode 100644 index 00000000000..6eeee90fce1 --- /dev/null +++ b/plugins/automation/admin/assets/javascripts/discourse/templates/admin-plugins/show/automation/new.hbs @@ -0,0 +1,27 @@ +
+ + + <:content> + + +
+ {{#each this.scriptableContent as |script|}} + + {{/each}} +
+ +
+
\ No newline at end of file diff --git a/plugins/automation/admin/assets/javascripts/admin/discourse-automation-route-map.js b/plugins/automation/assets/javascripts/admin-automation-route-map.js similarity index 73% rename from plugins/automation/admin/assets/javascripts/admin/discourse-automation-route-map.js rename to plugins/automation/assets/javascripts/admin-automation-route-map.js index ebcfe99c8c9..005f693bb42 100644 --- a/plugins/automation/admin/assets/javascripts/admin/discourse-automation-route-map.js +++ b/plugins/automation/assets/javascripts/admin-automation-route-map.js @@ -1,11 +1,11 @@ export default { - resource: "admin.adminPlugins", + resource: "admin.adminPlugins.show", path: "/plugins", map() { this.route( - "discourse-automation", + "automation", function () { this.route("new"); diff --git a/plugins/automation/assets/javascripts/discourse/initializers/automation-admin-plugin-configuration-nav.js b/plugins/automation/assets/javascripts/discourse/initializers/automation-admin-plugin-configuration-nav.js new file mode 100644 index 00000000000..be63fa92cae --- /dev/null +++ b/plugins/automation/assets/javascripts/discourse/initializers/automation-admin-plugin-configuration-nav.js @@ -0,0 +1,21 @@ +import { withPluginApi } from "discourse/lib/plugin-api"; + +export default { + name: "automation-admin-plugin-configuration-nav", + + initialize(container) { + const currentUser = container.lookup("service:current-user"); + if (!currentUser?.admin) { + return; + } + + withPluginApi("1.1.0", (api) => { + api.addAdminPluginConfigurationNav("automation", [ + { + label: "discourse_automation.title", + route: "adminPlugins.show.automation", + }, + ]); + }); + }, +}; diff --git a/plugins/automation/assets/stylesheets/common/discourse-automation.scss b/plugins/automation/assets/stylesheets/common/discourse-automation.scss index 905fac391ff..061389783e1 100644 --- a/plugins/automation/assets/stylesheets/common/discourse-automation.scss +++ b/plugins/automation/assets/stylesheets/common/discourse-automation.scss @@ -1,4 +1,4 @@ -.discourse-automation { +.admin-plugins.automation { .automations { .relative-date { font-size: $font-down-1; @@ -13,6 +13,10 @@ } } + .discourse-automations-table { + margin-top: 1em; + } + .d-admin-table.automations { .d-admin-row__content { @include breakpoint("tablet") { @@ -51,6 +55,18 @@ order: 5; } } + + .d-admin-row__controls.automations__controls { + text-align: right; + display: flex; + flex-direction: row; + gap: 0.5em; + justify-content: flex-end; + + @include breakpoint("tablet") { + order: 6; + } + } } .admin-section-landing__header { diff --git a/plugins/automation/config/locales/client.en.yml b/plugins/automation/config/locales/client.en.yml index 22e12b7f07f..2c945557f0a 100644 --- a/plugins/automation/config/locales/client.en.yml +++ b/plugins/automation/config/locales/client.en.yml @@ -7,13 +7,16 @@ en: delete_automation: delete automation discourse_automation: title: Automation - create: Create - update: Update + table_title: Automations + create: Add automation + update: Update automation + back: Back + edit: Edit select_script: Select a script select_trigger: Select a trigger confirm_automation_reset: This action will reset script and trigger options, new state will be saved, do you want to proceed? confirm_automation_trigger: This action will trigger the automation, do you want to proceed? - no_automation_yet: You haven’t created any automations yet. Choose an option below to get started. + no_automation_yet: There are currently no automations configured. filter_placeholder: Filter by name or description... edit_automation: trigger_section: diff --git a/plugins/automation/config/routes.rb b/plugins/automation/config/routes.rb index e778e471968..221daae7b3c 100644 --- a/plugins/automation/config/routes.rb +++ b/plugins/automation/config/routes.rb @@ -10,13 +10,13 @@ DiscourseAutomation::Engine.routes.draw do put "/append-last-checked-by/:post_id" => "append_last_checked_by#post_checked" end - scope "/admin/plugins/discourse-automation", + scope "/admin/plugins/automation", as: "admin_discourse_automation", constraints: AdminConstraint.new do scope format: false do - get "/" => "admin#index" - get "/new" => "admin#new" - get "/:id" => "admin#edit" + get "/automation" => "admin#index" + get "/automation/new" => "admin#new" + get "/automation/:id" => "admin#edit" end scope format: :json do diff --git a/plugins/automation/plugin.rb b/plugins/automation/plugin.rb index f4fc2f3fff5..f5ae007b615 100644 --- a/plugins/automation/plugin.rb +++ b/plugins/automation/plugin.rb @@ -87,7 +87,7 @@ after_initialize do Plugin::Instance.prepend DiscourseAutomation::PluginInstanceExtension end - add_admin_route "discourse_automation.title", "discourse-automation" + add_admin_route "discourse_automation.title", "automation", use_new_show_route: true add_api_key_scope( :automations_trigger, diff --git a/plugins/automation/spec/requests/admin_discourse_automation_automations_spec.rb b/plugins/automation/spec/requests/admin_discourse_automation_automations_spec.rb index 625089cf7b6..9e33cef4f65 100644 --- a/plugins/automation/spec/requests/admin_discourse_automation_automations_spec.rb +++ b/plugins/automation/spec/requests/admin_discourse_automation_automations_spec.rb @@ -32,7 +32,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:admin)) } it "shows the automation" do - get "/admin/plugins/discourse-automation/automations/#{automation.id}.json" + get "/admin/plugins/automation/automations/#{automation.id}.json" expect(response.status).to eq(200) expect(response.parsed_body["automation"]["id"]).to eq(automation.id) end @@ -42,7 +42,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:user)) } it "raises a 404" do - get "/admin/plugins/discourse-automation/automations/#{automation.id}.json" + get "/admin/plugins/automation/automations/#{automation.id}.json" expect(response.status).to eq(404) end end @@ -63,7 +63,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:admin)) } it "creates the 'forced triggerable' automation" do - post "/admin/plugins/discourse-automation/automations.json", + post "/admin/plugins/automation/automations.json", params: { automation: { name: "foobar", @@ -78,7 +78,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:user)) } it "raises a 404" do - post "/admin/plugins/discourse-automation/automations.json", + post "/admin/plugins/automation/automations.json", params: { automation: { name: "foobar", @@ -95,7 +95,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:admin)) } it "updates the automation" do - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { trigger: "another-trigger", @@ -106,7 +106,7 @@ describe DiscourseAutomation::AdminAutomationsController do describe "invalid field’s component" do it "errors" do - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { script: automation.script, @@ -129,7 +129,7 @@ describe DiscourseAutomation::AdminAutomationsController do end it "errors" do - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { script: automation.script, @@ -147,7 +147,7 @@ describe DiscourseAutomation::AdminAutomationsController do it "forces the automation to be disabled" do expect(automation.enabled).to eq(true) - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { script: "bar", @@ -164,7 +164,7 @@ describe DiscourseAutomation::AdminAutomationsController do it "forces the automation to be disabled" do expect(automation.enabled).to eq(true) - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { script: automation.script, @@ -181,7 +181,7 @@ describe DiscourseAutomation::AdminAutomationsController do it "disables the automation" do expect(automation.enabled).to eq(true) - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { trigger: automation.trigger, @@ -196,7 +196,7 @@ describe DiscourseAutomation::AdminAutomationsController do context "with invalid field’s metadata" do it "errors" do - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { script: automation.script, @@ -214,7 +214,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:user)) } it "raises a 404" do - put "/admin/plugins/discourse-automation/automations/#{automation.id}.json", + put "/admin/plugins/automation/automations/#{automation.id}.json", params: { automation: { trigger: "another-trigger", @@ -232,13 +232,13 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:admin)) } it "destroys the automation" do - delete "/admin/plugins/discourse-automation/automations/#{automation.id}.json" + delete "/admin/plugins/automation/automations/#{automation.id}.json" expect(DiscourseAutomation::Automation.find_by(id: automation.id)).to eq(nil) end context "when the automation is not found" do it "raises a 404" do - delete "/admin/plugins/discourse-automation/automations/999.json" + delete "/admin/plugins/automation/automations/999.json" expect(response.status).to eq(404) end end @@ -248,7 +248,7 @@ describe DiscourseAutomation::AdminAutomationsController do before { sign_in(Fabricate(:user)) } it "raises a 404" do - delete "/admin/plugins/discourse-automation/automations/#{automation.id}.json" + delete "/admin/plugins/automation/automations/#{automation.id}.json" expect(response.status).to eq(404) end end diff --git a/plugins/automation/spec/system/page_objects/discourse_automation/automation.rb b/plugins/automation/spec/system/page_objects/discourse_automation/automation.rb index f84535e3353..e6d6cc531d0 100644 --- a/plugins/automation/spec/system/page_objects/discourse_automation/automation.rb +++ b/plugins/automation/spec/system/page_objects/discourse_automation/automation.rb @@ -4,7 +4,7 @@ module PageObjects module Pages class Automation < PageObjects::Pages::Base def visit(automation) - super("/admin/plugins/discourse-automation/#{automation.id}") + super("/admin/plugins/automation/automation/#{automation.id}") self end @@ -34,7 +34,7 @@ module PageObjects end def form - @form ||= find(".discourse-automation-form.edit") + @form ||= find(".discourse-automation-edit") end end end diff --git a/plugins/automation/spec/system/page_objects/discourse_automation/new_automation.rb b/plugins/automation/spec/system/page_objects/discourse_automation/new_automation.rb index 59aec4e4a2a..64a24266c9a 100644 --- a/plugins/automation/spec/system/page_objects/discourse_automation/new_automation.rb +++ b/plugins/automation/spec/system/page_objects/discourse_automation/new_automation.rb @@ -4,7 +4,7 @@ module PageObjects module Pages class NewAutomation < PageObjects::Pages::Base def visit - super("/admin/plugins/discourse-automation/new") + super("/admin/plugins/automation/automation/new") self end diff --git a/plugins/automation/spec/system/smoke_test_spec.rb b/plugins/automation/spec/system/smoke_test_spec.rb index b47a2b23b25..c9751334d12 100644 --- a/plugins/automation/spec/system/smoke_test_spec.rb +++ b/plugins/automation/spec/system/smoke_test_spec.rb @@ -21,7 +21,10 @@ describe "DiscourseAutomation | smoke test", type: :system do after { DiscourseAutomation::Scriptable.remove("test") } it "populate correctly" do - visit("/admin/plugins/discourse-automation") + visit("/admin/plugins/automation") + + find(".admin-config-area-empty-list__cta-button").click + find(".admin-section-landing__header-filter").set("test") find(".admin-section-landing-item__content", match: :first).click fill_in("automation-name", with: "aaaaa") @@ -34,7 +37,9 @@ describe "DiscourseAutomation | smoke test", type: :system do end it "works" do - visit("/admin/plugins/discourse-automation") + visit("/admin/plugins/automation") + + find(".admin-config-area-empty-list__cta-button").click find(".admin-section-landing__header-filter").set("user group membership through badge") find(".admin-section-landing-item__content", match: :first).click @@ -51,6 +56,6 @@ describe "DiscourseAutomation | smoke test", type: :system do find(".automation-enabled input").click find(".update-automation").click - expect(page).to have_css('[role="button"]', text: "aaaaa") + expect(page).to have_css(".automations__name", text: "aaaaa") end end