Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-22 17:30:29 +01:00
Merge pull request #28 from paviliondev/select_kit_2
Update to select-kit-2
Dieser Commit ist enthalten in:
Commit
dd898a9921
17 geänderte Dateien mit 127 neuen und 87 gelöschten Zeilen
|
@ -1,4 +1,5 @@
|
|||
import { default as computed, observes, on } from 'ember-addons/ember-computed-decorators';
|
||||
import { generateSelectKitContent } from '../lib/custom-wizard';
|
||||
|
||||
export default Ember.Component.extend({
|
||||
classNames: 'wizard-custom-field',
|
||||
|
@ -6,11 +7,11 @@ export default Ember.Component.extend({
|
|||
isUpload: Ember.computed.equal('field.type', 'upload'),
|
||||
isCategory: Ember.computed.equal('field.type', 'category'),
|
||||
disableId: Ember.computed.not('field.isNew'),
|
||||
choicesTypes: ['translation', 'preset', 'custom'],
|
||||
choicesTypes: generateSelectKitContent(['translation', 'preset', 'custom']),
|
||||
choicesTranslation: Ember.computed.equal('field.choices_type', 'translation'),
|
||||
choicesPreset: Ember.computed.equal('field.choices_type', 'preset'),
|
||||
choicesCustom: Ember.computed.equal('field.choices_type', 'custom'),
|
||||
categoryPropertyTypes: ['id', 'slug'],
|
||||
categoryPropertyTypes: generateSelectKitContent(['id', 'slug']),
|
||||
|
||||
@computed('field.type')
|
||||
isInput: (type) => type === 'text' || type === 'textarea',
|
||||
|
|
|
@ -2,17 +2,18 @@ import { ajax } from 'discourse/lib/ajax';
|
|||
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||
import CustomWizardApi from '../models/custom-wizard-api';
|
||||
import { default as computed } from 'ember-addons/ember-computed-decorators';
|
||||
import { generateSelectKitContent } from '../lib/custom-wizard';
|
||||
|
||||
export default Ember.Controller.extend({
|
||||
queryParams: ['refresh_list'],
|
||||
loadingSubscriptions: false,
|
||||
notAuthorized: Ember.computed.not('api.authorized'),
|
||||
endpointMethods: ['GET', 'PUT', 'POST', 'PATCH', 'DELETE'],
|
||||
endpointMethods: generateSelectKitContent(['GET', 'PUT', 'POST', 'PATCH', 'DELETE']),
|
||||
showRemove: Ember.computed.not('isNew'),
|
||||
showRedirectUri: Ember.computed.and('threeLeggedOauth', 'api.name'),
|
||||
responseIcon: null,
|
||||
contentTypes: ['application/json', 'application/x-www-form-urlencoded'],
|
||||
successCodes: [100, 101, 102, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 303, 304, 305, 306, 307, 308],
|
||||
contentTypes: generateSelectKitContent(['application/json', 'application/x-www-form-urlencoded']),
|
||||
successCodes: generateSelectKitContent([100, 101, 102, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 303, 304, 305, 306, 307, 308]),
|
||||
|
||||
@computed('saveDisabled', 'api.authType', 'api.authUrl', 'api.tokenUrl', 'api.clientId', 'api.clientSecret', 'threeLeggedOauth')
|
||||
authDisabled(saveDisabled, authType, authUrl, tokenUrl, clientId, clientSecret, threeLeggedOauth) {
|
||||
|
@ -26,7 +27,7 @@ export default Ember.Controller.extend({
|
|||
return !name || !authType;
|
||||
},
|
||||
|
||||
authorizationTypes: ['none', 'basic', 'oauth_2', 'oauth_3'],
|
||||
authorizationTypes: generateSelectKitContent(['none', 'basic', 'oauth_2', 'oauth_3']),
|
||||
isBasicAuth: Ember.computed.equal('api.authType', 'basic'),
|
||||
|
||||
@computed('api.authType')
|
||||
|
|
5
assets/javascripts/discourse/lib/custom-wizard.js.es6
Normale Datei
5
assets/javascripts/discourse/lib/custom-wizard.js.es6
Normale Datei
|
@ -0,0 +1,5 @@
|
|||
function generateSelectKitContent(content) {
|
||||
return content.map(i => ({id: i, name: i}))
|
||||
}
|
||||
|
||||
export { generateSelectKitContent };
|
|
@ -1,5 +1,6 @@
|
|||
import CustomWizard from '../models/custom-wizard';
|
||||
import { ajax } from 'discourse/lib/ajax';
|
||||
import { generateSelectKitContent } from '../lib/custom-wizard';
|
||||
|
||||
export default Discourse.Route.extend({
|
||||
beforeModel() {
|
||||
|
@ -40,7 +41,12 @@ export default Discourse.Route.extend({
|
|||
|
||||
_getFieldTypes(model) {
|
||||
return ajax('/admin/wizards/field-types')
|
||||
.then((result) => model.set('fieldTypes', result.types));
|
||||
.then((result) => {
|
||||
model.set(
|
||||
'fieldTypes',
|
||||
generateSelectKitContent([...result.types])
|
||||
)
|
||||
});
|
||||
},
|
||||
|
||||
_getThemes(model) {
|
||||
|
|
|
@ -107,7 +107,11 @@
|
|||
<h3>{{i18n 'admin.wizard.theme_id'}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box content=model.themes valueAttribute='id' value=model.theme_id none='admin.wizard.no_theme'}}
|
||||
{{combo-box
|
||||
content=model.themes
|
||||
valueProperty='id'
|
||||
value=model.theme_id
|
||||
none='admin.wizard.no_theme'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -89,7 +89,10 @@
|
|||
<div class="control-group auth-type">
|
||||
<label>{{i18n 'admin.wizard.api.auth.type'}}</label>
|
||||
<div class="controls">
|
||||
{{combo-box value=api.authType content=authorizationTypes none='admin.wizard.api.auth.type_none'}}
|
||||
{{combo-box
|
||||
value=api.authType
|
||||
content=authorizationTypes
|
||||
none='admin.wizard.api.auth.type_none'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -240,15 +243,18 @@
|
|||
class='remove-endpoint'}}
|
||||
</div>
|
||||
<div class="bottom">
|
||||
{{combo-box content=endpointMethods
|
||||
value=endpoint.method
|
||||
none="admin.wizard.api.endpoint.method"}}
|
||||
{{combo-box content=contentTypes
|
||||
value=endpoint.content_type
|
||||
none="admin.wizard.api.endpoint.content_type"}}
|
||||
{{multi-select content=successCodes
|
||||
values=endpoint.success_codes
|
||||
none="admin.wizard.api.endpoint.success_codes"}}
|
||||
{{combo-box
|
||||
content=endpointMethods
|
||||
value=endpoint.method
|
||||
none="admin.wizard.api.endpoint.method"}}
|
||||
{{combo-box
|
||||
content=contentTypes
|
||||
value=endpoint.content_type
|
||||
none="admin.wizard.api.endpoint.content_type"}}
|
||||
{{multi-select
|
||||
content=successCodes
|
||||
values=endpoint.success_codes
|
||||
none="admin.wizard.api.endpoint.success_codes"}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -12,7 +12,10 @@
|
|||
<h3>{{i18n "admin.wizard.type"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.type content=types none="admin.wizard.field.type"}}
|
||||
{{combo-box
|
||||
value=action.type
|
||||
content=types
|
||||
none="admin.wizard.field.type"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -22,11 +25,12 @@
|
|||
<h3>{{i18n "admin.wizard.action.title"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.title
|
||||
content=availableFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'
|
||||
isDisabled=action.custom_title_enabled}}
|
||||
{{combo-box
|
||||
value=action.title
|
||||
content=availableFields
|
||||
nameProperty="label"
|
||||
isDisabled=action.custom_title_enabled
|
||||
none='admin.wizard.select_field'}}
|
||||
<div class="setting-gutter">
|
||||
{{input type='checkbox' checked=action.custom_title_enabled}}
|
||||
<span>{{i18n 'admin.wizard.action.custom_title'}}</span>
|
||||
|
@ -42,10 +46,12 @@
|
|||
<h3>{{i18n "admin.wizard.action.post"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.post content=availableFields
|
||||
nameProperty='label'
|
||||
none='admin.wizard.select_field'
|
||||
isDisabled=action.post_builder}}
|
||||
{{combo-box
|
||||
value=action.post
|
||||
content=availableFields
|
||||
nameProperty='label'
|
||||
isDisabled=action.post_builder
|
||||
none='admin.wizard.select_field'}}
|
||||
<div class="setting-gutter">
|
||||
{{input type='checkbox' checked=action.post_builder}}
|
||||
<span>{{i18n 'admin.wizard.action.post_builder.checkbox'}}</span>
|
||||
|
@ -77,7 +83,9 @@
|
|||
<h3>{{i18n "admin.wizard.action.create_topic.category"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{category-chooser value=action.category_id isDisabled=action.custom_category_enabled}}
|
||||
{{category-chooser
|
||||
value=action.category_id
|
||||
isDisabled=action.custom_category_enabled}}
|
||||
<div class="setting-gutter">
|
||||
{{input type='checkbox' checked=action.custom_category_enabled}}
|
||||
<span>{{i18n 'admin.wizard.action.custom_category.label'}}</span>
|
||||
|
@ -87,10 +95,11 @@
|
|||
{{input type='checkbox' checked=action.custom_category_wizard_field}}
|
||||
<span>{{i18n 'admin.wizard.action.custom_category.wizard_field'}}</span>
|
||||
{{#if action.custom_category_wizard_field}}
|
||||
{{combo-box value=action.category_id
|
||||
content=categoryFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'}}
|
||||
{{combo-box
|
||||
value=action.category_id
|
||||
content=categoryFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<div>
|
||||
|
@ -111,19 +120,21 @@
|
|||
<h3>{{i18n "admin.wizard.action.create_topic.tags"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{tag-chooser tags=action.tags
|
||||
filterable=true
|
||||
allowCreate=true
|
||||
isDisabled=action.custom_tag_enabled}}
|
||||
{{tag-chooser
|
||||
tags=action.tags
|
||||
filterable=true
|
||||
allowCreate=true
|
||||
isDisabled=action.custom_tag_enabled}}
|
||||
<div class="setting-gutter">
|
||||
{{input type='checkbox' checked=action.custom_tag_enabled}}
|
||||
<span>{{i18n 'admin.wizard.action.custom_tag.label'}}</span>
|
||||
{{#if action.custom_tag_enabled}}
|
||||
<div class="custom-tag">
|
||||
{{combo-box value=action.custom_tag_field
|
||||
content=tagFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'}}
|
||||
{{combo-box
|
||||
value=action.custom_tag_field
|
||||
content=tagFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
@ -160,10 +171,11 @@
|
|||
<h3>{{i18n 'admin.wizard.required'}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box content=availableFields
|
||||
nameProperty='label'
|
||||
none='admin.wizard.select_field'
|
||||
value=action.required}}
|
||||
{{combo-box
|
||||
value=action.required
|
||||
content=availableFields
|
||||
nameProperty='label'
|
||||
none='admin.wizard.select_field'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting">
|
||||
|
@ -204,10 +216,11 @@
|
|||
<h3>{{i18n "admin.wizard.action.send_to_api.api"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.api
|
||||
content=availableApis
|
||||
none='admin.wizard.action.send_to_api.select_an_api'
|
||||
isDisabled=action.custom_title_enabled}}
|
||||
{{combo-box
|
||||
value=action.api
|
||||
content=availableApis
|
||||
isDisabled=action.custom_title_enabled
|
||||
none='admin.wizard.action.send_to_api.select_an_api'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -216,10 +229,11 @@
|
|||
<h3>{{i18n "admin.wizard.action.send_to_api.endpoint"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.api_endpoint
|
||||
content=availableEndpoints
|
||||
none='admin.wizard.action.send_to_api.select_an_endpoint'
|
||||
isDisabled=apiEmpty}}
|
||||
{{combo-box
|
||||
value=action.api_endpoint
|
||||
content=availableEndpoints
|
||||
isDisabled=apiEmpty
|
||||
none='admin.wizard.action.send_to_api.select_an_endpoint'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -242,11 +256,12 @@
|
|||
<h3>{{i18n "admin.wizard.action.add_to_group.group_selection"}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=action.group_id
|
||||
content=availableFields
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'
|
||||
isDisabled=action.custom_group_enabled}}
|
||||
{{combo-box
|
||||
value=action.group_id
|
||||
content=availableFields
|
||||
isDisabled=action.custom_group_enabled
|
||||
nameProperty="label"
|
||||
none='admin.wizard.select_field'}}
|
||||
<div class="setting-gutter">
|
||||
{{input type='checkbox' checked=action.custom_group_enabled}}
|
||||
<span>{{i18n 'admin.wizard.action.add_to_group.custom_group'}}</span>
|
||||
|
|
|
@ -48,7 +48,10 @@
|
|||
<h3>{{i18n 'admin.wizard.type'}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box value=field.type content=types none="admin.wizard.field.type"}}
|
||||
{{combo-box
|
||||
value=field.type
|
||||
content=types
|
||||
none="admin.wizard.field.type"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -79,7 +82,10 @@
|
|||
{{i18n 'admin.wizard.field.choices_label'}}
|
||||
</div>
|
||||
|
||||
{{combo-box value=field.choices_type content=choicesTypes none="admin.wizard.field.choices_type"}}
|
||||
{{combo-box
|
||||
value=field.choices_type
|
||||
content=choicesTypes
|
||||
none="admin.wizard.field.choices_type"}}
|
||||
|
||||
{{#if choicesTranslation}}
|
||||
<div class="wizard-header small">
|
||||
|
@ -92,7 +98,10 @@
|
|||
<div class="wizard-header small">
|
||||
{{i18n 'admin.wizard.field.choices_preset.label'}}
|
||||
</div>
|
||||
{{combo-box value=field.choices_preset content=presetChoices none='admin.wizard.none'}}
|
||||
{{combo-box
|
||||
value=field.choices_preset
|
||||
content=presetChoices
|
||||
none='admin.wizard.none'}}
|
||||
<div class="wizard-header small">
|
||||
{{i18n 'admin.wizard.field.choices_preset.filter'}}
|
||||
</div>
|
||||
|
@ -141,7 +150,9 @@
|
|||
<h3>{{i18n 'admin.wizard.field.property'}}</h3>
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{combo-box content=categoryPropertyTypes value=field.property}}
|
||||
{{combo-box
|
||||
content=categoryPropertyTypes
|
||||
value=field.property}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|
|
@ -64,6 +64,9 @@
|
|||
//= require discourse/helpers/category-link
|
||||
//= require discourse/helpers/user-avatar
|
||||
//= require discourse/helpers/format-username
|
||||
//= require discourse/helpers/component-for-collection
|
||||
//= require discourse/helpers/component-for-row
|
||||
//= require discourse/helpers/discourse-tag
|
||||
|
||||
//= require discourse/services/app-events
|
||||
//= require discourse/services/emoji-store
|
||||
|
@ -97,6 +100,7 @@
|
|||
//= require jquery.putcursoratend.js
|
||||
//= require template_include.js
|
||||
//= require caret_position.js
|
||||
//= require popper.js
|
||||
|
||||
//= require ./wizard/custom-wizard
|
||||
//= require_tree ./wizard/components
|
||||
|
|
|
@ -64,15 +64,6 @@ export default ComposerEditor.extend({
|
|||
sendAction: this.showUploadModal
|
||||
});
|
||||
}
|
||||
|
||||
toolbar.addButton({
|
||||
id: "options",
|
||||
group: "extras",
|
||||
icon: "cog",
|
||||
title: "composer.options",
|
||||
sendAction: this.onExpandPopupMenuOptions.bind(this),
|
||||
popupMenu: true
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
|
@ -30,15 +30,11 @@ export default Ember.Component.extend({
|
|||
groupsMentioned() {
|
||||
},
|
||||
afterRefresh() {
|
||||
},
|
||||
storeToolbarState() {
|
||||
},
|
||||
},
|
||||
cannotSeeMention() {
|
||||
},
|
||||
importQuote() {
|
||||
},
|
||||
onPopupMenuAction() {
|
||||
},
|
||||
showUploadSelector() {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,5 @@
|
|||
loading=composer.loading
|
||||
showLink=showLink
|
||||
composerEvents=true
|
||||
onExpandPopupMenuOptions=(action "onExpandPopupMenuOptions")
|
||||
onPopupMenuAction=onPopupMenuAction
|
||||
popupMenuOptions=popupMenuOptions
|
||||
disabled=disableTextarea
|
||||
outletArgs=(hash composer=composer editorType="composer")}}
|
|
@ -16,10 +16,12 @@
|
|||
{{toolbar-popup-menu-options
|
||||
onPopupMenuAction=onPopupMenuAction
|
||||
onExpand=(action b.action b)
|
||||
title=b.title
|
||||
headerIcon=b.icon
|
||||
class=b.className
|
||||
content=popupMenuOptions}}
|
||||
content=popupMenuOptions
|
||||
options=(hash
|
||||
popupTitle=b.title
|
||||
icon=b.icon
|
||||
)}}
|
||||
{{else}}
|
||||
<div>{{d.icon}}</div>
|
||||
<button class='wizard-btn {{b.className}}' {{action b.action b}} title="{{b.title}}">
|
||||
|
|
|
@ -1,2 +1,5 @@
|
|||
{{category-selector categories=categories maximum=field.limit}}
|
||||
{{category-selector
|
||||
categories=categories
|
||||
maximum=field.limit
|
||||
onChange=(action (mut categories))}}
|
||||
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
{{wizard-composer-editor replyPlaceholder=field.placeholder
|
||||
composer=composer
|
||||
storeToolbarState=(action "storeToolbarState")
|
||||
onPopupMenuAction=(action "onPopupMenuAction")
|
||||
showUploadModal=(action "showUploadSelector")
|
||||
groupsMentioned=(action "groupsMentioned")
|
||||
cannotSeeMention=(action "cannotSeeMention")
|
||||
importQuote=(action "importQuote")
|
||||
|
|
|
@ -299,7 +299,7 @@ class CustomWizard::Builder
|
|||
|
||||
case template['choices_preset']
|
||||
when 'categories'
|
||||
objects = site.categories
|
||||
objects = Set.new(Category.topic_create_allowed(guardian))
|
||||
when 'groups'
|
||||
objects = site.groups
|
||||
when 'tags'
|
||||
|
|
|
@ -192,6 +192,7 @@ describe CustomWizard::Builder do
|
|||
end
|
||||
|
||||
it 'returns a preset dropdown' do
|
||||
SiteSetting.allow_uncategorized_topics = false
|
||||
template['steps'][0]['fields'][0] = dropdown_categories_field
|
||||
choices = build_wizard(template, user).steps[0].fields[0].choices
|
||||
expect(choices.present?).to eq(true)
|
||||
|
|
Laden …
In neuem Issue referenzieren