0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-05-19 23:40:07 +02:00

FEATURE: Added a new field type Item Chooser

Dieser Commit ist enthalten in:
fzngagan 2020-08-11 12:42:02 +05:30
Ursprung 883d3e6078
Commit 1e7521f006
9 geänderte Dateien mit 87 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,36 @@
import MiniTagChooser from "select-kit/components/mini-tag-chooser";
import { ajax } from "discourse/lib/ajax";
import { observes } from "discourse-common/utils/decorators";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default MiniTagChooser.extend({
searchTags(url, data, callback){
return ajax(url, {
data: {
name: data.name,
value: data.q,
}
}).then(result => callback(this, result))
.catch(popupAjaxError);
},
search(filter){
const data = {
q: filter,
name: this.get('item')
}
return this.searchTags('/w/items/search', data, this._transformJson );
},
_transformJson(obj, result){
let x = result.map(item => {
return { id: item, name: item }
})
return x ;
},
});

Datei anzeigen

@ -0,0 +1,14 @@
import Component from "@ember/component";
import discourseComputed, { observes } from 'discourse-common/utils/decorators';
export default Component.extend({
@observes('value')
updateValue(){
this.set('field.value', this.value.join(','));
},
@discourseComputed('field.label')
itemName(label){
return label.replace(/(<([^>]+)>)/gi, "");
}
});

Datei anzeigen

@ -0,0 +1 @@
{{item-chooser value=value item=itemName}}

Datei anzeigen

@ -171,6 +171,7 @@ en:
date: Date
time: Time
date_time: Date & Time
item_chooser: Item Chooser
connector:
and: "and"

Datei anzeigen

@ -4,6 +4,7 @@ CustomWizard::Engine.routes.draw do
get ':wizard_id/steps' => 'wizard#index'
get ':wizard_id/steps/:step_id' => 'wizard#index'
put ':wizard_id/steps/:step_id' => 'steps#update'
get 'items/search' => 'items#search'
end
Discourse::Application.routes.append do

Datei anzeigen

@ -0,0 +1,12 @@
class CustomWizard::ItemsController < ::ApplicationController
def search
search_params = {
name: params[:name],
value: params[:value] || '',
limit: params[:limit] || 5
}
items = CustomWizard::Item.search(search_params)
render json: MultiJson.dump(items)
end
end

Datei anzeigen

@ -49,7 +49,8 @@ class CustomWizard::Field
prefill: nil,
content: nil
},
user_selector: {}
user_selector: {},
item_chooser: {}
}
end

18
lib/custom_wizard/item.rb Normale Datei
Datei anzeigen

@ -0,0 +1,18 @@
class CustomWizard::Item
WIZARD_ITEM = 'wizard_item'.freeze
def initialize(name, value)
@name = name
@value = value
end
def save
PluginStore.set(WIZARD_ITEM, @name, @value)
end
def self.search(params)
items = PluginStore.get(WIZARD_ITEM, params[:name])
items ? items.filter{ |string| string.downcase.include?(params[:value].downcase) }.take(params[:limit] || 5)
: []
end
end

Datei anzeigen

@ -53,6 +53,7 @@ after_initialize do
../controllers/custom_wizard/wizard.rb
../controllers/custom_wizard/steps.rb
../controllers/custom_wizard/transfer.rb
../controllers/custom_wizard/item.rb
../jobs/clear_after_time_wizard.rb
../jobs/refresh_api_access_token.rb
../jobs/set_after_time_wizard.rb
@ -61,6 +62,7 @@ after_initialize do
../lib/custom_wizard/builder.rb
../lib/custom_wizard/field.rb
../lib/custom_wizard/mapper.rb
../lib/custom_wizard/item.rb
../lib/custom_wizard/log.rb
../lib/custom_wizard/step_updater.rb
../lib/custom_wizard/validator.rb