22import { chunk , groupBy , mapValues , sortBy , uniqWith } from " lodash-es" ;
33import { marked } from " marked" ;
44import { computed , ref } from " vue" ;
5- import { useRouter } from " vue-router" ;
65
76import rgaa from " ../../criteres.json" ;
87import { 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" ;
2014import CriteriumTestsAccordion from " ../audit/CriteriumTestsAccordion.vue" ;
2115import LazyAccordion from " ../audit/LazyAccordion.vue" ;
2216import MarkdownRenderer from " ../ui/MarkdownRenderer.vue" ;
2317
2418const 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