1
0
Fork 0

Merge pull request #74 from paviliondev/similar-topics-setting

IMPR: implemented a relative time based filtering for similar topics
Dieser Commit ist enthalten in:
Angus McLeod 2021-02-26 15:29:18 +11:00 committet von GitHub
Commit 3758fa3324
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
7 geänderte Dateien mit 52 neuen und 13 gelöschten Zeilen

Datei anzeigen

@ -2,9 +2,25 @@ import Component from "@ember/component";
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import { cloneJSON } from "discourse-common/lib/object"; import { cloneJSON } from "discourse-common/lib/object";
import Category from "discourse/models/category"; import Category from "discourse/models/category";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";
export default Component.extend({ export default Component.extend({
classNames: ["realtime-validations"], classNames: ["realtime-validations"],
@discourseComputed
timeUnits() {
return [
"days",
"weeks",
"months",
"years"
].map((unit) => {
return {
id: unit,
name: I18n.t(`admin.wizard.field.validations.time_units.${unit}`)
}
});
},
init() { init() {
this._super(...arguments); this._super(...arguments);

Datei anzeigen

@ -22,13 +22,15 @@
</div> </div>
<div class="validation-section"> <div class="validation-section">
<div class="setting-label"> <div class="setting-label">
<label>{{i18n 'admin.wizard.field.validations.date_after'}}</label> <label>{{i18n 'admin.wizard.field.validations.max_topic_age'}}</label>
</div> </div>
<div class="setting-value"> <div class="setting-value">
{{date-picker-past {{input type="number" class="time-n-value" value=props.time_n_value}}
value=(readonly props.date_after) {{combo-box
containerId="date-container" value=(readonly props.time_unit)
onSelect=(action (mut props.date_after))}} content=timeUnits
class="time-unit-selector"
onChange=(action (mut props.time_unit))}}
</div> </div>
</div> </div>
<div class="validation-section"> <div class="validation-section">

Datei anzeigen

@ -124,7 +124,8 @@ export default WizardFieldValidator.extend({
this.backendValidate({ this.backendValidate({
title: this.get("field.value"), title: this.get("field.value"),
categories: this.get("validation.categories"), categories: this.get("validation.categories"),
date_after: this.get("validation.date_after"), time_unit: this.get("validation.time_unit"),
time_n_value: this.get("validation.time_n_value")
}).then((result) => { }).then((result) => {
const similarTopics = A( const similarTopics = A(
deepMerge(result["topics"], result["similar_topics"]) deepMerge(result["topics"], result["similar_topics"])

Datei anzeigen

@ -680,3 +680,13 @@
.wizard.category-selector { .wizard.category-selector {
width: 200px !important; width: 200px !important;
} }
.time-n-value {
width: 70px;
vertical-align: middle;
}
.select-kit.time-unit-selector {
width: 80px;
vertical-align: middle;
}

Datei anzeigen

@ -184,7 +184,12 @@ en:
above: "Above" above: "Above"
below: "Below" below: "Below"
categories: "Categories" categories: "Categories"
date_after: "Date After" max_topic_age: "Max Topic Age"
time_units:
days: "Days"
weeks: "Weeks"
months: "Months"
years: "Years"
type: type:
text: "Text" text: "Text"

Datei anzeigen

@ -21,7 +21,8 @@ class CustomWizard::RealtimeValidation::SimilarTopics
title = params[:title] title = params[:title]
raw = params[:raw] raw = params[:raw]
categories = params[:categories] categories = params[:categories]
date_after = params[:date_after] time_n_value = params[:time_n_value]
time_unit = params[:time_unit]
result = CustomWizard::RealtimeValidation::Result.new(:similar_topic) result = CustomWizard::RealtimeValidation::Result.new(:similar_topic)
@ -31,7 +32,11 @@ class CustomWizard::RealtimeValidation::SimilarTopics
topics = Topic.similar_to(title, raw, user).to_a topics = Topic.similar_to(title, raw, user).to_a
topics.select! { |t| categories.include?(t.category.id.to_s) } if categories.present? topics.select! { |t| categories.include?(t.category.id.to_s) } if categories.present?
topics.select! { |t| t.created_at > DateTime.parse(date_after) } if date_after.present?
if time_n_value.to_i > 0 && time_unit.present?
topics.select! { |t| t.created_at >= time_n_value.to_i.send(time_unit).ago }
end
topics.map! { |t| SimilarTopic.new(t) } topics.map! { |t| SimilarTopic.new(t) }
result.items = topics result.items = topics

Datei anzeigen

@ -30,12 +30,12 @@ describe ::CustomWizard::RealtimeValidation::SimilarTopics do
expect(result.items.length).to eq(1) expect(result.items.length).to eq(1)
end end
it "filters topics based on created date" do it "filters topics based on Max Topic Age setting" do
topic.update!(created_at: 1.day.ago) topic.update!(created_at: 23.hours.ago)
cat_topic.update!(created_at: 2.days.ago) cat_topic.update!(created_at: 2.days.ago)
validation = ::CustomWizard::RealtimeValidation::SimilarTopics.new(user) validation = ::CustomWizard::RealtimeValidation::SimilarTopics.new(user)
result = validation.perform({ title: "matching similar", date_after: 1.day.ago.to_date.to_s }) result = validation.perform({ title: "matching similar", time_n_value: 1, time_unit: "days" })
expect(result.items.length).to eq(1) expect(result.items.length).to eq(1)
end end
end end