refactor(champ): update champ annuaire education
This commit is contained in:
parent
79a65a4847
commit
f1f1af4e61
6 changed files with 57 additions and 23 deletions
|
@ -1,12 +1,15 @@
|
|||
class EditableChamp::AnnuaireEducationComponent < EditableChamp::ComboSearchComponent
|
||||
class EditableChamp::AnnuaireEducationComponent < EditableChamp::EditableChampBaseComponent
|
||||
def dsfr_input_classname
|
||||
'fr-input'
|
||||
'fr-select'
|
||||
end
|
||||
|
||||
def react_input_opts
|
||||
opts = input_opts(id: @champ.input_id, required: @champ.required?, aria: { describedby: @champ.describedby_id })
|
||||
opts[:className] = "#{opts.delete(:class)} fr-mt-1w"
|
||||
|
||||
opts
|
||||
def react_props
|
||||
react_input_opts(id: @champ.input_id,
|
||||
class: "fr-mt-1w",
|
||||
name: @form.field_name(:external_id),
|
||||
selected_key: @champ.external_id,
|
||||
items: @champ.selected_items,
|
||||
loader: data_sources_data_source_education_path,
|
||||
minimum_input_length: 3)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
- render_parent
|
||||
|
||||
= @form.hidden_field :value
|
||||
= @form.hidden_field :external_id
|
||||
= react_component("ComboAnnuaireEducationSearch",
|
||||
**react_input_opts,
|
||||
**react_combo_props)
|
||||
%react-fragment
|
||||
= render ReactComponent.new "ComboBox/RemoteComboBox", **react_props do
|
||||
= render ReactComponent.new "ComboBox/ComboBoxValueSlot", field: :label, name: @form.field_name(:value)
|
||||
|
|
38
app/controllers/data_sources/education_controller.rb
Normal file
38
app/controllers/data_sources/education_controller.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
class DataSources::EducationController < ApplicationController
|
||||
def search
|
||||
if params[:q].present? && params[:q].length >= 3
|
||||
response = fetch_results
|
||||
|
||||
if response.success?
|
||||
results = JSON.parse(response.body, symbolize_names: true)
|
||||
|
||||
return render json: format_results(results)
|
||||
end
|
||||
end
|
||||
|
||||
render json: []
|
||||
|
||||
rescue JSON::ParserError => e
|
||||
Sentry.set_extras(body: response.body, code: response.code)
|
||||
Sentry.capture_exception(e)
|
||||
render json: []
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def fetch_results
|
||||
Typhoeus.get("#{API_EDUCATION_URL}/search", params: { q: params[:q], rows: 5, dataset: 'fr-en-annuaire-education' }, timeout: 3)
|
||||
end
|
||||
|
||||
def format_results(results)
|
||||
results[:records].map do |record|
|
||||
fields = record.fetch(:fields)
|
||||
value = fields.fetch(:identifiant_de_l_etablissement)
|
||||
{
|
||||
label: "#{fields.fetch(:nom_etablissement)}, #{fields.fetch(:nom_commune)} (#{value})",
|
||||
value:,
|
||||
data: record
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -7,14 +7,11 @@ class Champs::AnnuaireEducationChamp < Champs::TextChamp
|
|||
APIEducation::AnnuaireEducationAdapter.new(external_id).to_params
|
||||
end
|
||||
|
||||
def update_with_external_data!(data:)
|
||||
if data&.is_a?(Hash) && data['nom_etablissement'].present? && data['nom_commune'].present? && data['identifiant_de_l_etablissement'].present?
|
||||
update!(
|
||||
data: data,
|
||||
value: "#{data['nom_etablissement']}, #{data['nom_commune']} (#{data['identifiant_de_l_etablissement']})"
|
||||
)
|
||||
def selected_items
|
||||
if external_id.present?
|
||||
[{ value: external_id, label: value }]
|
||||
else
|
||||
update!(data: data)
|
||||
[]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -641,8 +641,7 @@ class TypeDeChamp < ApplicationRecord
|
|||
# We should refresh all champs after update except for champs using react or custom refresh
|
||||
# logic (RNA, SIRET, etc.)
|
||||
case type_champ
|
||||
when type_champs.fetch(:annuaire_education),
|
||||
type_champs.fetch(:carte),
|
||||
when type_champs.fetch(:carte),
|
||||
type_champs.fetch(:piece_justificative),
|
||||
type_champs.fetch(:titre_identite),
|
||||
type_champs.fetch(:rna),
|
||||
|
|
|
@ -251,6 +251,7 @@ Rails.application.routes.draw do
|
|||
namespace :data_sources do
|
||||
get :adresse, to: 'adresse#search', as: :data_source_adresse
|
||||
get :commune, to: 'commune#search', as: :data_source_commune
|
||||
get :education, to: 'education#search', as: :data_source_education
|
||||
|
||||
get :search_domaine_fonct, to: 'chorus#search_domaine_fonct', as: :search_domaine_fonct
|
||||
get :search_centre_couts, to: 'chorus#search_centre_couts', as: :search_centre_couts
|
||||
|
|
Loading…
Reference in a new issue