FEATURE: add topic tags changed trigger to chat integration (#208)

* FEATURE: add topic tags changed trigger to chat integration

* FEATURE: add placeholder for reply to topic trigger

add description on how to use the placeholder

* DEV: Move slack message creation to provider

Add tests to new method

* FEATURE: add ${URL} to placeholder replacements and added tags link

If triggered when a topic tag is changed, message behavior will follow what user defined in message.

* DEV: Update tests with tags

* DEV: add post to topic for testing

* DEV: update test strings

* DEV: add early return for topic tags changed trigger

* DEV: move early return to use try/catch

* DEV: update `create_slack_message` to not send a tuple of values

* DEV: refactor method to be more readable

* FEATURE: add `${ADDED_AND_REMOVED}` for default texts

* DEV: Update typo in test

* DEV: Add tests to check when if `create_slack_message` raises an error

* DEV: Remove the `tag_added` from chat-integration filter

Added migration to handle the migration of the `tag_added` filter from the chat-integration plugin.

Only removed the logic from the plugin, data removal will happen in a future PR

* DEV: lint migration file

* DEV: update chat-integration to not show "tag_added" rules

* DEV: update added and missing tags logic

* DEV: update context variable name

* DEV: update migration to include `begin/rescue` block and added a list with available filters
This commit is contained in:
Gabriel Grubba
2024-08-13 15:14:35 -03:00
committed by GitHub
parent ac44465a60
commit 57b460737c
10 changed files with 394 additions and 163 deletions
@@ -23,6 +23,8 @@ export default class Rule extends RestModel {
},
];
possible_filters_id = ["thread", "watch", "follow", "mute"];
get available_filters() {
const available = [];
const provider = this.channel.provider;
@@ -46,11 +48,6 @@ export default class Rule extends RestModel {
name: I18n.t("chat_integration.filter.follow"),
icon: "circle",
},
{
id: "tag_added",
name: I18n.t("chat_integration.filter.tag_added"),
icon: "tag",
},
{
id: "mute",
name: I18n.t("chat_integration.filter.mute"),
@@ -1,4 +1,5 @@
import { action } from "@ember/object";
import { getOwner } from "@ember/owner";
import Group from "discourse/models/group";
import DiscourseRoute from "discourse/routes/discourse";
@@ -13,14 +14,18 @@ export default class AdminPluginsChatIntegrationProvider extends DiscourseRoute
Group.findAll(),
]);
const enabledFilters =
getOwner(this).lookup("model:rule").possible_filters_id;
channels.forEach((channel) => {
channel.set(
"rules",
channel.rules.map((rule) => {
rule = this.store.createRecord("rule", rule);
rule.set("channel", channel);
return rule;
})
channel.rules
.filter((rule) => enabledFilters.includes(rule.filter))
.map((rule) => {
rule = this.store.createRecord("rule", rule);
rule.set("channel", channel);
return rule;
})
);
});