0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-22 09:20:29 +01:00

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 { cloneJSON } from "discourse-common/lib/object";
import Category from "discourse/models/category";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";
export default Component.extend({
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() {
this._super(...arguments);

Datei anzeigen

@ -22,13 +22,15 @@
</div>
<div class="validation-section">
<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 class="setting-value">
{{date-picker-past
value=(readonly props.date_after)
containerId="date-container"
onSelect=(action (mut props.date_after))}}
{{input type="number" class="time-n-value" value=props.time_n_value}}
{{combo-box
value=(readonly props.time_unit)
content=timeUnits
class="time-unit-selector"
onChange=(action (mut props.time_unit))}}
</div>
</div>
<div class="validation-section">

Datei anzeigen

@ -124,7 +124,8 @@ export default WizardFieldValidator.extend({
this.backendValidate({
title: this.get("field.value"),
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) => {
const similarTopics = A(
deepMerge(result["topics"], result["similar_topics"])

Datei anzeigen

@ -680,3 +680,13 @@
.wizard.category-selector {
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"
below: "Below"
categories: "Categories"
date_after: "Date After"
max_topic_age: "Max Topic Age"
time_units:
days: "Days"
weeks: "Weeks"
months: "Months"
years: "Years"
type:
text: "Text"

Datei anzeigen

@ -21,8 +21,9 @@ class CustomWizard::RealtimeValidation::SimilarTopics
title = params[:title]
raw = params[:raw]
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)
if title.length < SiteSetting.min_title_similar_length || !Topic.count_exceeds_minimum?
@ -31,7 +32,11 @@ class CustomWizard::RealtimeValidation::SimilarTopics
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| 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) }
result.items = topics

Datei anzeigen

@ -30,12 +30,12 @@ describe ::CustomWizard::RealtimeValidation::SimilarTopics do
expect(result.items.length).to eq(1)
end
it "filters topics based on created date" do
topic.update!(created_at: 1.day.ago)
it "filters topics based on Max Topic Age setting" do
topic.update!(created_at: 23.hours.ago)
cat_topic.update!(created_at: 2.days.ago)
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)
end
end