0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-09-19 15:21:11 +02:00
Dieser Commit ist enthalten in:
Angus McLeod 2024-06-20 11:25:57 +02:00
Ursprung 0d0fb83bd1
Commit 1a6a9e691c
14 geänderte Dateien mit 139 neuen und 6 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,24 @@
import { observes } from "discourse-common/utils/decorators";
import Topic from "discourse/models/topic";
import Component from "@ember/component";
export default Component.extend({
topics: [],
didInsertElement() {
const value = this.field.value;
if (value) {
this.set("topics", value);
}
console.log(this.field)
},
actions: {
setValue(topicIds, topics) {
if (topics.length) {
this.set("field.value", topics);
}
},
}
});

Datei anzeigen

@ -0,0 +1,72 @@
import MultiSelectComponent from "select-kit/components/multi-select";
import { computed } from "@ember/object";
import { mapBy } from "@ember/object/computed";
import { isEmpty } from "@ember/utils";
import { searchForTerm } from "discourse/lib/search";
import { makeArray } from "discourse-common/lib/helpers";
export default MultiSelectComponent.extend({
classNames: ["topic-selector", "wizard-topic-selector"],
topics: null,
value: [],
content: [],
nameProperty: "fancy_title",
labelProperty: "title",
titleProperty: "title",
selectKitOptions: {
clearable: true,
filterable: true,
filterPlaceholder: "choose_topic.title.placeholder",
allowAny: false,
},
didReceiveAttrs() {
if (this.topics && !this.selectKit.hasSelection) {
const values = makeArray(this.topics.map(t => t.id));
const content = makeArray(this.topics);
this.selectKit.change(values, content);
}
this._super(...arguments);
},
modifyComponentForRow() {
return "topic-row";
},
search(filter) {
if (isEmpty(filter)) {
return [];
}
const searchParams = {};
searchParams.typeFilter = "topic";
searchParams.restrictToArchetype = "regular";
searchParams.searchForId = true;
return searchForTerm(
filter,
searchParams
).then((results) => {
if (results?.posts?.length > 0) {
return results.posts.mapBy("topic");
}
});
},
actions: {
onChange(value, items) {
const content = items.map(t => {
return {
id: t.id,
title: t.title,
fancy_title: t.fancy_title,
url: t.url
}
});
console.log("onChange: ", value, content)
this.setProperties({ value, content });
this.onChange(value, content);
},
},
});

Datei anzeigen

