mirror of
https://github.com/discourse/discourse.git
synced 2025-03-27 05:55:37 +08:00
66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
import { next } from "@ember/runloop";
|
|
import Component from "@ember/component";
|
|
import debounce from "discourse/lib/debounce";
|
|
import { searchForTerm } from "discourse/lib/search";
|
|
import { observes } from "ember-addons/ember-computed-decorators";
|
|
|
|
export default Component.extend({
|
|
loading: null,
|
|
noResults: null,
|
|
messages: null,
|
|
|
|
@observes("messageTitle")
|
|
messageTitleChanged() {
|
|
this.setProperties({
|
|
loading: true,
|
|
noResults: true,
|
|
selectedTopicId: null
|
|
});
|
|
this.search(this.messageTitle);
|
|
},
|
|
|
|
@observes("messages")
|
|
messagesChanged() {
|
|
const messages = this.messages;
|
|
if (messages) {
|
|
this.set("noResults", messages.length === 0);
|
|
}
|
|
this.set("loading", false);
|
|
},
|
|
|
|
search: debounce(function(title) {
|
|
const currentTopicId = this.currentTopicId;
|
|
|
|
if (Ember.isEmpty(title)) {
|
|
this.setProperties({ messages: null, loading: false });
|
|
return;
|
|
}
|
|
|
|
searchForTerm(title, {
|
|
typeFilter: "private_messages",
|
|
searchForId: true,
|
|
restrictToArchetype: "private_message"
|
|
}).then(results => {
|
|
if (results && results.posts && results.posts.length > 0) {
|
|
this.set(
|
|
"messages",
|
|
results.posts
|
|
.mapBy("topic")
|
|
.filter(t => t.get("id") !== currentTopicId)
|
|
);
|
|
} else {
|
|
this.setProperties({ messages: null, loading: false });
|
|
}
|
|
});
|
|
}, 300),
|
|
|
|
actions: {
|
|
chooseMessage(message) {
|
|
const messageId = Ember.get(message, "id");
|
|
this.set("selectedTopicId", messageId);
|
|
next(() => $(`#choose-message-${messageId}`).prop("checked", "true"));
|
|
return false;
|
|
}
|
|
}
|
|
});
|