FEATURE: Bookmarkable QueryGroups. (#177)
Adds the ability for non-Admin users to bookmark Queries from inside Group > Reports > Query view.
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
import { popupAjaxError } from "discourse/lib/ajax-error";
|
||||
import { ajax } from "discourse/lib/ajax";
|
||||
import Bookmark, {
|
||||
NO_REMINDER_ICON,
|
||||
WITH_REMINDER_ICON,
|
||||
} from "discourse/models/bookmark";
|
||||
import { openBookmarkModal } from "discourse/controllers/bookmark";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
|
||||
export default Ember.Controller.extend({
|
||||
showResults: false,
|
||||
@@ -35,5 +41,50 @@ export default Ember.Controller.extend({
|
||||
})
|
||||
.finally(() => this.set("loading", false));
|
||||
},
|
||||
|
||||
toggleBookmark() {
|
||||
return openBookmarkModal(
|
||||
this.queryGroup.bookmark ||
|
||||
Bookmark.create({
|
||||
bookmarkable_type: "DataExplorer::QueryGroup",
|
||||
bookmarkable_id: this.queryGroup.id,
|
||||
user_id: this.currentUser.id,
|
||||
}),
|
||||
{
|
||||
onAfterSave: (savedData) => {
|
||||
const bookmark = Bookmark.create(savedData);
|
||||
this.set("queryGroup.bookmark", bookmark);
|
||||
this.appEvents.trigger(
|
||||
"bookmarks:changed",
|
||||
savedData,
|
||||
bookmark.attachedTo()
|
||||
);
|
||||
},
|
||||
onAfterDelete: () => {
|
||||
this.set("queryGroup.bookmark", null);
|
||||
},
|
||||
}
|
||||
);
|
||||
},
|
||||
}, // actions
|
||||
|
||||
@discourseComputed("queryGroup.bookmark")
|
||||
bookmarkLabel(bookmark) {
|
||||
return bookmark ? "bookmarked.edit_bookmark" : "bookmarked.title";
|
||||
},
|
||||
|
||||
@discourseComputed("queryGroup.bookmark")
|
||||
bookmarkIcon(bookmark) {
|
||||
if (bookmark && bookmark.reminder_at) {
|
||||
return WITH_REMINDER_ICON;
|
||||
}
|
||||
return NO_REMINDER_ICON;
|
||||
},
|
||||
|
||||
@discourseComputed("queryGroup.bookmark")
|
||||
bookmarkClassName(bookmark) {
|
||||
return bookmark
|
||||
? ["bookmark", "bookmarked", "query-group-bookmark"].join(" ")
|
||||
: ["bookmark", "query-group-bookmark"].join(" ");
|
||||
},
|
||||
});
|
||||
|
||||
@@ -9,15 +9,20 @@ export default DiscourseRoute.extend({
|
||||
const group = this.modelFor("group");
|
||||
return ajax(`/g/${group.name}/reports/${params.query_id}`)
|
||||
.then((response) => {
|
||||
const queryParamInfo = response.query.param_info;
|
||||
let query = response.query;
|
||||
let queryGroup = response.query_group;
|
||||
|
||||
const queryParamInfo = query.param_info;
|
||||
|
||||
const queryParams = queryParamInfo.reduce((acc, param) => {
|
||||
acc[param.identifier] = param.default;
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
return {
|
||||
model: Object.assign({ params: queryParams }, response.query),
|
||||
model: Object.assign({ params: queryParams }, query),
|
||||
group,
|
||||
queryGroup,
|
||||
};
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
@@ -10,6 +10,14 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
{{d-button action=(action "run") icon="play" label="explorer.run" class="btn-primary" type="submit"}}
|
||||
|
||||
{{d-button
|
||||
action=(action "toggleBookmark")
|
||||
label=bookmarkLabel
|
||||
icon=bookmarkIcon
|
||||
class=bookmarkClassName
|
||||
}}
|
||||
|
||||
</form>
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{#if results}}
|
||||
|
||||
Reference in New Issue
Block a user