mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Controller queryParam configuration should be wrapped in an array. Omitting the array wrapper seems to work under Ember 3.28, but causes an error under Ember 5.
140 lines
3.5 KiB
JavaScript
140 lines
3.5 KiB
JavaScript
import Controller from "@ember/controller";
|
|
import EmberObject, { action, computed } from "@ember/object";
|
|
import I18n from "I18n";
|
|
import { and } from "@ember/object/computed";
|
|
import { ajax } from "discourse/lib/ajax";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
import { inject as service } from "@ember/service";
|
|
|
|
export default class AdminPluginsChatController extends Controller {
|
|
@service dialog;
|
|
queryParams = [
|
|
{
|
|
selectedWebhookId: "id",
|
|
},
|
|
];
|
|
|
|
loading = false;
|
|
creatingNew = false;
|
|
newWebhookName = "";
|
|
newWebhookChannelId = null;
|
|
emojiPickerIsActive = false;
|
|
|
|
@and("newWebhookName", "newWebhookChannelId") nameAndChannelValid;
|
|
|
|
@computed("model.incoming_chat_webhooks.@each.updated_at")
|
|
get sortedWebhooks() {
|
|
return (
|
|
this.model.incoming_chat_webhooks?.sortBy("updated_at").reverse() || []
|
|
);
|
|
}
|
|
|
|
@computed("selectedWebhookId")
|
|
get selectedWebhook() {
|
|
if (!this.selectedWebhookId) {
|
|
return;
|
|
}
|
|
|
|
const id = parseInt(this.selectedWebhookId, 10);
|
|
return this.model.incoming_chat_webhooks.findBy("id", id);
|
|
}
|
|
|
|
@computed("selectedWebhook.name", "selectedWebhook.chat_channel.id")
|
|
get saveEditDisabled() {
|
|
return !this.selectedWebhook.name || !this.selectedWebhook.chat_channel.id;
|
|
}
|
|
|
|
@action
|
|
createNewWebhook() {
|
|
if (this.loading) {
|
|
return;
|
|
}
|
|
|
|
this.set("loading", true);
|
|
const data = {
|
|
name: this.newWebhookName,
|
|
chat_channel_id: this.newWebhookChannelId,
|
|
};
|
|
|
|
return ajax("/admin/plugins/chat/hooks", { data, type: "POST" })
|
|
.then((webhook) => {
|
|
const newWebhook = EmberObject.create(webhook);
|
|
this.set(
|
|
"model.incoming_chat_webhooks",
|
|
[newWebhook].concat(this.model.incoming_chat_webhooks)
|
|
);
|
|
this.resetNewWebhook();
|
|
this.setProperties({
|
|
loading: false,
|
|
selectedWebhookId: newWebhook.id,
|
|
});
|
|
})
|
|
.catch(popupAjaxError);
|
|
}
|
|
|
|
@action
|
|
resetNewWebhook() {
|
|
this.setProperties({
|
|
creatingNew: false,
|
|
newWebhookName: "",
|
|
newWebhookChannelId: null,
|
|
});
|
|
}
|
|
|
|
@action
|
|
destroyWebhook(webhook) {
|
|
this.dialog.deleteConfirm({
|
|
message: I18n.t("chat.incoming_webhooks.confirm_destroy"),
|
|
didConfirm: () => {
|
|
this.set("loading", true);
|
|
return ajax(`/admin/plugins/chat/hooks/${webhook.id}`, {
|
|
type: "DELETE",
|
|
})
|
|
.then(() => {
|
|
this.model.incoming_chat_webhooks.removeObject(webhook);
|
|
this.set("loading", false);
|
|
})
|
|
.catch(popupAjaxError);
|
|
},
|
|
});
|
|
}
|
|
|
|
@action
|
|
emojiSelected(emoji) {
|
|
this.selectedWebhook.set("emoji", `:${emoji}:`);
|
|
return this.set("emojiPickerIsActive", false);
|
|
}
|
|
|
|
@action
|
|
saveEdit() {
|
|
this.set("loading", true);
|
|
const data = {
|
|
name: this.selectedWebhook.name,
|
|
chat_channel_id: this.selectedWebhook.chat_channel.id,
|
|
description: this.selectedWebhook.description,
|
|
emoji: this.selectedWebhook.emoji,
|
|
username: this.selectedWebhook.username,
|
|
};
|
|
return ajax(`/admin/plugins/chat/hooks/${this.selectedWebhook.id}`, {
|
|
data,
|
|
type: "PUT",
|
|
})
|
|
.then(() => {
|
|
this.selectedWebhook.set("updated_at", new Date());
|
|
this.setProperties({
|
|
loading: false,
|
|
selectedWebhookId: null,
|
|
});
|
|
})
|
|
.catch(popupAjaxError);
|
|
}
|
|
|
|
@action
|
|
changeChatChannel(chatChannelId) {
|
|
this.selectedWebhook.set(
|
|
"chat_channel",
|
|
this.model.chat_channels.findBy("id", chatChannelId)
|
|
);
|
|
}
|
|
}
|