mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: category setting for default list filter. (#9975)
This commit is contained in:
parent
22789e0201
commit
3e7f7fdde8
@ -68,6 +68,13 @@ export default buildCategoryPanel("settings", {
|
||||
);
|
||||
},
|
||||
|
||||
@discourseComputed
|
||||
availableListFilters() {
|
||||
return ["all", "none"].map(p => {
|
||||
return { name: I18n.t(`category.list_filters.${p}`), value: p };
|
||||
});
|
||||
},
|
||||
|
||||
@discourseComputed
|
||||
searchPrioritiesOptions() {
|
||||
const options = [];
|
||||
|
@ -188,7 +188,8 @@ const Category = RestModel.extend({
|
||||
),
|
||||
search_priority: this.search_priority,
|
||||
reviewable_by_group_name: this.reviewable_by_group_name,
|
||||
read_only_banner: this.read_only_banner
|
||||
read_only_banner: this.read_only_banner,
|
||||
default_list_filter: this.default_list_filter
|
||||
},
|
||||
type: id ? "PUT" : "POST"
|
||||
});
|
||||
|
@ -13,6 +13,7 @@ export default {
|
||||
app.DiscoveryCategoryController = DiscoverySortableController.extend();
|
||||
app.DiscoveryParentCategoryController = DiscoverySortableController.extend();
|
||||
app.DiscoveryCategoryNoneController = DiscoverySortableController.extend();
|
||||
app.DiscoveryCategoryAllController = DiscoverySortableController.extend();
|
||||
app.DiscoveryCategoryWithIDController = DiscoverySortableController.extend();
|
||||
|
||||
app.DiscoveryCategoryRoute = buildCategoryRoute("default");
|
||||
@ -20,6 +21,9 @@ export default {
|
||||
app.DiscoveryCategoryNoneRoute = buildCategoryRoute("default", {
|
||||
no_subcategories: true
|
||||
});
|
||||
app.DiscoveryCategoryAllRoute = buildCategoryRoute("default", {
|
||||
no_subcategories: false
|
||||
});
|
||||
app.DiscoveryCategoryWithIDRoute = buildCategoryRoute("default");
|
||||
|
||||
const site = Site.current();
|
||||
|
@ -70,6 +70,7 @@ export default function() {
|
||||
|
||||
// default filter for a category
|
||||
this.route("categoryNone", { path: "/c/*category_slug_path_with_id/none" });
|
||||
this.route("categoryAll", { path: "/c/*category_slug_path_with_id/all" });
|
||||
this.route("category", { path: "/c/*category_slug_path_with_id" });
|
||||
});
|
||||
|
||||
|
@ -30,6 +30,11 @@ export default (filterArg, params) => {
|
||||
category,
|
||||
category_slug_path_with_id
|
||||
});
|
||||
} else if (modelParams.id === "all") {
|
||||
modelParams.category_slug_path_with_id = [
|
||||
modelParams.parentSlug,
|
||||
modelParams.slug
|
||||
].join("/");
|
||||
} else {
|
||||
modelParams.category_slug_path_with_id = [
|
||||
modelParams.parentSlug,
|
||||
@ -76,10 +81,24 @@ export default (filterArg, params) => {
|
||||
return;
|
||||
}
|
||||
|
||||
this._setupNavigation(model.category);
|
||||
const { category, modelParams } = model;
|
||||
|
||||
if (
|
||||
category.default_list_filter === "none" &&
|
||||
filterArg === "default" &&
|
||||
modelParams &&
|
||||
modelParams.id !== "all"
|
||||
) {
|
||||
this.replaceWith("discovery.categoryNone", {
|
||||
category,
|
||||
category_slug_path_with_id: modelParams.category_slug_path_with_id
|
||||
});
|
||||
}
|
||||
|
||||
this._setupNavigation(category);
|
||||
return all([
|
||||
this._createSubcategoryList(model.category),
|
||||
this._retrieveTopicList(model.category, transition, model.modelParams)
|
||||
this._createSubcategoryList(category),
|
||||
this._retrieveTopicList(category, transition, modelParams)
|
||||
]);
|
||||
},
|
||||
|
||||
|
@ -196,6 +196,21 @@
|
||||
{{/unless}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="field">
|
||||
<label for="category-default-filter">
|
||||
{{i18n "category.default_list_filter"}}
|
||||
</label>
|
||||
<div class="controls">
|
||||
{{combo-box
|
||||
id="category-default-filter"
|
||||
valueProperty="value"
|
||||
content=availableListFilters
|
||||
value=category.default_list_filter
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{#if isParentCategory}}
|
||||
<section class="field show-subcategory-list-field">
|
||||
<label>
|
||||
|
@ -128,7 +128,9 @@ export default ComboBoxComponent.extend({
|
||||
"selectKit.options.subCategory",
|
||||
function() {
|
||||
return getURL(
|
||||
this.selectKit.options.subCategory ? this.parentCategoryUrl || "/" : "/"
|
||||
this.selectKit.options.subCategory
|
||||
? `${this.parentCategoryUrl}/all` || "/"
|
||||
: "/"
|
||||
);
|
||||
}
|
||||
),
|
||||
|
@ -329,6 +329,7 @@ class CategoriesController < ApplicationController
|
||||
:required_tag_group_name,
|
||||
:min_tags_from_required_group,
|
||||
:read_only_banner,
|
||||
:default_list_filter,
|
||||
custom_fields: [params[:custom_fields].try(:keys)],
|
||||
permissions: [*p.try(:keys)],
|
||||
allowed_tags: [],
|
||||
|
@ -28,6 +28,7 @@ class BasicCategorySerializer < ApplicationSerializer
|
||||
:default_view,
|
||||
:subcategory_list_style,
|
||||
:default_top_period,
|
||||
:default_list_filter,
|
||||
:minimum_required_tags,
|
||||
:navigate_to_first_post_after_read,
|
||||
:custom_fields
|
||||
|
@ -2826,6 +2826,7 @@ en:
|
||||
sort_order: "Topic List Sort By:"
|
||||
default_view: "Default Topic List:"
|
||||
default_top_period: "Default Top Period:"
|
||||
default_list_filter: "Default List Filter:"
|
||||
allow_badges_label: "Allow badges to be awarded in this category"
|
||||
edit_permissions: "Edit Permissions"
|
||||
reviewable_by_group: "In addition to staff, posts and flags in this category can be also be reviewed by:"
|
||||
@ -2888,6 +2889,9 @@ en:
|
||||
moderation: "Moderation"
|
||||
appearance: "Appearance"
|
||||
email: "Email"
|
||||
list_filters:
|
||||
all: "all"
|
||||
none: "none"
|
||||
|
||||
flagging:
|
||||
title: "Thanks for helping to keep our community civil!"
|
||||
|
@ -686,6 +686,7 @@ Discourse::Application.routes.draw do
|
||||
get "/l/#{filter}" => "list#category_#{filter}", as: "category_#{filter}"
|
||||
end
|
||||
|
||||
get "/all" => "list#category_default", as: "category_all", constraints: { format: 'html' }
|
||||
get "/" => "list#category_default", as: "category_default"
|
||||
end
|
||||
|
||||
|
@ -195,6 +195,7 @@ describe 'categories' do
|
||||
default_view: { type: :string, nullable: true },
|
||||
subcategory_list_style: { type: :string },
|
||||
default_top_period: { type: :string },
|
||||
default_list_filter: { type: :string },
|
||||
minimum_required_tags: { type: :integer },
|
||||
navigate_to_first_post_after_read: { type: :boolean },
|
||||
custom_fields: {
|
||||
@ -370,6 +371,7 @@ describe 'categories' do
|
||||
default_view: { type: :string, nullable: true },
|
||||
subcategory_list_style: { type: :string },
|
||||
default_top_period: { type: :string },
|
||||
default_list_filter: { type: :string },
|
||||
minimum_required_tags: { type: :integer },
|
||||
navigate_to_first_post_after_read: { type: :boolean },
|
||||
custom_fields: {
|
||||
|
Loading…
Reference in New Issue
Block a user