0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-15 22:32:54 +01:00
discourse-custom-wizard/assets/javascripts/discourse/components/wizard-custom-field.js.es6

120 Zeilen
3,4 KiB
Text

2021-02-24 08:43:35 +01:00
import { default as discourseComputed } from "discourse-common/utils/decorators";
2020-04-20 13:40:32 +02:00
import { equal, or, alias } from "@ember/object/computed";
2020-04-20 11:41:13 +02:00
import { computed } from "@ember/object";
2021-02-24 08:43:35 +01:00
import { selectKitContent } from "../lib/wizard";
import UndoChanges from "../mixins/undo-changes";
2020-04-05 03:37:09 +02:00
import Component from "@ember/component";
2021-02-24 08:43:35 +01:00
import wizardSchema from "../lib/wizard-schema";
2017-09-23 04:34:07 +02:00
2020-04-20 11:41:13 +02:00
export default Component.extend(UndoChanges, {
2021-02-24 08:43:35 +01:00
componentType: "field",
classNameBindings: [":wizard-custom-field", "visible"],
visible: computed("currentFieldId", function () {
return this.field.id === this.currentFieldId;
}),
isDropdown: equal("field.type", "dropdown"),
isUpload: equal("field.type", "upload"),
isCategory: equal("field.type", "category"),
isGroup: equal("field.type", "group"),
isTag: equal("field.type", "tag"),
isText: equal("field.type", "text"),
isTextarea: equal("field.type", "textarea"),
isUrl: equal("field.type", "url"),
isComposer: equal("field.type", "composer"),
showPrefill: or("isText", "isCategory", "isTag", "isGroup", "isDropdown"),
showContent: or("isCategory", "isTag", "isGroup", "isDropdown"),
showLimit: or("isCategory", "isTag"),
isTextType: or("isText", "isTextarea", "isComposer"),
categoryPropertyTypes: selectKitContent(["id", "slug"]),
showAdvanced: alias("field.type"),
messageUrl: "https://thepavilion.io/t/2809",
@discourseComputed("field.type")
2021-01-27 06:08:26 +01:00
validations(type) {
const applicableToField = [];
2021-02-24 08:43:35 +01:00
for (let validation in wizardSchema.field.validations) {
if (wizardSchema.field.validations[validation]["types"].includes(type)) {
applicableToField.push(validation);
2021-01-27 06:08:26 +01:00
}
}
return applicableToField;
},
2021-02-24 08:43:35 +01:00
@discourseComputed("field.type")
2020-07-16 05:26:56 +02:00
isDateTime(type) {
2021-02-24 08:43:35 +01:00
return ["date_time", "date", "time"].indexOf(type) > -1;
2020-07-16 05:26:56 +02:00
},
2021-02-24 08:43:35 +01:00
@discourseComputed("field.type")
2020-04-20 13:40:32 +02:00
messageKey(type) {
2021-02-24 08:43:35 +01:00
let key = "type";
2020-04-20 13:40:32 +02:00
if (type) {
2021-02-24 08:43:35 +01:00
key = "edit";
2020-04-20 13:40:32 +02:00
}
return key;
},
2021-02-24 08:43:35 +01:00
setupTypeOutput(fieldType, options) {
2020-04-07 13:06:35 +02:00
const selectionType = {
2021-02-24 08:43:35 +01:00
category: "category",
tag: "tag",
group: "group",
2020-04-07 13:06:35 +02:00
}[fieldType];
2021-02-24 08:43:35 +01:00
2020-04-07 13:06:35 +02:00
if (selectionType) {
2021-02-24 08:43:35 +01:00
options[`${selectionType}Selection`] = "output";
2020-04-07 13:06:35 +02:00
options.outputDefaultSelection = selectionType;
}
return options;
},
2021-02-24 08:43:35 +01:00
@discourseComputed("field.type")
2020-04-05 03:37:09 +02:00
contentOptions(fieldType) {
2020-03-23 06:41:04 +01:00
let options = {
2020-04-05 03:37:09 +02:00
wizardFieldSelection: true,
2021-02-24 08:43:35 +01:00
textSelection: "key,value",
userFieldSelection: "key,value",
context: "field",
};
2020-04-07 13:06:35 +02:00
options = this.setupTypeOutput(fieldType, options);
2021-02-24 08:43:35 +01:00
2020-04-05 03:37:09 +02:00
if (this.isDropdown) {
2021-02-24 08:43:35 +01:00
options.wizardFieldSelection = "key,value";
options.userFieldOptionsSelection = "output";
options.textSelection = "key,value,output";
options.inputTypes = "conditional,association,assignment";
options.pairConnector = "association";
options.keyPlaceholder = "admin.wizard.key";
options.valuePlaceholder = "admin.wizard.value";
2020-04-05 03:37:09 +02:00
}
2021-02-24 08:43:35 +01:00
2020-03-24 10:35:46 +01:00
return options;
},
2021-02-24 08:43:35 +01:00
@discourseComputed("field.type")
2020-04-05 03:37:09 +02:00
prefillOptions(fieldType) {
2020-03-24 10:35:46 +01:00
let options = {
2020-04-05 03:37:09 +02:00
wizardFieldSelection: true,
2020-04-07 09:54:30 +02:00
textSelection: true,
2021-02-24 08:43:35 +01:00
userFieldSelection: "key,value",
context: "field",
};
2020-04-07 13:06:35 +02:00
return this.setupTypeOutput(fieldType, options);
2020-03-24 10:35:46 +01:00
},
2021-02-24 08:43:35 +01:00
actions: {
2020-03-30 01:53:28 +02:00
imageUploadDone(upload) {
this.set("field.image", upload.url);
},
2021-02-24 08:43:35 +01:00
2020-03-30 01:53:28 +02:00
imageUploadDeleted() {
this.set("field.image", null);
2021-02-24 08:43:35 +01:00
},
},
2017-09-23 04:34:07 +02:00
});