@ -15,15 +15,16 @@ export default Component.extend(UndoChanges, {
isDropdown: equal("field.type", "dropdown"), isDropdown: equal("field.type", "dropdown"),
isUpload: equal("field.type", "upload"), isUpload: equal("field.type", "upload"),
isCategory: equal("field.type", "category"), isCategory: equal("field.type", "category"),
isTopic: equal("field.type", "topic"),
isGroup: equal("field.type", "group"), isGroup: equal("field.type", "group"),
isTag: equal("field.type", "tag"), isTag: equal("field.type", "tag"),
isText: equal("field.type", "text"), isText: equal("field.type", "text"),
isTextarea: equal("field.type", "textarea"), isTextarea: equal("field.type", "textarea"),
isUrl: equal("field.type", "url"), isUrl: equal("field.type", "url"),
isComposer: equal("field.type", "composer"), isComposer: equal("field.type", "composer"),
showPrefill: or("isText", "isCategory", "isTag", "isGroup", "isDropdown"), showPrefill: or("isText", "isCategory", "isTag", "isGroup", "isDropdown", "isTopic"),
showContent: or("isCategory", "isTag", "isGroup", "isDropdown"), showContent: or("isCategory", "isTag", "isGroup", "isDropdown", "isTopic"),
showLimit: or("isCategory", "isTag"), showLimit: or("isCategory", "isTag", "isTopic"),
isTextType: or("isText", "isTextarea", "isComposer"), isTextType: or("isText", "isTextarea", "isComposer"),
isComposerPreview: equal("field.type", "composer_preview"), isComposerPreview: equal("field.type", "composer_preview"),
categoryPropertyTypes: selectKitContent(["id", "slug"]), categoryPropertyTypes: selectKitContent(["id", "slug"]),

Datei anzeigen

@ -18,6 +18,7 @@ export default Component.extend({
isDropdown: equal("value.type", "dropdown"), isDropdown: equal("value.type", "dropdown"),
isTag: equal("value.type", "tag"), isTag: equal("value.type", "tag"),
isCategory: equal("value.type", "category"), isCategory: equal("value.type", "category"),
isTopic: equal("value.type", "topic"),
isGroup: equal("value.type", "group"), isGroup: equal("value.type", "group"),
isUserSelector: equal("value.type", "user_selector"), isUserSelector: equal("value.type", "user_selector"),
isSubmittedAt: equal("field", "submitted_at"), isSubmittedAt: equal("field", "submitted_at"),

Datei anzeigen

@ -227,6 +227,7 @@ const filters = {
"dropdown", "dropdown",
"tag", "tag",
"category", "category",
"topic",
"group", "group",
"user_selector", "user_selector",
], ],

Datei anzeigen

@ -14,6 +14,7 @@ const StandardFieldValidation = [
"text_only", "text_only",
"composer", "composer",
"category", "category",
"topic",
"group", "group",
"date", "date",
"time", "time",

Datei anzeigen

@ -63,7 +63,8 @@ export default EmberObject.extend(ValidState, {
return ajax({ return ajax({
url: `/w/${wizardId}/steps/${this.get("id")}`, url: `/w/${wizardId}/steps/${this.get("id")}`,
type: "PUT", type: "PUT",
data: { fields }, contentType: "application/json",
data: JSON.stringify({ fields })
}).catch((response) => { }).catch((response) => {
if (response.jqXHR) { if (response.jqXHR) {
response = response.jqXHR; response = response.jqXHR;

Datei anzeigen

@ -0,0 +1,5 @@
{{custom-wizard-topic-selector
topics=topics
onChange=(action "setValue")
options=(hash maximum=field.limit)
}}

Datei anzeigen

@ -122,6 +122,22 @@
</a> </a>
{{/if}} {{/if}}
{{#if isTopic}}
<strong>
{{i18n "admin.wizard.submissions.topic_id"}}:
</strong>
{{#each value.value as |topic|}}
<a
target="_blank"
rel="noopener noreferrer"
href={{topic.url}}
title={{topic.fancy_title}}
>
{{topic.id}}
</a>
{{/each}}
{{/if}}
{{#if isGroup}} {{#if isGroup}}
<strong> <strong>
{{i18n "admin.wizard.submissions.group_id"}}: {{i18n "admin.wizard.submissions.group_id"}}:

Datei anzeigen

@ -182,7 +182,8 @@ body.custom-wizard {
} }
} }
.wizard-category-selector { .wizard-category-selector,
.wizard-topic-selector {
width: 500px; width: 500px;
} }
} }

Datei anzeigen

@ -212,6 +212,7 @@ en:
user_field_options: "user field options" user_field_options: "user field options"
user: "user" user: "user"
category: "category" category: "category"
topic: "topic"
tag: "tag" tag: "tag"
group: "group" group: "group"
list: "list" list: "list"
@ -229,6 +230,7 @@ en:
user_field_options: "Select field" user_field_options: "Select field"
user: "Select user" user: "Select user"
category: "Select category" category: "Select category"
topic: "Select a topic"
tag: "Select tag" tag: "Select tag"
group: "Select group" group: "Select group"
list: "Enter item" list: "Enter item"
@ -311,6 +313,7 @@ en:
dropdown: Dropdown dropdown: Dropdown
tag: Tag tag: Tag
category: Category category: Category
topic: Topic
group: Group group: Group
user_selector: User Selector user_selector: User Selector
date: Date date: Date
@ -469,6 +472,7 @@ en:
download: "Download" download: "Download"
group_id: "Group ID" group_id: "Group ID"
category_id: "Category ID" category_id: "Category ID"
topic_id: "Topic ID"
composer_preview: "Composer Preview" composer_preview: "Composer Preview"
api: api:

Datei anzeigen

@ -131,7 +131,7 @@ class CustomWizard::Builder
params[:format] = field_template['format'] params[:format] = field_template['format']
end end
if field_template['type'] === 'category' || field_template['type'] === 'tag' if %w[category tag topic].include?(field_template['type'])
params[:limit] = field_template['limit'] params[:limit] = field_template['limit']
end end

Datei anzeigen

@ -129,6 +129,11 @@ class CustomWizard::Field
prefill: nil, prefill: nil,
content: nil content: nil
}, },
topic: {
limit: 1,
prefill: nil,
content: nil
},
group: { group: {
prefill: nil, prefill: nil,
content: nil content: nil

Datei anzeigen

@ -33,6 +33,7 @@ module DiscoursePluginStatistics
upload: 0, upload: 0,
tag: 0, tag: 0,
category: 0, category: 0,
topic: 0,
group: 0, group: 0,
user_selector: 0, user_selector: 0,
}, },