Add annuaire_education champ ui
This commit is contained in:
parent
54f2084aef
commit
91be115c70
7 changed files with 98 additions and 2 deletions
28
app/javascript/components/ComboAnnuaireEducationSearch.js
Normal file
28
app/javascript/components/ComboAnnuaireEducationSearch.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { ReactQueryCacheProvider } from 'react-query';
|
||||||
|
|
||||||
|
import ComboSearch from './ComboSearch';
|
||||||
|
import { queryCache } from './shared/queryCache';
|
||||||
|
|
||||||
|
function ComboAnnuaireEducationSearch(params) {
|
||||||
|
return (
|
||||||
|
<ReactQueryCacheProvider queryCache={queryCache}>
|
||||||
|
<ComboSearch
|
||||||
|
required={params.mandatory}
|
||||||
|
hiddenFieldId={params.hiddenFieldId}
|
||||||
|
scope="annuaire-education"
|
||||||
|
minimumInputLength={3}
|
||||||
|
transformResults={(_, { records }) => records}
|
||||||
|
transformResult={({
|
||||||
|
fields: {
|
||||||
|
identifiant_de_l_etablissement: id,
|
||||||
|
nom_etablissement,
|
||||||
|
nom_commune
|
||||||
|
}
|
||||||
|
}) => [id, `${nom_etablissement}, ${nom_commune} (${id})`]}
|
||||||
|
/>
|
||||||
|
</ReactQueryCacheProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ComboAnnuaireEducationSearch;
|
|
@ -2,7 +2,8 @@ import { QueryCache } from 'react-query';
|
||||||
import { isNumeric } from '@utils';
|
import { isNumeric } from '@utils';
|
||||||
import matchSorter from 'match-sorter';
|
import matchSorter from 'match-sorter';
|
||||||
|
|
||||||
const { api_geo_url, api_adresse_url } = gon.autocomplete || {};
|
const { api_geo_url, api_adresse_url, api_education_url } =
|
||||||
|
gon.autocomplete || {};
|
||||||
|
|
||||||
export const queryCache = new QueryCache({
|
export const queryCache = new QueryCache({
|
||||||
defaultConfig: {
|
defaultConfig: {
|
||||||
|
@ -13,8 +14,11 @@ export const queryCache = new QueryCache({
|
||||||
});
|
});
|
||||||
|
|
||||||
function buildURL(scope, term) {
|
function buildURL(scope, term) {
|
||||||
|
term = encodeURIComponent(term);
|
||||||
if (scope === 'adresse') {
|
if (scope === 'adresse') {
|
||||||
return `${api_adresse_url}/search?q=${term}&limit=5`;
|
return `${api_adresse_url}/search?q=${term}&limit=5`;
|
||||||
|
} else if (scope === 'annuaire-education') {
|
||||||
|
return `${api_education_url}/search?dataset=fr-en-annuaire-education&q=${term}&rows=5`;
|
||||||
} else if (isNumeric(term)) {
|
} else if (isNumeric(term)) {
|
||||||
const code = term.padStart(2, '0');
|
const code = term.padStart(2, '0');
|
||||||
return `${api_geo_url}/${scope}?code=${code}&limit=5`;
|
return `${api_geo_url}/${scope}?code=${code}&limit=5`;
|
||||||
|
|
5
app/javascript/loaders/ComboAnnuaireEducationSearch.js
Normal file
5
app/javascript/loaders/ComboAnnuaireEducationSearch.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import Loadable from '../components/Loadable';
|
||||||
|
|
||||||
|
export default Loadable(() =>
|
||||||
|
import('../components/ComboAnnuaireEducationSearch')
|
||||||
|
);
|
54
app/views/shared/champs/annuaire_education/_show.html.haml
Normal file
54
app/views/shared/champs/annuaire_education/_show.html.haml
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
- if champ.data.blank?
|
||||||
|
= champ.to_s
|
||||||
|
- else
|
||||||
|
%table.table.vertical.dossier-champs
|
||||||
|
%tbody
|
||||||
|
%tr
|
||||||
|
%th.libelle Nom de l’établissement :
|
||||||
|
%td= champ.data['nom_etablissement']
|
||||||
|
%tr
|
||||||
|
%th.libelle L’identifiant de l’etablissement :
|
||||||
|
%td= champ.data['identifiant_de_l_etablissement']
|
||||||
|
%tr
|
||||||
|
%th.libelle SIREN/SIRET :
|
||||||
|
%td= champ.data['siren_siret']
|
||||||
|
%tr
|
||||||
|
%th.libelle Commune :
|
||||||
|
%td= "#{champ.data['nom_commune']} (#{champ.data['code_commune']})"
|
||||||
|
%tr
|
||||||
|
%th.libelle Academie :
|
||||||
|
%td= "#{champ.data['libelle_academie']} (#{champ.data['code_academie']})"
|
||||||
|
%tr
|
||||||
|
%th.libelle Nature de l’établissement :
|
||||||
|
%td= "#{champ.data['libelle_nature']} (#{champ.data['code_nature']})"
|
||||||
|
- if champ.data['type_contrat_prive'] != 'SANS OBJET'
|
||||||
|
%tr
|
||||||
|
%th.libelle Type de contrat privé :
|
||||||
|
%td= champ.data['type_contrat_prive']
|
||||||
|
%tr
|
||||||
|
%th.libelle Nombre d’élèves :
|
||||||
|
%td= champ.data['nombre_d_eleves']
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%th.libelle Adresse :
|
||||||
|
%td
|
||||||
|
= champ.data['adresse_1']
|
||||||
|
%br
|
||||||
|
= "#{champ.data['code_postal']} #{champ.data['nom_commune']}"
|
||||||
|
%br
|
||||||
|
= "#{champ.data['libelle_region']} (#{champ.data['code_region']})"
|
||||||
|
|
||||||
|
- if champ.data['telephone'].present?
|
||||||
|
%tr
|
||||||
|
%th.libelle Téléphone :
|
||||||
|
%td= champ.data['telephone']
|
||||||
|
|
||||||
|
- if champ.data['mail'].present?
|
||||||
|
%tr
|
||||||
|
%th.libelle Email :
|
||||||
|
%td= champ.data['mail']
|
||||||
|
|
||||||
|
- if champ.data['web'].present?
|
||||||
|
%tr
|
||||||
|
%th.libelle Site internet :
|
||||||
|
%td= champ.data['web']
|
|
@ -34,6 +34,8 @@
|
||||||
= render partial: "shared/champs/iban/show", locals: { champ: c }
|
= render partial: "shared/champs/iban/show", locals: { champ: c }
|
||||||
- when TypeDeChamp.type_champs.fetch(:textarea)
|
- when TypeDeChamp.type_champs.fetch(:textarea)
|
||||||
= render partial: "shared/champs/textarea/show", locals: { champ: c }
|
= render partial: "shared/champs/textarea/show", locals: { champ: c }
|
||||||
|
- when TypeDeChamp.type_champs.fetch(:annuaire_education)
|
||||||
|
= render partial: "shared/champs/annuaire_education/show", locals: { champ: c }
|
||||||
- when TypeDeChamp.type_champs.fetch(:date)
|
- when TypeDeChamp.type_champs.fetch(:date)
|
||||||
= c.to_s
|
= c.to_s
|
||||||
- when TypeDeChamp.type_champs.fetch(:datetime)
|
- when TypeDeChamp.type_champs.fetch(:datetime)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
- hidden_field_id = SecureRandom.uuid
|
||||||
|
= form.hidden_field :value, { data: { uuid: hidden_field_id } }
|
||||||
|
= react_component("ComboAnnuaireEducationSearch", mandatory: champ.mandatory?, hiddenFieldId: hidden_field_id )
|
|
@ -9,7 +9,7 @@ Rails.application.config.content_security_policy do |policy|
|
||||||
# c'est trop compliqué pour être rectifié immédiatement (et sans valeur ajoutée:
|
# c'est trop compliqué pour être rectifié immédiatement (et sans valeur ajoutée:
|
||||||
# c'est hardcodé dans les vues, donc pas injectable).
|
# c'est hardcodé dans les vues, donc pas injectable).
|
||||||
policy.style_src :self, "*.crisp.chat", "crisp.chat", 'cdn.jsdelivr.net', 'maxcdn.bootstrapcdn.com', :unsafe_inline
|
policy.style_src :self, "*.crisp.chat", "crisp.chat", 'cdn.jsdelivr.net', 'maxcdn.bootstrapcdn.com', :unsafe_inline
|
||||||
policy.connect_src :self, "wss://*.crisp.chat", "*.crisp.chat", "*.demarches-simplifiees.fr", "in-automate.sendinblue.com", "app.franceconnect.gouv.fr", "sentry.io", "geo.api.gouv.fr", "api-adresse.data.gouv.fr", "openmaptiles.geo.data.gouv.fr", "openmaptiles.github.io", "tiles.geo.api.gouv.fr", "wxs.ign.fr"
|
policy.connect_src :self, "wss://*.crisp.chat", "*.crisp.chat", "*.demarches-simplifiees.fr", "in-automate.sendinblue.com", "app.franceconnect.gouv.fr", "sentry.io", "geo.api.gouv.fr", "api-adresse.data.gouv.fr", "openmaptiles.geo.data.gouv.fr", "openmaptiles.github.io", "tiles.geo.api.gouv.fr", "wxs.ign.fr", "data.education.gouv.fr"
|
||||||
# Pour tout le reste, par défaut on accepte uniquement ce qui vient de chez nous
|
# Pour tout le reste, par défaut on accepte uniquement ce qui vient de chez nous
|
||||||
# et dans la notification on inclue la source de l'erreur
|
# et dans la notification on inclue la source de l'erreur
|
||||||
policy.default_src :self, :data, :blob, :report_sample, "fonts.gstatic.com", "in-automate.sendinblue.com", "player.vimeo.com", "app.franceconnect.gouv.fr", "sentry.io", "static.demarches-simplifiees.fr", "*.crisp.chat", "crisp.chat", "*.crisp.help", "*.sibautomation.com", "sibautomation.com", "data"
|
policy.default_src :self, :data, :blob, :report_sample, "fonts.gstatic.com", "in-automate.sendinblue.com", "player.vimeo.com", "app.franceconnect.gouv.fr", "sentry.io", "static.demarches-simplifiees.fr", "*.crisp.chat", "crisp.chat", "*.crisp.help", "*.sibautomation.com", "sibautomation.com", "data"
|
||||||
|
|
Loading…
Reference in a new issue