Skip to content

Commit c7aa08f

Browse files
committed
Rajout fly carte + text filtre ✨
1 parent 772f462 commit c7aa08f

File tree

6 files changed

+48
-14
lines changed

6 files changed

+48
-14
lines changed

client/components/carte/Map.vue

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -324,23 +324,28 @@ watch(() => props.area, () => {
324324
let deps = [];
325325
let territoire = null;
326326
let idTerritoire = null;
327-
let centreTerritoire = null;
328327
if (props.area) {
329328
territoire = props.area.split('=')[0];
330329
idTerritoire = props.area.split('=')[1];
331330
}
332331
if (territoire === 'bassinVersant' && idTerritoire) {
333-
console.log(refDataStore.bassinVersant);
332+
const bassinVersantDeps = refDataStore.bassinsVersants.find((r: any) => r.id === +idTerritoire)?.departements;
333+
deps = refDataStore.departements.filter((d: any) => bassinVersantDeps.some(bvd => bvd.id === d.id));
334334
} else if (territoire === 'region' && idTerritoire) {
335-
console.log(refDataStore.region);
335+
const regionDeps = refDataStore.regions.find((r: any) => r.id === +idTerritoire)?.departements;
336+
deps = refDataStore.departements.filter((d: any) => regionDeps.some(rd => rd.id === d.id));
336337
} else if (territoire === 'departement' && idTerritoire) {
337-
console.log(refDataStore.departements);
338-
// depsId = refDataStore.departements.filter((d: any) => d.id === +idTerritoire);
338+
deps = refDataStore.departements.filter((d: any) => d.id === +idTerritoire);
339339
}
340-
if (centreTerritoire) {
340+
if (deps && deps.length > 0) {
341341
const llb = new maplibregl.LngLatBounds();
342-
llb.extend(centreTerritoire);
343-
map.value?.fitBounds(llb);
342+
deps.forEach((d: any) => {
343+
llb.extend([d.bounds.minLat, d.bounds.minLong]);
344+
llb.extend([d.bounds.maxLat, d.bounds.maxLong]);
345+
});
346+
map.value?.fitBounds(llb, {
347+
padding: 30,
348+
});
344349
}
345350
});
346351
</script>

client/components/carte/Table.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const props = defineProps<{
77
date: string,
88
area: string,
99
light: boolean,
10+
filterText: string,
1011
}>();
1112
1213
const headers = ['N° Département', 'Département', 'Niveau de gravité'];
@@ -74,6 +75,13 @@ function filterDepartments() {
7475
componentKey.value += 1;
7576
}
7677
78+
const tableTitle = computed(() => {
79+
if (props.light) {
80+
return '';
81+
}
82+
return `Niveau de gravité maximal observé par département ${props.filterText ? '(' + props.filterText + ')' : ''}`
83+
});
84+
7785
watch(() => props, () => {
7886
const date = new Date(props.date);
7987
if (!date) {
@@ -112,7 +120,7 @@ watch(() => props, () => {
112120
buttonText="Rechercher"
113121
ref="input"
114122
@search="checkKeyboardNav({key: 'search'})" />
115-
<DsfrTable :title="light ? 'Niveau de gravité maximal observé par département' : ''"
123+
<DsfrTable :title="tableTitle"
116124
:headers="headers"
117125
:rows="rowsFiltered"
118126
:pagination="true"

client/components/donnees/ArretesRestrictionsTable.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import utils from '../../utils';
55
const props = defineProps<{
66
date: string,
77
area: string,
8+
filterText: string,
89
}>();
910
1011
const headers = ['Numéro', 'Département', 'Niveau de gravité maximum', 'Ressources concernées',
@@ -30,6 +31,10 @@ async function loadData() {
3031
loading.value = false;
3132
}
3233
34+
const tableTitle = computed(() => {
35+
return `Arrêtés de restrictions ${props.filterText ? '(' + props.filterText + ')' : ''}`;
36+
});
37+
3338
watch(() => props, () => {
3439
const date = new Date(props.date);
3540
if (!date) {
@@ -42,7 +47,7 @@ watch(() => props, () => {
4247
<template>
4348
<div>
4449
<template v-if="!loading">
45-
<DsfrTable title="Arrêtés de restrictions"
50+
<DsfrTable :title="tableTitle"
4651
:headers="headers"
4752
:rows="rows"
4853
:pagination="true"

client/components/donnees/Filter.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ const area = ref('');
1616
const areaOptions = ref([]);
1717
1818
const loadData = (() => {
19+
const areaText = areaOptions.value.find(a => a.value === area.value)?.text
1920
emit('filterChange', {
2021
date: date.value,
2122
area: area.value,
23+
areaText: areaText,
2224
});
2325
});
2426

client/layouts/basic.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ onMounted(() => {
5959
6060
watch(() => route.path, newPath => {
6161
quickLinks = newPath === '/situation' ? [{
62+
label: 'Données sécheresse',
63+
to: '/donnees',
64+
}, {
6265
label: 'Effectuer une nouvelle recherche',
6366
icon: 'ri-search-line',
6467
to: '/',
@@ -67,7 +70,10 @@ onMounted(() => {
6770
icon: 'ri-survey-line',
6871
button: true,
6972
onclick: utils.openTally,
70-
}] : [];
73+
}] : [{
74+
label: 'Données sécheresse',
75+
to: '/donnees',
76+
}];
7177
key.value++;
7278
}, { immediate: true },
7379
);

client/pages/donnees/index.vue

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ useHead({
1515
const links: Ref<any[]> = ref([{ 'to': '/', 'text': 'Accueil' }, { 'text': 'Données sécheresse' }]);
1616
const refDataStore = useRefDataStore();
1717
const filterData: any = ref(null);
18+
const filterText: any = ref(null);
1819
1920
// LOAD REF DATA
2021
const { data, error } = await api.getRefData();
@@ -26,6 +27,11 @@ if (data.value) {
2627
2728
const setFilterData = (data: any) => {
2829
filterData.value = JSON.parse(JSON.stringify(data));
30+
if(filterData.value.date && filterData.value.areaText) {
31+
filterText.value = `${filterData.value.areaText} au ${new Date(filterData.value.date).toLocaleDateString()}`;
32+
} else {
33+
filterText.value = null;
34+
}
2935
};
3036
</script>
3137

@@ -42,7 +48,7 @@ const setFilterData = (data: any) => {
4248
<div class="background-blue fr-py-2w">
4349
<div class="fr-container">
4450
<DonneesFilter @filterChange="setFilterData($event)" />
45-
<h2 class="fr-h4 fr-mt-2w">Carte et historique des restrictions</h2>
51+
<h2 class="fr-h4 fr-mt-2w">Carte et historique des restrictions <span v-if="filterText">({{ filterText}})</span></h2>
4652
<template v-if="filterData">
4753
<div style="position: relative;">
4854
<CarteMap :embedded="false"
@@ -51,10 +57,12 @@ const setFilterData = (data: any) => {
5157
:area="filterData.area" />
5258
</div>
5359
<DonneesArretesRestrictionsTable :date="filterData.date"
54-
:area="filterData.area" />
60+
:area="filterData.area"
61+
:filterText="filterText"/>
5562
<CarteTable :light="true"
5663
:date="filterData.date"
57-
:area="filterData.area" />
64+
:area="filterData.area"
65+
:filterText="filterText" />
5866
</template>
5967
</div>
6068
</div>

0 commit comments

Comments
 (0)