diff --git a/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.hbs b/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.hbs new file mode 100644 index 0000000..0ee2383 --- /dev/null +++ b/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.hbs @@ -0,0 +1,13 @@ +

{{i18n 'discourse_assign.assign.title'}}

+
+
+ +
+
diff --git a/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.js.es6 b/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.js.es6 new file mode 100644 index 0000000..dcd2b94 --- /dev/null +++ b/assets/javascripts/discourse-assign/connectors/category-custom-settings/assign-settings.js.es6 @@ -0,0 +1,10 @@ +export default { + actions: { + onChangeSetting(value) { + this.set( + "category.custom_fields.enable_unassigned_filter", + value ? "true" : "false" + ); + } + } +}; diff --git a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 index ea262d9..5dfbdb2 100644 --- a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 +++ b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 @@ -55,6 +55,29 @@ function registerTopicFooterButtons(api) { } function initialize(api) { + api.addNavigationBarItem({ + name: "unassigned", + customFilter: category => { + return category && category.enable_unassigned_filter; + }, + customHref: category => { + if (category) { + return ( + Discourse.getURL(category.url) + + "/l/latest?status=open&assigned=nobody" + ); + } + }, + forceActive: (category, args, router) => { + return ( + router.currentURL && + router.currentURL.indexOf("assigned=nobody") > -1 && + router.currentURL.indexOf("status=open") > -1 + ); + }, + before: "top" + }); + // You can't act on flags claimed by another user api.modifyClass( "component:flagged-post", diff --git a/assets/javascripts/discourse-assign/pre-initializers/extend-category-for-assign.js.es6 b/assets/javascripts/discourse-assign/pre-initializers/extend-category-for-assign.js.es6 new file mode 100644 index 0000000..3bb263e --- /dev/null +++ b/assets/javascripts/discourse-assign/pre-initializers/extend-category-for-assign.js.es6 @@ -0,0 +1,20 @@ +import Category from "discourse/models/category"; + +export default { + name: "extend-category-for-assign", + + before: "inject-discourse-objects", + + initialize() { + Category.reopen({ + enable_unassigned_filter: Ember.computed( + "custom_fields.enable_unassigned_filter", + { + get(fieldName) { + return Ember.get(this.custom_fields, fieldName) === "true"; + } + } + ) + }); + } +}; diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index c09e9be..3654e44 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1,9 +1,14 @@ en: js: + filters: + unassigned: + title: "Unassigned" + help: "Topics that are not assigned" action_codes: assigned: "assigned %{who} %{when}" unassigned: "unassigned %{who} %{when}" discourse_assign: + add_unassigned_filter: "Add 'unassigned' filter to category" cant_act: "You cannot act on flags that have been assigned to other users" cant_act_unclaimed: "You must claim this topic before acting on flags." assigned: "Assigned" diff --git a/plugin.rb b/plugin.rb index cc59d97..425d733 100644 --- a/plugin.rb +++ b/plugin.rb @@ -100,6 +100,7 @@ after_initialize do end TopicList.preloaded_custom_fields << TopicAssigner::ASSIGNED_TO_ID + Site.preloaded_category_custom_fields << "enable_unassigned_filter" if Site.respond_to? :preloaded_category_custom_fields TopicList.on_preload do |topics, topic_list| if SiteSetting.assign_enabled?