Skip to content

Commit 4240454

Browse files
authored
Corrige le problème d'ordre des pages dans le rapport (#692)
* get same page order for anchors and errors * fix types * replace old router link * update changelog
1 parent f6e2435 commit 4240454

3 files changed

Lines changed: 41 additions & 97 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
Tous les changements notables de Ara sont documentés ici avec leur date, leur catégorie (nouvelle fonctionnalité, correction de bug ou autre changement) et leur pull request (PR) associée.
44

5+
## 17/04/2024
6+
7+
### Corrections 🐛
8+
9+
- Corrige le problème d’ordre des pages sur le rapport ([#692](https://github.com/DISIC/Ara/pull/692))
10+
511
## 10/04/2024
612

713
### Nouvelles fonctionnalités 🚀

confiture-web-app/src/components/report/ReportA11yStatement.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ const statementIsPublished = computed(() => {
138138
<a
139139
class="fr-link"
140140
target="_blank"
141+
href="https://accessibilite.numerique.gouv.fr/obligations/mentions-et-pages-obligatoires/"
141142
rel="noopener"
142-
href="https://accessibilite.numerique.gouv.fr/obligations/champ-application/"
143143
>
144144
Tout savoir sur les obligations légales et sanctions
145145
<span class="sr-only">(nouvelle fenêtre)</span>

confiture-web-app/src/components/report/ReportErrors.vue

Lines changed: 34 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import { chunk, groupBy, mapValues, sortBy, uniqWith } from "lodash-es";
33
import { marked } from "marked";
44
import { computed, ref } from "vue";
5-
import { useRouter } from "vue-router";
65
76
import rgaa from "../../criteres.json";
87
import { useReportStore } from "../../store";
@@ -11,18 +10,12 @@ import {
1110
CriterionResultUserImpact,
1211
CriteriumResultStatus
1312
} from "../../types";
14-
import {
15-
formatStatus,
16-
formatUserImpact,
17-
slugify,
18-
pluralize
19-
} from "../../utils";
13+
import { formatStatus, formatUserImpact, pluralize } from "../../utils";
2014
import CriteriumTestsAccordion from "../audit/CriteriumTestsAccordion.vue";
2115
import LazyAccordion from "../audit/LazyAccordion.vue";
2216
import MarkdownRenderer from "../ui/MarkdownRenderer.vue";
2317
2418
const report = useReportStore();
25-
const router = useRouter();
2619
2720
/*
2821
[{
@@ -60,33 +53,30 @@ const errors = computed(() => {
6053
)
6154
} as Record<number, AuditReport["results"]>;
6255
63-
// TODO: make more legible
6456
const data = sortBy(
65-
Object.values(
66-
mapValues(resultsGroupedByPage, (results, pageId) => {
67-
return {
68-
pageId: Number(pageId),
69-
pageOrder: getPage(Number(pageId)).order,
70-
pageName: getPage(Number(pageId)).name,
71-
pageUrl: getPage(Number(pageId)).url,
72-
topics: sortBy(
73-
Object.values(
74-
mapValues(groupBy(results, "topic"), (results, topicNumber) => {
75-
return {
76-
topic: Number(topicNumber),
77-
name: getTopicName(Number(topicNumber)),
78-
errors: sortBy(
79-
results.filter((r) => !r.transverse),
80-
"criterium"
81-
)
82-
};
83-
})
84-
),
85-
"topic"
86-
)
87-
};
88-
})
89-
),
57+
Object.entries(resultsGroupedByPage).map(([pageId, results]) => {
58+
return {
59+
pageId: Number(pageId),
60+
pageOrder: getPage(pageId).order,
61+
pageName: getPage(pageId).name,
62+
pageUrl: getPage(pageId).url,
63+
topics: sortBy(
64+
Object.values(
65+
mapValues(groupBy(results, "topic"), (results, topicNumber) => {
66+
return {
67+
topic: Number(topicNumber),
68+
name: getTopicName(Number(topicNumber)),
69+
errors: sortBy(
70+
results.filter((r) => !r.transverse),
71+
"criterium"
72+
)
73+
};
74+
})
75+
),
76+
"topic"
77+
)
78+
};
79+
}),
9080
(el) => el.pageOrder
9181
);
9282
@@ -233,41 +223,8 @@ function getCriteriumTitle(topicNumber: number, criteriumNumber: number) {
233223
}
234224
235225
/** Get a page by its id */
236-
function getPage(pageId: number) {
237-
return report.data!.context.samples.find((p) => p.id === pageId)!;
238-
}
239-
240-
function getPageSlug(pageId: number) {
241-
return slugify(getPage(pageId)?.name);
242-
}
243-
244-
/**
245-
* Manually reproduce DSFR menu item anchor links
246-
* See following issue: https://github.com/DISIC/Ara/issues/130
247-
*/
248-
function updateActiveAnchorLink(id: string, event: MouseEvent) {
249-
event.preventDefault();
250-
251-
const previousSelectedAnchor = document.querySelector(
252-
'.fr-sidemenu__link[aria-current="true"]'
253-
);
254-
if (previousSelectedAnchor) {
255-
previousSelectedAnchor.removeAttribute("aria-current");
256-
previousSelectedAnchor.parentElement?.classList.remove(
257-
"fr-sidemenu__item--active"
258-
);
259-
}
260-
const target = event.target as HTMLAnchorElement;
261-
if (target) {
262-
target.setAttribute("aria-current", "true");
263-
target.parentElement?.classList.add("fr-sidemenu__item--active");
264-
265-
const anchor = document.querySelector(`#${id}`);
266-
if (anchor) {
267-
anchor.scrollIntoView();
268-
router.push({ hash: `#${id}` });
269-
}
270-
}
226+
function getPage(pageId: number | string) {
227+
return report.data!.context.samples.find((p) => p.id === Number(pageId))!;
271228
}
272229
</script>
273230

@@ -299,13 +256,10 @@ function updateActiveAnchorLink(id: string, event: MouseEvent) {
299256
}
300257
]"
301258
>
302-
<!-- FIXME: seems there is an issue with anchor links inside tabs -->
303259
<a
304260
class="fr-sidemenu__link"
305261
href="#all-pages"
306-
target="_self"
307262
:aria-current="Boolean(transverseErrors.length)"
308-
@click="updateActiveAnchorLink('all-pages', $event)"
309263
>Toutes les pages</a
310264
>
311265
</li>
@@ -321,34 +275,21 @@ function updateActiveAnchorLink(id: string, event: MouseEvent) {
321275
>
322276
<a
323277
class="fr-sidemenu__link"
324-
:href="`#${getPageSlug(report.data.context.samples[0].id)}`"
325-
target="_self"
278+
:href="`#${errors[0].pageId}`"
326279
:aria-current="
327280
!transverseErrors.length ? 'true' : undefined
328281
"
329-
@click="
330-
updateActiveAnchorLink(
331-
getPageSlug(report.data!.context.samples[0].id),
332-
$event
333-
)
334-
"
335-
>{{ report.data.context.samples[0].name }}</a
282+
>{{ errors[0].pageName }}</a
336283
>
337284
</li>
338285
<li
339-
v-for="page in report.data.context.samples.slice(1)"
340-
:key="page.name"
286+
v-for="page in errors.slice(1)"
287+
:key="page.pageName"
341288
class="fr-sidemenu__item"
342289
>
343-
<a
344-
class="fr-sidemenu__link"
345-
:href="`#${getPageSlug(page.id)}`"
346-
target="_self"
347-
@click="
348-
updateActiveAnchorLink(getPageSlug(page.id), $event)
349-
"
350-
>{{ page.name }}</a
351-
>
290+
<a class="fr-sidemenu__link" :href="`#${page.pageId}`">
291+
{{ page.pageName }}
292+
</a>
352293
</li>
353294
</ul>
354295
</div>
@@ -610,10 +551,7 @@ function updateActiveAnchorLink(id: string, event: MouseEvent) {
610551
</div>
611552
</section>
612553
<section v-for="page in errors" :key="page.pageId" class="fr-mb-8w">
613-
<h2
614-
:id="`${getPageSlug(page.pageId)}`"
615-
class="fr-h3 fr-mb-2w page-title"
616-
>
554+
<h2 :id="`${page.pageId}`" class="fr-h3 fr-mb-2w page-title">
617555
{{ page.pageName }}
618556
</h2>
619557
<a

0 commit comments

Comments
 (0)