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

118 Zeilen
3,4 KiB
Text

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