commit
4b9e446971
45 changed files with 6334 additions and 9773 deletions
|
@ -1,3 +1,4 @@
|
|||
|
||||
#attestation-template-edit {
|
||||
.notice {
|
||||
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 {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
@import "constants";
|
||||
|
||||
.two-columns {
|
||||
background-color: #FFFFFF;
|
||||
background-color: $white;
|
||||
|
||||
@media (min-width: $two-columns-breakpoint) {
|
||||
background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%);
|
||||
|
|
|
@ -51,6 +51,12 @@
|
|||
opacity: 0.5;
|
||||
margin-top: $default-spacer * 4;
|
||||
margin-bottom: $default-spacer * 8;
|
||||
|
||||
.notice {
|
||||
color: $dark-grey;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.procedure-form__actions {
|
||||
|
@ -60,10 +66,20 @@
|
|||
padding: $default-spacer $default-padding;
|
||||
background: $light-grey;
|
||||
border-top: 1px solid $border-grey;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.button.send {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.actions-left {
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.actions-right {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.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
|
||||
@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
|
||||
|
||||
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 mapboxgl from '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 SwitchMapStyle from './SwitchMapStyle';
|
||||
import { getMapStyle } from '../MapStyles';
|
||||
import { getMapStyle, SwitchMapStyle } from '../MapStyles';
|
||||
|
||||
import SearchInput from './SearchInput';
|
||||
import { polygonCadastresFill, polygonCadastresLine } from './utils';
|
||||
|
@ -24,7 +23,7 @@ import {
|
|||
|
||||
const Map = ReactMapboxGl({});
|
||||
|
||||
function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
||||
function MapEditor({ featureCollection, url, preview, hasCadastres, ign }) {
|
||||
const drawControl = useRef(null);
|
||||
const [currentMap, setCurrentMap] = useState(null);
|
||||
|
||||
|
@ -36,7 +35,10 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
|||
const [cadastresFeatureCollection, setCadastresFeatureCollection] = useState(
|
||||
filterFeatureCollection(featureCollection, 'cadastre')
|
||||
);
|
||||
const mapStyle = getMapStyle(style, hasCadastres);
|
||||
const mapStyle = useMemo(() => getMapStyle(style, hasCadastres), [
|
||||
style,
|
||||
hasCadastres
|
||||
]);
|
||||
|
||||
const onFeatureFocus = useCallback(
|
||||
({ detail }) => {
|
||||
|
@ -291,12 +293,13 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
|||
height: '500px'
|
||||
}}
|
||||
>
|
||||
<GeoJSONLayer
|
||||
id="cadastres-layer"
|
||||
data={cadastresFeatureCollection}
|
||||
fillPaint={polygonCadastresFill}
|
||||
linePaint={polygonCadastresLine}
|
||||
/>
|
||||
{hasCadastres ? (
|
||||
<GeoJSONLayer
|
||||
data={cadastresFeatureCollection}
|
||||
fillPaint={polygonCadastresFill}
|
||||
linePaint={polygonCadastresLine}
|
||||
/>
|
||||
) : null}
|
||||
<DrawControl
|
||||
ref={drawControl}
|
||||
onDrawCreate={preview ? noop : onDrawCreate}
|
||||
|
@ -310,19 +313,7 @@ function MapEditor({ featureCollection, url, preview, hasCadastres }) {
|
|||
trash: true
|
||||
}}
|
||||
/>
|
||||
<div
|
||||
className="style-switch"
|
||||
style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0
|
||||
}}
|
||||
onClick={() =>
|
||||
style === 'ortho' ? setStyle('vector') : setStyle('ortho')
|
||||
}
|
||||
>
|
||||
<SwitchMapStyle isVector={style === 'vector' ? true : false} />
|
||||
</div>
|
||||
<SwitchMapStyle style={style} setStyle={setStyle} ign={ign} />
|
||||
<ZoomControl />
|
||||
</Map>
|
||||
</>
|
||||
|
@ -337,7 +328,8 @@ MapEditor.propTypes = {
|
|||
}),
|
||||
url: PropTypes.string,
|
||||
preview: PropTypes.bool,
|
||||
hasCadastres: PropTypes.bool
|
||||
hasCadastres: PropTypes.bool,
|
||||
ign: PropTypes.bool
|
||||
};
|
||||
|
||||
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 PropTypes from 'prop-types';
|
||||
|
||||
import SwitchMapStyle from './SwitchMapStyle';
|
||||
import { getMapStyle } from '../MapStyles';
|
||||
import { getMapStyle, SwitchMapStyle } from '../MapStyles';
|
||||
|
||||
import {
|
||||
filterFeatureCollection,
|
||||
|
@ -17,7 +16,7 @@ import {
|
|||
|
||||
const Map = ReactMapboxGl({});
|
||||
|
||||
const MapReader = ({ featureCollection }) => {
|
||||
const MapReader = ({ featureCollection, ign }) => {
|
||||
const [currentMap, setCurrentMap] = useState(null);
|
||||
const [style, setStyle] = useState('ortho');
|
||||
const cadastresFeatureCollection = useMemo(
|
||||
|
@ -52,10 +51,11 @@ const MapReader = ({ featureCollection }) => {
|
|||
),
|
||||
[selectionsUtilisateurFeatureCollection]
|
||||
);
|
||||
const mapStyle = useMemo(
|
||||
() => getMapStyle(style, cadastresFeatureCollection.length),
|
||||
[style, cadastresFeatureCollection]
|
||||
);
|
||||
const hasCadastres = !!cadastresFeatureCollection.length;
|
||||
const mapStyle = useMemo(() => getMapStyle(style, hasCadastres), [
|
||||
style,
|
||||
cadastresFeatureCollection
|
||||
]);
|
||||
const popup = useMemo(
|
||||
() =>
|
||||
new Popup({
|
||||
|
@ -176,25 +176,15 @@ const MapReader = ({ featureCollection }) => {
|
|||
circleOnMouseEnter={onMouseEnter}
|
||||
circleOnMouseLeave={onMouseLeave}
|
||||
/>
|
||||
<GeoJSONLayer
|
||||
data={cadastresFeatureCollection}
|
||||
fillPaint={polygonCadastresFill}
|
||||
linePaint={polygonCadastresLine}
|
||||
/>
|
||||
{hasCadastres ? (
|
||||
<GeoJSONLayer
|
||||
data={cadastresFeatureCollection}
|
||||
fillPaint={polygonCadastresFill}
|
||||
linePaint={polygonCadastresLine}
|
||||
/>
|
||||
) : null}
|
||||
|
||||
<div
|
||||
className="style-switch"
|
||||
style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0
|
||||
}}
|
||||
onClick={() =>
|
||||
style === 'ortho' ? setStyle('vector') : setStyle('ortho')
|
||||
}
|
||||
>
|
||||
<SwitchMapStyle isVector={style === 'vector' ? true : false} />
|
||||
</div>
|
||||
<SwitchMapStyle style={style} setStyle={setStyle} ign={ign} />
|
||||
<ZoomControl />
|
||||
</Map>
|
||||
);
|
||||
|
@ -205,7 +195,8 @@ MapReader.propTypes = {
|
|||
type: PropTypes.string,
|
||||
bbox: PropTypes.array,
|
||||
features: PropTypes.array
|
||||
})
|
||||
}),
|
||||
ign: PropTypes.bool
|
||||
};
|
||||
|
||||
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 orthoCadastre from './orthoCadastre.json';
|
||||
import vector from './vector.json';
|
||||
import vectorCadastre from './vectorCadastre.json';
|
||||
import baseStyle from './base-style';
|
||||
import cadastre from './cadastre';
|
||||
import orthoStyle from './ortho-style';
|
||||
import vectorStyle from './vector-style';
|
||||
|
||||
const ignStyle = [
|
||||
{
|
||||
id: 'carte-ign',
|
||||
type: 'raster',
|
||||
source: 'carte-ign',
|
||||
paint: { 'raster-resampling': 'linear' }
|
||||
}
|
||||
];
|
||||
|
||||
export function getMapStyle(style, hasCadastres) {
|
||||
if (hasCadastres) {
|
||||
return style === 'ortho' ? orthoCadastre : vectorCadastre;
|
||||
const mapStyle = { ...baseStyle };
|
||||
|
||||
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,
|
||||
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, ''),
|
||||
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, ''),
|
||||
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, title),
|
||||
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, body),
|
||||
footer: params.fetch(:footer, footer),
|
||||
logo: params.fetch(:logo, logo.attached? ? logo : nil),
|
||||
signature: params.fetch(:signature, signature.attached? ? signature : nil)
|
||||
|
@ -110,7 +110,7 @@ class AttestationTemplate < ApplicationRecord
|
|||
def build_pdf(dossier)
|
||||
attestation = render_attributes_for(dossier: dossier)
|
||||
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)
|
||||
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|
|
||||
= f.text_area :answer, rows: 3, placeholder: 'Votre avis', required: true
|
||||
= render 'shared/attachment/edit',
|
||||
{ form: f,
|
||||
attached_file: @avis.piece_justificative_file,
|
||||
user_can_destroy: true }
|
||||
= text_upload_and_render f, @avis.piece_justificative_file
|
||||
|
||||
.flex.justify-between.align-baseline
|
||||
%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
|
||||
%p.tab-title Ajouter une pièce jointe
|
||||
.form-group
|
||||
= render 'shared/attachment/edit',
|
||||
{ form: f,
|
||||
attached_file: avis.introduction_file,
|
||||
user_can_destroy: true }
|
||||
= text_upload_and_render f, avis.introduction_file
|
||||
|
||||
- if linked_dossiers.present?
|
||||
= 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
|
||||
|
||||
.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'
|
||||
|
||||
.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'
|
||||
|
||||
%h3.header-subsection Logo de la démarche
|
||||
= render 'shared/attachment/edit',
|
||||
{ form: f,
|
||||
attached_file: @procedure.logo,
|
||||
accept: 'image/png, image/jpg, image/jpeg',
|
||||
user_can_destroy: true }
|
||||
= image_upload_and_render f, @procedure.logo
|
||||
|
||||
- if !@procedure.locked?
|
||||
%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.label :deliberation, 'Importer le texte'
|
||||
= render 'shared/attachment/edit',
|
||||
{ form: f,
|
||||
attached_file: @procedure.deliberation,
|
||||
user_can_destroy: true }
|
||||
= text_upload_and_render f, @procedure.deliberation
|
||||
|
||||
%h3.header-subsection Notice explicative de la démarche
|
||||
|
||||
|
@ -73,10 +66,7 @@
|
|||
%p.notice
|
||||
Formats acceptés : .doc, .odt, .pdf, .ppt, .pptx
|
||||
- notice = @procedure.notice
|
||||
= render 'shared/attachment/edit',
|
||||
{ form: f,
|
||||
attached_file: @procedure.notice,
|
||||
user_can_destroy: true }
|
||||
= text_upload_and_render f, @procedure.notice
|
||||
|
||||
- if !@procedure.locked?
|
||||
%h3.header-subsection À qui s’adresse ma démarche ?
|
||||
|
|
|
@ -16,8 +16,9 @@
|
|||
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
||||
|
||||
.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 ?'}
|
||||
= f.button 'Enregistrer', class: 'button primary send'
|
||||
.actions-right
|
||||
= 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__preview.sticky--top
|
||||
|
|
|
@ -16,8 +16,9 @@
|
|||
= render partial: 'new_administrateur/procedures/informations', locals: { f: f }
|
||||
|
||||
.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 ?'}
|
||||
= f.button 'Créer la démarche', class: 'button primary send'
|
||||
.actions-right
|
||||
= 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__preview.sticky--top
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
- persisted = attachment && attachment.persisted?
|
||||
- accept = defined?(accept) ? accept : nil
|
||||
- user_can_destroy = defined?(user_can_destroy) ? user_can_destroy : false
|
||||
- direct_upload = direct_upload != nil ? false : true
|
||||
|
||||
.attachment
|
||||
- if defined?(template) && template.attached?
|
||||
|
@ -34,5 +35,5 @@
|
|||
= form.file_field attached_file.name,
|
||||
class: "attachment-input attachment-input-#{attachment_id} #{'hidden' if persisted}",
|
||||
accept: accept,
|
||||
direct_upload: true,
|
||||
direct_upload: direct_upload,
|
||||
data: { 'auto-attach-url': auto_attach_url(form, form.object) }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- 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
|
||||
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, editing: false }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- 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
|
||||
= 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.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
||||
|
||||
if ENV['IGN_CARTE_REFERER']
|
||||
config.hosts << ENV['IGN_CARTE_REFERER']
|
||||
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 hardcodé dans les vues, donc pas injectable).
|
||||
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
|
||||
# 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"
|
||||
|
|
|
@ -35,7 +35,8 @@ features = [
|
|||
:mini_profiler,
|
||||
:operation_log_serialize_subject,
|
||||
:pre_maintenance_mode,
|
||||
:xray
|
||||
:xray,
|
||||
:carte_ign
|
||||
]
|
||||
|
||||
def database_exists?
|
||||
|
|
|
@ -196,17 +196,6 @@ Rails.application.routes.draw do
|
|||
put 'publish' => 'procedures#publish', as: :publish
|
||||
post 'transfer' => 'procedures#transfer', as: :transfer
|
||||
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
|
||||
|
||||
namespace :assigns do
|
||||
|
@ -408,6 +397,12 @@ Rails.application.routes.draw do
|
|||
resources :mail_templates, only: [] do
|
||||
get 'preview', on: :member
|
||||
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
|
||||
|
||||
resources :services, except: [:show] do
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"@babel/preset-react": "^7.9.4",
|
||||
"@babel/preset-react": "^7.10.4",
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.28",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.13.0",
|
||||
"@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/activestorage": "^6.0.3",
|
||||
"@rails/ujs": "^6.0.3",
|
||||
|
@ -22,13 +22,13 @@
|
|||
"highcharts": "^8.1.0",
|
||||
"intersection-observer": "^0.10.0",
|
||||
"jquery": "^3.5.1",
|
||||
"mapbox-gl": "^1.10.0",
|
||||
"mapbox-gl": "^1.11.1",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-intersection-observer": "^8.26.2",
|
||||
"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-scroll-to-component": "^1.0.2",
|
||||
"react-sortable-hoc": "^1.11.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
include ActionDispatch::TestProcess
|
||||
|
||||
describe Admin::AttestationTemplatesController, type: :controller do
|
||||
describe NewAdministrateur::AttestationTemplatesController, type: :controller do
|
||||
let!(:attestation_template) { create(:attestation_template) }
|
||||
let(:admin) { create(:administrateur) }
|
||||
let!(:procedure) { create :procedure, administrateur: admin, attestation_template: attestation_template }
|
||||
|
@ -27,64 +27,28 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'POST #preview' do
|
||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f' } }
|
||||
describe 'GET #preview' do
|
||||
let(:attestation_params) do
|
||||
{ title: 't', body: 'b', footer: 'f' }
|
||||
end
|
||||
|
||||
before do
|
||||
post :preview,
|
||||
get :preview,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: upload_params
|
||||
procedure_id: procedure.id
|
||||
}
|
||||
procedure.reload
|
||||
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
|
||||
after { procedure.attestation_template.destroy }
|
||||
|
||||
context 'with images' do
|
||||
let!(:attestation_template) do
|
||||
create(:attestation_template, logo: logo, signature: signature)
|
||||
create(:attestation_template, attestation_params.merge(logo: logo, signature: signature))
|
||||
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)[:logo].download).to eq(logo2.read) }
|
||||
it { expect(assigns(:attestation)[:signature].download).to eq(signature2.read) }
|
||||
|
@ -92,7 +56,11 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
|||
end
|
||||
|
||||
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)[:logo]).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
|
||||
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
|
||||
before do
|
||||
|
@ -142,12 +110,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
|||
end
|
||||
|
||||
context 'when something wrong happens in the attestation template creation' do
|
||||
before do
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:save)
|
||||
.and_return(false)
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:errors)
|
||||
.and_return(double(full_messages: ['nop']))
|
||||
let(:invalid_footer) { 'f' * 200 }
|
||||
let(:attestation_params) { { title: 't', body: 'b', footer: invalid_footer, activated: true } }
|
||||
|
||||
before do
|
||||
post :create,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
|
@ -157,7 +123,8 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
|
@ -202,18 +169,4 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
|||
it { expect(flash.alert).to eq('nop') }
|
||||
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
|
|
@ -5,12 +5,7 @@ describe 'shared/attachment/_update.html.haml', type: :view 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
|
||||
}
|
||||
view.image_upload_and_render form, attached_file
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -24,7 +19,7 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
|||
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
|
||||
expect(subject).to have_selector('input[type=file]:not(.hidden)')
|
||||
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)
|
||||
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('Supprimer')
|
||||
end
|
||||
|
@ -45,23 +40,30 @@ describe 'shared/attachment/_update.html.haml', type: :view do
|
|||
expect(subject).to have_content(attached_file.filename.to_s)
|
||||
end
|
||||
|
||||
it 'renders action buttons' do
|
||||
expect(subject).to have_button('Remplacer')
|
||||
end
|
||||
|
||||
it 'hides the form field by default' do
|
||||
expect(subject).to have_selector('input[type=file].hidden')
|
||||
end
|
||||
|
||||
it 'hides the Delete button by default' do
|
||||
is_expected.not_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') }
|
||||
it 'shows the Delete button by default' do
|
||||
is_expected.to have_link('Supprimer')
|
||||
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
|
||||
|
|
331
yarn.lock
331
yarn.lock
|
@ -50,6 +50,13 @@
|
|||
lodash "^4.17.13"
|
||||
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":
|
||||
version "7.8.3"
|
||||
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/types" "^7.8.3"
|
||||
|
||||
"@babel/helper-builder-react-jsx-experimental@^7.9.0":
|
||||
version "7.9.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3"
|
||||
integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==
|
||||
"@babel/helper-builder-react-jsx-experimental@^7.10.4":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz#f35e956a19955ff08c1258e44a515a6d6248646b"
|
||||
integrity sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==
|
||||
dependencies:
|
||||
"@babel/helper-annotate-as-pure" "^7.8.3"
|
||||
"@babel/helper-module-imports" "^7.8.3"
|
||||
"@babel/types" "^7.9.5"
|
||||
"@babel/helper-annotate-as-pure" "^7.10.4"
|
||||
"@babel/helper-module-imports" "^7.10.4"
|
||||
"@babel/types" "^7.10.5"
|
||||
|
||||
"@babel/helper-builder-react-jsx@^7.9.0":
|
||||
version "7.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32"
|
||||
integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==
|
||||
"@babel/helper-builder-react-jsx@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d"
|
||||
integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==
|
||||
dependencies:
|
||||
"@babel/helper-annotate-as-pure" "^7.8.3"
|
||||
"@babel/types" "^7.9.0"
|
||||
"@babel/helper-annotate-as-pure" "^7.10.4"
|
||||
"@babel/types" "^7.10.4"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.9.6":
|
||||
version "7.9.6"
|
||||
|
@ -161,6 +168,13 @@
|
|||
dependencies:
|
||||
"@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":
|
||||
version "7.8.3"
|
||||
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"
|
||||
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":
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
|
||||
|
@ -236,6 +255,11 @@
|
|||
dependencies:
|
||||
"@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":
|
||||
version "7.9.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
|
||||
|
@ -377,12 +401,12 @@
|
|||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.0"
|
||||
|
||||
"@babel/plugin-syntax-jsx@^7.8.3":
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
|
||||
integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==
|
||||
"@babel/plugin-syntax-jsx@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c"
|
||||
integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
|
||||
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
|
||||
version "7.8.3"
|
||||
|
@ -611,47 +635,55 @@
|
|||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
|
||||
"@babel/plugin-transform-react-display-name@^7.8.3":
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5"
|
||||
integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==
|
||||
"@babel/plugin-transform-react-display-name@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d"
|
||||
integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
|
||||
"@babel/plugin-transform-react-jsx-development@^7.9.0":
|
||||
version "7.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754"
|
||||
integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==
|
||||
"@babel/plugin-transform-react-jsx-development@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz#6ec90f244394604623880e15ebc3c34c356258ba"
|
||||
integrity sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==
|
||||
dependencies:
|
||||
"@babel/helper-builder-react-jsx-experimental" "^7.9.0"
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
||||
"@babel/helper-builder-react-jsx-experimental" "^7.10.4"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||
|
||||
"@babel/plugin-transform-react-jsx-self@^7.9.0":
|
||||
version "7.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b"
|
||||
integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==
|
||||
"@babel/plugin-transform-react-jsx-self@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369"
|
||||
integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||
|
||||
"@babel/plugin-transform-react-jsx-source@^7.9.0":
|
||||
version "7.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0"
|
||||
integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==
|
||||
"@babel/plugin-transform-react-jsx-source@^7.10.4":
|
||||
version "7.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4"
|
||||
integrity sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
"@babel/plugin-syntax-jsx" "^7.10.4"
|
||||
|
||||
"@babel/plugin-transform-react-jsx@^7.9.4":
|
||||
version "7.9.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f"
|
||||
integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==
|
||||
"@babel/plugin-transform-react-jsx@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2"
|
||||
integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==
|
||||
dependencies:
|
||||
"@babel/helper-builder-react-jsx" "^7.9.0"
|
||||
"@babel/helper-builder-react-jsx-experimental" "^7.9.0"
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/plugin-syntax-jsx" "^7.8.3"
|
||||
"@babel/helper-builder-react-jsx" "^7.10.4"
|
||||
"@babel/helper-builder-react-jsx-experimental" "^7.10.4"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
"@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":
|
||||
version "7.8.7"
|
||||
|
@ -799,17 +831,18 @@
|
|||
"@babel/types" "^7.4.4"
|
||||
esutils "^2.0.2"
|
||||
|
||||
"@babel/preset-react@^7.9.4":
|
||||
version "7.9.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d"
|
||||
integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==
|
||||
"@babel/preset-react@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf"
|
||||
integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.8.3"
|
||||
"@babel/plugin-transform-react-display-name" "^7.8.3"
|
||||
"@babel/plugin-transform-react-jsx" "^7.9.4"
|
||||
"@babel/plugin-transform-react-jsx-development" "^7.9.0"
|
||||
"@babel/plugin-transform-react-jsx-self" "^7.9.0"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.9.0"
|
||||
"@babel/helper-plugin-utils" "^7.10.4"
|
||||
"@babel/plugin-transform-react-display-name" "^7.10.4"
|
||||
"@babel/plugin-transform-react-jsx" "^7.10.4"
|
||||
"@babel/plugin-transform-react-jsx-development" "^7.10.4"
|
||||
"@babel/plugin-transform-react-jsx-self" "^7.10.4"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.10.4"
|
||||
"@babel/plugin-transform-react-pure-annotations" "^7.10.4"
|
||||
|
||||
"@babel/runtime-corejs3@^7.8.3":
|
||||
version "7.9.6"
|
||||
|
@ -850,6 +883,15 @@
|
|||
globals "^11.1.0"
|
||||
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":
|
||||
version "7.9.6"
|
||||
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"
|
||||
integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
|
||||
|
||||
"@mapbox/geojsonhint@^2.0.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-2.2.0.tgz#75ca94706e9a56e6debf4e1c78fabdc67978b883"
|
||||
integrity sha512-8qQYRB+/2z2JsN5s6D0WAnpo69+3V3nvJsSFLwMB1dsaWz1V4oZeuoje9srbYAxxL8PXCwIywfhYa3GxOkBv5Q==
|
||||
"@mapbox/geojsonhint@3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-3.0.0.tgz#42448232ce4236cb89c1b69c36b0cadeac99e02e"
|
||||
integrity sha512-zHcyh1rDHYnEBd6NvOWoeHLuvazlDkIjvz9MJx4cKwcKTlfrqgxVnTv1QLnVJnsSU5neJnhQJcgscR/Zl4uYgw==
|
||||
dependencies:
|
||||
concat-stream "^1.6.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"
|
||||
integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
|
||||
|
||||
"@mapbox/mapbox-gl-draw@^1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.1.2.tgz#247b3f0727db34c2641ab718df5eebeee69a2585"
|
||||
integrity sha512-DWtATUAnJaGZYoH/y2O+QTRybxrp5y3w3eV5FXHFNVcKsCAojKEMB8ALKUG2IsiCKqV/JCAguK9AlPWR7Bjafw==
|
||||
"@mapbox/mapbox-gl-draw@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.2.0.tgz#b6e5278afef65bd5d7d92366034997768e478ad9"
|
||||
integrity sha512-gMrP2zn8PzDtrs72FMJTPytCumX5vUn9R7IK38qBOVy9UfqbdWr56KYuNA/2X+jKn4FIOpmWf8CWkKpOaQkv7w==
|
||||
dependencies:
|
||||
"@mapbox/geojson-area" "^0.2.1"
|
||||
"@mapbox/geojson-extent" "^0.3.2"
|
||||
"@mapbox/geojson-normalize" "0.0.1"
|
||||
"@mapbox/geojsonhint" "^2.0.0"
|
||||
"@mapbox/geojsonhint" "3.0.0"
|
||||
"@mapbox/point-geometry" "0.1.0"
|
||||
eslint-plugin-import "^2.19.1"
|
||||
hat "0.0.3"
|
||||
lodash.isequal "^4.2.0"
|
||||
xtend "^4.0.1"
|
||||
|
@ -1234,6 +1277,11 @@
|
|||
"@types/minimatch" "*"
|
||||
"@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@*":
|
||||
version "3.0.3"
|
||||
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"
|
||||
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:
|
||||
version "1.0.1"
|
||||
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"
|
||||
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:
|
||||
version "0.5.3"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||
|
@ -3252,6 +3313,14 @@ dns-txt@^2.0.2:
|
|||
dependencies:
|
||||
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:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
|
||||
|
@ -3527,6 +3596,41 @@ eslint-config-prettier@^6.11.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "3.1.3"
|
||||
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"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
find-up@^2.1.0:
|
||||
find-up@^2.0.0, find-up@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
||||
|
@ -5496,6 +5600,16 @@ load-json-file@^1.0.0:
|
|||
pinkie-promise "^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:
|
||||
version "2.4.0"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||
|
@ -5683,10 +5797,10 @@ map-visit@^1.0.0:
|
|||
dependencies:
|
||||
object-visit "^1.0.0"
|
||||
|
||||
mapbox-gl@^1.10.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.10.0.tgz#c33e74d1f328e820e245ff8ed7b5dbbbc4be204f"
|
||||
integrity sha512-SrJXcR9s5yEsPuW2kKKumA1KqYW9RrL8j7ZcIh6glRQ/x3lwNMfwz/UEJAJcVNgeX+fiwzuBoDIdeGB/vSkZLQ==
|
||||
mapbox-gl@^1.11.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.11.1.tgz#063e72b591d506b6b1f483df563e3e48cd0a971b"
|
||||
integrity sha512-UjXpPUTUzHTLfhl5dLefwV3Jgu7DN9phpn8RnnkQVe1sOXfVYMS5Vhjn225krhzRc7xnKIBHxLyu0rHZGyeXuQ==
|
||||
dependencies:
|
||||
"@mapbox/geojson-rewind" "^0.5.0"
|
||||
"@mapbox/geojson-types" "^1.0.2"
|
||||
|
@ -5708,7 +5822,7 @@ mapbox-gl@^1.10.0:
|
|||
potpack "^1.0.1"
|
||||
quickselect "^2.0.0"
|
||||
rw "^1.3.3"
|
||||
supercluster "^7.0.0"
|
||||
supercluster "^7.1.0"
|
||||
tinyqueue "^2.0.3"
|
||||
vt-pbf "^3.1.1"
|
||||
|
||||
|
@ -6676,6 +6790,13 @@ path-type@^1.0.0:
|
|||
pify "^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:
|
||||
version "4.0.0"
|
||||
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"
|
||||
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:
|
||||
version "3.0.0"
|
||||
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"
|
||||
integrity sha512-oaBdIlyu+g7PhLUvwnCsl/wvu+5tGB9I3RLjcrYLt6U1sUMzQJqplKtVxXRv9TZqRdNaAU5qNOP+dRs55QKjsA==
|
||||
|
||||
react-mapbox-gl@^4.8.3:
|
||||
version "4.8.3"
|
||||
resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-4.8.3.tgz#11f5901fe26a4c704a6a22e797bd69404c320e47"
|
||||
integrity sha512-o5PrNjIyvF04G77/pWfHJI5G9yM4/IUEsNfGhyC5DTm+Ye/b61jJMAt1A6WLClpWeBXnDY5W7eVC6A2INMbgVA==
|
||||
react-mapbox-gl@^4.8.6:
|
||||
version "4.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-4.8.6.tgz#c3841bac882a297f60efce50cac4060e3a1c3f81"
|
||||
integrity sha512-e6rJ4GFye2AIu10I0a0OfleIWYkigIMIysoSKCA4Wg5YHa52JRHq2F3x0c0cnhqfz1txnUhXUbkx2qqs8B6kKQ==
|
||||
dependencies:
|
||||
"@turf/bbox" "4.7.3"
|
||||
"@turf/helpers" "4.7.3"
|
||||
|
@ -7740,6 +7868,14 @@ read-pkg-up@^1.0.1:
|
|||
find-up "^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:
|
||||
version "1.1.0"
|
||||
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"
|
||||
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:
|
||||
version "2.3.7"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
||||
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
||||
|
@ -8780,6 +8925,11 @@ strip-bom@^2.0.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
|
@ -8821,6 +8971,13 @@ supercluster@^7.0.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "6.1.0"
|
||||
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"
|
||||
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:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
||||
|
|
Loading…
Reference in a new issue