commit
4b9e446971
45 changed files with 6334 additions and 9773 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
#attestation-template-edit {
|
#attestation-template-edit {
|
||||||
.notice {
|
.notice {
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
@import "colors";
|
||||||
|
@import "constants";
|
||||||
|
|
||||||
|
#attestation-template-edit {
|
||||||
|
.text-active {
|
||||||
|
color: $green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-inactive {
|
||||||
|
color: $grey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#tags-table {
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
|
||||||
|
.add-tag-title {
|
||||||
|
font-size: 18px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.head {
|
||||||
|
padding: 10px 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.items {
|
||||||
|
max-height: 210px;
|
||||||
|
overflow-y: auto;
|
||||||
|
border-bottom: 1px solid $border-grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
padding: 10px 0;
|
||||||
|
border-bottom: solid 1px $border-grey;
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
width: 35%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
width: 65%;
|
||||||
|
}
|
||||||
|
}
|
|
@ -317,4 +317,3 @@
|
||||||
.link {
|
.link {
|
||||||
color: $blue;
|
color: $blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
@import "constants";
|
@import "constants";
|
||||||
|
|
||||||
.two-columns {
|
.two-columns {
|
||||||
background-color: #FFFFFF;
|
background-color: $white;
|
||||||
|
|
||||||
@media (min-width: $two-columns-breakpoint) {
|
@media (min-width: $two-columns-breakpoint) {
|
||||||
background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%);
|
background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%);
|
||||||
|
|
|
@ -51,6 +51,12 @@
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
margin-top: $default-spacer * 4;
|
margin-top: $default-spacer * 4;
|
||||||
margin-bottom: $default-spacer * 8;
|
margin-bottom: $default-spacer * 8;
|
||||||
|
|
||||||
|
.notice {
|
||||||
|
color: $dark-grey;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.procedure-form__actions {
|
.procedure-form__actions {
|
||||||
|
@ -60,10 +66,20 @@
|
||||||
padding: $default-spacer $default-padding;
|
padding: $default-spacer $default-padding;
|
||||||
background: $light-grey;
|
background: $light-grey;
|
||||||
border-top: 1px solid $border-grey;
|
border-top: 1px solid $border-grey;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.button.send {
|
.button.send {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.actions-left {
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions-right {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.procedure-form__options-details {
|
.procedure-form__options-details {
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
class Admin::AttestationTemplatesController < AdminController
|
|
||||||
before_action :retrieve_procedure
|
|
||||||
|
|
||||||
def edit
|
|
||||||
@attestation_template = @procedure.attestation_template || AttestationTemplate.new(procedure: @procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
attestation_template = @procedure.attestation_template
|
|
||||||
|
|
||||||
if attestation_template.update(activated_attestation_params)
|
|
||||||
flash.notice = "L'attestation a bien été modifiée"
|
|
||||||
else
|
|
||||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
|
||||||
end
|
|
||||||
|
|
||||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
attestation_template = AttestationTemplate.new(activated_attestation_params.merge(procedure_id: @procedure.id))
|
|
||||||
|
|
||||||
if attestation_template.save
|
|
||||||
flash.notice = "L'attestation a bien été sauvegardée"
|
|
||||||
else
|
|
||||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
|
||||||
end
|
|
||||||
|
|
||||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def disactivate
|
|
||||||
attestation_template = @procedure.attestation_template
|
|
||||||
attestation_template.activated = false
|
|
||||||
attestation_template.save
|
|
||||||
|
|
||||||
flash.notice = "L'attestation a bien été désactivée"
|
|
||||||
|
|
||||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def preview
|
|
||||||
attestation = (@procedure.attestation_template || AttestationTemplate.new)
|
|
||||||
attestation.assign_attributes(activated_attestation_params)
|
|
||||||
|
|
||||||
if attestation.valid?
|
|
||||||
@attestation = attestation.render_attributes_for(activated_attestation_params)
|
|
||||||
|
|
||||||
render 'admin/attestation_templates/show', formats: [:pdf]
|
|
||||||
else
|
|
||||||
flash.alert = attestation.errors.full_messages.join('<br>')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_logo
|
|
||||||
@procedure.attestation_template.logo.purge_later
|
|
||||||
|
|
||||||
flash.notice = 'le logo a bien été supprimée'
|
|
||||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_signature
|
|
||||||
@procedure.attestation_template.signature.purge_later
|
|
||||||
|
|
||||||
flash.notice = 'la signature a bien été supprimée'
|
|
||||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def activated_attestation_params
|
|
||||||
# cache result to avoid multiple uninterlaced computations
|
|
||||||
if @activated_attestation_params.nil?
|
|
||||||
@activated_attestation_params = params.require(:attestation_template)
|
|
||||||
.permit(:title, :body, :footer)
|
|
||||||
.merge(activated: true)
|
|
||||||
|
|
||||||
logo_file = params['attestation_template'].delete('logo')
|
|
||||||
signature_file = params['attestation_template'].delete('signature')
|
|
||||||
|
|
||||||
if logo_file.present?
|
|
||||||
@activated_attestation_params[:logo] = uninterlaced_png(logo_file)
|
|
||||||
end
|
|
||||||
if signature_file.present?
|
|
||||||
@activated_attestation_params[:signature] = uninterlaced_png(signature_file)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
@activated_attestation_params
|
|
||||||
end
|
|
||||||
|
|
||||||
def uninterlaced_png(uploaded_file)
|
|
||||||
if uploaded_file&.content_type == 'image/png'
|
|
||||||
chunky_img = ChunkyPNG::Image.from_io(uploaded_file)
|
|
||||||
chunky_img.save(uploaded_file.tempfile.to_path, interlace: false)
|
|
||||||
uploaded_file.tempfile.reopen(uploaded_file.tempfile.to_path, 'rb')
|
|
||||||
end
|
|
||||||
|
|
||||||
uploaded_file
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -28,7 +28,7 @@ module Instructeurs
|
||||||
def apercu_attestation
|
def apercu_attestation
|
||||||
@attestation = dossier.procedure.attestation_template.render_attributes_for(dossier: dossier)
|
@attestation = dossier.procedure.attestation_template.render_attributes_for(dossier: dossier)
|
||||||
|
|
||||||
render 'admin/attestation_templates/show', formats: [:pdf]
|
render 'new_administrateur/attestation_templates/show', formats: [:pdf]
|
||||||
end
|
end
|
||||||
|
|
||||||
def bilans_bdf
|
def bilans_bdf
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
module NewAdministrateur
|
||||||
|
class AttestationTemplatesController < AdministrateurController
|
||||||
|
before_action :retrieve_procedure
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@attestation_template = @procedure.attestation_template || AttestationTemplate.new(procedure: @procedure)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
attestation_template = @procedure.attestation_template
|
||||||
|
if attestation_template.update(activated_attestation_params)
|
||||||
|
flash.notice = "L'attestation a bien été modifiée"
|
||||||
|
else
|
||||||
|
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
attestation_template = AttestationTemplate.new(activated_attestation_params.merge(procedure_id: @procedure.id))
|
||||||
|
|
||||||
|
if attestation_template.save
|
||||||
|
flash.notice = "L'attestation a bien été sauvegardée"
|
||||||
|
else
|
||||||
|
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||||
|
end
|
||||||
|
|
||||||
|
def preview
|
||||||
|
attestation = @procedure.attestation_template || AttestationTemplate.new
|
||||||
|
@attestation = attestation.render_attributes_for({})
|
||||||
|
|
||||||
|
render 'new_administrateur/attestation_templates/show', formats: [:pdf]
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def activated_attestation_params
|
||||||
|
# cache result to avoid multiple uninterlaced computations
|
||||||
|
if @activated_attestation_params.nil?
|
||||||
|
@activated_attestation_params = params.require(:attestation_template)
|
||||||
|
.permit(:title, :body, :footer, :activated, :logo, :signature)
|
||||||
|
|
||||||
|
logo_file = params['attestation_template'].delete('logo')
|
||||||
|
signature_file = params['attestation_template'].delete('signature')
|
||||||
|
|
||||||
|
if logo_file.present?
|
||||||
|
@activated_attestation_params[:logo] = uninterlaced_png(logo_file)
|
||||||
|
end
|
||||||
|
if signature_file.present?
|
||||||
|
@activated_attestation_params[:signature] = uninterlaced_png(signature_file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@activated_attestation_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def uninterlaced_png(uploaded_file)
|
||||||
|
if uploaded_file&.content_type == 'image/png'
|
||||||
|
chunky_img = ChunkyPNG::Image.from_io(uploaded_file)
|
||||||
|
chunky_img.save(uploaded_file.tempfile.to_path, interlace: false)
|
||||||
|
uploaded_file.tempfile.reopen(uploaded_file.tempfile.to_path, 'rb')
|
||||||
|
end
|
||||||
|
uploaded_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
19
app/helpers/attachment_upload_helper.rb
Normal file
19
app/helpers/attachment_upload_helper.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
module AttachmentUploadHelper
|
||||||
|
def image_upload_and_render(form, file, direct_upload = nil)
|
||||||
|
render 'shared/attachment/edit', {
|
||||||
|
form: form,
|
||||||
|
attached_file: file,
|
||||||
|
accept: 'image/png, image/jpg, image/jpeg',
|
||||||
|
user_can_destroy: true,
|
||||||
|
direct_upload: direct_upload
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def text_upload_and_render(form, file)
|
||||||
|
render 'shared/attachment/edit', {
|
||||||
|
form: form,
|
||||||
|
attached_file: file,
|
||||||
|
user_can_destroy: true
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,36 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import ortho from '../MapStyles/images/preview-ortho.png';
|
|
||||||
import vector from '../MapStyles/images/preview-vector.png';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
|
|
||||||
const SwitchMapStyle = ({ isVector }) => {
|
|
||||||
const style = isVector ? 'Satellite' : 'Vectoriel';
|
|
||||||
const source = `${isVector ? ortho : vector}`;
|
|
||||||
|
|
||||||
const imgStyle = {
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
cursor: 'pointer'
|
|
||||||
};
|
|
||||||
|
|
||||||
const textStyle = {
|
|
||||||
position: 'relative',
|
|
||||||
bottom: '26px',
|
|
||||||
left: '4px',
|
|
||||||
color: `${isVector ? '#fff' : '#000'}`
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<div className="switch-style mapboxgl-ctrl-swith-map-style">
|
|
||||||
<img alt={style} style={imgStyle} src={source} />
|
|
||||||
<div className="text" style={textStyle}>
|
|
||||||
{style}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
SwitchMapStyle.propTypes = {
|
|
||||||
isVector: PropTypes.bool
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SwitchMapStyle;
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState, useCallback, useRef } from 'react';
|
import React, { useState, useCallback, useRef, useMemo } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import mapboxgl from 'mapbox-gl';
|
import mapboxgl from 'mapbox-gl';
|
||||||
import ReactMapboxGl, { GeoJSONLayer, ZoomControl } from 'react-mapbox-gl';
|
import ReactMapboxGl, { GeoJSONLayer, ZoomControl } from 'react-mapbox-gl';
|
||||||
|
@ -8,8 +8,7 @@ import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
|
||||||
|
|
||||||
import { getJSON, ajax, fire } from '@utils';
|
import { getJSON, ajax, fire } from '@utils';
|
||||||
|
|
||||||
import SwitchMapStyle from './SwitchMapStyle';
|
import { getMapStyle, SwitchMapStyle } from '../MapStyles';
|
||||||
import { getMapStyle } from '../MapStyles';
|
|
||||||
|
|
||||||
import SearchInput from './SearchInput';
|
import SearchInput from './SearchInput';
|
||||||
import { polygonCadastresFill, polygonCadastresLine } from './utils';
|
import { polygonCadastresFill, polygonCadastresLine } from './utils';
|
||||||
|
@ -24,7 +23,7 @@ import {
|
||||||
|
|
||||||
const Map = ReactMapboxGl({});
|
const Map = ReactMapboxGl({});
|
||||||
|
|
||||||
function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
function MapEditor({ featureCollection, url, preview, hasCadastres, ign }) {
|
||||||
const drawControl = useRef(null);
|
const drawControl = useRef(null);
|
||||||
const [currentMap, setCurrentMap] = useState(null);
|
const [currentMap, setCurrentMap] = useState(null);
|
||||||
|
|
||||||
|
@ -36,7 +35,10 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
||||||
const [cadastresFeatureCollection, setCadastresFeatureCollection] = useState(
|
const [cadastresFeatureCollection, setCadastresFeatureCollection] = useState(
|
||||||
filterFeatureCollection(featureCollection, 'cadastre')
|
filterFeatureCollection(featureCollection, 'cadastre')
|
||||||
);
|
);
|
||||||
const mapStyle = getMapStyle(style, hasCadastres);
|
const mapStyle = useMemo(() => getMapStyle(style, hasCadastres), [
|
||||||
|
style,
|
||||||
|
hasCadastres
|
||||||
|
]);
|
||||||
|
|
||||||
const onFeatureFocus = useCallback(
|
const onFeatureFocus = useCallback(
|
||||||
({ detail }) => {
|
({ detail }) => {
|
||||||
|
@ -291,12 +293,13 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
||||||
height: '500px'
|
height: '500px'
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<GeoJSONLayer
|
{hasCadastres ? (
|
||||||
id="cadastres-layer"
|
<GeoJSONLayer
|
||||||
data={cadastresFeatureCollection}
|
data={cadastresFeatureCollection}
|
||||||
fillPaint={polygonCadastresFill}
|
fillPaint={polygonCadastresFill}
|
||||||
linePaint={polygonCadastresLine}
|
linePaint={polygonCadastresLine}
|
||||||
/>
|
/>
|
||||||
|
) : null}
|
||||||
<DrawControl
|
<DrawControl
|
||||||
ref={drawControl}
|
ref={drawControl}
|
||||||
onDrawCreate={preview ? noop : onDrawCreate}
|
onDrawCreate={preview ? noop : onDrawCreate}
|
||||||
|
@ -310,19 +313,7 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
||||||
trash: true
|
trash: true
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div
|
<SwitchMapStyle style={style} setStyle={setStyle} ign={ign} />
|
||||||
className="style-switch"
|
|
||||||
style={{
|
|
||||||
position: 'absolute',
|
|
||||||
bottom: 0,
|
|
||||||
left: 0
|
|
||||||
}}
|
|
||||||
onClick={() =>
|
|
||||||
style === 'ortho' ? setStyle('vector') : setStyle('ortho')
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<SwitchMapStyle isVector={style === 'vector' ? true : false} />
|
|
||||||
</div>
|
|
||||||
<ZoomControl />
|
<ZoomControl />
|
||||||
</Map>
|
</Map>
|
||||||
</>
|
</>
|
||||||
|
@ -337,7 +328,8 @@ MapEditor.propTypes = {
|
||||||
}),
|
}),
|
||||||
url: PropTypes.string,
|
url: PropTypes.string,
|
||||||
preview: PropTypes.bool,
|
preview: PropTypes.bool,
|
||||||
hasCadastres: PropTypes.bool
|
hasCadastres: PropTypes.bool,
|
||||||
|
ign: PropTypes.bool
|
||||||
};
|
};
|
||||||
|
|
||||||
export default MapEditor;
|
export default MapEditor;
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import ortho from '../MapStyles/images/preview-ortho.png';
|
|
||||||
import vector from '../MapStyles/images/preview-vector.png';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
|
|
||||||
const SwitchMapStyle = ({ isVector }) => {
|
|
||||||
const style = isVector ? 'Satellite' : 'Vectoriel';
|
|
||||||
const source = `${isVector ? ortho : vector}`;
|
|
||||||
|
|
||||||
const imgStyle = {
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
cursor: 'pointer'
|
|
||||||
};
|
|
||||||
|
|
||||||
const textStyle = {
|
|
||||||
position: 'relative',
|
|
||||||
bottom: '26px',
|
|
||||||
left: '4px',
|
|
||||||
color: `${isVector ? '#fff' : '#000'}`
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<div className="switch-style mapboxgl-ctrl-swith-map-style">
|
|
||||||
<img alt={style} style={imgStyle} src={source} />
|
|
||||||
<div className="text" style={textStyle}>
|
|
||||||
{style}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
SwitchMapStyle.propTypes = {
|
|
||||||
isVector: PropTypes.bool
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SwitchMapStyle;
|
|
|
@ -3,8 +3,7 @@ import ReactMapboxGl, { ZoomControl, GeoJSONLayer } from 'react-mapbox-gl';
|
||||||
import mapboxgl, { Popup } from 'mapbox-gl';
|
import mapboxgl, { Popup } from 'mapbox-gl';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import SwitchMapStyle from './SwitchMapStyle';
|
import { getMapStyle, SwitchMapStyle } from '../MapStyles';
|
||||||
import { getMapStyle } from '../MapStyles';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
filterFeatureCollection,
|
filterFeatureCollection,
|
||||||
|
@ -17,7 +16,7 @@ import {
|
||||||
|
|
||||||
const Map = ReactMapboxGl({});
|
const Map = ReactMapboxGl({});
|
||||||
|
|
||||||
const MapReader = ({ featureCollection }) => {
|
const MapReader = ({ featureCollection, ign }) => {
|
||||||
const [currentMap, setCurrentMap] = useState(null);
|
const [currentMap, setCurrentMap] = useState(null);
|
||||||
const [style, setStyle] = useState('ortho');
|
const [style, setStyle] = useState('ortho');
|
||||||
const cadastresFeatureCollection = useMemo(
|
const cadastresFeatureCollection = useMemo(
|
||||||
|
@ -52,10 +51,11 @@ const MapReader = ({ featureCollection }) => {
|
||||||
),
|
),
|
||||||
[selectionsUtilisateurFeatureCollection]
|
[selectionsUtilisateurFeatureCollection]
|
||||||
);
|
);
|
||||||
const mapStyle = useMemo(
|
const hasCadastres = !!cadastresFeatureCollection.length;
|
||||||
() => getMapStyle(style, cadastresFeatureCollection.length),
|
const mapStyle = useMemo(() => getMapStyle(style, hasCadastres), [
|
||||||
[style, cadastresFeatureCollection]
|
style,
|
||||||
);
|
cadastresFeatureCollection
|
||||||
|
]);
|
||||||
const popup = useMemo(
|
const popup = useMemo(
|
||||||
() =>
|
() =>
|
||||||
new Popup({
|
new Popup({
|
||||||
|
@ -176,25 +176,15 @@ const MapReader = ({ featureCollection }) => {
|
||||||
circleOnMouseEnter={onMouseEnter}
|
circleOnMouseEnter={onMouseEnter}
|
||||||
circleOnMouseLeave={onMouseLeave}
|
circleOnMouseLeave={onMouseLeave}
|
||||||
/>
|
/>
|
||||||
<GeoJSONLayer
|
{hasCadastres ? (
|
||||||
data={cadastresFeatureCollection}
|
<GeoJSONLayer
|
||||||
fillPaint={polygonCadastresFill}
|
data={cadastresFeatureCollection}
|
||||||
linePaint={polygonCadastresLine}
|
fillPaint={polygonCadastresFill}
|
||||||
/>
|
linePaint={polygonCadastresLine}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
|
||||||
<div
|
<SwitchMapStyle style={style} setStyle={setStyle} ign={ign} />
|
||||||
className="style-switch"
|
|
||||||
style={{
|
|
||||||
position: 'absolute',
|
|
||||||
bottom: 0,
|
|
||||||
left: 0
|
|
||||||
}}
|
|
||||||
onClick={() =>
|
|
||||||
style === 'ortho' ? setStyle('vector') : setStyle('ortho')
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<SwitchMapStyle isVector={style === 'vector' ? true : false} />
|
|
||||||
</div>
|
|
||||||
<ZoomControl />
|
<ZoomControl />
|
||||||
</Map>
|
</Map>
|
||||||
);
|
);
|
||||||
|
@ -205,7 +195,8 @@ MapReader.propTypes = {
|
||||||
type: PropTypes.string,
|
type: PropTypes.string,
|
||||||
bbox: PropTypes.array,
|
bbox: PropTypes.array,
|
||||||
features: PropTypes.array
|
features: PropTypes.array
|
||||||
})
|
}),
|
||||||
|
ign: PropTypes.bool
|
||||||
};
|
};
|
||||||
|
|
||||||
export default MapReader;
|
export default MapReader;
|
||||||
|
|
78
app/javascript/components/MapStyles/SwitchMapStyle.js
Normal file
78
app/javascript/components/MapStyles/SwitchMapStyle.js
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
import React from 'react';
|
||||||
|
import ortho from './images/preview-ortho.png';
|
||||||
|
import vector from './images/preview-vector.png';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
|
const STYLES = {
|
||||||
|
ortho: {
|
||||||
|
title: 'Satellite',
|
||||||
|
preview: ortho,
|
||||||
|
color: '#fff'
|
||||||
|
},
|
||||||
|
vector: {
|
||||||
|
title: 'Vectoriel',
|
||||||
|
preview: vector,
|
||||||
|
color: '#000'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const IGN_STYLES = {
|
||||||
|
...STYLES,
|
||||||
|
ign: {
|
||||||
|
title: 'Carte IGN',
|
||||||
|
preview: vector,
|
||||||
|
color: '#000'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function getNextStyle(style, ign) {
|
||||||
|
const styles = Object.keys(ign ? IGN_STYLES : STYLES);
|
||||||
|
let index = styles.indexOf(style) + 1;
|
||||||
|
if (index === styles.length) {
|
||||||
|
return styles[0];
|
||||||
|
}
|
||||||
|
return styles[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const SwitchMapStyle = ({ style, setStyle, ign }) => {
|
||||||
|
const nextStyle = getNextStyle(style, ign);
|
||||||
|
const { title, preview, color } = (ign ? IGN_STYLES : STYLES)[nextStyle];
|
||||||
|
|
||||||
|
const imgStyle = {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
cursor: 'pointer'
|
||||||
|
};
|
||||||
|
|
||||||
|
const textStyle = {
|
||||||
|
position: 'relative',
|
||||||
|
bottom: '26px',
|
||||||
|
left: '4px',
|
||||||
|
color
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="style-switch"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
bottom: 0,
|
||||||
|
left: 0
|
||||||
|
}}
|
||||||
|
onClick={() => setStyle(nextStyle)}
|
||||||
|
>
|
||||||
|
<div className="switch-style mapboxgl-ctrl-swith-map-style">
|
||||||
|
<img alt={title} style={imgStyle} src={preview} />
|
||||||
|
<div className="text" style={textStyle}>
|
||||||
|
{title}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
SwitchMapStyle.propTypes = {
|
||||||
|
style: PropTypes.string,
|
||||||
|
setStyle: PropTypes.func,
|
||||||
|
ign: PropTypes.bool
|
||||||
|
};
|
61
app/javascript/components/MapStyles/base-style.js
Normal file
61
app/javascript/components/MapStyles/base-style.js
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
export default {
|
||||||
|
version: 8,
|
||||||
|
metadat: {
|
||||||
|
'mapbox:autocomposite': false,
|
||||||
|
'mapbox:groups': {
|
||||||
|
'1444849242106.713': { collapsed: false, name: 'Places' },
|
||||||
|
'1444849334699.1902': { collapsed: true, name: 'Bridges' },
|
||||||
|
'1444849345966.4436': { collapsed: false, name: 'Roads' },
|
||||||
|
'1444849354174.1904': { collapsed: true, name: 'Tunnels' },
|
||||||
|
'1444849364238.8171': { collapsed: false, name: 'Buildings' },
|
||||||
|
'1444849382550.77': { collapsed: false, name: 'Water' },
|
||||||
|
'1444849388993.3071': { collapsed: false, name: 'Land' }
|
||||||
|
},
|
||||||
|
'mapbox:type': 'template',
|
||||||
|
'openmaptiles:mapbox:owner': 'openmaptiles',
|
||||||
|
'openmaptiles:mapbox:source:url': 'mapbox://openmaptiles.4qljc88t',
|
||||||
|
'openmaptiles:version': '3.x',
|
||||||
|
'maputnik:renderer': 'mbgljs'
|
||||||
|
},
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 1,
|
||||||
|
bearing: 0,
|
||||||
|
pitch: 0,
|
||||||
|
sources: {
|
||||||
|
'decoupage-administratif': {
|
||||||
|
type: 'vector',
|
||||||
|
url:
|
||||||
|
'https://openmaptiles.geo.data.gouv.fr/data/decoupage-administratif.json'
|
||||||
|
},
|
||||||
|
openmaptiles: {
|
||||||
|
type: 'vector',
|
||||||
|
url: 'https://openmaptiles.geo.data.gouv.fr/data/france-vector.json'
|
||||||
|
},
|
||||||
|
'photographies-aeriennes': {
|
||||||
|
type: 'raster',
|
||||||
|
tiles: [
|
||||||
|
'https://tiles.geo.api.gouv.fr/photographies-aeriennes/tiles/{z}/{x}/{y}'
|
||||||
|
],
|
||||||
|
tileSize: 256,
|
||||||
|
attribution: 'Images aériennes © IGN',
|
||||||
|
minzoom: 0,
|
||||||
|
maxzoom: 19
|
||||||
|
},
|
||||||
|
'carte-ign': {
|
||||||
|
type: 'raster',
|
||||||
|
tiles: [
|
||||||
|
'https://wxs.ign.fr/rc1egnbeoss72hxvd143tbyk/geoportail/wmts?service=WMTS&request=GetTile&version=1.0.0&tilematrixset=PM&tilematrix={z}&tilecol={x}&tilerow={y}&layer=GEOGRAPHICALGRIDSYSTEMS.MAPS&format=image/jpeg&style=normal'
|
||||||
|
],
|
||||||
|
tileSize: 256,
|
||||||
|
attribution: 'IGN-F/Géoportail',
|
||||||
|
minzoom: 0,
|
||||||
|
maxzoom: 18
|
||||||
|
},
|
||||||
|
cadastre: {
|
||||||
|
type: 'vector',
|
||||||
|
url: 'https://openmaptiles.geo.data.gouv.fr/data/cadastre.json'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sprite: 'https://openmaptiles.github.io/osm-bright-gl-style/sprite',
|
||||||
|
glyphs: 'https://openmaptiles.geo.data.gouv.fr/fonts/{fontstack}/{range}.pbf'
|
||||||
|
};
|
106
app/javascript/components/MapStyles/cadastre.js
Normal file
106
app/javascript/components/MapStyles/cadastre.js
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
id: 'batiments-line',
|
||||||
|
type: 'line',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'batiments',
|
||||||
|
minzoom: 16,
|
||||||
|
maxzoom: 22,
|
||||||
|
layout: { visibility: 'visible' },
|
||||||
|
paint: {
|
||||||
|
'line-opacity': 1,
|
||||||
|
'line-color': 'rgba(0, 0, 0, 1)',
|
||||||
|
'line-width': 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'batiments-fill',
|
||||||
|
type: 'fill',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'batiments',
|
||||||
|
layout: { visibility: 'visible' },
|
||||||
|
paint: {
|
||||||
|
'fill-color': 'rgba(150, 150, 150, 1)',
|
||||||
|
'fill-opacity': {
|
||||||
|
stops: [
|
||||||
|
[16, 0],
|
||||||
|
[17, 0.6]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'fill-antialias': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'parcelles',
|
||||||
|
type: 'line',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'parcelles',
|
||||||
|
minzoom: 15.5,
|
||||||
|
maxzoom: 24,
|
||||||
|
layout: {
|
||||||
|
visibility: 'visible',
|
||||||
|
'line-cap': 'butt',
|
||||||
|
'line-join': 'miter',
|
||||||
|
'line-miter-limit': 2
|
||||||
|
},
|
||||||
|
paint: {
|
||||||
|
'line-color': 'rgba(255, 255, 255, 1)',
|
||||||
|
'line-opacity': 0.8,
|
||||||
|
'line-width': {
|
||||||
|
stops: [
|
||||||
|
[16, 1.5],
|
||||||
|
[17, 2]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'line-offset': 0,
|
||||||
|
'line-blur': 0,
|
||||||
|
'line-translate': [0, 1],
|
||||||
|
'line-dasharray': [1],
|
||||||
|
'line-gap-width': 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'parcelles-fill',
|
||||||
|
type: 'fill',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'parcelles',
|
||||||
|
layout: {
|
||||||
|
visibility: 'visible'
|
||||||
|
},
|
||||||
|
paint: {
|
||||||
|
'fill-color': 'rgba(129, 123, 0, 1)',
|
||||||
|
'fill-opacity': [
|
||||||
|
'case',
|
||||||
|
['boolean', ['feature-state', 'hover'], false],
|
||||||
|
0.7,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'parcelle-highlighted',
|
||||||
|
type: 'fill',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'parcelles',
|
||||||
|
filter: ['==', 'id', ''],
|
||||||
|
paint: {
|
||||||
|
'fill-color': 'rgba(1, 129, 0, 1)',
|
||||||
|
'fill-opacity': 0.7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'sections',
|
||||||
|
type: 'line',
|
||||||
|
source: 'cadastre',
|
||||||
|
'source-layer': 'sections',
|
||||||
|
minzoom: 12,
|
||||||
|
layout: { visibility: 'visible' },
|
||||||
|
paint: {
|
||||||
|
'line-color': 'rgba(0, 0, 0, 1)',
|
||||||
|
'line-opacity': 0.7,
|
||||||
|
'line-width': 2,
|
||||||
|
'line-dasharray': [3, 3],
|
||||||
|
'line-translate': [0, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
|
@ -1,11 +1,44 @@
|
||||||
import ortho from './ortho.json';
|
import baseStyle from './base-style';
|
||||||
import orthoCadastre from './orthoCadastre.json';
|
import cadastre from './cadastre';
|
||||||
import vector from './vector.json';
|
import orthoStyle from './ortho-style';
|
||||||
import vectorCadastre from './vectorCadastre.json';
|
import vectorStyle from './vector-style';
|
||||||
|
|
||||||
|
const ignStyle = [
|
||||||
|
{
|
||||||
|
id: 'carte-ign',
|
||||||
|
type: 'raster',
|
||||||
|
source: 'carte-ign',
|
||||||
|
paint: { 'raster-resampling': 'linear' }
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
export function getMapStyle(style, hasCadastres) {
|
export function getMapStyle(style, hasCadastres) {
|
||||||
if (hasCadastres) {
|
const mapStyle = { ...baseStyle };
|
||||||
return style === 'ortho' ? orthoCadastre : vectorCadastre;
|
|
||||||
|
switch (style) {
|
||||||
|
case 'ortho':
|
||||||
|
mapStyle.layers = orthoStyle;
|
||||||
|
mapStyle.id = 'ortho';
|
||||||
|
mapStyle.name = 'Photographies aériennes';
|
||||||
|
break;
|
||||||
|
case 'vector':
|
||||||
|
mapStyle.layers = vectorStyle;
|
||||||
|
mapStyle.id = 'vector';
|
||||||
|
mapStyle.name = 'Carte OSM';
|
||||||
|
break;
|
||||||
|
case 'ign':
|
||||||
|
mapStyle.layers = ignStyle;
|
||||||
|
mapStyle.id = 'ign';
|
||||||
|
mapStyle.name = 'Carte IGN';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return style === 'ortho' ? ortho : vector;
|
|
||||||
|
if (hasCadastres) {
|
||||||
|
mapStyle.layers = mapStyle.layers.concat(cadastre);
|
||||||
|
mapStyle.id += '-cadastre';
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export { SwitchMapStyle } from './SwitchMapStyle';
|
||||||
|
|
2639
app/javascript/components/MapStyles/ortho-style.js
Normal file
2639
app/javascript/components/MapStyles/ortho-style.js
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
2839
app/javascript/components/MapStyles/vector-style.js
Normal file
2839
app/javascript/components/MapStyles/vector-style.js
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -86,8 +86,8 @@ class AttestationTemplate < ApplicationRecord
|
||||||
|
|
||||||
{
|
{
|
||||||
created_at: Time.zone.now,
|
created_at: Time.zone.now,
|
||||||
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, ''),
|
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, title),
|
||||||
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, ''),
|
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, body),
|
||||||
footer: params.fetch(:footer, footer),
|
footer: params.fetch(:footer, footer),
|
||||||
logo: params.fetch(:logo, logo.attached? ? logo : nil),
|
logo: params.fetch(:logo, logo.attached? ? logo : nil),
|
||||||
signature: params.fetch(:signature, signature.attached? ? signature : nil)
|
signature: params.fetch(:signature, signature.attached? ? signature : nil)
|
||||||
|
@ -110,7 +110,7 @@ class AttestationTemplate < ApplicationRecord
|
||||||
def build_pdf(dossier)
|
def build_pdf(dossier)
|
||||||
attestation = render_attributes_for(dossier: dossier)
|
attestation = render_attributes_for(dossier: dossier)
|
||||||
action_view = ActionView::Base.new(ActionController::Base.view_paths, attestation: attestation)
|
action_view = ActionView::Base.new(ActionController::Base.view_paths, attestation: attestation)
|
||||||
attestation_view = action_view.render(file: 'admin/attestation_templates/show.pdf.prawn')
|
attestation_view = action_view.render(file: 'new_administrateur/attestation_templates/show', formats: [:pdf])
|
||||||
|
|
||||||
StringIO.new(attestation_view)
|
StringIO.new(attestation_view)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
= render partial: 'admin/closed_mail_template_attestation_inconsistency_alert'
|
|
||||||
#attestation-template-edit.row.white-back
|
|
||||||
= form_for @attestation_template, url: admin_procedure_attestation_template_path do |f|
|
|
||||||
.row
|
|
||||||
.col-md-10
|
|
||||||
%h1
|
|
||||||
Attestation
|
|
||||||
- if @attestation_template.activated?
|
|
||||||
%small.text-success Activée
|
|
||||||
- else
|
|
||||||
%small Désactivée
|
|
||||||
|
|
||||||
%p.notice
|
|
||||||
L’attestation, si elle est activée, est émise au moment où un dossier est accepté.
|
|
||||||
%br
|
|
||||||
L’email d’accusé d’acceptation envoyé à l’usager comporte alors un lien vers l’attestation ;
|
|
||||||
celle-ci est également disponible au téléchargement depuis l’espace personnel de l’usager.
|
|
||||||
|
|
||||||
.image-upload
|
|
||||||
- if @attestation_template.logo.attached?
|
|
||||||
= image_tag @attestation_template.logo_url, class: 'thumbnail'
|
|
||||||
.form-group
|
|
||||||
= f.label :logo, "Logo de l'attestation"
|
|
||||||
- if @attestation_template.logo.attached?
|
|
||||||
= link_to 'Supprimer le logo', admin_procedure_attestation_template_logo_path(@procedure), method: :delete
|
|
||||||
= f.file_field :logo, accept: 'image/png,image/jpg,image/jpeg'
|
|
||||||
%p.help-block
|
|
||||||
Fichier accepté : JPG / JPEG / PNG
|
|
||||||
%br
|
|
||||||
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
= f.label :title, 'Titre'
|
|
||||||
= f.text_field :title, class: 'form-control'
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
= f.label :body, 'Corps du document'
|
|
||||||
~ f.text_area :body, class: 'form-control', rows: 10
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-12.balises
|
|
||||||
%table.table.table-striped
|
|
||||||
%tr
|
|
||||||
%th.col-md-3
|
|
||||||
Balise
|
|
||||||
%th
|
|
||||||
Description
|
|
||||||
- @attestation_template.tags.each do |tag|
|
|
||||||
%tr
|
|
||||||
%td
|
|
||||||
%code{ style: "white-space: pre-wrap;" }
|
|
||||||
= "--#{tag[:libelle]}--"
|
|
||||||
%td
|
|
||||||
= tag[:description]
|
|
||||||
|
|
||||||
.image-upload
|
|
||||||
- if @attestation_template.signature.attached?
|
|
||||||
= image_tag @attestation_template.signature_url, class: 'thumbnail'
|
|
||||||
.form-group
|
|
||||||
= f.label :signature, "Tampon de l'attestation"
|
|
||||||
- if @attestation_template.signature.attached?
|
|
||||||
= link_to 'Supprimer le tampon', admin_procedure_attestation_template_signature_path(@procedure), method: :delete
|
|
||||||
= f.file_field :signature, accept: 'image/png, image/jpg, image/jpeg'
|
|
||||||
%p.help-block
|
|
||||||
Fichier accepté : JPG / JPEG / PNG
|
|
||||||
%br
|
|
||||||
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
= f.label :footer, 'Pied de page'
|
|
||||||
= f.text_field :footer, class: 'form-control', maxlength: 190
|
|
||||||
|
|
||||||
- if @attestation_template.activated && @procedure.locked?
|
|
||||||
.row
|
|
||||||
.col-md-12
|
|
||||||
.pull-right
|
|
||||||
%p.help-block L’attestation ne peut plus être désactivée car la démarche a déjà été publiée.
|
|
||||||
|
|
||||||
%button.btn.btn-primary{ formaction: admin_procedure_attestation_template_preview_path, formtarget: '_blank' } Prévisualiser
|
|
||||||
|
|
||||||
.pull-right
|
|
||||||
- if @attestation_template.activated && !@procedure.locked?
|
|
||||||
%button.btn.btn-warning{ formaction: admin_procedure_attestation_template_disactivate_path } désactiver l'attestation
|
|
||||||
|
|
||||||
- if @attestation_template.new_record? || !@attestation_template.activated
|
|
||||||
%button.btn.btn-success Activer l'attestation
|
|
||||||
- else
|
|
||||||
- save_data = @procedure.locked? ? { confirm: "Attention: les modifications n'affecteront pas les attestations déjà délivrées." } : nil
|
|
||||||
%button.btn.btn-success{ data: save_data } Enregistrer
|
|
||||||
|
|
|
@ -17,10 +17,7 @@
|
||||||
|
|
||||||
= form_for @avis, url: instructeur_avis_path(@avis.procedure, @avis), html: { class: 'form' } do |f|
|
= form_for @avis, url: instructeur_avis_path(@avis.procedure, @avis), html: { class: 'form' } do |f|
|
||||||
= f.text_area :answer, rows: 3, placeholder: 'Votre avis', required: true
|
= f.text_area :answer, rows: 3, placeholder: 'Votre avis', required: true
|
||||||
= render 'shared/attachment/edit',
|
= text_upload_and_render f, @avis.piece_justificative_file
|
||||||
{ form: f,
|
|
||||||
attached_file: @avis.piece_justificative_file,
|
|
||||||
user_can_destroy: true }
|
|
||||||
|
|
||||||
.flex.justify-between.align-baseline
|
.flex.justify-between.align-baseline
|
||||||
%p.confidentiel.flex
|
%p.confidentiel.flex
|
||||||
|
|
|
@ -7,10 +7,7 @@
|
||||||
= f.text_area :introduction, rows: 3, value: avis.introduction || 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
|
= f.text_area :introduction, rows: 3, value: avis.introduction || 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
|
||||||
%p.tab-title Ajouter une pièce jointe
|
%p.tab-title Ajouter une pièce jointe
|
||||||
.form-group
|
.form-group
|
||||||
= render 'shared/attachment/edit',
|
= text_upload_and_render f, avis.introduction_file
|
||||||
{ form: f,
|
|
||||||
attached_file: avis.introduction_file,
|
|
||||||
user_can_destroy: true }
|
|
||||||
|
|
||||||
- if linked_dossiers.present?
|
- if linked_dossiers.present?
|
||||||
= f.check_box :invite_linked_dossiers, {}, true, false
|
= f.check_box :invite_linked_dossiers, {}, true, false
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
%iframe{ src: admin_procedure_attestation_template_preview_path, width: '100%', height: '650px' }
|
|
@ -0,0 +1,45 @@
|
||||||
|
= f.label :title do
|
||||||
|
Titre de l'attestation
|
||||||
|
%span.mandatory *
|
||||||
|
= f.text_field :title, class: 'form-control', placeholder: 'Titre de l‘attestation'
|
||||||
|
|
||||||
|
= f.label :body do
|
||||||
|
Corps du document
|
||||||
|
%span.mandatory *
|
||||||
|
= f.text_area :body, rows: '6', placeholder: 'Description de la démarche, destinataires, etc. ', class: 'form-control'
|
||||||
|
|
||||||
|
#tags-table
|
||||||
|
%h2.add-tag-title
|
||||||
|
Insérer une balise
|
||||||
|
%p.notice
|
||||||
|
Copiez-collez les balises ci-dessous pour afficher automatiquement l’information souhaitée.
|
||||||
|
.head
|
||||||
|
.tag Balise
|
||||||
|
.description Description
|
||||||
|
.items
|
||||||
|
- @attestation_template.tags.each do |tag|
|
||||||
|
.item
|
||||||
|
%code.tag{ style: "white-space: pre-wrap;" }
|
||||||
|
= "--#{tag[:libelle]}--"
|
||||||
|
.description
|
||||||
|
= tag[:description]
|
||||||
|
|
||||||
|
%h3.header-subsection Logo de l'attestation
|
||||||
|
= image_upload_and_render f, @attestation_template.logo, false
|
||||||
|
|
||||||
|
%p.notice
|
||||||
|
Formats acceptés : JPG / JPEG / PNG.
|
||||||
|
%br
|
||||||
|
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
||||||
|
|
||||||
|
%h3.header-subsection Tampon de l'attestation
|
||||||
|
= image_upload_and_render f, @attestation_template.signature, false
|
||||||
|
|
||||||
|
%p.notice
|
||||||
|
Formats acceptés : JPG / JPEG / PNG.
|
||||||
|
%br
|
||||||
|
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
||||||
|
|
||||||
|
= f.label :footer do
|
||||||
|
Pied de page
|
||||||
|
= f.text_field :footer, class: 'form-control', maxlength: 190
|
|
@ -42,7 +42,7 @@
|
||||||
%span.toggle-switch-label.off Attestation désactivée
|
%span.toggle-switch-label.off Attestation désactivée
|
||||||
|
|
||||||
.actions-right
|
.actions-right
|
||||||
= link_to 'Annuler', edit_admin_procedure_attestation_template_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
|
= link_to 'Annuler', edit_admin_procedure_attestation_template_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
|
||||||
= f.button 'Enregistrer', class: 'button primary send'
|
= f.button 'Enregistrer', class: 'button primary send'
|
||||||
|
|
||||||
.procedure-form__column--preview
|
.procedure-form__column--preview
|
||||||
|
|
|
@ -14,11 +14,7 @@
|
||||||
= f.text_area :description, rows: '6', placeholder: 'Description de la démarche, destinataires, etc. ', class: 'form-control'
|
= f.text_area :description, rows: '6', placeholder: 'Description de la démarche, destinataires, etc. ', class: 'form-control'
|
||||||
|
|
||||||
%h3.header-subsection Logo de la démarche
|
%h3.header-subsection Logo de la démarche
|
||||||
= render 'shared/attachment/edit',
|
= image_upload_and_render f, @procedure.logo
|
||||||
{ form: f,
|
|
||||||
attached_file: @procedure.logo,
|
|
||||||
accept: 'image/png, image/jpg, image/jpeg',
|
|
||||||
user_can_destroy: true }
|
|
||||||
|
|
||||||
- if !@procedure.locked?
|
- if !@procedure.locked?
|
||||||
%h3.header-subsection Conservation des données
|
%h3.header-subsection Conservation des données
|
||||||
|
@ -59,10 +55,7 @@
|
||||||
= f.text_field :cadre_juridique, class: 'form-control', placeholder: 'https://www.legifrance.gouv.fr/'
|
= f.text_field :cadre_juridique, class: 'form-control', placeholder: 'https://www.legifrance.gouv.fr/'
|
||||||
|
|
||||||
= f.label :deliberation, 'Importer le texte'
|
= f.label :deliberation, 'Importer le texte'
|
||||||
= render 'shared/attachment/edit',
|
= text_upload_and_render f, @procedure.deliberation
|
||||||
{ form: f,
|
|
||||||
attached_file: @procedure.deliberation,
|
|
||||||
user_can_destroy: true }
|
|
||||||
|
|
||||||
%h3.header-subsection Notice explicative de la démarche
|
%h3.header-subsection Notice explicative de la démarche
|
||||||
|
|
||||||
|
@ -73,10 +66,7 @@
|
||||||
%p.notice
|
%p.notice
|
||||||
Formats acceptés : .doc, .odt, .pdf, .ppt, .pptx
|
Formats acceptés : .doc, .odt, .pdf, .ppt, .pptx
|
||||||
- notice = @procedure.notice
|
- notice = @procedure.notice
|
||||||
= render 'shared/attachment/edit',
|
= text_upload_and_render f, @procedure.notice
|
||||||
{ form: f,
|
|
||||||
attached_file: @procedure.notice,
|
|
||||||
user_can_destroy: true }
|
|
||||||
|
|
||||||
- if !@procedure.locked?
|
- if !@procedure.locked?
|
||||||
%h3.header-subsection À qui s’adresse ma démarche ?
|
%h3.header-subsection À qui s’adresse ma démarche ?
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
||||||
|
|
||||||
.procedure-form__actions.sticky--bottom
|
.procedure-form__actions.sticky--bottom
|
||||||
= link_to 'Annuler', admin_procedure_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
|
.actions-right
|
||||||
= f.button 'Enregistrer', class: 'button primary send'
|
= link_to 'Annuler', admin_procedure_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
|
||||||
|
= f.button 'Enregistrer', class: 'button primary send'
|
||||||
|
|
||||||
.procedure-form__column--preview
|
.procedure-form__column--preview
|
||||||
.procedure-form__preview.sticky--top
|
.procedure-form__preview.sticky--top
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
||||||
|
|
||||||
.procedure-form__actions.sticky--bottom
|
.procedure-form__actions.sticky--bottom
|
||||||
= link_to 'Annuler', admin_procedures_path, class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler la création de cette démarche ?'}
|
.actions-right
|
||||||
= f.button 'Créer la démarche', class: 'button primary send'
|
= link_to 'Annuler', admin_procedures_path, class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler la création de cette démarche ?'}
|
||||||
|
= f.button 'Créer la démarche', class: 'button primary send'
|
||||||
|
|
||||||
.procedure-form__column--preview
|
.procedure-form__column--preview
|
||||||
.procedure-form__preview.sticky--top
|
.procedure-form__preview.sticky--top
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
- persisted = attachment && attachment.persisted?
|
- persisted = attachment && attachment.persisted?
|
||||||
- accept = defined?(accept) ? accept : nil
|
- accept = defined?(accept) ? accept : nil
|
||||||
- user_can_destroy = defined?(user_can_destroy) ? user_can_destroy : false
|
- user_can_destroy = defined?(user_can_destroy) ? user_can_destroy : false
|
||||||
|
- direct_upload = direct_upload != nil ? false : true
|
||||||
|
|
||||||
.attachment
|
.attachment
|
||||||
- if defined?(template) && template.attached?
|
- if defined?(template) && template.attached?
|
||||||
|
@ -34,5 +35,5 @@
|
||||||
= form.file_field attached_file.name,
|
= form.file_field attached_file.name,
|
||||||
class: "attachment-input attachment-input-#{attachment_id} #{'hidden' if persisted}",
|
class: "attachment-input attachment-input-#{attachment_id} #{'hidden' if persisted}",
|
||||||
accept: accept,
|
accept: accept,
|
||||||
direct_upload: true,
|
direct_upload: direct_upload,
|
||||||
data: { 'auto-attach-url': auto_attach_url(form, form.object) }
|
data: { 'auto-attach-url': auto_attach_url(form, form.object) }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
- if champ.geometry?
|
- if champ.geometry?
|
||||||
= react_component("MapReader", { featureCollection: champ.to_feature_collection } )
|
= react_component("MapReader", { featureCollection: champ.to_feature_collection, ign: feature_enabled_for?(:carte_ign, champ.procedure) } )
|
||||||
.geo-areas
|
.geo-areas
|
||||||
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, editing: false }
|
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, editing: false }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
- preview = !champ.persisted?
|
- preview = !champ.persisted?
|
||||||
= react_component("MapEditor", { featureCollection: champ.to_feature_collection, url: champs_carte_features_path(preview ? 'preview' : champ), preview: preview, hasCadastres: !!champ.cadastres? }, class: "carte-#{champ.id}")
|
= react_component("MapEditor", { featureCollection: champ.to_feature_collection, url: champs_carte_features_path(preview ? 'preview' : champ), preview: preview, hasCadastres: !!champ.cadastres?, ign: feature_enabled_for?(:carte_ign, champ.procedure) }, class: "carte-#{champ.id}")
|
||||||
|
|
||||||
.geo-areas
|
.geo-areas
|
||||||
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, editing: true }
|
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, editing: true }
|
||||||
|
|
|
@ -88,4 +88,8 @@ Rails.application.configure do
|
||||||
config.active_job.queue_adapter = ENV.fetch('RAILS_QUEUE_ADAPTER', 'async').to_sym
|
config.active_job.queue_adapter = ENV.fetch('RAILS_QUEUE_ADAPTER', 'async').to_sym
|
||||||
|
|
||||||
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
||||||
|
|
||||||
|
if ENV['IGN_CARTE_REFERER']
|
||||||
|
config.hosts << ENV['IGN_CARTE_REFERER']
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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', :unsafe_inline
|
policy.style_src :self, "*.crisp.chat", "crisp.chat", 'cdn.jsdelivr.net', :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"
|
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"
|
||||||
# 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"
|
||||||
|
|
|
@ -35,7 +35,8 @@ features = [
|
||||||
:mini_profiler,
|
:mini_profiler,
|
||||||
:operation_log_serialize_subject,
|
:operation_log_serialize_subject,
|
||||||
:pre_maintenance_mode,
|
:pre_maintenance_mode,
|
||||||
:xray
|
:xray,
|
||||||
|
:carte_ign
|
||||||
]
|
]
|
||||||
|
|
||||||
def database_exists?
|
def database_exists?
|
||||||
|
|
|
@ -196,17 +196,6 @@ Rails.application.routes.draw do
|
||||||
put 'publish' => 'procedures#publish', as: :publish
|
put 'publish' => 'procedures#publish', as: :publish
|
||||||
post 'transfer' => 'procedures#transfer', as: :transfer
|
post 'transfer' => 'procedures#transfer', as: :transfer
|
||||||
put 'clone' => 'procedures#clone', as: :clone
|
put 'clone' => 'procedures#clone', as: :clone
|
||||||
|
|
||||||
resource :attestation_template, only: [:edit, :update, :create]
|
|
||||||
|
|
||||||
post 'attestation_template/disactivate' => 'attestation_templates#disactivate'
|
|
||||||
patch 'attestation_template/disactivate' => 'attestation_templates#disactivate'
|
|
||||||
|
|
||||||
post 'attestation_template/preview' => 'attestation_templates#preview'
|
|
||||||
patch 'attestation_template/preview' => 'attestation_templates#preview'
|
|
||||||
|
|
||||||
delete 'attestation_template/logo' => 'attestation_templates#delete_logo'
|
|
||||||
delete 'attestation_template/signature' => 'attestation_templates#delete_signature'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
namespace :assigns do
|
namespace :assigns do
|
||||||
|
@ -408,6 +397,12 @@ Rails.application.routes.draw do
|
||||||
resources :mail_templates, only: [] do
|
resources :mail_templates, only: [] do
|
||||||
get 'preview', on: :member
|
get 'preview', on: :member
|
||||||
end
|
end
|
||||||
|
|
||||||
|
resource :attestation_template, only: [:edit, :update, :create] do
|
||||||
|
get 'preview', on: :member
|
||||||
|
end
|
||||||
|
# ADDED TO ACCESS IT FROM THE IFRAME
|
||||||
|
get 'attestation_template/preview' => 'attestation_templates#preview'
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :services, except: [:show] do
|
resources :services, except: [:show] do
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/preset-react": "^7.9.4",
|
"@babel/preset-react": "^7.10.4",
|
||||||
"@fortawesome/fontawesome-svg-core": "^1.2.28",
|
"@fortawesome/fontawesome-svg-core": "^1.2.28",
|
||||||
"@fortawesome/free-solid-svg-icons": "^5.13.0",
|
"@fortawesome/free-solid-svg-icons": "^5.13.0",
|
||||||
"@fortawesome/react-fontawesome": "^0.1.9",
|
"@fortawesome/react-fontawesome": "^0.1.9",
|
||||||
"@mapbox/mapbox-gl-draw": "^1.1.2",
|
"@mapbox/mapbox-gl-draw": "^1.2.0",
|
||||||
"@rails/actiontext": "^6.0.3",
|
"@rails/actiontext": "^6.0.3",
|
||||||
"@rails/activestorage": "^6.0.3",
|
"@rails/activestorage": "^6.0.3",
|
||||||
"@rails/ujs": "^6.0.3",
|
"@rails/ujs": "^6.0.3",
|
||||||
|
@ -22,13 +22,13 @@
|
||||||
"highcharts": "^8.1.0",
|
"highcharts": "^8.1.0",
|
||||||
"intersection-observer": "^0.10.0",
|
"intersection-observer": "^0.10.0",
|
||||||
"jquery": "^3.5.1",
|
"jquery": "^3.5.1",
|
||||||
"mapbox-gl": "^1.10.0",
|
"mapbox-gl": "^1.11.1",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
"react-intersection-observer": "^8.26.2",
|
"react-intersection-observer": "^8.26.2",
|
||||||
"react-loadable": "^5.5.0",
|
"react-loadable": "^5.5.0",
|
||||||
"react-mapbox-gl": "^4.8.3",
|
"react-mapbox-gl": "^4.8.6",
|
||||||
"react-mapbox-gl-draw": "^2.0.4",
|
"react-mapbox-gl-draw": "^2.0.4",
|
||||||
"react-scroll-to-component": "^1.0.2",
|
"react-scroll-to-component": "^1.0.2",
|
||||||
"react-sortable-hoc": "^1.11.0",
|
"react-sortable-hoc": "^1.11.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
include ActionDispatch::TestProcess
|
include ActionDispatch::TestProcess
|
||||||
|
|
||||||
describe Admin::AttestationTemplatesController, type: :controller do
|
describe NewAdministrateur::AttestationTemplatesController, type: :controller do
|
||||||
let!(:attestation_template) { create(:attestation_template) }
|
let!(:attestation_template) { create(:attestation_template) }
|
||||||
let(:admin) { create(:administrateur) }
|
let(:admin) { create(:administrateur) }
|
||||||
let!(:procedure) { create :procedure, administrateur: admin, attestation_template: attestation_template }
|
let!(:procedure) { create :procedure, administrateur: admin, attestation_template: attestation_template }
|
||||||
|
@ -27,64 +27,28 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'POST #preview' do
|
describe 'GET #preview' do
|
||||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f' } }
|
let(:attestation_params) do
|
||||||
|
{ title: 't', body: 'b', footer: 'f' }
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
post :preview,
|
get :preview,
|
||||||
params: {
|
params: {
|
||||||
procedure_id: procedure.id,
|
procedure_id: procedure.id
|
||||||
attestation_template: upload_params
|
|
||||||
}
|
}
|
||||||
procedure.reload
|
procedure.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with an interlaced png' do
|
|
||||||
let(:upload_params) { { logo: interlaced_logo } }
|
|
||||||
|
|
||||||
it 'displays the logo' do
|
|
||||||
expect(assigns(:attestation)[:logo].read).to eq(uninterlaced_logo.read)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'doesn’t save the logo permanently yet' do
|
|
||||||
expect(procedure.attestation_template.logo.attached?).to be(false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with an invalid logo' do
|
|
||||||
let(:upload_params) { { logo: invalid_logo } }
|
|
||||||
it { expect(procedure.attestation_template.logo.attached?).to be false }
|
|
||||||
it { expect(flash.alert).to be_present }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'if an attestation template does not exist on the procedure' do
|
|
||||||
let(:attestation_template) { nil }
|
|
||||||
|
|
||||||
context 'with images' do
|
|
||||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f', logo: interlaced_logo } }
|
|
||||||
|
|
||||||
it { expect(assigns(:attestation)).to include({ title: 't', body: 'b', footer: 'f' }) }
|
|
||||||
it { expect(assigns(:attestation)[:logo]).to be_present }
|
|
||||||
it_behaves_like 'rendering a PDF successfully'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'without images' do
|
|
||||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f' } }
|
|
||||||
|
|
||||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
|
||||||
it_behaves_like 'rendering a PDF successfully'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'if an attestation template exists on the procedure' do
|
context 'if an attestation template exists on the procedure' do
|
||||||
after { procedure.attestation_template.destroy }
|
after { procedure.attestation_template.destroy }
|
||||||
|
|
||||||
context 'with images' do
|
context 'with images' do
|
||||||
let!(:attestation_template) do
|
let!(:attestation_template) do
|
||||||
create(:attestation_template, logo: logo, signature: signature)
|
create(:attestation_template, attestation_params.merge(logo: logo, signature: signature))
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
it { expect(assigns(:attestation)).to include(attestation_params) }
|
||||||
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
||||||
it { expect(assigns(:attestation)[:logo].download).to eq(logo2.read) }
|
it { expect(assigns(:attestation)[:logo].download).to eq(logo2.read) }
|
||||||
it { expect(assigns(:attestation)[:signature].download).to eq(signature2.read) }
|
it { expect(assigns(:attestation)[:signature].download).to eq(signature2.read) }
|
||||||
|
@ -92,7 +56,11 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'without images' do
|
context 'without images' do
|
||||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
let!(:attestation_template) do
|
||||||
|
create(:attestation_template, attestation_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(assigns(:attestation)).to include(attestation_params) }
|
||||||
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
||||||
it { expect(assigns(:attestation)[:logo]).to eq(nil) }
|
it { expect(assigns(:attestation)[:logo]).to eq(nil) }
|
||||||
it { expect(assigns(:attestation)[:signature]).to eq(nil) }
|
it { expect(assigns(:attestation)[:signature]).to eq(nil) }
|
||||||
|
@ -119,7 +87,7 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
let(:attestation_template) { nil }
|
let(:attestation_template) { nil }
|
||||||
let(:attestation_params) { { title: 't', body: 'b', footer: 'f' } }
|
let(:attestation_params) { { title: 't', body: 'b', footer: 'f', activated: true } }
|
||||||
|
|
||||||
context 'nominal' do
|
context 'nominal' do
|
||||||
before do
|
before do
|
||||||
|
@ -142,12 +110,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when something wrong happens in the attestation template creation' do
|
context 'when something wrong happens in the attestation template creation' do
|
||||||
before do
|
let(:invalid_footer) { 'f' * 200 }
|
||||||
expect_any_instance_of(AttestationTemplate).to receive(:save)
|
let(:attestation_params) { { title: 't', body: 'b', footer: invalid_footer, activated: true } }
|
||||||
.and_return(false)
|
|
||||||
expect_any_instance_of(AttestationTemplate).to receive(:errors)
|
|
||||||
.and_return(double(full_messages: ['nop']))
|
|
||||||
|
|
||||||
|
before do
|
||||||
post :create,
|
post :create,
|
||||||
params: {
|
params: {
|
||||||
procedure_id: procedure.id,
|
procedure_id: procedure.id,
|
||||||
|
@ -157,7 +123,8 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
||||||
it { expect(flash.alert).to eq('nop') }
|
it { expect(flash.alert).to be_present }
|
||||||
|
it { expect(procedure.attestation_template).to be nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -202,18 +169,4 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
it { expect(flash.alert).to eq('nop') }
|
it { expect(flash.alert).to eq('nop') }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'post #disactivate' do
|
|
||||||
context 'when the attestation_template is activated' do
|
|
||||||
let(:attestation_template) { create(:attestation_template, activated: true) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
post :disactivate, params: { procedure_id: procedure.id }
|
|
||||||
attestation_template.reload
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(attestation_template.activated).to be false }
|
|
||||||
it { expect(flash.notice).to eq("L'attestation a bien été désactivée") }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -5,12 +5,7 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
||||||
|
|
||||||
subject do
|
subject do
|
||||||
form_for(champ.dossier) do |form|
|
form_for(champ.dossier) do |form|
|
||||||
render 'shared/attachment/edit', {
|
view.image_upload_and_render form, attached_file
|
||||||
form: form,
|
|
||||||
attached_file: attached_file,
|
|
||||||
accept: 'image/png',
|
|
||||||
user_can_destroy: user_can_destroy
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,7 +19,7 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a attached file' do
|
context 'when there is an attached file' do
|
||||||
it 'renders a form field for uploading a file' do
|
it 'renders a form field for uploading a file' do
|
||||||
expect(subject).to have_selector('input[type=file]:not(.hidden)')
|
expect(subject).to have_selector('input[type=file]:not(.hidden)')
|
||||||
end
|
end
|
||||||
|
@ -33,7 +28,7 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
||||||
expect(subject).not_to have_content(attached_file.filename.to_s)
|
expect(subject).not_to have_content(attached_file.filename.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'doesn’t render action buttons' do
|
it 'does not render action buttons' do
|
||||||
expect(subject).not_to have_link('Remplacer')
|
expect(subject).not_to have_link('Remplacer')
|
||||||
expect(subject).not_to have_link('Supprimer')
|
expect(subject).not_to have_link('Supprimer')
|
||||||
end
|
end
|
||||||
|
@ -45,23 +40,30 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
||||||
expect(subject).to have_content(attached_file.filename.to_s)
|
expect(subject).to have_content(attached_file.filename.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'renders action buttons' do
|
|
||||||
expect(subject).to have_button('Remplacer')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'hides the form field by default' do
|
it 'hides the form field by default' do
|
||||||
expect(subject).to have_selector('input[type=file].hidden')
|
expect(subject).to have_selector('input[type=file].hidden')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'hides the Delete button by default' do
|
it 'shows the Delete button by default' do
|
||||||
is_expected.not_to have_link('Supprimer')
|
is_expected.to have_link('Supprimer')
|
||||||
end
|
|
||||||
|
|
||||||
context 'and the user can delete the attachment' do
|
|
||||||
let(:user_can_destroy) { true }
|
|
||||||
|
|
||||||
it { is_expected.to have_link('Supprimer') }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when the user cannot destroy the attachment' do
|
||||||
|
subject do
|
||||||
|
form_for(champ.dossier) do |form|
|
||||||
|
render 'shared/attachment/edit', {
|
||||||
|
form: form,
|
||||||
|
attached_file: attached_file,
|
||||||
|
accept: 'image/png',
|
||||||
|
user_can_destroy: user_can_destroy
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'hides the Delete button' do
|
||||||
|
is_expected.not_to have_link('Supprimer')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
331
yarn.lock
331
yarn.lock
|
@ -50,6 +50,13 @@
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
|
|
||||||
|
"@babel/helper-annotate-as-pure@^7.10.4":
|
||||||
|
version "7.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
|
||||||
|
integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.10.4"
|
||||||
|
|
||||||
"@babel/helper-annotate-as-pure@^7.8.3":
|
"@babel/helper-annotate-as-pure@^7.8.3":
|
||||||
version "7.8.3"
|
version "7.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
|
||||||
|
@ -65,22 +72,22 @@
|
||||||
"@babel/helper-explode-assignable-expression" "^7.8.3"
|
"@babel/helper-explode-assignable-expression" "^7.8.3"
|
||||||
"@babel/types" "^7.8.3"
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
"@babel/helper-builder-react-jsx-experimental@^7.9.0":
|
"@babel/helper-builder-react-jsx-experimental@^7.10.4":
|
||||||
version "7.9.5"
|
version "7.10.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3"
|
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz#f35e956a19955ff08c1258e44a515a6d6248646b"
|
||||||
integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==
|
integrity sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-annotate-as-pure" "^7.8.3"
|
"@babel/helper-annotate-as-pure" "^7.10.4"
|
||||||
"@babel/helper-module-imports" "^7.8.3"
|
"@babel/helper-module-imports" "^7.10.4"
|
||||||
"@babel/types" "^7.9.5"
|
"@babel/types" "^7.10.5"
|
||||||
|
|
||||||
"@babel/helper-builder-react-jsx@^7.9.0":
|
"@babel/helper-builder-react-jsx@^7.10.4":
|
||||||
version "7.9.0"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32"
|
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d"
|
||||||
integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==
|
integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-annotate-as-pure" "^7.8.3"
|
"@babel/helper-annotate-as-pure" "^7.10.4"
|
||||||
"@babel/types" "^7.9.0"
|
"@babel/types" "^7.10.4"
|
||||||
|
|
||||||
"@babel/helper-compilation-targets@^7.9.6":
|
"@babel/helper-compilation-targets@^7.9.6":
|
||||||
version "7.9.6"
|
version "7.9.6"
|
||||||
|
@ -161,6 +168,13 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.8.3"
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-module-imports@^7.10.4":
|
||||||
|
version "7.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
|
||||||
|
integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.10.4"
|
||||||
|
|
||||||
"@babel/helper-module-imports@^7.8.3":
|
"@babel/helper-module-imports@^7.8.3":
|
||||||
version "7.8.3"
|
version "7.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
|
||||||
|
@ -193,6 +207,11 @@
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
|
||||||
integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
|
integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
|
||||||
|
|
||||||
|
"@babel/helper-plugin-utils@^7.10.4":
|
||||||
|
version "7.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
|
||||||
|
integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
|
||||||
|
|
||||||
"@babel/helper-regex@^7.8.3":
|
"@babel/helper-regex@^7.8.3":
|
||||||
version "7.8.3"
|
version "7.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
|
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
|
||||||
|
@ -236,6 +255,11 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.8.3"
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.10.4":
|
||||||
|
version "7.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
|
||||||
|
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
|
||||||
|
|
||||||
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
|
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
|
||||||
version "7.9.5"
|
version "7.9.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
|
||||||
|
@ -377,12 +401,12 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.0"
|
"@babel/helper-plugin-utils" "^7.8.0"
|
||||||
|
|
||||||
"@babel/plugin-syntax-jsx@^7.8.3":
|
"@babel/plugin-syntax-jsx@^7.10.4":
|
||||||
version "7.8.3"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c"
|
||||||
integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
|
integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
|
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
|
||||||
version "7.8.3"
|
version "7.8.3"
|
||||||
|
@ -611,47 +635,55 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.8.3"
|
||||||
|
|
||||||
"@babel/plugin-transform-react-display-name@^7.8.3":
|
"@babel/plugin-transform-react-display-name@^7.10.4":
|
||||||
version "7.8.3"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d"
|
||||||
integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==
|
integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-react-jsx-development@^7.9.0":
|
"@babel/plugin-transform-react-jsx-development@^7.10.4":
|
||||||
version "7.9.0"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz#6ec90f244394604623880e15ebc3c34c356258ba"
|
||||||
integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==
|
integrity sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-builder-react-jsx-experimental" "^7.9.0"
|
"@babel/helper-builder-react-jsx-experimental" "^7.10.4"
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-react-jsx-self@^7.9.0":
|
"@babel/plugin-transform-react-jsx-self@^7.10.4":
|
||||||
version "7.9.0"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369"
|
||||||
integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==
|
integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-react-jsx-source@^7.9.0":
|
"@babel/plugin-transform-react-jsx-source@^7.10.4":
|
||||||
version "7.9.0"
|
version "7.10.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4"
|
||||||
integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==
|
integrity sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-react-jsx@^7.9.4":
|
"@babel/plugin-transform-react-jsx@^7.10.4":
|
||||||
version "7.9.4"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2"
|
||||||
integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==
|
integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-builder-react-jsx" "^7.9.0"
|
"@babel/helper-builder-react-jsx" "^7.10.4"
|
||||||
"@babel/helper-builder-react-jsx-experimental" "^7.9.0"
|
"@babel/helper-builder-react-jsx-experimental" "^7.10.4"
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||||
|
|
||||||
|
"@babel/plugin-transform-react-pure-annotations@^7.10.4":
|
||||||
|
version "7.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501"
|
||||||
|
integrity sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-annotate-as-pure" "^7.10.4"
|
||||||
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-transform-regenerator@^7.8.7":
|
"@babel/plugin-transform-regenerator@^7.8.7":
|
||||||
version "7.8.7"
|
version "7.8.7"
|
||||||
|
@ -799,17 +831,18 @@
|
||||||
"@babel/types" "^7.4.4"
|
"@babel/types" "^7.4.4"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
|
|
||||||
"@babel/preset-react@^7.9.4":
|
"@babel/preset-react@^7.10.4":
|
||||||
version "7.9.4"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d"
|
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf"
|
||||||
integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==
|
integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.3"
|
"@babel/helper-plugin-utils" "^7.10.4"
|
||||||
"@babel/plugin-transform-react-display-name" "^7.8.3"
|
"@babel/plugin-transform-react-display-name" "^7.10.4"
|
||||||
"@babel/plugin-transform-react-jsx" "^7.9.4"
|
"@babel/plugin-transform-react-jsx" "^7.10.4"
|
||||||
"@babel/plugin-transform-react-jsx-development" "^7.9.0"
|
"@babel/plugin-transform-react-jsx-development" "^7.10.4"
|
||||||
"@babel/plugin-transform-react-jsx-self" "^7.9.0"
|
"@babel/plugin-transform-react-jsx-self" "^7.10.4"
|
||||||
"@babel/plugin-transform-react-jsx-source" "^7.9.0"
|
"@babel/plugin-transform-react-jsx-source" "^7.10.4"
|
||||||
|
"@babel/plugin-transform-react-pure-annotations" "^7.10.4"
|
||||||
|
|
||||||
"@babel/runtime-corejs3@^7.8.3":
|
"@babel/runtime-corejs3@^7.8.3":
|
||||||
version "7.9.6"
|
version "7.9.6"
|
||||||
|
@ -850,6 +883,15 @@
|
||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
|
"@babel/types@^7.10.4", "@babel/types@^7.10.5":
|
||||||
|
version "7.10.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15"
|
||||||
|
integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.10.4"
|
||||||
|
lodash "^4.17.19"
|
||||||
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
|
"@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
|
||||||
version "7.9.6"
|
version "7.9.6"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
|
||||||
|
@ -938,10 +980,10 @@
|
||||||
resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
|
resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
|
||||||
integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
|
integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
|
||||||
|
|
||||||
"@mapbox/geojsonhint@^2.0.0":
|
"@mapbox/geojsonhint@3.0.0":
|
||||||
version "2.2.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-2.2.0.tgz#75ca94706e9a56e6debf4e1c78fabdc67978b883"
|
resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-3.0.0.tgz#42448232ce4236cb89c1b69c36b0cadeac99e02e"
|
||||||
integrity sha512-8qQYRB+/2z2JsN5s6D0WAnpo69+3V3nvJsSFLwMB1dsaWz1V4oZeuoje9srbYAxxL8PXCwIywfhYa3GxOkBv5Q==
|
integrity sha512-zHcyh1rDHYnEBd6NvOWoeHLuvazlDkIjvz9MJx4cKwcKTlfrqgxVnTv1QLnVJnsSU5neJnhQJcgscR/Zl4uYgw==
|
||||||
dependencies:
|
dependencies:
|
||||||
concat-stream "^1.6.1"
|
concat-stream "^1.6.1"
|
||||||
jsonlint-lines "1.7.1"
|
jsonlint-lines "1.7.1"
|
||||||
|
@ -954,16 +996,17 @@
|
||||||
resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
|
resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
|
||||||
integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
|
integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
|
||||||
|
|
||||||
"@mapbox/mapbox-gl-draw@^1.1.2":
|
"@mapbox/mapbox-gl-draw@^1.2.0":
|
||||||
version "1.1.2"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.1.2.tgz#247b3f0727db34c2641ab718df5eebeee69a2585"
|
resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.2.0.tgz#b6e5278afef65bd5d7d92366034997768e478ad9"
|
||||||
integrity sha512-DWtATUAnJaGZYoH/y2O+QTRybxrp5y3w3eV5FXHFNVcKsCAojKEMB8ALKUG2IsiCKqV/JCAguK9AlPWR7Bjafw==
|
integrity sha512-gMrP2zn8PzDtrs72FMJTPytCumX5vUn9R7IK38qBOVy9UfqbdWr56KYuNA/2X+jKn4FIOpmWf8CWkKpOaQkv7w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@mapbox/geojson-area" "^0.2.1"
|
"@mapbox/geojson-area" "^0.2.1"
|
||||||
"@mapbox/geojson-extent" "^0.3.2"
|
"@mapbox/geojson-extent" "^0.3.2"
|
||||||
"@mapbox/geojson-normalize" "0.0.1"
|
"@mapbox/geojson-normalize" "0.0.1"
|
||||||
"@mapbox/geojsonhint" "^2.0.0"
|
"@mapbox/geojsonhint" "3.0.0"
|
||||||
"@mapbox/point-geometry" "0.1.0"
|
"@mapbox/point-geometry" "0.1.0"
|
||||||
|
eslint-plugin-import "^2.19.1"
|
||||||
hat "0.0.3"
|
hat "0.0.3"
|
||||||
lodash.isequal "^4.2.0"
|
lodash.isequal "^4.2.0"
|
||||||
xtend "^4.0.1"
|
xtend "^4.0.1"
|
||||||
|
@ -1234,6 +1277,11 @@
|
||||||
"@types/minimatch" "*"
|
"@types/minimatch" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/json5@^0.0.29":
|
||||||
|
version "0.0.29"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||||
|
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||||
|
|
||||||
"@types/minimatch@*":
|
"@types/minimatch@*":
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
|
@ -1716,6 +1764,14 @@ array-unique@^0.3.2:
|
||||||
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
||||||
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
||||||
|
|
||||||
|
array.prototype.flat@^1.2.3:
|
||||||
|
version "1.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
|
||||||
|
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
|
||||||
arrify@^1.0.0:
|
arrify@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
||||||
|
@ -2678,6 +2734,11 @@ constants-browserify@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
||||||
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
|
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
|
||||||
|
|
||||||
|
contains-path@^0.1.0:
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
|
||||||
|
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
|
||||||
|
|
||||||
content-disposition@0.5.3:
|
content-disposition@0.5.3:
|
||||||
version "0.5.3"
|
version "0.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
||||||
|
@ -3075,7 +3136,7 @@ debounce@^1.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131"
|
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131"
|
||||||
integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==
|
integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==
|
||||||
|
|
||||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||||
|
@ -3252,6 +3313,14 @@ dns-txt@^2.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer-indexof "^1.0.0"
|
buffer-indexof "^1.0.0"
|
||||||
|
|
||||||
|
doctrine@1.5.0:
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
|
||||||
|
integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
|
||||||
|
dependencies:
|
||||||
|
esutils "^2.0.2"
|
||||||
|
isarray "^1.0.0"
|
||||||
|
|
||||||
doctrine@^2.1.0:
|
doctrine@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
|
||||||
|
@ -3527,6 +3596,41 @@ eslint-config-prettier@^6.11.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
get-stdin "^6.0.0"
|
get-stdin "^6.0.0"
|
||||||
|
|
||||||
|
eslint-import-resolver-node@^0.3.3:
|
||||||
|
version "0.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
|
||||||
|
integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
|
||||||
|
dependencies:
|
||||||
|
debug "^2.6.9"
|
||||||
|
resolve "^1.13.1"
|
||||||
|
|
||||||
|
eslint-module-utils@^2.6.0:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
||||||
|
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
|
||||||
|
dependencies:
|
||||||
|
debug "^2.6.9"
|
||||||
|
pkg-dir "^2.0.0"
|
||||||
|
|
||||||
|
eslint-plugin-import@^2.19.1:
|
||||||
|
version "2.22.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e"
|
||||||
|
integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==
|
||||||
|
dependencies:
|
||||||
|
array-includes "^3.1.1"
|
||||||
|
array.prototype.flat "^1.2.3"
|
||||||
|
contains-path "^0.1.0"
|
||||||
|
debug "^2.6.9"
|
||||||
|
doctrine "1.5.0"
|
||||||
|
eslint-import-resolver-node "^0.3.3"
|
||||||
|
eslint-module-utils "^2.6.0"
|
||||||
|
has "^1.0.3"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
object.values "^1.1.1"
|
||||||
|
read-pkg-up "^2.0.0"
|
||||||
|
resolve "^1.17.0"
|
||||||
|
tsconfig-paths "^3.9.0"
|
||||||
|
|
||||||
eslint-plugin-prettier@^3.1.3:
|
eslint-plugin-prettier@^3.1.3:
|
||||||
version "3.1.3"
|
version "3.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca"
|
||||||
|
@ -3983,7 +4087,7 @@ find-up@^1.0.0:
|
||||||
path-exists "^2.0.0"
|
path-exists "^2.0.0"
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
find-up@^2.1.0:
|
find-up@^2.0.0, find-up@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||||
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
||||||
|
@ -5496,6 +5600,16 @@ load-json-file@^1.0.0:
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
strip-bom "^2.0.0"
|
strip-bom "^2.0.0"
|
||||||
|
|
||||||
|
load-json-file@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
||||||
|
integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
parse-json "^2.2.0"
|
||||||
|
pify "^2.0.0"
|
||||||
|
strip-bom "^3.0.0"
|
||||||
|
|
||||||
loader-runner@^2.4.0:
|
loader-runner@^2.4.0:
|
||||||
version "2.4.0"
|
version "2.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
|
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
|
||||||
|
@ -5596,7 +5710,7 @@ lodash.uniq@^4.5.0:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||||
|
|
||||||
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@~4.17.12:
|
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5, lodash@~4.17.12:
|
||||||
version "4.17.19"
|
version "4.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||||
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||||
|
@ -5683,10 +5797,10 @@ map-visit@^1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
object-visit "^1.0.0"
|
object-visit "^1.0.0"
|
||||||
|
|
||||||
mapbox-gl@^1.10.0:
|
mapbox-gl@^1.11.1:
|
||||||
version "1.10.0"
|
version "1.11.1"
|
||||||
resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.10.0.tgz#c33e74d1f328e820e245ff8ed7b5dbbbc4be204f"
|
resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.11.1.tgz#063e72b591d506b6b1f483df563e3e48cd0a971b"
|
||||||
integrity sha512-SrJXcR9s5yEsPuW2kKKumA1KqYW9RrL8j7ZcIh6glRQ/x3lwNMfwz/UEJAJcVNgeX+fiwzuBoDIdeGB/vSkZLQ==
|
integrity sha512-UjXpPUTUzHTLfhl5dLefwV3Jgu7DN9phpn8RnnkQVe1sOXfVYMS5Vhjn225krhzRc7xnKIBHxLyu0rHZGyeXuQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@mapbox/geojson-rewind" "^0.5.0"
|
"@mapbox/geojson-rewind" "^0.5.0"
|
||||||
"@mapbox/geojson-types" "^1.0.2"
|
"@mapbox/geojson-types" "^1.0.2"
|
||||||
|
@ -5708,7 +5822,7 @@ mapbox-gl@^1.10.0:
|
||||||
potpack "^1.0.1"
|
potpack "^1.0.1"
|
||||||
quickselect "^2.0.0"
|
quickselect "^2.0.0"
|
||||||
rw "^1.3.3"
|
rw "^1.3.3"
|
||||||
supercluster "^7.0.0"
|
supercluster "^7.1.0"
|
||||||
tinyqueue "^2.0.3"
|
tinyqueue "^2.0.3"
|
||||||
vt-pbf "^3.1.1"
|
vt-pbf "^3.1.1"
|
||||||
|
|
||||||
|
@ -6676,6 +6790,13 @@ path-type@^1.0.0:
|
||||||
pify "^2.0.0"
|
pify "^2.0.0"
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
path-type@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
|
||||||
|
integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
|
||||||
|
dependencies:
|
||||||
|
pify "^2.0.0"
|
||||||
|
|
||||||
path-type@^4.0.0:
|
path-type@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||||
|
@ -6727,6 +6848,13 @@ pinkie@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||||
|
|
||||||
|
pkg-dir@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||||
|
integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
|
||||||
|
dependencies:
|
||||||
|
find-up "^2.1.0"
|
||||||
|
|
||||||
pkg-dir@^3.0.0:
|
pkg-dir@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
||||||
|
@ -7682,10 +7810,10 @@ react-mapbox-gl-draw@^2.0.4:
|
||||||
resolved "https://registry.yarnpkg.com/react-mapbox-gl-draw/-/react-mapbox-gl-draw-2.0.4.tgz#476d70a6efc07c329fa61c11022bcdab60ac4b91"
|
resolved "https://registry.yarnpkg.com/react-mapbox-gl-draw/-/react-mapbox-gl-draw-2.0.4.tgz#476d70a6efc07c329fa61c11022bcdab60ac4b91"
|
||||||
integrity sha512-oaBdIlyu+g7PhLUvwnCsl/wvu+5tGB9I3RLjcrYLt6U1sUMzQJqplKtVxXRv9TZqRdNaAU5qNOP+dRs55QKjsA==
|
integrity sha512-oaBdIlyu+g7PhLUvwnCsl/wvu+5tGB9I3RLjcrYLt6U1sUMzQJqplKtVxXRv9TZqRdNaAU5qNOP+dRs55QKjsA==
|
||||||
|
|
||||||
react-mapbox-gl@^4.8.3:
|
react-mapbox-gl@^4.8.6:
|
||||||
version "4.8.3"
|
version "4.8.6"
|
||||||
resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-4.8.3.tgz#11f5901fe26a4c704a6a22e797bd69404c320e47"
|
resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-4.8.6.tgz#c3841bac882a297f60efce50cac4060e3a1c3f81"
|
||||||
integrity sha512-o5PrNjIyvF04G77/pWfHJI5G9yM4/IUEsNfGhyC5DTm+Ye/b61jJMAt1A6WLClpWeBXnDY5W7eVC6A2INMbgVA==
|
integrity sha512-e6rJ4GFye2AIu10I0a0OfleIWYkigIMIysoSKCA4Wg5YHa52JRHq2F3x0c0cnhqfz1txnUhXUbkx2qqs8B6kKQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@turf/bbox" "4.7.3"
|
"@turf/bbox" "4.7.3"
|
||||||
"@turf/helpers" "4.7.3"
|
"@turf/helpers" "4.7.3"
|
||||||
|
@ -7740,6 +7868,14 @@ read-pkg-up@^1.0.1:
|
||||||
find-up "^1.0.0"
|
find-up "^1.0.0"
|
||||||
read-pkg "^1.0.0"
|
read-pkg "^1.0.0"
|
||||||
|
|
||||||
|
read-pkg-up@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
|
||||||
|
integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
|
||||||
|
dependencies:
|
||||||
|
find-up "^2.0.0"
|
||||||
|
read-pkg "^2.0.0"
|
||||||
|
|
||||||
read-pkg@^1.0.0:
|
read-pkg@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
|
||||||
|
@ -7749,6 +7885,15 @@ read-pkg@^1.0.0:
|
||||||
normalize-package-data "^2.3.2"
|
normalize-package-data "^2.3.2"
|
||||||
path-type "^1.0.0"
|
path-type "^1.0.0"
|
||||||
|
|
||||||
|
read-pkg@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
|
||||||
|
integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
|
||||||
|
dependencies:
|
||||||
|
load-json-file "^2.0.0"
|
||||||
|
normalize-package-data "^2.3.2"
|
||||||
|
path-type "^2.0.0"
|
||||||
|
|
||||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||||
version "2.3.7"
|
version "2.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||||
|
@ -7997,7 +8142,7 @@ resolve-url@^0.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
||||||
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
||||||
|
|
||||||
resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1:
|
resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1:
|
||||||
version "1.17.0"
|
version "1.17.0"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
||||||
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
||||||
|
@ -8780,6 +8925,11 @@ strip-bom@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-utf8 "^0.2.0"
|
is-utf8 "^0.2.0"
|
||||||
|
|
||||||
|
strip-bom@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||||
|
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
||||||
|
|
||||||
strip-eof@^1.0.0:
|
strip-eof@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||||
|
@ -8821,6 +8971,13 @@ supercluster@^7.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
kdbush "^3.0.0"
|
kdbush "^3.0.0"
|
||||||
|
|
||||||
|
supercluster@^7.1.0:
|
||||||
|
version "7.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.0.tgz#f0a457426ec0ab95d69c5f03b51e049774b94479"
|
||||||
|
integrity sha512-LDasImUAFMhTqhK+cUXfy9C2KTUqJ3gucLjmNLNFmKWOnDUBxLFLH9oKuXOTCLveecmxh8fbk8kgh6Q0gsfe2w==
|
||||||
|
dependencies:
|
||||||
|
kdbush "^3.0.0"
|
||||||
|
|
||||||
supports-color@6.1.0, supports-color@^6.1.0:
|
supports-color@6.1.0, supports-color@^6.1.0:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
|
||||||
|
@ -9115,6 +9272,16 @@ ts-pnp@^1.1.6:
|
||||||
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
|
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
|
||||||
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
|
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
|
||||||
|
|
||||||
|
tsconfig-paths@^3.9.0:
|
||||||
|
version "3.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
|
||||||
|
integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
|
||||||
|
dependencies:
|
||||||
|
"@types/json5" "^0.0.29"
|
||||||
|
json5 "^1.0.1"
|
||||||
|
minimist "^1.2.0"
|
||||||
|
strip-bom "^3.0.0"
|
||||||
|
|
||||||
tslib@^1.11.2:
|
tslib@^1.11.2:
|
||||||
version "1.13.0"
|
version "1.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
||||||
|
|
Loading…
Reference in a new issue